Autor Tópico: Contrôle de motores com PIC16F628A  (Lida 64186 vezes)

Description:

0 Membros e 1 Visitante estão vendo este tópico.

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #15 Online: 25 de Junho de 2010, 07:47 »
Anderson,

Olhando para o software de controle do joystick  entendo que o primeiro byte usa os bits 0,1 e 2 para motor da direita, 3,4 e 5 para motor da esquerda e 6 e 7 para iluminação ou servo, correto.
O controle é feito pelo joystick que ao ser acionado produz uma variação de tensão que é transmitida ao circuito, essa tensão é transformada em um sinal digital e assume os valores a serem transmitidos correto ? Se os valores a serem passados aos bits são zeros ou uns, porque tenho três bits para direita e três para a esquerda.

Na verdade, os tres bits são para definir o sentido de rotação e a velocidade de cada motor, conforme o trecho do comentário do programa que recortei a seguir.

;********************************************************************************
;* POSJUMP -- Joystick Data to Motor Speed Jump Table            *
;********************************************************************************
; Uses first six bits of received joystick position data X and Y (64 unique
; positions) to reference and return a left and right motor direction/speed
; combination as:
;  ___7________6______ __5________4_______ _3________2________ 1________0___
; |_______||_______||_______||_______||_______||_______||_______||_______|
;     0        0     \DIR_L/  \-- SPEED_L ---/  \DIR_R/  \-- SPEED_R ---/
;

; Note that the joystick position grid contains a one position dead-zone about
; each axis.  Example: X=011,Y=000 is identical speedwise as X=011,Y=100 (in
; both cases speed Y is zero).

Estou fazendo uma confusão aqui: os bits 0 e 1 estão vinculados a velocidade do motor direito podendo assumir valores para stop, low, med e fast. O bit 2 está vinculado a direção de rotação do motor assumindo dois possíveis valores a frente e a ré. Assim ocorre para os seis primeiros bits e o bit 6 e 7 estão vinculados ao servo e  iluminação.  Então em um byte poderia ter informação simultanea para os três motores, mas por exemplo se eu comando motores a frente, vel med. esse byte ficaria 00100100, o bit 0 e o bit 4 que são os bits responsáveis por stop e low estariam com valor para stop e entrariam em conflito ???

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #16 Online: 25 de Junho de 2010, 07:53 »
Usando o programa MPASMWIN no asm. do RX deu 17 conflitos e foram eliminados mudando sómente definição do processador de f84 para f628A e o inicio sa memoria de 0x0C para  0x20

;***************************************
;* Processor definition and configuration               *
;**************************************
;    Clock = 4MHz external resonator

     LIST P=16F628A
     #include "P16F628A.inc"

*************************************************
;* Variable declaration                        *
;**********************************************

   cblock   0x20


Eu rodei o SW no mplab e não encontrei conflitos, mas vou verificar novamente ????

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #17 Online: 25 de Junho de 2010, 07:58 »
Anderson,

A título de comentário e por falar em portar o software do PIC 84 para 628, olhando o software do receptor, percebi que a UART é implementada em software, se for usar o 628 poderá economizar muitas linhas de programa, otimizando bastante o código, visto que o 84 não possui UART. Mas isto não é indispensável.

Isto é ótimo. Estou estudando um bocado para poder desenvolver esse projeto. Encontrei aqui no Guia CNC um curso de microcontroladores e estou "mandando brasa".

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re: Contrôle de motores com PIC16F628A
« Resposta #18 Online: 25 de Junho de 2010, 08:10 »
Anderson,

Estou fazendo uma confusão aqui: os bits 0 e 1 estão vinculados a velocidade do motor direito podendo assumir valores para stop, low, med e fast. O bit 2 está vinculado a direção de rotação do motor assumindo dois possíveis valores a frente e a ré. Assim ocorre para os seis primeiros bits e o bit 6 e 7 estão vinculados ao servo e  iluminação.  Então em um byte poderia ter informação simultanea para os três motores, mas por exemplo se eu comando motores a frente, vel med. esse byte ficaria 00100100, o bit 0 e o bit 4 que são os bits responsáveis por stop e low estariam com valor para stop e entrariam em conflito ???

A idéia básica do cicuito é usar 6 bits para controle de movimento do ROV, formando uma "palavra" de comando com 64 opções de movimento, exemplo: frente lento, frente rápido, curva fechada à direita lento, curva aberta à direita rápido, ... Acho que não há conflitos, pois todas as combinações possíveis, e factíveis, estariam previstas.

Offline robedany

  • Hobby
  • ****
  • Posts: 357
  • Sexo: Masculino
Re: Contrôle de motores com PIC16F628A
« Resposta #19 Online: 25 de Junho de 2010, 09:52 »
Aguilan
O .asm que coloquei é o já modificado para o f628

Roberto

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #20 Online: 25 de Junho de 2010, 21:04 »
Anderson,

Estou fazendo uma confusão aqui: os bits 0 e 1 estão vinculados a velocidade do motor direito podendo assumir valores para stop, low, med e fast. O bit 2 está vinculado a direção de rotação do motor assumindo dois possíveis valores a frente e a ré. Assim ocorre para os seis primeiros bits e o bit 6 e 7 estão vinculados ao servo e  iluminação.  Então em um byte poderia ter informação simultanea para os três motores, mas por exemplo se eu comando motores a frente, vel med. esse byte ficaria 00100100, o bit 0 e o bit 4 que são os bits responsáveis por stop e low estariam com valor para stop e entrariam em conflito ???

A idéia básica do cicuito é usar 6 bits para controle de movimento do ROV, formando uma "palavra" de comando com 64 opções de movimento, exemplo: frente lento, frente rápido, curva fechada à direita lento, curva aberta à direita rápido, ... Acho que não há conflitos, pois todas as combinações possíveis, e factíveis, estariam previstas.

Minha dúvida é a seguinte: a "palavra" de comando, como vc muito bem coloca é formada por zeros e uns correto. Se temos apenas três bits para definir por exemplo direção e velocidade de um motor, em um dado momento, ou outros bits não seriam considerados ?? podem estar em zero??, porque quando em zero representam alterações no estado do outro motor, luz e servo.

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #21 Online: 25 de Junho de 2010, 21:06 »
Aguilan
O .asm que coloquei é o já modificado para o f628

Roberto

Correto, este teste ainda não fiz ...

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re: Contrôle de motores com PIC16F628A
« Resposta #22 Online: 26 de Junho de 2010, 00:09 »
Anderson,

Minha dúvida é a seguinte: a "palavra" de comando, como vc muito bem coloca é formada por zeros e uns correto. Se temos apenas três bits para definir por exemplo direção e velocidade de um motor, em um dado momento, ou outros bits não seriam considerados ?? podem estar em zero??, porque quando em zero representam alterações no estado do outro motor, luz e servo.

Considere que há 64 estados de movimentação e ainda mais alguns estados dos outros dispositivos. Cada conjunto de bits transmitidos / recebidos representará um estado do ROV, considerando todos esses sinais. Além disso, o(s) bit(s) de um dispositivo pode(m) ser acionado(s) independemente uns dos outros.

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #23 Online: 26 de Junho de 2010, 07:17 »
Anderson,

Minha dúvida é a seguinte: a "palavra" de comando, como vc muito bem coloca é formada por zeros e uns correto. Se temos apenas três bits para definir por exemplo direção e velocidade de um motor, em um dado momento, ou outros bits não seriam considerados ?? podem estar em zero??, porque quando em zero representam alterações no estado do outro motor, luz e servo.

Considere que há 64 estados de movimentação e ainda mais alguns estados dos outros dispositivos. Cada conjunto de bits transmitidos / recebidos representará um estado do ROV, considerando todos esses sinais. Além disso, o(s) bit(s) de um dispositivo pode(m) ser acionado(s) independemente uns dos outros.

Perfeito, então vou a outra etapa. Continuo estudando. Grato.

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #24 Online: 28 de Junho de 2010, 22:09 »
Continuando minhas pesquisas:  a comunicação serial neste projeto envia os dados para movimentação dos motores, iluminação e servo motor. Posso comandar mais equipamentos ??

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re: Contrôle de motores com PIC16F628A
« Resposta #25 Online: 28 de Junho de 2010, 22:22 »
Anderson,

Continuando minhas pesquisas:  a comunicação serial neste projeto envia os dados para movimentação dos motores, iluminação e servo motor. Posso comandar mais equipamentos ??

Se voce analisar os programas, verá que utiliza 2 bytes para comandar todos os dispositivos e todos os bits estão ocupados, se voce usar toda a funcionalidade prevista. Assim, para comandar novos dispositivos será necessário agregar um ou mais bytes à comunicação e fazer as devidas modificações nos programas. Bem como prever os pinos de saída necessários no PIC16F628.

Quais dispostivos deseja adicionar?

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #26 Online: 28 de Junho de 2010, 22:42 »
Anderson,

Continuando minhas pesquisas:  a comunicação serial neste projeto envia os dados para movimentação dos motores, iluminação e servo motor. Posso comandar mais equipamentos ??

Se voce analisar os programas, verá que utiliza 2 bytes para comandar todos os dispositivos e todos os bits estão ocupados, se voce usar toda a funcionalidade prevista. Assim, para comandar novos dispositivos será necessário agregar um ou mais bytes à comunicação e fazer as devidas modificações nos programas. Bem como prever os pinos de saída necessários no PIC16F628.

Quais dispostivos deseja adicionar?

Sensores de: temperatura, humidade (presença de água no interior do ROV), pressão, etc.

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re: Contrôle de motores com PIC16F628A
« Resposta #27 Online: 28 de Junho de 2010, 22:59 »
Anderson,

Sensores de: temperatura, humidade (presença de água no interior do ROV), pressão, etc.

Então voce vai ler do ROV e não apenas comandar, como é feito originalmente. Existirão bytes sendo enviados e bytes sendo recebidos. Mas ok, é possível.

No caso de medir pressão, seria necessário um sensor de pressão e uma entrada analógica no PIC ou um conversor A/D externo. Acho melhor escolher outro PIC, pois o PIC16F628 não possui entradas analógicas. E se quiser ter vários pinos para uso futuro, sugiro partir logo para um PIC de 40 pinos, exemplo PIC16F877, com 8 entradas analógicas e várias funcionalidades úteis (UART, Timer, saída PWM, ...)

Acho que o ROV já possui um sensor de umidade, que no caso de vazamento de água manda o ROV para cima.
« Última modificação: 28 de Junho de 2010, 23:04 por minilathe »

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #28 Online: 29 de Junho de 2010, 05:51 »
Anderson,

Sensores de: temperatura, humidade (presença de água no interior do ROV), pressão, etc.

Então voce vai ler do ROV e não apenas comandar, como é feito originalmente. Existirão bytes sendo enviados e bytes sendo recebidos. Mas ok, é possível.

No caso de medir pressão, seria necessário um sensor de pressão e uma entrada analógica no PIC ou um conversor A/D externo. Acho melhor escolher outro PIC, pois o PIC16F628 não possui entradas analógicas. E se quiser ter vários pinos para uso futuro, sugiro partir logo para um PIC de 40 pinos, exemplo PIC16F877, com 8 entradas analógicas e várias funcionalidades úteis (UART, Timer, saída PWM, ...)

Acho que o ROV já possui um sensor de umidade, que no caso de vazamento de água manda o ROV para cima.


OK, vou pesquisar este pic. Enquanto isso estou me aprofundando no curso de microcontroladores.

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #29 Online: 29 de Junho de 2010, 11:30 »
Continuando com os estudos:

No trecho de programa


;********************************************************************************
;* Initialize pic                        *
;********************************************************************************

INIT   movlw   0x84         ; EPROM callibration (for EPROM only)
   movwf   OSCCAL         ; Store factory callibration value
   clrf   GPIO         ; clear GPIO
   movlw   0x1F         ; GPIO, 5 is serial output, the rest input
   tris   GPIO
   movlw   0xC3         ; TMR0 enable with 1:16 prescalar
   option


O que é OSCCAL ?

 

/** * */