Motor DC com Arduino: controle de velocidade com PWM
Motor DC · Arduino
Ligar um motor diretamente ao Arduino não é apenas conectar dois fios. Com um transistor, um diodo de proteção e um sinal PWM, você controla a velocidade do motor sem sobrecarregar os pinos da placa.
Por que ligar um motor DC direto no pino do Arduino é pedir para danificar a placa?
Um motor DC normalmente exige muito mais corrente do que um pino do Arduino consegue fornecer. Além disso, por ser uma carga indutiva, ele pode gerar um pico de tensão quando é desligado. A solução é deixar o Arduino apenas enviar o sinal de controle: o transistor chaveia a corrente da fonte externa, o PWM regula a potência média entregue ao motor e o diodo protege o circuito contra os picos de tensão.
O componente
Motor DC é um dispositivo de corrente contínua que transforma energia elétrica em movimento de rotação. Neste projeto, o PWM controla a potência média entregue ao motor variando rapidamente o tempo em que ele permanece ligado e desligado. Quanto maior o ciclo de trabalho, ou duty cycle, maior tende a ser sua velocidade.
O que você aprende
Quatro conceitos que fazem o motor girar
PWM com analogWrite()
Controlar a potência média entregue ao motor por meio de pulsos digitais rápidos.
Transistor como chave
Usar um sinal de baixa corrente do Arduino para comandar a corrente exigida pelo motor.
Diodo de roda livre
Proteger o transistor contra o pico de tensão produzido pela bobina do motor durante o desligamento.
Fonte externa e GND comum
Alimentar o motor por uma fonte separada e interligar o GND dessa fonte ao GND do Arduino.
Como funciona
Do pino ao eixo girando
O Arduino controla a base do transistor, o transistor chaveia o motor e o diodo protege o circuito durante o desligamento.
O pino não fornece corrente suficiente
Um pino do Arduino suporta apenas uma corrente limitada. Como o motor normalmente exige uma corrente maior, conectá-lo diretamente pode sobrecarregar e danificar a placa.
O transistor funciona como uma chave
Um pequeno sinal aplicado à base do TIP120 permite controlar a corrente que passa entre o coletor e o emissor, acionando o motor por meio da fonte externa.
O PWM controla a potência média
A função analogWrite() gera um sinal PWM que liga e desliga rapidamente o transistor. Ao variar o duty cycle entre 0 e 100%, alteramos a potência média entregue ao motor e, consequentemente, sua velocidade.
O diodo protege contra o pico de tensão
Quando o transistor desliga, a indutância do motor tenta manter a corrente circulando e pode produzir um pico de tensão. O diodo de roda livre cria um caminho seguro para essa corrente e protege o transistor.
O GND precisa ser comum
O motor utiliza uma fonte externa, mas o terminal negativo dessa fonte deve ser conectado ao GND do Arduino. Essa referência comum permite que o sinal de controle seja interpretado corretamente.
Hardware
O que você vai precisar
- Arduino Uno (ou compatível)1 un
- Motor DC 3 a 6 V1 un
- Transistor NPN TIP1201 un
- Diodo 1N40071 un
- Resistor 1 kΩ1 un
- Suporte para 4 pilhas AA1 un
- Protoboard 400 pontos1 un
- Jumpers macho-macho6 un
Mapa de ligações
Como conectar o circuito
| Sinal / ponto | Liga em | Função |
|---|---|---|
| D9 (PWM) | Base do TIP120, por meio do resistor de 1 kΩ | Envia o sinal de controle |
| Coletor | Terminal negativo do motor | Chaveia a corrente do motor |
| Emissor | GND comum | Retorno da corrente |
| Motor (+) | Positivo da fonte externa | Alimenta o motor |
| 1N4007 | Em paralelo com o motor, com a faixa voltada para o +V | Protege contra o pico de tensão |
Código-fonte
O sketch completo
// Controle de velocidade de um motor DC com PWM // Mamute Eletrônica #define PINO_MOTOR 9 // pino PWM ligado à base do transistor void setup() { pinMode(PINO_MOTOR, OUTPUT); } void loop() { // Aumenta gradualmente o duty cycle do PWM for (int v = 0; v <= 255; v++) { analogWrite(PINO_MOTOR, v); delay(20); } // Reduz gradualmente o duty cycle até desligar o motor for (int v = 255; v >= 0; v--) { analogWrite(PINO_MOTOR, v); delay(20); } delay(500); }
Antes de testar
Checklist rápido
- Alimente o motor com uma fonte externa. Não conecte o motor diretamente ao pino de 5 V ou a um pino digital do Arduino.
- Conecte o GND da fonte ao GND do Arduino. Sem essa referência comum, o transistor pode não responder corretamente ao sinal PWM.
- Confira a polaridade do diodo. A faixa do 1N4007, que identifica o cátodo, deve ficar conectada ao lado positivo da alimentação do motor.
- Instale o resistor de 1 kΩ entre o pino D9 e a base do TIP120.
- Use um pino compatível com PWM. No Arduino Uno, os pinos 3, 5, 6, 9, 10 e 11 permitem o uso de analogWrite().
- Verifique a corrente do motor. Considere principalmente a corrente de partida e a corrente de travamento. Motores maiores podem exigir outro transistor, um MOSFET, uma fonte mais potente ou dissipação térmica.
- Não estranhe se o motor não girar nos valores mais baixos. Dependendo do motor, da fonte e da carga mecânica, pode ser necessário um duty cycle mínimo para vencer a inércia e iniciar o movimento.
Monte com a Mamute
Os componentes deste projeto
Os cards são preenchidos automaticamente pela loja a partir do SKU.
Encontre o motor, o transistor, o diodo e os demais componentes deste projeto na Mamute Eletrônica.
Ver os componentes na lojaPara montar o que você acabou de ler
Motor com redução, ponte H para inverter o sentido e fonte para não puxar do Arduino.