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: 17049

Responder esta

Respostas a este tópico

eu vou comprar na china, a muito tempo estive procurando este CI, obrigado pela indicação. Alguam pessoas perguntaram da amperagem, seguinte, entendo que este CI vai enviar o sinal (ligar ou desligar, e velocidade por isto PWM) ao Driver e este sim irá fornecer uma quantidade de corrente suficiente para o motor ter força.

Estou tentando usar os extensores de portas, 74HC595 e o PCF8574AP sem sucesso.

Consegui expansão de 64 portas com pcf8574 na protoboard, agora ta aqui na minha bancada ganhando solda quente.

Estou tentando configurar para funcionar com o Arduino Mega 2560 + Ethernet Shield, e para isso tenho que alterar os pinos, tentei configurar na biblioteca mas não consigo entender como mudar todos os pinos, alguns ainda estão conflitando com meus shields, como faço para customizar todos os pinos na biblioteca para funcionar com o EthernetShield?

Olá Diogo!

Em qual arquivo de biblioteca você fez as alterações?

Nunca tentei utilizar este IC com o Arduino Mega, mas parece ser simples de fazer as adaptações.

Pelo que pude ver, no arquivo Arduino_Mega.h (que está dentro da pasta pinouts) diz que a alteração dos pinos deve ser feita no arquivo tlc_config.h ("Don't edit these. All changeable pins are defined in tlc_config.h").

Lendo as informações contidas neste arquivo encontrei isto: "Configuration for the Arduino Tlc5940 library. After making changes to this file, delete Tlc5940.o in this folder so the changes are applied."

Então, se encontrar este arquivo (Tlc5940.o), deve deletá-lo após as alterações do tlc_config.h (digo "se encontrar" pois no meu caso não consta este arquivo na pasta). Você deve definir o número dos pinos no lugar dos DEFAULTs.

Você pretende utilizar para controle de servos?

Espero ter ajudado!

Mech-Dickel

Então eu consegui fazer as alterações nos pinos, estou utilizando para controlar servos, o problema é que por padrão utiliza pinos conflitantes com o EthernetShield pino 11,12 e pelos comentarios do arquivo tlc_config.h só posso alterar os pinos SIN e SCLK

  • Mega pin 51 (MOSI) -> SIN (Tlc pin 26)
  • Mega pin 52 (SCK) -> SCLK (Tlc pin 25)
  • Mega pin 11 (OC1A) -> XLAT (Tlc pin 24)
  • Mega pin 12 (OC1B) -> BLANK (Tlc pin 23)
  • Mega pin 9 (OC2B) -> GSCLK (Tlc pin 18)

fiz as seguintes alterações no arquivo tlc_config.h

//(pin 49)
#define SIN_PIN PL0
#define SIN_PORT PORTL
#define SIN_DDR DDRL

//(pin 48)

#define SCLK_PIN PL1
#define SCLK_PORT PORTL
#define SCLK_DDR DDRL

E tentei alterar os pinos do Ethernet Shield seguindo esse exemplo http://mcukits.com/2009/04/06/arduino-ethernet-shield-mega-hack/ mas esse post é muito antigo e não encontro mais esse spi.h, então não consegui fazer o ethernet funcionar nos pinos 50,51,52,53

Agora se desse para alterar todos os pinos do TLC5940 seria mais facil, trocaria todos os pinos DEFAULT e não geraria nenhum conflito. Será que isso é possivel?

Realmente, o TLC5940 só permite alterar aqueles dois pinos, por questão de timers. Então me parece que o que terá que mudar são os pinos do Ethernet shield.

Encontrei estes links de caras tentando exatamente o que você pretende (TLC5940 + Ethernet shield), talvez já tenha visto, mas vou deixar aqui os links (não são muito recentes):

http://forum.arduino.cc/index.php/topic,38994.0.html

http://blog.derouineau.fr/2011/07/tlc5940-library-ethernet-shield-a...

http://blog.andrewwei.mu/?p=19

Dê uma lida nos comentários dos posts dos links acima, me parece que alguns caras tiveram sucesso em suas tentativas.

Mech-Dickel

Acho que agente podia falar com o pessoal do LDG e fazer uma encomenda grande, eu fico com 10 ou 20, pelo menos.

olá amigo, sou novo e gostaria de saber se teria como controlar dispositivos diferentes com o TLC5940 e se posso adicionar eles em series e separar as funções de cada saída do mesmo ele estando em serie?

Ola no meu caso precisarei ligar cerca de 20 motores de tork 1,50 gramas como eu confeccionaria uma placa para isso

e posso funcionar cada motor individualmente através do Arduíno?

por favor poderia me ajudar

Olá, José Carlos!

Confeccione uma placa simples e funcional. Procure no Google Imagens por "Homemade PCB" ou "DIY PCB" e você encontrará imagens legais que te darão boas ideias. O Nadiel postou fotos bem interessantes de uma placa que ele confeccionou.

Você poderá controlar cada servo individualmente, ou todos em conjunto (inclusive com diferentes direções e/ou ângulos) ou ainda apenas alguns determinados servos.

ok

obrigado

vou dar uma procurada

se souber de algum modelo me mande o link

zoowltar@hotmail.com

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço