Aqueles que pretendem construir um projeto mais complexo (neste caso, quero dizer com mais DOFs, como um bípede humanóide, hexapod, e outros) podem encontrar dificuldades se estiverem usando um Arduino UNO ou similar, a menos que tenham um Mega. Foi o que aconteceu comigo quando eu estava trabalhando no meu projeto bípede.



     Depois de pesquisar várias alternativas, sem mudar a placa, eu encontrei este IC: TLC5940.

 

     Ele é vendido como um LED driver de 16 canais, mas com esta biblioteca pode controlar 16 servo motores, tão fácil quanto o "servo sweep". Mas não só é isso: pode-se conectar vários ICs em série e expandir ainda mais (eu ainda não tentei, mas parece ser muito fácil). O que você perde de sua placa são 5 pinos.

     Você pode encontrar este IC em um breakout e também em um PWM shield, ou fazer o seu próprio com custo muito baixo (menos de R$ 4,00 por chip). Isto significa que você pode comprar 20 chips pelo preço de um PWM shield. :)

     Bem pessoal, o material necessário para fazer este trabalho está abaixo:


Arduino (utilizei o ONU);
• 1x TLC5940 IC (16 canais);
resistores de 2.2k;
jumpers;
alimentação externa para os servos;
protoboard;
servos (quantos você quiser controlar ou sua necessidade de projeto).

 

     No meu exemplo, eu utilizei apenas 6 servos. Mas você pode facilmente adicionar mais nos canais restantes.

 

 

     Que confusão de fios! É um pouco difícil de entender as conexões na foto acima. Devido a isso eu fiz um esquema no Fritzing. Mas, antes disso, vamos dar uma olhada nos pinos do IC.

 

     Agora, vamos às conexões... Siga a sequência de cores e pinos abaixo.

 

     • IC pinos 1 até o 15 e o pino 28: são os canais de saída, onde você conecta o fio de sinal do servo. Você tem que adicionar um resistor pull-up de 2.2k em cada canal e ligar ao 5V, para tornar possível o controle dos servos.
     • IC pino 16 - XERR (não utilizado neste caso).
     • IC pino 17 - SOUT (não utilizado neste caso).
     • IC pino 18 - GSCLK: fio marrom ligado ao pino 3 do Arduino;
     • IC pino 19 - DCPRG: ligado a 5V;
     • IC pino 20 - IREF: colocar nele um resistor de 2,2 k e conectar ao GND;
     • IC pino 21 - VCC: ligado a 5V;
     • IC pino 22 - GND: conectado a GND;
     • IC pino 23 - BLANK: fio laranja ligado ao pino 10 do Arduino;
     • IC pino 24 - XLAT: fio amarelo ligado ao pino 9 do Arduino;
     • IC pino 25 - SCLK: fio azul conectado ao pino 13 do Arduino;
     • IC pino 26 - SIN: fio verde ligado ao pino 11 do Arduino;
     • IC pino 27 - VPRG: conectado a GND.

 

     Como você vai utilizar muitos servos, vai precisar de uma fonte de alimentação externa para eles. Não se esqueça de ligar o GND dos servos ao GND do Arduino, para ter um GND comum.

     Nota: No início eu estava tendo problemas para fazer os servos girarem de 0 a 180 º (eles apenas iam de 0 a 90º). Eu pesquisei em muitos fóruns e encontrei algumas pessoas com o mesmo problema. Mas ninguém tinha a solução. Depois de mudar alguns valores no arquivo tlc_servos.h, eu resolvi este problema. Assim, se alguém tiver o mesmo problema, deve mudar o SERVO_MIN_WIDTH de 204 para 120 e o SERVO_MAX_WIDTH de 410 para 475.

     Por enquanto, é isso aí...

 

     P.s.: o vídeo fiz apenas para mostrar que isto realmente funciona. Realizei os testes apenas com 6 servos de cada vez, mas funcionou perfeitamente em todos os canais.

Exibições: 17056

Responder esta

Respostas a este tópico

ja revirei o Google mas ñ encontrei nada

so vi para LED

preciso de um esquemático 

pode ser com o ci  txl 5940

Boa tarde, Dickel. Estou tendo dificuldades em fazer funcionar este CI. Pode me dizer se está correto o que entendo do teu desenho? o 5v e o GND do servo vem direto de uma fonte externa. O fio data deste servo, está ligado diretamente ao TLC, sendo que tb tem um resistor nesta mesma saída do TLC ligado ao 5V do arduino. É isso? Obrigado

Olá, Luiz! Está correto.

Além disso, como os servos devem ter alimentação externa, não esqueça de ligar o GND deles ao GND do Arduino, para torná-lo comum a ambos.

Dickel estava com dificuldade de movimentar apenas um servo usando fonte externa. Consegui mexer ele usando o próprio arduino. No final de semana vou tentar novamente com uma fonte externa e vou usar teu esquema para isso. Abraço.

Bom saber que está funcionando! Legal, cara!

Eae!

tenho uma dúvida: nesse CI, os pinos de saída conectados nos servos, têm o mesmo comando eu posso passar uma programação para cada pino?

Sim. Tu consegue manipular cada servo independentemente.

Olá, parabéns cara, deixar eu te perguntar, vc já conseguiu controlar individualmente cada servo?

Muito obrigado, Rafael!

Controlar os servos individualmente é muito simples. Você pode determinar quantos e quais servos você deseja controlar em um determinado momento.

Exato. Só estou com um problema. Estou usando uma fonte suficiente para movimentar os 16 motores, porém, acabei ficando com um problema que pretendo resolver em breve.

Montei um loop que a cada volta, mando movimentar mais um motor. Ou seja, na primeira volt movimento apenas 1, na segunda o 1 e o 2 e assim até o 16. Só que a cada motor adicionado, a energia vai diminuindo. Então o primeiro motor se movimenta rápido, o segundo um pouco menos. Quando chega no quarto, ele mal e mal mexe.

Boa tarde, Luiz Henrique!

Pelo que entendi seu problema é com a fonte de alimentação, correto?

E quando chega no quarto servo motor, os anteriores (primeiro, segundo e terceiro) estão com a mesma velocidade do quarto?

Aì é que tá, Dickel. EEEEU acho que o problema não é a fonte, mas...  até pode ser que seja...

Quanto aos motores, ficam assim: na primeiro volta, só ligo o primeiro motor. na segunda volta, mexo 2 motores, sendo que o segundo fica mais lento que o primeiro. Na terceira volta, o terceiro fica mais lento que o segundo motor que tb é mais lento que o primeiro. Na quarta volta, o quarto motor quase nem se mexe já que o terceiro tá mais lento que o segundo que tá mais lento que o primeiro.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço