Resolvido - Arduino reseta ao comandar dois servos rapidamente

Boa noite pessoal,

Já pesquisei de tudo e não encontrei nada que me ajudasse.

Seguinte: Tenho um arduino que comanda 4 servo motores, todos com alimentação sem passar pelo arduino, vem direto da bateria que fornece 5V. Leio os dados de potênciômetros de joysticks com analogRead, uso o map para converter de 0 a 179 na saída e mando isso no pino de cada servo. Acontece que se eu dou dois comandos rápidos, meu arduino reseta. Não sei mais o que fazer, mesmo que eu ligue apenas dois servos tenho o mesmo problema.

Obs: Arduino, potenciômetros e servos estão ligados na mesma bateria de 5V e que deveria fornecer picos de 3A. O fio do servo que recebe o comando está ligado diretamente nas portas PWM do arduino.

Se imprimo os valores lidos dos potenciômetros na serial sem ligar os servos, saem certinhos e não acontece de resetar o arduino se os servos estiverem desligados, mesmo acionando os 4 potênciômetros simultâneamente. Se ligo um servo por vez, também funcionam perfeitamente, mesmo com movimentos rápidos.

Desculpem pelo tamanho do texto, mas queria me fazer entender. O desenho não ficou bom, mas acho que dá para entender. Não tenho fotos agora.

Agradeço desde já pela ajuda.

Exibições: 1584

Anexos

As respostas para este tópico estão encerradas.

Respostas a este tópico

Os servos são todos Turnigy TG9e 1,5Kg. Especificações:

Dimensão: 23x12.2x29mm
Torque: 1,5 kg / cm (4,8 V)
Velocidade de funcionamento: 0.10sec / 60 graus 0.09sec / 60 graus (6,0 V)
Tensão de funcionamento: 4.8V
Variação de temperatura: 0-55C
Dead band-width: 7us
Comprimento do fio: 260 milímetros

Há alguma chance de estar retornando corrente no pino de comando quando do movimento rápido do servo? Depois que ele trava e reinicia primeira vez, parece que o servo só vai aos extremos, não obedece aos comandos de girar um pouco por vez.

Existe sim essa possibilidade, mas eu considero pouco provável esse problema, caso queira verificar, meça a corrente nessa ligação ( corrente é medido em série com circuito).

A corrente máxima de cada pino digital é 20mA. Creio que a corrente no pino de controle não passe de 1mA.

Você pode compartilhar seu código?

Use a ferramenta para anexar, não copie e cole aqui

Segue o código, extremamente simples. Leio os potenciômetros das analógicas, uso o map para converter para os valores mínimos e máximos que preciso(se imprimo isso na serial, estes valores lidos sempre são corretos, posso fazer meia hora de testes e a leitura fica sempre dentro dos parâmetros que fixei). Se este valor lido for diferente da leitura anterior, mando o comando para o respectivo servo. São 4 potenciômetros(A0, A1, A2, A3) e 4 comandos de saída nos servos(D3, D5, D6, D9).

Anexos

Será que poderia ser falta de um pequeno delay(50 por exemplo) depois do comando em cada servo? Pois só faço delay depois de acionar todos os servos e passar novamente no loop

Estou fazendo alguns testes aqui, o interressante foi que alimentando pelo usb do notebook, funcionou. Mas quando alimentei pelo Jack de alimentação, ficou reiniciando. Vou testar outra fonte

Não deu tempo de testar este processo nos 4 servos ainda, mas fiz o que o @Ranzinza Véio citou com dois servos e funcionou(Mesmo somente com dois antes também dava problema). Coloquei um capacitor de 10 nanofarads próximo dos terminais dos servos e um capacitor de 470 microfarads na alimentação do arduino.

Poderia ser algum retorno de energia do servo no pino de comando? Não seu se isso poderia acontecer.

Algum tempo atras fiz um projeto usando o nodemcu com 4 servos controlando um braço robótico. Infelizmente não tenho mais ele. Consegui fazer ele funcionar com todos os servos simultaneamente mas tive alguns problemas no decorrer do projeto e minha dica pra vc é sempre ter dois arduinos um para ir fazendo o projeto e outro para testar quando o problema parece ser do próprio arduino. Bati muito a cabeça com alguns problemas e quando eu adquiri outra placa acabei descobrindo que não era problema do código nem da ligação eletronica e sim que o arduino estava dando defeito. espero ter ajudado.

Estou testando em um arduino uno que já tenho faz tempo. À noite vou tentar fazer o teste com uma outra placa do arduino nano que tenho. Na verdade, esse esquema que desenhei é só do teste, mas ele será controlado através de outra placa arduino com o NRF24L01.

Obrigado pela dica.

Gostei muito da resposta dos servos com o NodeMCU ligado nas portas digitais, no meu projeto o braço ficou bem preciso.

Boa tarde WB,

li todo o tópico, e vou sugerir algo que pode ajudar.

Os motores com escova, como é o caso da maiorias dos motores de servomotor,  geram muito ruídos

elétricos.

Estes ruídos pode afetar equipamentos com alta impedância de entrada.

Talvez ao acionar um motor só, o nível seja pequeno, mas ao acionar 2 simultaneamente, pode acumular,

e afetar o seu arduino.

Você pode ligar um capacitor (0.01uf) em cada VCC de cada servo, no Vin do arduino (ou no +5V), e talvez  no 

port reset da sua placa arduino. este do reset pode ser que não seja necessário.

Talvez até colocar tb um capacitor de +- 500uF no Vin do arduino (ou no +5V).

Rui

Eu estava pensando em algo nesse sentido mesmo, algum retorno do servo, principalmente nos movimentos rápidos que provavelmente geram mais ruídos, mas como não tenho muita(quase nenhuma) experiência com eletrônica, não sabia de onde poderia vir ou como corrigir. Vou fazer este teste no final de semana e posto as novidades aqui. Tenho um capacitor na entrada de alimentação do sistema, fica na saída do BEC que citei acima, acho que serve para segurar um pouco os picos de consumo. Estes capacitores que você citou, seriam de quantos volts? A alimentação de entrada é estabilizada em 5v e toda a alimentação é feita em paralelo, só sai do arduino os comandos dos servos.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço