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

Description:

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

Offline C N C N o w !

  • CNCMASTER
  • ******
  • Posts: 6300
  • Sexo: Masculino
Re: Contrôle de motores com PIC16F628A
« Resposta #60 Online: 04 de Julho de 2010, 09:43 »
Entre 0 e X volts = y e esse y é que seria convertido para transmissão ?


Isso mesmo.


;********************************************************************************
;* Sample A/D channel and store value in W                                                                                     *
;********************************************************************************

SAMPLE
   movwf   ADCON0         ; set channel, and turn A/D on
   bsf   STATUS, RP0      ; select page 1
   movlw   0x02         ; AN0, AN1 & AN2 analogue and GP4 digital
   movwf   ADCON1
   bsf   PIE1, ADIE      ; enable A/D interrupt
   bcf   STATUS, RP0      ; select page 0

   bcf   PIR1, ADIE      ; clear A/D interrupt flag (conversion not complete)
   bsf   INTCON, PEIE      ; enable peripheral interrupts
   bsf   INTCON, GIE      ; enable all interrupts

   call   DELAY_100us      ; allow time for A/D caps to charge (sample time)

   bsf   ADCON0, GO      ; start A/D conversion
   sleep            ; sleep while conversion takes place

   movf   ADRES, W      ; place result in W

   return


Citar
Para que entenda e possa desenvolver o software do projeto preciso compreender o funcionamento correto do hardware.


Não apenas do hardware ...

Vale a pena fazer um fluxograma para entender o prog e sua interação com o hardware ... é bom ter à mão as data sheets do PIC original e do alvo, comparando semelhanças e diferenças. Isto vai evidenciar o que pode ser mantido e o que deve ser alterado ...
« Última modificação: 06 de Julho de 2010, 09:29 por Jost Dayan »

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #61 Online: 04 de Julho de 2010, 19:59 »
Certo, estou caminhando aos poucos e aprendendo devagar. O joystick pode ser desses encontrados para games, eu já verifiquei que eles trabalham com pots de 10k. A variação de tensão nessas resistências serão muito pequenas, é assim mesmo ?? E nesse caso só utilizaremos os níveis altos e baixos de tensão ??? Se puder, favor exemplificar para que eu possa entender, estou tendo alguma dificuldade de visualizar esse processo.
« Última modificação: 04 de Julho de 2010, 20:03 por aguizan »

Offline C N C N o w !

  • CNCMASTER
  • ******
  • Posts: 6300
  • Sexo: Masculino
Re: Contrôle de motores com PIC16F628A
« Resposta #62 Online: 04 de Julho de 2010, 21:07 »
A variação de tensão nessas resistências serão muito pequenas, é assim mesmo ??

O que é que vc considera "muito pequena" ? A tensão vai variar proporcionalmente à excursão, dependendo do modelo do joystick pode ser bastante grande, praticamente de 0V a 5V ...

Citar
E nesse caso só utilizaremos os níveis altos e baixos de tensão ???

Se fosse este o caso o joystick não seria necessário, né ? A tensão é proporcional à posição do stick ...

Citar
Se puder, favor exemplificar para que eu possa entender, estou tendo alguma dificuldade de visualizar esse processo.

A coisa é relativamente simples: Os pots são varridos e a tensão variável é convertida para um número representativo de sua magnitude pelo conversor AD e este valor é transmitido serialmente. No receptor isto é convertido para ciclo de trabalho de um PWM que controla a velocidade e direção de cada motor ou a posição de um servo ...

Viu o filminho ? :

http://www.ece.uvic.ca/~ece499/2001a/group11/Video/ROV%20top.avi
« Última modificação: 04 de Julho de 2010, 21:10 por C N C N o w ! »

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 #63 Online: 05 de Julho de 2010, 07:56 »

Ainda me encontro cheio de dúvidas. Para que entenda e possa desenvolver o software do projeto preciso compreender o funcionamento correto do hardware. Avaliem se estou correto: O joystick pode assumir várias posições físicas (parado, frente/low, frente/med, frente/fast, trás/low ... e assim por diante para todas as posições possíveis do joystick. Quando o joystick se movimenta aciona dois potenciômetros de 10k ohms e para cada posição, cada um assume um valor específico de resistência que resultam em uma tensão para cada dessas posições. Como isso se traduz para ser transmitido ? É convertido digitalmente e enviado ? São faixas de valores por exemplo: Entre 0 e X volts = y e esse y é que seria convertido para transmissão ?

O trecho de programa a seguir é o coração do transmissor, onde é lida a posição de cada potenciômetro do joystick (SAMPLE, que o Jorge mostrou), das chaves (BTNTEST) e em seguida os bits são enviados pela porta serial (SERIAL). E para caber tudo numa palavra, são efetuados deslocamentos dos bits (rrf).


;********************************************************************************
;* Main program loop                        *
;********************************************************************************

MAIN   movlw   0xC9         ; channel 1 (GP1/AN1/Pin 6), A/D module on
   call   SAMPLE         ; sample AN1 (Y axis), value returns in W   
   andlw   0xE0         ; mask 3 most sig bits, put result in W
   movwf   SER_DATA_1      ; SER_DATA_1 = [y7 y6 y5 0, 0 0 0 0]
   rrf   SER_DATA_1, F
   rrf   SER_DATA_1, F
   rrf   SER_DATA_1, F      ; SER_DATA_1 = [0 0 0 y7, y6 y5 0 0]

   movlw   0xC1         ; channel 0 (GP0/AN0/Pin 7), A/D module on
   call   SAMPLE         ; sample AN0 (X axis), value returns in W
   andlw   0xE0         ; mask 3 most sig bits, put result in W
   addwf   SER_DATA_1, F      ; SER_DATA_1 = [x7 x6 x5 y7, y6 y5 0 0]
   rrf   SER_DATA_1, F
   rrf   SER_DATA_1, F      ; SER_DATA_1 = [0 0 x7 x6, x5 y7 y6 y5]

   movlw   0xD1         ; channel 2 (GP2/AN2/Pin 5), A/D module on
   call   SAMPLE         ; sample AN2 (depth), value returns in W
   movwf   SER_DATA_2      ; second byte of serial data

   call   BTNTEST         ; check button status and adjust light/servo bits
   call    SERIAL         ; transmit SER_DATA_1 and SER_DATA_2

   call   PAUSE         ; giver receiver time to syncronize

   goto   MAIN         ; main program loop


Tem que analisar o programa....  :)

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #64 Online: 05 de Julho de 2010, 09:17 »
A variação de tensão nessas resistências serão muito pequenas, é assim mesmo ??

O que é que vc considera "muito pequena" ? A tensão vai variar proporcionalmente à excursão, dependendo do modelo do joystick pode ser bastante grande, praticamente de 0V a 5V ...

Citar
E nesse caso só utilizaremos os níveis altos e baixos de tensão ???

Se fosse este o caso o joystick não seria necessário, né ? A tensão é proporcional à posição do stick ...

Citar
Se puder, favor exemplificar para que eu possa entender, estou tendo alguma dificuldade de visualizar esse processo.

A coisa é relativamente simples: Os pots são varridos e a tensão variável é convertida para um número representativo de sua magnitude pelo conversor AD e este valor é transmitido serialmente. No receptor isto é convertido para ciclo de trabalho de um PWM que controla a velocidade e direção de cada motor ou a posição de um servo ...

Viu o filminho ? :

http://www.ece.uvic.ca/~ece499/2001a/group11/Video/ROV%20top.avi




Procurei informações sobre os conversores Ad e sobre PWM. Começo a compreender esse processo. Concluí o seguinte, corrija-me se eu estiver errado.

As variações de tensão , criadas pela variação da resistência dos pots, são lidas e interpretadas dentro de uma escala que varia de 0 a 5V e que estão relacionadas a posições em binários (conforme tamanho da minha informação em bits, no caso 8 bits - 64 posições possíveis). Esta informação, agora digital é enviada serialmente e já está adequada para o ciclo de trabalho de um PWM que possibilita a alteração de velocidade e sentido re rotação do motor. Correto ?

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #65 Online: 05 de Julho de 2010, 09:24 »

Ainda me encontro cheio de dúvidas. Para que entenda e possa desenvolver o software do projeto preciso compreender o funcionamento correto do hardware. Avaliem se estou correto: O joystick pode assumir várias posições físicas (parado, frente/low, frente/med, frente/fast, trás/low ... e assim por diante para todas as posições possíveis do joystick. Quando o joystick se movimenta aciona dois potenciômetros de 10k ohms e para cada posição, cada um assume um valor específico de resistência que resultam em uma tensão para cada dessas posições. Como isso se traduz para ser transmitido ? É convertido digitalmente e enviado ? São faixas de valores por exemplo: Entre 0 e X volts = y e esse y é que seria convertido para transmissão ?

O trecho de programa a seguir é o coração do transmissor, onde é lida a posição de cada potenciômetro do joystick (SAMPLE, que o Jorge mostrou), das chaves (BTNTEST) e em seguida os bits são enviados pela porta serial (SERIAL). E para caber tudo numa palavra, são efetuados deslocamentos dos bits (rrf).


;********************************************************************************
;* Main program loop                        *
;********************************************************************************

MAIN   movlw   0xC9         ; channel 1 (GP1/AN1/Pin 6), A/D module on
   call   SAMPLE         ; sample AN1 (Y axis), value returns in W   
   andlw   0xE0         ; mask 3 most sig bits, put result in W
   movwf   SER_DATA_1      ; SER_DATA_1 = [y7 y6 y5 0, 0 0 0 0]
   rrf   SER_DATA_1, F
   rrf   SER_DATA_1, F
   rrf   SER_DATA_1, F      ; SER_DATA_1 = [0 0 0 y7, y6 y5 0 0]

   movlw   0xC1         ; channel 0 (GP0/AN0/Pin 7), A/D module on
   call   SAMPLE         ; sample AN0 (X axis), value returns in W
   andlw   0xE0         ; mask 3 most sig bits, put result in W
   addwf   SER_DATA_1, F      ; SER_DATA_1 = [x7 x6 x5 y7, y6 y5 0 0]
   rrf   SER_DATA_1, F
   rrf   SER_DATA_1, F      ; SER_DATA_1 = [0 0 x7 x6, x5 y7 y6 y5]

   movlw   0xD1         ; channel 2 (GP2/AN2/Pin 5), A/D module on
   call   SAMPLE         ; sample AN2 (depth), value returns in W
   movwf   SER_DATA_2      ; second byte of serial data

   call   BTNTEST         ; check button status and adjust light/servo bits
   call    SERIAL         ; transmit SER_DATA_1 and SER_DATA_2

   call   PAUSE         ; giver receiver time to syncronize

   goto   MAIN         ; main program loop


Tem que analisar o programa....  :)



Gil,

Realmente estou precisando muito conhecimento para poder compreender todo o processo. Acabei de ler sobre conversores AD e PWM para entender um pouco mais do funcionamento dos componentes e saber o que posso fazer no software. Estou também estudando ASM e logo posso me situar melhor.

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #66 Online: 05 de Julho de 2010, 10:13 »
Entre 0 e X volts = y e esse y é que seria convertido para transmissão ?

Isso mesmo.

[info]
;********************************************************************************
;* Sample A/D channel and store value in W                                                                                     *
;********************************************************************************

SAMPLE
   movwf   ADCON0         ; set channel, and turn A/D on
   bsf   STATUS, RP0      ; select page 1
   movlw   0x02         ; AN0, AN1 & AN2 analogue and GP4 digital
   movwf   ADCON1
   bsf   PIE1, ADIE      ; enable A/D interrupt
   bcf   STATUS, RP0      ; select page 0

   bcf   PIR1, ADIE      ; clear A/D interrupt flag (conversion not complete)
   bsf   INTCON, PEIE      ; enable peripheral interrupts
   bsf   INTCON, GIE      ; enable all interrupts

   call   DELAY_100us      ; allow time for A/D caps to charge (sample time)

   bsf   ADCON0, GO      ; start A/D conversion
   sleep            ; sleep while conversion takes place

   movf   ADRES, W      ; place result in W

   return
[/info]

Citar
Para que entenda e possa desenvolver o software do projeto preciso compreender o funcionamento correto do hardware.

Não apenas do hardware ...

Vale a pena fazer um fluxograma para entender o prog e sua interação com o hardware ... é bom ter à mão as data sheets do PIC original e do alvo, comparando semelhanças e diferenças. Isto vai evidenciar o que pode ser mantido e o que deve ser alterado ...


No código ADCON0 e ADCON1 o que são ??

Offline C N C N o w !

  • CNCMASTER
  • ******
  • Posts: 6300
  • Sexo: Masculino
Re: Contrôle de motores com PIC16F628A
« Resposta #67 Online: 05 de Julho de 2010, 10:15 »
As variações de tensão , criadas pela variação da resistência dos pots, são lidas e interpretadas dentro de uma escala que varia de 0 a 5V

A variação de tensão, o máximo e o mínimo, dependem do circuito divisor de tensão. Pode ser de 0V a 5V neste caso, do ponto de vista elétrico, mas isto tb depende da mecânica. Será verdade se a mecância permitir a excursão plena do pot, o que nem sempre acontece.

Citar
estão relacionadas a posições em binários

Prefiro dizer que está relacionado à posição dos pots e que a leitura do conversor AD será um número, um conjunto de bits, possivelmente contido em um único byte, se o conversor for de oito bits. Binário é um sistema de numeração, conveniente para humanos. O número poderá ser expresso em qualquer sistema que nos seja mais conveniente, o que é solenemente ignoradopela máquina ...

Citar
(conforme tamanho da minha informação em bits, no caso 8 bits - 64 posições possíveis).

Sim, oito bits quando o conversor for de oito bits ... nem sempre é o caso.

Oito bits permitem uma resolução de 256 pontos, não 64 ...

Citar
Esta informação, agora digital é enviada serialmente e já está adequada para o ciclo de trabalho de um PWM que possibilita a alteração de velocidade e sentido re rotação do motor. Correto ?

Pode estar adequada ou não ... eu não analisei o prog detalhadamente, mas é comum que os valores sofram processamento adicional. Pode não ser desejável uma tradução direta, pode ser interessante modificar a resolução ou tratar a grandeza não linearmente  ...

PS: evite as citações integrais, isto não contribui para a inteligibilidade, desperdiça espaço e até atrapalha a visulaização da msg ...
« Última modificação: 05 de Julho de 2010, 10:47 por C N C N o w ! »

Offline C N C N o w !

  • CNCMASTER
  • ******
  • Posts: 6300
  • Sexo: Masculino
Re: Contrôle de motores com PIC16F628A
« Resposta #68 Online: 05 de Julho de 2010, 10:38 »
No código ADCON0 e ADCON1 o que são ??

São posições de memória que funcionam como registradores especiais, para controle do conversor AD, neste caso.





Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #69 Online: 05 de Julho de 2010, 17:16 »
PS: evite as citações integrais, isto não contribui para a inteligibilidade, desperdiça espaço e até atrapalha a visulaização da msg ...


Como assim ???

Offline C N C N o w !

  • CNCMASTER
  • ******
  • Posts: 6300
  • Sexo: Masculino
Re: Contrôle de motores com PIC16F628A
« Resposta #70 Online: 05 de Julho de 2010, 17:24 »
Como assim ???

Vc vem citando na íntegra as msgs imediatamente anteriores às suas ... o que é desnecessário, pq a msg referida está logo acima, perdulário pq duplica o espaço ocupado no banco de dados do fórum e atrapalha a legibilidade pq cria uma linguiça que obriga a rolar a tela para visualizar o que interessa ...

veja como os colegas respondem, citando apenas um fragmento pertinente para contextualizar a resposta ...

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #71 Online: 05 de Julho de 2010, 17:48 »
Como assim ???

veja como os colegas respondem, citando apenas um fragmento pertinente para contextualizar a resposta ...
;

Entendi, desculpem a falha. ;D

Offline aguizan

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


[/quote]

ESTOU MIGRANDO DO 12C671 PARA O 16F628A E NESTE ÚLTIMO NÃO ENCONTRO O CONVERSOR A/D VERIFIQUEI QUE RA0 E RA1 SÃO ENTRADAS ANALÓGICAS(COMPARADORES ). COMO FAÇO PARA LER SINAIS ANALÓGICOS E TRANSFORMÁ-LOS EM DIGITAIS ?
« Última modificação: 06 de Julho de 2010, 18:56 por aguizan »

Offline robedany

  • Hobby
  • ****
  • Posts: 357
  • Sexo: Masculino
Re: Contrôle de motores com PIC16F628A
« Resposta #73 Online: 06 de Julho de 2010, 18:59 »
Porque o 15f628 e não o 12f675 ?

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #74 Online: 06 de Julho de 2010, 19:22 »
Porque o 15f628 e não o 12f675 ?

Não analisei a substituição pelo 675. A opção de troca pelo 628 veio da necessidade de encontrar um Pic mais novo e com um pouco mais de recursos. Na realidade o projeto original usava o PIC12C671.

 

/** * */