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

Description:

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

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #195 Online: 14 de Julho de 2010, 17:59 »
Sim, conforme o manual do PIC16F877A, é necessário que a impedância de saída das fontes de sinal sejam inferiores a 2,5 Kohms para não haver erro de leitura. Ou seja, cada potenciômetro, de 10 K ohms, deve ser ligado a um "buffer" de sinal, com ganho unitário e baixa impedância de saída. Poderia usar o CI LM-324, que possui 4 amplificadores operacionais. Sugestão:
Desta forma estaria utilizando os Joysticks do PS (potenciômetros de 10K) e desprezando os outros controles oferecidos.


Outra opção é usar potenciômetros de 1K, sem amplificador nenhum.
Se esta opção não perder em qualidade do sinal eu prefiro pela simplificação, mas será que consigo mini Joysticks com pots de 1K ?
« Última modificação: 14 de Julho de 2010, 18:02 por aguizan »

Offline C N C N o w !

  • CNCMASTER
  • ******
  • Posts: 6300
  • Sexo: Masculino
Re: Contrôle de motores com PIC16F628A
« Resposta #196 Online: 14 de Julho de 2010, 18:07 »
Neste caso eu teria que usar um Joystick analógico, correto?

Sim, seria o mais fácil. Os joysticks do controle do Playstation não são analógicos ? Eu tenho a impressão que sim, ao menos algum modelo ... se não me engano já usei os pots retirados de um deles ...

Citar
Quanto mais simples for o projeto melhor, mais não encontrei ainda o componente certo para essa utilização, alguma sugestão ?

Se os do Playstation não forem analógicos, certamente há uns por aí que são, com toda a certeza, só não pergunte qual ... vejo nos camelôs da Santa, a caixa de alguns controladores são transparentes, dá pra ver que são analógicos ...

Por outro lado, se vc viu os artigos que citei, deve ter percebido que não é difícil interfacear o controlador.

Há tb a opção de adquirir os joysticks no comércio. Nunca comprei, mas recentemente vi o comentário de alguém em uma lista de discussão que havia comprado alguns ...

Acho que vale lembrar que não é difícil fabricar um joystick ... vou rabiscar algo pra mostrar como já fiz e depois posto aqui.

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 #197 Online: 14 de Julho de 2010, 18:29 »
Sim, conforme o manual do PIC16F877A, é necessário que a impedância de saída das fontes de sinal sejam inferiores a 2,5 Kohms para não haver erro de leitura.

Creio que interpretamos a recomendação de maneiras diversas ... O fragmento relevante da DS:

[info]
11.1 A/D Acquisition Requirements

For the A/D converter to meet its specified accuracy, the charge holding capacitor (CHOLD) must be allowed to fully charge to the input channel voltage level. The analog input model is shown in Figure 11-2. The source impedance (RS) and the internal sampling switch impedance (RSS) directly affect the time required to charge the capacitor CHOLD. The sampling switch (RSS) impedance varies over the device voltage (VDD); see Figure 11-2.  The maximum recommended impedance for analog sources is 2.5 kΩ. As the impedance is decreased, the acquisition time may be decreased. After the analog input channel is selected (changed), this acquisition must be done before the conversion can be started.[/info]

Se bem entendo, a questão aqui é garantir a carga de CHOLD até a tensão amostrada, o que pode ser obtido pela manipulação de Tacq ... tô enganado ?

Não analisei para o valor discutido [ 10K ]  mas creio que este é um recurso viável, se não neste caso específico, em outros ...

A impedância da fonte de sinal deve ser mantida dentro de certos limites aceitáveis pelo conversor A/D.

Considerando que a entrada analógica possui o circuito a seguir:

[attachthumb=1]

O valor máximo da resistência da fonte de sinal (Rs) poderia ser calculado a partir do valor do tempo de conversão do A/D. Do mesmo modo, o valor de Tacq poderia ser manipulado para atender a simplificação do circuito (com menor quantidade de componentes).

Porém, há outras questões envolvidas na determinação do valor mínimo de Rs, entre elas, a corrente de fuga do PIC. O próprio manual recomenda em mais de um lugar uma resistência menor que 2,5 K ohms.

[attachthumb=2]

Então, eu particularmente usaria esse valor máximo, como a resistência máxima de saída de um potenciômetro (pelo teorema de Thevenin) seria a metade de sua resistência total. Para atender a esse quesito, deveria ser usado uma potenciômetro com resistência máxima de 5K. Se os joysticks de mercado forem realmente padronizados em 10K ohm, só resta usar um amplificador operacional.

Calculando a resistência máxima, para que a corrente de fuga não gere erros no conversor A/D, podemos usar:

Rs < Vadc(min) / Ifuga

Sendo:
  (1) Vadc(min): tensão mínima na entrada do conversor, algo em torno de 4 mV para conversor A/D de 10 bits e Vref = 5V.
  (2) Ifuga = 500nA
 
Rs < 8 K ohm

Ainda assim, eu usaria 2,5 K ohm...  :)
« Última modificação: 14 de Julho de 2010, 19:03 por minilathe »

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #198 Online: 14 de Julho de 2010, 18:39 »
Sim, seria o mais fácil. Os joysticks do controle do Playstation não são analógicos ?
Citar
Sim, tem dois contrôles analógicos e um digital (na imagem que enviei em citação anterior o digital seria o da câmera)
Eu uso esses mini joysticks que são do PS.


Por outro lado, se vc viu os artigos que citei, deve ter percebido que não é difícil interfacear o controlador.

Ainda não li não. Vou olhar em seguida.

Acho que vale lembrar que não é difícil fabricar um joystick ... vou rabiscar algo pra mostrar como já fiz e depois posto aqui.
Para ilustrar  eis um protótipo de alavanca para movimentar dois potenciômetros simultaneamente.



Offline Blackmore

  • CNCMASTER
  • ******
  • Posts: 1568
  • Sexo: Masculino
  • Profissão: Projetista Mecânico/Automação
Re: Contrôle de motores com PIC16F628A
« Resposta #199 Online: 14 de Julho de 2010, 18:53 »
para simplificar ainda mais .. eu utilizaria um (ou dois) potenciômetro deslizante ( http://www.futurlec.com/PotSliding.shtml ) ... barato ... fácil de encontrar .. não vai perder "sensibilidade" na mão na hora de fazer funcionar ...

mas se quiser gastar mais ... ( http://produto.mercadolivre.com.br/MLB-144268575-controle-de-arcade-profissional-comando-joystick-_JM )
« Última modificação: 14 de Julho de 2010, 18:57 por Blackmore »

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #200 Online: 14 de Julho de 2010, 18:58 »
para simplificar ainda mais .. eu utilizaria um (ou dois) potenciômetro deslizante ( http://www.futurlec.com/PotSliding.shtml ) ... barato ... fácil de encontrar .. não vai perder "sensibilidade" na mão na hora de fazer funcionar ...
Excelente solução para o controle de profundidade.òtima sugestão !!!

O Joystick Arcade não utiliza potenciômetro e sim microswitchs.
« Última modificação: 14 de Julho de 2010, 19:06 por aguizan »

Offline C N C N o w !

  • CNCMASTER
  • ******
  • Posts: 6300
  • Sexo: Masculino
Re: Contrôle de motores com PIC16F628A
« Resposta #201 Online: 14 de Julho de 2010, 19:02 »
Eis aí o rabisco muito mal rabiscado, mas serve pra ilustrar o conceito, espero.  :P



Offline C N C N o w !

  • CNCMASTER
  • ******
  • Posts: 6300
  • Sexo: Masculino
Re: Contrôle de motores com PIC16F628A
« Resposta #202 Online: 14 de Julho de 2010, 19:10 »
  (1) Vadc(min): tensão mínima na entrada do conversor, algo em torno de 4 mV para conversor A/D de 10 bits e Vref = 5V.
  (2) Ifuga = 500nA
 
Rs < 8 K ohm

Ainda assim, eu usaria 2,5 K ohm...  :)

Pois é Gil, todo o seu arrazoado parece apontar na direção que eu imaginei, sem analisar a coisa com a profundidade que vc fez ... nada contra obedecer a especificação, claro, mas explorar os limites de vez em quando rende soluções interessantes ...

Vou ficar de olho, acho que tenho por aqui os cacos de um antigo projeto com pots de 5K ou 10K ... se achar eu mando foto e mais algum detalhe ... se a memória não me trai a coisa funfou direitinho ...

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #203 Online: 14 de Julho de 2010, 19:48 »
O programa não está na forma ideal, pois le e envia cada entrada em sequência, o ideal seria ler as tres entradas e depois enviá-las em sequência.

Gil,

No projeto original os bits eram rotacionados até formar o 1º Byte de transmissão e ficavam em zero o bit 6 e 7. O bit 7 poderia então ter seu estado modificado dependendo do comando de acionamento ou não da iluminação assim como o bit 6 para comandar servo. Como posso fazer nessa nova situação ? Serão quatro bytes de transmissão ? E nesse caso enviá-los de quatro em quatro ?
« Última modificação: 14 de Julho de 2010, 19:49 por aguizan »

Offline Blackmore

  • CNCMASTER
  • ******
  • Posts: 1568
  • Sexo: Masculino
  • Profissão: Projetista Mecânico/Automação
Re: Contrôle de motores com PIC16F628A
« Resposta #204 Online: 14 de Julho de 2010, 20:02 »
existe um padrão para a comunicação? se vc mandar um start bit e um stop bit e definir um padrão de comunicação vc fará o trabalho apenas 1 vez, pois se vc decidir por sempre enviar 5 ou 6 "palavras" onde seus valores virão de variáveis definidas se vc não utilizar no receptor todas as palavras acredito que você ganhará tempo de desenvolvimento.

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 #205 Online: 14 de Julho de 2010, 20:20 »
Anderson,

Gil,

No projeto original os bits eram rotacionados até formar o 1º Byte de transmissão e ficavam em zero o bit 6 e 7. O bit 7 poderia então ter seu estado modificado dependendo do comando de acionamento ou não da iluminação assim como o bit 6 para comandar servo. Como posso fazer nessa nova situação ? Serão quatro bytes de transmissão ? E nesse caso enviá-los de quatro em quatro ?

O quadro de transmissão (conjunto de bytes) original é composto de 2 bytes:
 
;*  SER_DATA_1 register:                     *
;*                              *
;*  ___7______6______5_ _____4______3______ 2______1______0__         *
;* |      |      |      |      |      |      |      |      |          *
;*  ___________________ ___________________ _________________         *
;*   LIGHT SERVO   --- LEFT MOTOR ---  --- RIGHT MOTOR ----         *
;*                               *
;*  SER_DATA_2 register:                     *
;*                              *
;*  ___7______6______5_ _____4______3______ 2______1______0__         *
;* |      |      |      |      |      |      |      |      |          *
;*  ___________________ ___________________ _________________         *
;*  -------------- DEPTH CONTROL A/D VALUE ----------------         *


O quadro pode ser aumentado de acordo com a necessidade, acrescentando-se mais bytes. Seguindo a sugestão do Jorge, podemos considerar uma sistemática de verificação de erros, que poderia ser um algoritmo de Checksum, aí gasta-se mais um byte.

Mas tem que ver se é realmente necessário. Como estamos falando de software, a mudança é simples. Pode-se depois sofisticar o protocolo de comunicação. Com um ou mais bytes de verificação ou de correção de erros, que são usados quando o meio de comunicação é ruidoso e há perdas com certa frequência. Como será usado um cabo ponto a ponto e o meio onde este passa deve proporcionar pouco ruído, assim, uma estratégia de verificação de erros pode ser dispensável. Mas isso, talvez, só saberemos depois.

Mas como alguém já disse, "o molho não deve ser mais caro que o peixe".

Num projeto desse tipo, eu acho importante desenhar primeiramente o que o quadro tem que levar de informação (requisitos) e dai implementar o software do protocolo.

A palavra de controle de cada motor terá 3 bytes não é? Mas quantos motores serão? Quantos sinais digitais do tipo liga/desliga (ON/OFF)? O comando do servo terá quantos bits?

Entendi que voce também espera receber algo do ROV não é? Tirando o sinal da câmera (que deve ser um sinal de alta largura de banda de transmissão, algo em torno de 5MHz, via cabo coaxial) que não passaria pelo PIC. Os sinais de sensores de pressão (profundidade), temperatura, ... Nesse caso, vai um quadro num sentido e no outro sentido. Havendo uma "conversa" entre os módulos.
« Última modificação: 14 de Julho de 2010, 20:26 por minilathe »

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 #206 Online: 14 de Julho de 2010, 20:31 »
Blackmore,

existe um padrão para a comunicação? se vc mandar um start bit e um stop bit e definir um padrão de comunicação vc fará o trabalho apenas 1 vez, pois se vc decidir por sempre enviar 5 ou 6 "palavras" onde seus valores virão de variáveis definidas se vc não utilizar no receptor todas as palavras acredito que você ganhará tempo de desenvolvimento.

Esclarecendo que, sendo a comunicação assincrona, o start e stop bits estão sempre presentes a cada byte enviado. Está implicito no trabalho da USART e transparente para o programador. Que só tem que estabelecer o mesmo padrão nos dois lados da comunicação.
 

Offline C N C N o w !

  • CNCMASTER
  • ******
  • Posts: 6300
  • Sexo: Masculino
Re: Contrôle de motores com PIC16F628A
« Resposta #207 Online: 14 de Julho de 2010, 21:05 »
"o molho não deve ser mais caro que o peixe".

Como parece que a solução minimalista original está sendo abandonada em favor de algo um pouco mais elaborado, é incontornável a adoção de um protocolo multibyte que inclua o indispensável preâmbulo e o barato checksum ou CRC. É desejável e útil o handshaking e alarme em caso de falha ...

Algo do tipo:

preâmbulo (indica o início do quadro)
joystick 1
joystick 2
joystick 3
joystick 4
I/O
Checksum

O Tx pode responder com checksum + código de erro, se incorreto, indica falha de comunicação ou outra qualquer, como flooding ...


PS: Linguado à la belle meunière é o que escolho quando tenho opção. É bem possível que eu goste do minimalismo mais que qualquer um por aqui ...  ;D

Offline Blackmore

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

como sempre, não consegui me expressar direito   :(
mas ok ... tocamos o barco para frente ... melhor .. o ROV !!  :)

Offline aguizan

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

A palavra de controle de cada motor terá 3 bytes não é? Mas quantos motores serão?
Três motores dois no eixo X e um no Y
 

Quantos sinais digitais do tipo liga/desliga (ON/OFF)?


  • Iluminação frontal
  • iluminação posterior
  • servo


O comando do servo terá quantos bits?
O servo movimentará a câmera no eixo y somente, com 3 posições possíveis, frente, esq. e dir.


Entendi que voce também espera receber algo do ROV não é? Tirando o sinal da câmera (que deve ser um sinal de alta largura de banda de transmissão, algo em torno de 5MHz, via cabo coaxial) que não passaria pelo PIC. Os sinais de sensores de pressão (profundidade), temperatura, ... Nesse caso, vai um quadro num sentido e no outro sentido. Havendo uma "conversa" entre os módulos.

Sim, retornam sinais referentes a pressão, temperatura, salinidade, compass, etc.

 

/** * */