terça-feira, 8 de junho de 2010

Controlando até 6 motores DC com um único Program-Me

Durante as aulas da primeira turma do Curso de Robótica na Globalcode, os alunos mostraram vários projetos de robôs que eles construíram ou estavam construindo. Dentre esses projetos tivemos um com LEGO que apresentava a seguinte dificuldade:

Controlar 5 motores DC de LEGO com o Program-Me utilizando a menor quantidade de portas possível.


Os motores LEGO possuem um conector proprietário conforme figura ao lado, sendo que após algumas verificações concluimos que os terminais associados ao motor são os identificados como C1 e C2, ou seja, esses são os terminais que devem ser conectados na Ponte-H.




Para conectar os motores de LEGO em uma ponte-H, é recomendado utilizar cabinhos de extensão da própria LEGO como adaptadores. Basta cortar esses cabinhos ao meio e você terá 2 adaptadores que evitarão a necessidade de danificar os cabos originais dos motores.


O controle básico de cada motor DC exige uma ponte-H que necessita normalmente 3 portas (uma PWM para controle de velocidade e duas digitais para controlar a direção do motor), porém se utilizarmos 3 portas por motor já estaríamos gastando 15 portas do Program-Me o que não era interessante, pois sobrariam poucas portas para sensores e comunicação.

Na figura abaixo temos um diagrama básico de um chip de ponte-H para dois motores, onde o lado esquerdo controla um motor e o lado direito controla outro motor.



Funcionamento da Ponte-H

Analisando apenas o lado esquerdo da figura acima temos o seguinte:

As entradas IN1 e IN2 controlam a direção de rotação do motor, enquanto na entrada ENABLE1 aplicamos o sinal PWM que determinará a velocidade do motor.
Quando o sinal aplicado na entrada IN1 é igual a "1" e o sinal aplicado na entrada IN2 é igual a "0"(zero) o motor gira para um lado, se o sinal aplicado na entrada IN1 é igual a "0" e o sinal aplicado na entrada IN2 é igual a "1" o motor gira no outro sentido. Se o sinal aplicado em ambas as entradas (IN1 e IN2) for igual a 0 ou 1, os terminais do motor serão curto circuitados criando o efeito de freio do motor.
Como para este projeto o recurso de freio motor não é necessário ele foi descartado.
As saídas OUT1 e OUT2 são os pontos onde conectamos os terminais do motor.

Com o objetivo de utilizar menos portas do Program-Me, colocamos um transistor NPN que inverte o sinal aplicado na entrada IN1 e aplica na entrada IN2. Dessa forma conseguimos controlar a direção do motor utilizando apenas uma porta digital. Essa inversão poderia também ser executada por um circuito integrado de portas inversoras (por exemplo o SN7404), mas para simplificar as conexões na protoboard achei melhor utilizar os transistores.

Na figura abaixo temos o diagrama de montagem da ponte-H para 6 motores com todas as conexões com o program-Me.



Os transistores são todos BC548 e os resistores de 10K.




Como a ponte H utilizada é a L293D, não é necessário montar diodos externamente.

Com esse circuito deixamos todas as portas analógicas do Program-Me livres para conectar sensores e as portas digitais 0 e 1 disponíveis para comunicação com o módulo Xbee que permitirá o controle remoto do robô.

7 comentários:

  1. Para aumentar as possibilidades das portas do controlador, poderia ser utilizado um demux (demultiplexador), por exemplo, com três portas do controlador, teriamos oito saídas, evidentemente isso teria de ser compensado no sofware para se fazer o mapeamento entre os sinais das portas com as devidas saídas do demux.

    Att

    Antonio Celso

    ResponderExcluir
  2. Bom dia Antônio, a solução de utilizar um DEMUX é bastante prática quando temos que acionar um dispositivo por vez. No caso deste projeto temos que controlar os 6 motores ao mesmo tempo, então a utilização do DEMUX não seria ideal, por isso achei melhor utilizar apenas os transistores para inverter o sinal. Dessa forma é só mandar 0 para girar o motor em um sentido e 1 para girar no outro.

    ResponderExcluir
  3. Entendi, a solução com o DEMUX para controlar mais de um motor ao mesmo tempo seria possível colocando um latch (armazenador estado) na saída do DEMUX, e usando uma outra porta como sinal de strobe (pulso de armazenagem no latch). Assim os estados seriam mantidos, mesmo que se houvesse variação nos estados das portas.

    Essa solução só valeria a pena quando não houvesse mais portas do controlador sobrando, é claro. Mas é uma solução viável e não muito complexa.

    Att

    Antonio Celso

    ResponderExcluir
  4. Vc poderia me dizer como exatamente vc ligou o motor do lego com o PWM?

    ResponderExcluir
  5. Olá José Luis.

    Quando eu ativo o Program-me, antes do setup() ser concluído e a PWM assumir LOW, usando a ponte H com os transistores conforme o seu post, os motores permanecem parados ou vão assumir a algum movimento?

    Obrigado,

    Junior.

    ResponderExcluir
  6. Tudo bem Junior ?
    Se a PWM estiver em LOW o motor correspondente deverá permanecer parado, independente do estado das entradas de controle de direção.
    atenciosamente

    José Luiz

    ResponderExcluir
  7. Olá,

    Gostaria de conectar apenas dois motores da lego utilizando, porém, se possível, apenas o Program-me 2.0, com sua ponte H 'imbutida', mas não sei como fazê-lo. Estou programando um projeto mas, por um infortúnio do destino, tive de conectar a placa no chassi, e só entendo de programação (nadinha de montagem). Agradeceria, portanto, aquele que pudesse me esclarecer em quais portas do Program-me novo devo conectaro motor.

    Obrigado,
    Vitor

    ResponderExcluir