quarta-feira, 28 de maio de 2014

Controlando motores DC com Raspberry Pi e ponte H L298N


Para controlar um ou mais motores DC com o Raspberry Pi não se pode ligar diretamente nos GPIOs, pois sua corrente de tolerância é bem baixa. Existem diversas soluções como o uso de transistors, relês ou pontes H. A solução desse artigo é uma das mais simples possíveis, se trata de uma placa com a ponte H L298N, que dispõe de diversos conectores facilitando a ligação dos fios. Mais fácil que isso só comprando um shield próprio para Raspberry Pi, mas que acaba saindo mais caro. A placa que tenho em mãos foi comprada na Deal Extreme e está custando US$9,69 ( RS$ 21,60 ).

As especificações dela são as seguintes( Retirado da Dx ):

- Material: Fibra de vidro
- Driver: L298N Dual-H Ponte DC Motor Driver IC
- Drive de alimentação do terminal: 5 V ~ 35 V (se alimentado a partir do tabuleiro, faixa de fornecimento de energia é 7 V ~ 35 V)
- Parte de acionamento da Corrente de pico: 2A
- Lógica de Alimentação Terminal: 5 V ~ 7 V (fonte de alimentação dentro do conselho: +5 V)
- Parte Lógica da Corrente de operação: 0 ~ 36mA
- Controle de sinal Faixa Tensão de entrada: Low (-0.3V <= Vin <= 1,5 V); Alta (2.3V <= Vin <=) Vss
- Ativar sinal Faixa Tensão de entrada: Baixa: -0,3 <= Vin <= 1,5 V (sinal de controle é inativo); Alta: 2.3V <= Vin <= Vss (sinal de controle ativo)
- Consumo de energia máxima: 20W (Temperatura = 75'C)
- Temperatura de armazenamento: -25 ~ +130' C
- Dimensões: 2,17 x 1,97 x 1,38 em (5,5 cm x 5,0 cm x 3,5 cm)
- Peso: 1,13 oz (32 g)

Existem outros modelos de diferentes valores e especificações e claro que se a idéia é fugir de facilidade você pode comprar o integrado em um pack de duas unidades à custo de US$4,31 cada.

O motor utilizado no artigo é um simples motor DC pequeno com caixa de redução.


Motor DC com caixa de redução
Motor DC com caixa de redução

Motor DC com caixa de redução
Motor DC com caixa de redução

Como ligar um motor no Raspberry Pi com a ponte H L298N


No meu caso eu soldei os fios ao motor, mas caso não tenha solda você pode simplesmente prender o fio aos furos dos contatos.

Os conectores verdes são referentes a saída para os motores. A polaridade desses conectores em geral não importa muito pois isso poderá ser alterado justamente por ser uma ponte H, que irá possibilitar reverter o motor.

Saída da ponte H
Saída da ponte H

O conector azul de 3 vias é referente a alimentação dos motores e da própria ponte H. Temos da esquerda para direita, VCC, GND e +5V.

Entre o VCC e GND será ligado uma fonte externa que pode ir de 5V à 35V.
Agora a parte em que é preciso atenção: O pino +5V é referente a parte lógica da ponte H, a alimentação dessa parte lógica pode ser feita de duas maneiras, uma é apertando o botão da placa, que faz o uso de um regulador de 5V linear na própria placa, que faz o serviço de transformar a tensão da fonte de entrada nos 5V, utilizando esse método o pino +5V poderá permanecer vazio. O problema de se utilizar esse método é que não será possível caso utilize uma fonte de menor tensão, o regulador precisa de cerca de 7V mínimos na entrada para conseguir 5V na saída, no meu caso que utilizei uma fonte de 5V eu não pude utilizar esse regulador e como minha fonte possuí a mesma tensão necessária simplesmente criei uma ponte entre os pinos VCC e +5V. Mas tome muito cuidado para não fazer isso ao utilizar uma fonte de maior tensão.

Entrada da fonte na ponte H
Entrada da fonte na ponte H

O fio preto que está ligado no GND, será ligado em algum GND do Raspberry Pi para se conseguir referência para os GPIOs que serão utilizados.

Os pinos ENA e ENB ativam ou desativam a saída referente, esquerda e direita, no caso da minha placa já veio um jumper em cada.

Na parte lógica temos as marcações IN1,IN2 referentes ao controle da saída esquerda e IN3,IN4 à saída da direita.

Parte lógica da ponte H
Parte lógica da ponte H

Esses pinos funcionam da seguinte forma, ao colocar HIGH no IN1 e LOW en IN2 o motor gira para um lado e colocando LOW em IN1 e HIGH em IN2 o motor inverte a direção.

As ligações no Raspberry Pi podem ser feitas em diversos GPIOs, mas se quiser utilizar o PWM por hardware precisará utilizar o GPIO18 para controlar. Aqui minhas ligações ficaram assim:

Ligações no Raspberry Pi
Ligações no Raspberry Pi

Onde IN1 e IN2 serão ligados à GPIO17 e GPIO18.

Tudo conectado
Tudo conectado

Como controlar um motor no Raspberry Pi com a ponte H L298N



Na parte de controle, podemos configurar manualmente via sysfs da seguinte forma:

Exportamos a interface dos GPIOs 17 e 18

echo 17 > /sys/class/gpio/export
echo 18 > /sys/class/gpio/export

Configuramos como output

echo out > /sys/class/gpio/gpio17/direction
echo out > /sys/class/gpio/gpio18/direction

Configuramos gpio17 como HIGH e 18 como LOW

echo 1 > /sys/class/gpio/gpio17/value
echo 0 > /sys/class/gpio/gpio18/value

Se tudo estiver correto o motor irá girar em modo contínuo. Caso queira inverter a rotação:

echo 0 > /sys/class/gpio/gpio17/value
echo 1 > /sys/class/gpio/gpio18/value

A utilização da ferramenta "gpio" que vem em conjunto com a biblioteca wiringPi facilita o uso e podemos utiliza-la para gerar o PWM no GPIO18.

Baixe a lib utilizando o GIT:

git clone git://git.drogon.net/wiringPi

Caso não tenha o git instalado:  

sudo apt-get install git-core

Entre no diretório e rode como root ou sudo:

./build

Esse comando irá compilar e instalar automaticamente a biblioteca e a ferramenta "gpio".

Configurar o GPIO utilizando a ferramenta é simples, 0 e 1 correspondem ao GPIO17 e 18 respectivamente.

gpio mode 0 output
gpio mode 1 output

Configuramos gpio17 como HIGH e 18 como LOW

gpio write 0 1
gpio write 0 0

Caso queira inverter a rotação:

gpio write 0 0
gpio write 0 1

O uso do PWM via hardware é uma função alternativa do gpio18 e pode ser ativada da seguinte maneira.

gpio write 0 1
gpio write 1 0
gpio mode 1 pwm
gpio pwm 1 50

Onde 50 é o valor do PWM que irá influenciar na velocidade do motor, esse valor pode ir de até 1023. A desvantagem é que será preciso inverter os pinos caso queira o PWM na rotação contrária. Existe um PWM via software suportado na wiringpi que irei fazer testes e falar sobre em algum artigo futuro.

Segue o vídeo do motor em funcionamento.




Essa ponte H é uma solução fácil tanto em hardware como software para controlar os motores de diversos projetos.

18 comentários:

  1. Show de bola esse CI, já usei ele sem o circuito impresso... apenas o CI solo funcionou beleza!

    ResponderExcluir
  2. Sortudo você, hein, conseguiu importar pro Brasil um Raspberry Pi vermelho! #MorrendoDeInveja :-P

    ResponderExcluir
    Respostas
    1. Hoje é relativamente fácil arrumar um vermelho pela aliexpress ou dx, difícil mesmo é arrumar um azul, só existem 1000 unidades http://www.raspberrypi.org/blue-pi/

      Excluir
  3. Opa. Fiz um .sh com os comandos e o motor nem mexeu.

    ResponderExcluir
    Respostas
    1. Sua ponte H é igual a do artigo? Se sim, verificou todas as conexões?

      Excluir
  4. Rodei com ponte h + arduino http://m.instructables.com/id/Motor-Driver-BTS7960-43A/2/?lang=pt) mas não com raspberry

    ResponderExcluir
  5. http://produto.mercadolivre.com.br/MLB-598580715-ponte-h-bridge-controlador-motor-43a-arduino-pic-bts7960-_JM

    Minha ponte H é essa. Daí eu pergunto: Vou ter que ligar os 5v da ponte H no raspberry pi, né ?

    ResponderExcluir
    Respostas
    1. A parte de controle sim, 5v e GND. É possível que funcione também com uma fonte de 5V externa, mas o GND sempre será necessário para referência.

      Excluir
  6. Amigo preciso muito de help. To usando essa ponte h do mercado livre (bts7960) e uma fonte de 12v e 6.7A há dois dias tentando varios comandos python e echo no rpi e nada

    ResponderExcluir
    Respostas
    1. Vou tentar te ajudar, eu andei procurando e parece que ninguém ligou ou publicou sobre essa ponte H sendo usada no rasp. Pode me dizer como você está ligando os fios da ponte no Rasp? os pinos e tudo mais.

      Excluir
    2. Este comentário foi removido pelo autor.

      Excluir
  7. Desculpe pela pergunta besta, Mas será que tem muita diferença usar essa versão aqui?
    http://www.martaduino.com.br/l298-h-bridge-motor-driver-board-2amp-para-arduino

    ResponderExcluir
    Respostas
    1. Olá, desculpe a demora. Esse modelo que você mostrou utiliza o mesmo chip base que é o L298N, o que parece ser diferente é a posição dos pinos e algumas outras opções de configuração na placa. Há também a diferença de não ter o botão de 5v, o acionamento do regulador 5v é por jumper. Portando a placa deve funcionar normalmente desde que se observando as configurações e pinos referentes aos mesmos utilizados nesse tutorial.

      Excluir
  8. Gostaria de fazê-lo com uma fonte 12v (vi algo semelhante com arduino http://blog.filipeflop.com/motores-e-servos/motor-dc-arduino-ponte-h-l298n.html) quais as adaptações que seriam necessárias?

    ResponderExcluir
    Respostas
    1. Olá Kauê, como informado no post você pode ligar sua fonte de 12v no VCC e GND da ponte H mas não ligando nada na entrada +5V. Você apertará o botão para utilizar o regulador de 5v interno. (Ou ativar os 5v via jumper se for o caso do seu modelo).

      Excluir
  9. Olá! Estou precisando controlar um motor de portao que é 220v, gostaria de saber o que eu necessitaria para que eu conseguisse controlar ele. Eu tenho uma RPi 2 Model B.

    ResponderExcluir
    Respostas
    1. Olá Igor, se o motor já estiver pronto pra ligar na energia, se for só o liga/desliga você precisaria de uma placa com relés ou montar o circuito do zero (mais trabalhoso). Ainda não temos um tutorial envolvendo relés, mas você acha facilmente na internet (em inglês). Tome cuidado em verificar a potência do motor e a que o relé/placa suporta. Abraços.

      Excluir