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

Description:

0 Membros e 3 Visitantes estão vendo este tópico.

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 #135 Online: 12 de Julho de 2010, 11:44 »
Anderson,

No projeto, cada potenciômetro enviará um sinal analógico que depois de convertido terá que ser acumulado até formar uma "palavra" com todas as informações para um estado específico. Isso posso fazer como na rotina que lhe havia enviado, mascarando  três bits  e deslocando-os até completar o byte para transmissão ?

A partir do conversor A/D do PIC16F877, cada potenciômetro gera um sinal de 10 bits (1024 níveis) ou 8 bits (256 níveis), depedendo da palavra que for utilizar. Porém, voce só vai enviar 3 bits (8 níveis), é só mascarar os bits +significativos da saída do A/D (equivale a dividir por 25). Apesar de usar tres bits, acho que o projeto original usa menos do que 8 níveis, se for fazer assim, seria necessário fazer alguma outra conta ou usar uma tabela. Já que vai enviar tres bits..., eu usaria os tres bits com 8 níveis e faria um ROV com maior resolução de movimentaçã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 #136 Online: 12 de Julho de 2010, 12:17 »

Dei uma lida no programa receptor, o projeto na verdade usa 7 níveis: 3 para frente, 3 para tras e um parado, como mostrado a seguir:

;********************************************************************************
;* Constants Declaration                     *
;********************************************************************************
; the duty cycle of the DC motors ranges from 0% to 100% and is represented by
; 0 to 200

STOP   equ   .0      ; motor stopped, 0% duty cycle
SLOW   equ   .75      ; motor slow speed, 25% duty cycle
MED   equ   .150      ; motor medium speed, 50% duty cycle
FAST   equ   .200      ; motor fast speed, 100% duty cycle

Ou seja, um nível, dos 8 possíveis do transmissor, fica sem uso no receptor.

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #137 Online: 12 de Julho de 2010, 12:46 »

A partir do conversor A/D do PIC16F877, cada potenciômetro gera um sinal de 10 bits (1024 níveis) ou 8 bits (256 níveis), depedendo da palavra que for utilizar. Porém, voce só vai enviar 3 bits (8 níveis), é só mascarar os bits +significativos da saída do A/D (equivale a dividir por 25).

ASSIM ?

;------------------------------------------------------------------------------------------------------------
;                                            ROTINA PRINCIPAL                                             
;------------------------------------------------------------------------------------------------------------

MAIN
         MOVLW   0X81                    ;ADCON0 (CANAL 0, PINO 2 RA0, AN0, A/D ON)
         CALL   CONVERTE

Aqui estou retornando da minha conversão

         ANDLW   0XE0                    ;MASCARAR OS TRÊS BITS MAIS SIGNIFICATIVOS, COLOCA O RESULTADO EM "W"
         MOVWF   SER_DATA_1         ;SER_DATA_1 = [X7  X6  X5  0,  O  0  0  0]
         RRF      SER_DATA_1, F
         RRF      SER_DATA_1, F
         RRF      SER_DATA_1, F       ;SER_DATA_1 = [0  0  0  X7,  X6  X5  0  O  0]


         MOVLW   0X89                   ;ADCON0 (CANAL 1, PINO 3 RA1, AN1, A/D ON)
         CALL   CONVERTE               ;VAI PARA A ROTINA SAMPLE
         ANDLW   0XE0                    ;MASCARAR OS TRÊS BITS MAIS SIGNIFICATIVOS, COLOCA O RESULTADO EM "W"
         ADDWF   SER_DATA_1, F      ;SER_DATA_1 = [Y7 Y6 Y5 X7, X6 X5 O O]
         RRF      SER_DATA_1, F
         RRF      SER_DATA_1, F        ;SER_DATA_1 = [0 0 Y7 Y6, Y5 X7 X6 X5]

         MOVLW   0X91                   ;ADCON0 (CANAL 2, PINO 4 RA2, AN2, A/D ON)
         CALL    CONVERTE              ;VAI PARA A ROTINA SAMPLE
         MOVWF   SER_DATA_2        ;SEGUNDO BYTE DO DADO SERIAL
         CALL   BTNTEST                 ;CHECA ESTADO DO BOTÃO E AJUSTA BITS DO SERVO E ILUMINAÇÃO
         CALL   ENVIA     

         
         END





Apesar de usar tres bits, acho que o projeto original usa menos do que 8 níveis, se for fazer assim, seria necessário fazer alguma outra conta ou usar uma tabela. Já que vai enviar tres bits..., eu usaria os tres bits com 8 níveis e faria um ROV com maior resolução de movimentação.

Isso agora eu não entendi  ;D

Não havia lido sua última mensagem. Agora como só resta um nível, no 2º Byte de transmissão eu não poderia fazer o mesmo que no 1º e com isso ganhar mais níveis ?? Será que entendi direito ???

« Última modificação: 12 de Julho de 2010, 12:50 por aguizan »

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 #138 Online: 12 de Julho de 2010, 12:57 »
Anderson,

------------------------------------------------------------------------------------------------------------
;                                            ROTINA PRINCIPAL                                             
;------------------------------------------------------------------------------------------------------------

MAIN
         MOVLW   0X81                    ;ADCON0 (CANAL 0, PINO 2 RA0, AN0, A/D ON)
         CALL   CONVERTE

Aqui estou retornando da minha conversão

         ANDLW   0XE0                    ;MASCARAR OS TRÊS BITS MAIS SIGNIFICATIVOS, COLOCA O RESULTADO EM "W"
         MOVWF   SER_DATA_1         ;SER_DATA_1 = [X7  X6  X5  0,  O  0  0  0]
         RRF      SER_DATA_1, F
         RRF      SER_DATA_1, F
         RRF      SER_DATA_1, F       ;SER_DATA_1 = [0  0  0  X7,  X6  X5  0  O  0]


         MOVLW   0X89                   ;ADCON0 (CANAL 1, PINO 3 RA1, AN1, A/D ON)
         CALL   CONVERTE               ;VAI PARA A ROTINA SAMPLE
         ANDLW   0XE0                    ;MASCARAR OS TRÊS BITS MAIS SIGNIFICATIVOS, COLOCA O RESULTADO EM "W"
         ADDWF   SER_DATA_1, F      ;SER_DATA_1 = [Y7 Y6 Y5 X7, X6 X5 O O]
         RRF      SER_DATA_1, F
         RRF      SER_DATA_1, F        ;SER_DATA_1 = [0 0 Y7 Y6, Y5 X7 X6 X5]

         MOVLW   0X91                   ;ADCON0 (CANAL 2, PINO 4 RA2, AN2, A/D ON)
         CALL    CONVERTE              ;VAI PARA A ROTINA SAMPLE
         MOVWF   SER_DATA_2        ;SEGUNDO BYTE DO DADO SERIAL
         CALL   BTNTEST                 ;CHECA ESTADO DO BOTÃO E AJUSTA BITS DO SERVO E ILUMINAÇÃO
         CALL   ENVIA     

         
         END[/size]



Parece que está certo, teria que simular. Acho que tem que zerar o Carry Bit (Status register) antes da soma (ADDWF).



Apesar de usar tres bits, acho que o projeto original usa menos do que 8 níveis, se for fazer assim, seria necessário fazer alguma outra conta ou usar uma tabela. Já que vai enviar tres bits..., eu usaria os tres bits com 8 níveis e faria um ROV com maior resolução de movimentação.

Isso agora eu não entendi  ;D

Esqueça..., falei demais  :), eu não lembrava do programa.

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #139 Online: 12 de Julho de 2010, 13:40 »
Parece que está certo, teria que simular. Acho que tem que zerar o Carry Bit (Status register) antes da soma (ADDWF).

No trecho da rotina de conversão A/D está travando


;***CONFIGURANDO O MÓDULO A/D

CONVERTE                           
         MOVWF   ADCON0
         BANK1                                ;seleciona BANK1
         MOVLW   0X82                    ;setup do conversor A/D      
         MOVWF   ADCON1               ;CONFIGURA O REGISTRADOR ADCON1 COM: RELOGIO DE CONVERSÃO FOSC/32
                                                 ;AN0...AN4 ANALÓGICAS   AN5...AN7 DIGITAIS    JUSTIFICADO A DIREITA
         BANK1                               ;SELECIONO BANK1
         MOVLW   0X86
         MOVWF   ADCON0              ;CONFIGURA O REGISTRADOR ADCON COM: CONVERSÃO DO RELÓGIO FOSC/32
                                               ;CANAL ANALÓGICO=RA1/AN1   CONVERSÃO ATIVADA
 
;***INICIO DA CONVERSÃO ANALÓGICA/DIGITAL
   
         BANK0
         BSF    ADCON0,GO                 ;INICIA A CONVERSÃO A/D.
ESPERA:      
         btfsc   ADCON0,GO                 ;TESTA SE TERMONOU A CONVERSÃO
         GOTO    ESPERA

         MOVF   ADRESH,W                 ;COLOCA O RESULTADO NO REGISTRO DE TRABALHO "W"
      
         RETURN                               ;RETORNA AO PONTO DE ESCAPE PARA A ROTINA



No "loop" está travado ou demora muito para sair na simulção ?


« Última modificação: 12 de Julho de 2010, 13:51 por aguizan »

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 #140 Online: 12 de Julho de 2010, 13:50 »

Lendo no manual, achei alguns erros, na escrita no registro ADDCON0, os valores estão errados.

Como assim está travando? Se for no MPLAB, é necessário verificar se este simula o conversor A/D, senão vai travar mesmo.

No Proteus funcionou.

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #141 Online: 12 de Julho de 2010, 14:17 »

Lendo no manual, achei alguns erros, na escrita no registro ADDCON0, os valores estão errados.

Como assim está travando? Se for no MPLAB, é necessário verificar se este simula o conversor A/D, senão vai travar mesmo.

No Proteus funcionou.

Quando instalei o Proteus na realidade foraqm instalados o ISIS e o ARES. Falta algo ???

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 #142 Online: 12 de Julho de 2010, 14:27 »

Vc instalou as bibliotecas? A simulação não funciona no Proteus?

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #143 Online: 12 de Julho de 2010, 14:31 »

Vc instalou as bibliotecas? A simulação não funciona no Proteus?
Sim funciona no ISIS. Pelo Visto eu não tenho o Proteus. O proteus funciona com editor dos programas???

Offline Blackmore

  • CNCMASTER
  • ******
  • Posts: 1568
  • Sexo: Masculino
  • Profissão: Projetista Mecânico/Automação
Re: Contrôle de motores com PIC16F628A
« Resposta #144 Online: 12 de Julho de 2010, 14:45 »
esclarecendo ... o Proteus é o nome do software para desenho (CAD) e simulação (CAE) dos esquemas e programas feitos pelos desenvolvedores.
O ISIS (CAD esquemas) e o ARES (CAD PCB) são os aplicativos do Proteus, então quando falar em simular ou desenhar o esquema você sempre utilizará o ISIS, quando chegar o ponto de você desenhar (ou rotear) as placas de circuito impresso você utilizará o ARES.
Quanto ao fato do Proteus "travar", existem alguns componentes que não são simulados devido a não ter o "modelo matemático" do componente, então o Proteus não entenderá como será o funcionamento daquele componente e vai 1 - avisar do problema, 2 - travar o software, claro que isso ainda vai depender do computador que você tem para trabalhar e do estado dele.
« Última modificação: 12 de Julho de 2010, 14:47 por Blackmore »

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #145 Online: 12 de Julho de 2010, 15:02 »
esclarecendo ... o Proteus é o nome do software para desenho (CAD) e simulação (CAE) dos esquemas e programas feitos pelos desenvolvedores.
O ISIS (CAD esquemas) e o ARES (CAD PCB) são os aplicativos do Proteus, então quando falar em simular ou desenhar o esquema você sempre utilizará o ISIS, quando chegar o ponto de você desenhar (ou rotear) as placas de circuito impresso você utilizará o ARES.

Concluindo eu não tenho o PROTEUS. No meu computador tenho o ISIS e ARES o software que escreve o programa e que eu uso é o MPLAB


Offline Blackmore

  • CNCMASTER
  • ******
  • Posts: 1568
  • Sexo: Masculino
  • Profissão: Projetista Mecânico/Automação
Re: Contrôle de motores com PIC16F628A
« Resposta #146 Online: 12 de Julho de 2010, 15:34 »
Citar
Concluindo eu não tenho o PROTEUS

ok ... tudo bem ...  :-X

http://www.labcenter.com/products/vsm_overview.cfm

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #147 Online: 12 de Julho de 2010, 15:42 »

Lendo no manual, achei alguns erros, na escrita no registro ADDCON0, os valores estão errados.




Estou a tanto tempo estudando que estou ficando meio confuso ....

No registro ADCON0 quando seleciono o "channel" estou selecionando os meus pinos de entrada ou saída de sinal correto. Então se eu seleciono o canal 0, na realidade eu selecionei o pino 2 RA0/AN0, mas os outros pinos ?

Offline C N C N o w !

  • CNCMASTER
  • ******
  • Posts: 6300
  • Sexo: Masculino
Re: Contrôle de motores com PIC16F628A
« Resposta #148 Online: 12 de Julho de 2010, 17:04 »

Anderson,  já que vc está reescrevendo o prog pra tirar partido das características de um PIC mais avançado, acho que vale a pena cogitar em utilizar o AD com plena resolução (um byte para cada canal) e aperfeiçoar a comunicação implementando verificação da integridade dos dados, algo como CRC ou mesmo simples checksum. Talvez implementar tb handshaking. Isto onera muito pouco o desenvolvimento mas melhora significativamente a confiabilidade. De quebra melhora tb a modularidade do prog ...

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #149 Online: 12 de Julho de 2010, 17:18 »

Anderson,  já que vc está reescrevendo o prog pra tirar partido das características de um PIC mais avançado, acho que vale a pena cogitar em utilizar o AD com plena resolução (um byte para cada canal) e aperfeiçoar a comunicação implementando verificação da integridade dos dados, algo como CRC ou mesmo simples checksum. Talvez implementar tb handshaking. Isto onera muito pouco o desenvolvimento mas melhora significativamente a confiabilidade. De quebra melhora tb a modularidade do prog ...

Todas as sugestões são muito bem vindas.  Quanto a utilização de canais independentes você pode me explicar melhor. Acho que estou fazendo confusão exatamente nesta questão conforme minha citação anterior.

 

/** * */