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

Description:

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

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Contrôle de motores com PIC16F628A
« Online: 21 de Junho de 2010, 19:52 »
Senhores,

Sou novato no Forum e também em eletrônica, mas tenho me esforçado muito com o desenvolvimento de um projeto encontrado na internet e que para mim tem sido um verdadeiro desafio. Trata-se de um veículo remotamente controlado. O projeto é bem simples contendo uma placa de controle de motores (três motores) uma placa de comando com Joystick e interruptores de iluminação e comunicação serial entre os dois módulos (comando e controle). Pelas dificuldades encontradas alguns componentes serão substituídos no projeto original e daí a minha dificuldade. Os esquemas do projeto são estes:        http://www.ece.uvic.ca/~ece499/2001a/group11/Schematics/rov_tx.jpg
         http://www.ece.uvic.ca/~ece499/2001a/group11/Schematics/rov_rx.jpg

Os softwares usados são: http://www.ece.uvic.ca/~ece499/2001a/group11/Software/rov_tx.asm
http://www.ece.uvic.ca/~ece499/2001a/group11/Software/rov_rx.asm

Minha idéia é substituir o Pic do projeto pelo PIC16f628A.

Alguém pode me dar uma ajuda. Desde já agradeço.

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 #1 Online: 21 de Junho de 2010, 20:14 »
Olá Anderson,

Apesar de ainda encontrar o PIC16F84 (que é antigo mais caro), é fácil portar o software do processador PIC16F84 para PIC16F628.

E o PIC12C671, que possui conversor A/D? Acho melhor usá-lo, pois ainda se encontra no Brasil.

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #2 Online: 21 de Junho de 2010, 20:30 »
Boa Noite Gil,
Obrigado pelo pronto atendimento as minhas dúvidas.

Com relação ao PIC12C671, aconselharan-me a substituição pelo PIC12F675, por ser memória flash e mais novo, o que acha ?

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 #3 Online: 21 de Junho de 2010, 21:59 »
Anderson,

Boa Noite Gil,
Obrigado pelo pronto atendimento as minhas dúvidas.

Com relação ao PIC12C671, aconselharan-me a substituição pelo PIC12F675, por ser memória flash e mais novo, o que acha ?

É melhor, o PIC12F675 atende também no quesito conversor A/D com 4 entradas.

Offline Blackmore

  • CNCMASTER
  • ******
  • Posts: 1568
  • Sexo: Masculino
  • Profissão: Projetista Mecânico/Automação
Re: Contrôle de motores com PIC16F628A
« Resposta #4 Online: 21 de Junho de 2010, 23:58 »
minilathe

mestre, a algum tempo não lhe importuno, coisa que o farei agora!!  ;D
apesar de me virar em programação com PIC, uma coisa que eu nunca tentei foi modificar o microcontrolador de um firmware já existente (diga-se apenas o .hex) por exemplo mudar um firmware originalmente compilado para um PIC16F84 para um PIC16F628 ?
o mestre sabe me dizer se isso é possível sem converter em assembly?

abrax!

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 #5 Online: 22 de Junho de 2010, 02:41 »
Olá Blackmore,

uma coisa que eu nunca tentei foi modificar o microcontrolador de um firmware já existente (diga-se apenas o .hex) por exemplo mudar um firmware originalmente compilado para um PIC16F84 para um PIC16F628 ?
o mestre sabe me dizer se isso é possível sem converter em assembly?

Não vou afirmar categoricamente que não funciona, nunca testei isso, porém...

Apesar do PIC16F628 possuir mais recursos e uma estrutura bastante similar ao PIC16F84, não devem ser 100% compatíveis em termos de linguagem de máquina, pelas razões que exponho a seguir. Lembrando que o códigos hex é uma representação hexadecimal textual e padronizada do código de máquina, e portanto, não seriam 100% iguais.

A principio, eu acho que o software do PIC16F84 pode ou não rodar no PIC16F628, a depender de como o software funciona e quais instruções utiliza.

Um aspecto básico são os códigos de máquina associados a cada instrução, nunca parei para comparar se os códigos de máquina são iguais para instruções similares no PIC16F84 e PIC16F628. Ou seja, se para fazer a mesma coisa (exemplo: carregar o acumulador com uma constante) é usado o mesmo código de máquina (hex).

Outro aspecto é que, devido a estrutura de páginas dos registradores serem diferentes, alguns registradores requerem ser acessados numa página ou noutra e os endereços dos registradores também não são os mesmos. O que gera códigos de máquinas (hex) diferentes.

Essas diferenças também valem para os bits fusíveis (de proteção de memória de programa, habilitação de tipo de clock, ...).
« Última modificação: 22 de Junho de 2010, 02:43 por minilathe »

Offline aguizan

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

Boa Noite Gil,
Obrigado pelo pronto atendimento as minhas dúvidas.

Com relação ao PIC12C671, aconselharan-me a substituição pelo PIC12F675, por ser memória flash e mais novo, o que acha ?

É melhor, o PIC12F675 atende também no quesito conversor A/D com 4 entradas.


Correto, então quanto aos pics, tanto da placa de comando como da placa de controle, ficam assim definidos. PIC12F675 para controle e PIC16F628A para comando. Agora preciso fazer alterações no software por conta desta mudança correto ? Que passos seguir ? 

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 #7 Online: 22 de Junho de 2010, 08:24 »
Anderson,

Correto, então quanto aos pics, tanto da placa de comando como da placa de controle, ficam assim definidos. PIC12F675 para controle e PIC16F628A para comando. Agora preciso fazer alterações no software por conta desta mudança correto ? Que passos seguir ?

Primeiramente baixe e instale o MPLAB em seu computador, depois carregue e teste (passo a passo) individualmente cada programa com os CIs originais de manera simulada. Os programas do site poderiam estar errados, não é??

Depois teste cada programa com o respectivo chip que será usado no lugar (PIC12F675 e PIC16F628). Alguns ajustes nos programas serão necessários pelas razões que expus anteriormente.

Mas tem que abrir e analisar e entender cada programa, entender o programa dá trabalho, mas é util, para aprender e principalmente, se for melhorar o sisteminha. Após isso, fazer as alterações necessárias em cada programa, analisando as instruções que diferem devido aos chips serem diferentes. Mas já vi que os programas sao pequenos e a análise será simples.

O modo simulado do MPLAB ajudará nos testes.

Depois também pode simular no Proteus, aí a simulação pode misturar SW e HW. Se tudo funcionar corretamente, é só montar.

Offline aguizan

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

Correto, então quanto aos pics, tanto da placa de comando como da placa de controle, ficam assim definidos. PIC12F675 para controle e PIC16F628A para comando. Agora preciso fazer alterações no software por conta desta mudança correto ? Que passos seguir ?

Primeiramente baixe e instale o MPLAB em seu computador, depois carregue e teste (passo a passo) individualmente cada programa com os CIs originais de manera simulada. Os programas do site poderiam estar errados, não é??

Depois teste cada programa com o respectivo chip que será usado no lugar (PIC12F675 e PIC16F628). Alguns ajustes nos programas serão necessários pelas razões que expus anteriormente.

Mas tem que abrir e analisar e entender cada programa, entender o programa dá trabalho, mas é util, para aprender e principalmente, se for melhorar o sisteminha. Após isso, fazer as alterações necessárias em cada programa, analisando as instruções que diferem devido aos chips serem diferentes. Mas já vi que os programas sao pequenos e a análise será simples.

O modo simulado do MPLAB ajudará nos testes.

Depois também pode simular no Proteus, aí a simulação pode misturar SW e HW. Se tudo funcionar corretamente, é só montar.

Correto, então assim que tenha novidades informo. Pelo visto terei bastante trabalho e estudo pela frente. Grato pelas informações.

Offline aguizan

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

Correto, então quanto aos pics, tanto da placa de comando como da placa de controle, ficam assim definidos. PIC12F675 para controle e PIC16F628A para comando. Agora preciso fazer alterações no software por conta desta mudança correto ? Que passos seguir ?



Primeiramente baixe e instale o MPLAB em seu computador, depois carregue e teste (passo a passo) individualmente cada programa com os CIs originais de manera simulada. Os programas do site poderiam estar errados, não é??

Depois teste cada programa com o respectivo chip que será usado no lugar (PIC12F675 e PIC16F628). Alguns ajustes nos programas serão necessários pelas razões que expus anteriormente.

Mas tem que abrir e analisar e entender cada programa, entender o programa dá trabalho, mas é util, para aprender e principalmente, se for melhorar o sisteminha. Após isso, fazer as alterações necessárias em cada programa, analisando as instruções que diferem devido aos chips serem diferentes. Mas já vi que os programas sao pequenos e a análise será simples.

O modo simulado do MPLAB ajudará nos testes.

Depois também pode simular no Proteus, aí a simulação pode misturar SW e HW. Se tudo funcionar corretamente, é só montar.

Correto, então assim que tenha novidades informo. Pelo visto terei bastante trabalho e estudo pela frente. Grato pelas informações.

Bom, estou com algumas dúvidas aqui. O projeto funciona da seguinte forma:

O joystick, quando movido:
-  para frente == > liga dois motores simultaneamente  ==> movimenta o rov para frente
- para trás ==> liga os dois motores para trás  ==> movimenta o rov para trás
- para lado esquerdo ou direito ==> liga os dois motores em direções opostas ==> movimento de rotação em torno do próprio eixo do rov - curva fechada.
- em diagonal ==> liga somente um motor, esquerdo ou direito ==> movimenta o rov em curva aberta.

além do joystick um potenciometro para profundidade e botão para luz e câmera.

todas essas informações são transmitidas serialmente por cabo até a placa de contrôle dos motores, que fica no rov.

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.


Offline Blackmore

  • CNCMASTER
  • ******
  • Posts: 1568
  • Sexo: Masculino
  • Profissão: Projetista Mecânico/Automação
Re: Contrôle de motores com PIC16F628A
« Resposta #10 Online: 23 de Junho de 2010, 22:49 »
no fim do ano passado fiz um trabalho bem semelhante, mas para motor DC a velocidade controlada por PWM. o sentido e direção através de 2 potenciometros ... para a transmissão eu utilizei um modulo de RF encontrado no ML ... ficou bem interessante ... pena q montei apenas em protoboard, devido a falta de tempo.

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 #11 Online: 24 de Junho de 2010, 06:20 »
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).


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 #12 Online: 24 de Junho de 2010, 06:39 »
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.

 

Offline C N C N o w !

  • CNCMASTER
  • ******
  • Posts: 6300
  • Sexo: Masculino
Re: Contrôle de motores com PIC16F628A
« Resposta #13 Online: 24 de Junho de 2010, 08:05 »
... uma coisa que eu nunca tentei foi modificar o microcontrolador de um firmware já existente (diga-se apenas o .hex) por exemplo mudar um firmware originalmente compilado para um PIC16F84 para um PIC16F628 ?
o mestre sabe me dizer se isso é possível sem converter em assembly?

E como saberia onde e o que modificar ?

Bom exercício para masoquistas ...  ;D

Nah, no mínimo tem que encarar o disassembly ... o que dá pra fazer de mais prático sem desmontar o prog é, por exemplo, localizar strings com um editor e alterá-las.


Offline robedany

  • Hobby
  • ****
  • Posts: 357
  • Sexo: Masculino
Re: Contrôle de motores com PIC16F628A
« Resposta #14 Online: 24 de Junho de 2010, 09:14 »
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


 

/** * */