Tutorial: acionamento de motor DC com transistor TIP122

Com o intuito de criar um carrinho simples controlado por Arduino, pesquisei por algum tempo qual seria o melhor transistor para usar no acionamento de um motor DC (desses bem genéricos que vem em carrinhos baratos movidos a pilha) abastecido por 2 pilhas de 1,2 Volts.

Depois de muitas tentativas, inclusive com o BD139 recomendado em outro tutorial aqui do lab, decidi pelo TIP 122.

O principal motivo da minha decisão foi o fato desse transistor contar com um diodo interno que evita danos por eventuais correntes reversas geradas pelo motor.

A montagem é essa:

Note que o pino do Arduino deve ser conectado na perna à esquerda do transistor (chamada base) e a corrente vai fluir entre as duas outras pernas, de modo que a perna da direita deve estar ligada ao ground e a central ao positivo (nesse caso, passando pelo motor).

Detalhe importante: o ground do Arduino deve ser ligado na trilha do ground (vinda das pilhas). Isso é necessário paa fechar o circuito  pino 13 - transistor - Arduino.

O código abaixo é bastante simples e serve apenas para testar a montagem. Ele deixa o motor rodando por 2 segundos e parado por outros 2.

int motorPin = 3;

void setup()
{
pinMode(motorPin, OUTPUT);
pinMode(13, OUTPUT); //só para o led embutido piscar junto
}

void loop()
{
digitalWrite(13,HIGH); //led
digitalWrite(motorPin, HIGH);
delay(2000);
digitalWrite(13,LOW); //led
digitalWrite(motorPin, LOW);
delay(2000);
}

Para fazer controle de velocidade, basta usar analogicWrite no lugar de digitalWrite passando valores entre 0 (motor parado) e 255 (velocidade máxima), ou seja, usar PWM.

Exibições: 31538

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Tomás Vieira em 18 setembro 2017 às 1:04

fiz exatamente esse circuito porem obtive resultados não muito animadores, para a potencia maxima 255 o motor funciona normalmente mas conforme vou diminuindo o valor a tensão na saida realmente baixa porem com metade da tensão do motor ele vibra fazendo um barulho tip "ziiiiiiiiiiiiiiiii" e começa sair fumaça quando mais baixo o valor pior fica (mesmo medido  da saida menos da metade da tensão maxima do motor), testei varios motores e tambem  testei colocando diodo pra proteger  e diversos resistores na base sem sucesso. Os motores são simples de escova, será que não aceitam altas frequencias de pulsos? como posso resolver?

Comentário de Maurício garcia de souza em 30 julho 2014 às 15:15

Bom dia pessoal, eu estou tentando fazer um robô usando um motor de vidro elétrico, sua corrente vai de 1,6 a 6A. Eu gostaria de saber qual a forma melhor de fazer um controlador para ele que suporte esta corrente? Desde já eu agradeço a  ajuda.

Comentário de Claudio Henrique Campos em 7 maio 2014 às 17:04
Foi esse shield mesmo que falei. Da Adafruit, tenho aqui e nunca deu problema.
Comentário de Edson E.S. (softelli) em 7 maio 2014 às 16:58
Welington,

Ele utiliza um L293d, que controla 4 motores e tem diodos na saída.
Parece que resolve seu problema sem complicações e não demora 1 mês para chegar (da China).
http://www.ti.com/lit/ds/symlink/l293d.pdf

Att.
Comentário de Welington em 7 maio 2014 às 16:26

Amigos,

Pesquisando aqui, encontrei esse opção para o meu projeto:

LINK REMOVIDO POR DESCUMPRIR OS TERMOS DE USO

Como os meus motores possui corrente máxima de 250 mA, eu achei uma boa opção para o meu projeto.

O que vocês acham?

Comentário de Claudio Henrique Campos em 6 maio 2014 às 18:50
Se vc está usando o UNO, para controlar 4 dc's melhor usar então um shield pronto, ex Adafruit, vai economizar tempo e dor de cabeça.
Comentário de Edson E.S. (softelli) em 6 maio 2014 às 18:01
Welington,
a) Se vc necessita que os 4 motores funcionem ao mesmo tempo, com controle de velocidade para ambos os lados, então são 4 pontes H com transistor de potência (MOSFET, etc) dimensionado para os motores de corrente contínua... ou utilizar 2 x L298N (cada um pode controlar 2 motores). Verifique a compatibilidade com a corrente do motor com carga.
b) Se quer controle de velocidade para ambos os lados, mas for o caso de utilizar 2 motores enquanto outros 2 ficam parados, duas pontes H resolvem... (ou 1x L298N), mas terá que fazer o chaveamento dos cabos dos motores por relês. Esses 2 relês (acionados por transistores baixa potência) poderiam "escolher" qual motor rodar. É uma gambiarra pra economizar... veja bem se o projeto aceita tal coisa.
c) Se não quiser controle de velocidade (apenas alternar os lados de giro), vc pode fazer o chaveamento por relês. Poderia rodar os 4 motores ao mesmo tempo, utilizando 4 relês acionados por transistores de baixa potência (dimensionados para as bobinas dos relês).
Acho que são essas as opções.
Comentário de Welington em 6 maio 2014 às 17:09

Edson,

No meu caso estou querendo controlar 4 motores DC, nesse caso, terei de projetar 4 pontes H?

Obrigado pela ajuda.

Comentário de Edson E.S. (softelli) em 6 maio 2014 às 16:23

Welington,
Se quiser girar para os dois lados, terá que fazer uma ponte H com transistores de potência.
Se não quiser simplicidade, L298N ou adquira um shield que já vem com diodos de proteção, como esse aqui: LINK REMOVIDO POR DESCUMPRIR OS TERMOS DE USO

Comentário de Claudio Henrique Campos em 6 maio 2014 às 16:16
Somente para um lado nesse caso.

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2018   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço