Arduino - Driver de Motor DC DRV8833
Neste tutorial, vamos aprender:
- O que é o driver de motor DRV8833 e para que serve cada um dos seus pinos
- Como controlar a velocidade e o sentido de um motor DC com Arduino e DRV8833
- Como controlar dois motores DC ao mesmo tempo, como as duas rodas de um pequeno carrinho robô

Se você nunca usou um motor DC, o tutorial Arduino - Motor DC explica como funcionam a velocidade e o sentido com o driver L298N, que é maior.
Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables STEM V3 Starter Kit (Arduino included) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Para a PARTE 1, um motor DC é suficiente. O segundo motor só é necessário para a PARTE 2.
Sobre o Driver de Motor DRV8833
O DRV8833 é um chip pequeno da Texas Instruments com duas pontes H dentro. Uma ponte H pode girar um motor DC com escovas nos dois sentidos, então o módulo aciona dois motores DC (ou um pequeno motor de passo bipolar, mas isso não é abordado aqui). Suas saídas são MOSFETs com uma resistência muito baixa, cerca de 360 mΩ. Por causa disso, o motor recebe quase toda a tensão da bateria e o chip fica frio. O velho L298N perde cerca de 2V dentro dele mesmo, então o DRV8833 é uma escolha melhor para robôs que funcionam com baterias de 3V a 9V.

| DRV8833 | |
|---|---|
| Tensão de Alimentação do Motor (VCC) | 2.7V a 10.8V |
| Tensão de Entrada Lógica | 3.3V ou 5V (sem alimentação lógica separada) |
| Corrente de Saída | 1.5A RMS por canal, 2A de pico |
| Número de Canais | 2 (motor A e motor B) |
| Frequência PWM | até 50 kHz |
| Proteção | subtensão, sobrecorrente, sobretemperatura |
O módulo DRV8833 comum tem estes pinos:
- Pino VCC: precisa ser conectado ao fio positivo da fonte de alimentação do motor (2.7V a 10.8V)
- Pino GND: precisa ser conectado ao GND da fonte de alimentação e ao GND do Arduino
- Pinos IN1, IN2: controlam o motor A. Eles precisam ser conectados a dois pinos PWM do Arduino
- Pinos IN3, IN4: controlam o motor B. Eles precisam ser conectados a outros dois pinos PWM do Arduino
- Pinos OUT1, OUT2: conectam-se aos dois fios do motor A
- Pinos OUT3, OUT4: conectam-se aos dois fios do motor B
- Pino EEP: o pino de repouso (nSLEEP). Ele precisa estar em HIGH para ligar o driver. Nós o conectamos ao 5V do Arduino. Se ele estiver em LOW, o chip dorme e os motores não se movem.
- Pino ULT: o pino de falha (nFAULT). Ele vai para LOW quando há um problema, como corrente ou calor demais. Podemos deixá-lo sem conexão.
Os rótulos não são iguais em todos os módulos. Algumas placas imprimem AIN1, AIN2, BIN1, BIN2, AOUT1, AOUT2... para as entradas e saídas, e SLP e FLT para os pinos de repouso e de falha. As funções são as mesmas.
Ao contrário do L298N, o DRV8833 não precisa de uma alimentação lógica de 5V vinda do Arduino. O chip gera sua própria tensão lógica a partir do VCC. O Arduino só precisa compartilhar o mesmo GND.
Como Controlar um Motor com Dois Pinos
Não existe pino de velocidade ENA ou ENB no DRV8833. Cada motor é controlado por apenas dois pinos de entrada. A tabela abaixo mostra o que acontece com o motor A (o motor B funciona do mesmo jeito com IN3 e IN4):
| IN1 | IN2 | Motor A |
|---|---|---|
| LOW | LOW | Roda livre (o motor gira livremente e desacelera sozinho) |
| HIGH | LOW | Para frente |
| LOW | HIGH | Reverso |
| HIGH | HIGH | Freio (o motor para rapidamente) |
Para definir a velocidade, enviamos um sinal PWM para uma entrada e mantemos a outra entrada em LOW:
- Para frente com velocidade: PWM em IN1, IN2 em LOW
- Reverso com velocidade: IN1 em LOW, PWM em IN2
É por isso que os dois pinos de um motor precisam ser pinos PWM. No Arduino Uno, os pinos PWM são 3, 5, 6, 9, 10 e 11.
※ Nota:
- Nunca alimente os motores pelo pino 5V do Arduino. Os motores precisam de muito mais corrente do que o Arduino pode fornecer. Use uma fonte de alimentação externa.
- O GND da fonte de alimentação, do DRV8833 e do Arduino deve ser conectado junto.
- Se um motor girar no sentido errado, basta trocar os dois fios dele nos pinos OUT.
PARTE 1: Arduino Controla Um Motor DC com DRV8833
Diagrama de Ligação

This image is created using Fritzing. Click to enlarge image
Tabela de ligação do Módulo DRV8833 e do Arduino Uno
| Módulo DRV8833 | Arduino Uno / Outro |
|---|---|
| IN1 | → Pino 10 |
| IN2 | → Pino 9 |
| EEP | → 5V |
| GND | → GND (e GND da fonte de alimentação de 5V) |
| VCC | → positivo (+) da fonte de alimentação de 5V pelo conector de alimentação DC |
| OUT1, OUT2 | → os dois fios do motor DC |
Como Programar o DRV8833
- Defina os pinos do Arduino conectados a IN1 e IN2:
- Configure os pinos como saídas:
- Faça o motor girar para frente com uma velocidade de 0 a 255:
- Faça o motor girar em reverso:
- Deixe o motor parar em roda livre:
- Freie o motor:
Código Arduino - DRV8833 com Um Motor DC
O código abaixo faz o seguinte:
- Acelera o motor lentamente para frente
- Funciona em velocidade máxima por 2 segundos
- Para em roda livre
- Gira em reverso em velocidade média
- Freia até parar rapidamente
- Repete tudo de novo e de novo
Passos Rápidos
- Faça a ligação como mostrado no diagrama acima. Conecte a fonte de alimentação de 5V por último.
- Conecte o Arduino ao PC por cabo USB
- Abra a Arduino IDE, selecione a placa e a porta corretas
- Copie o código acima e abra-o com a Arduino IDE
- Clique no botão Upload na Arduino IDE para fazer o upload do código para o Arduino
- Observe o motor: ele acelera, funciona, para em roda livre, volta e freia
- Abra o Serial Monitor para ver o que o motor está fazendo a cada momento
Veja a diferença entre as duas paradas. Depois de "Coast", o motor continua girando por um curto tempo. Depois de "Brake", ele para quase de imediato.
PARTE 2: Arduino Controla Dois Motores DC com DRV8833
Com dois motores, podemos construir a base de um pequeno carrinho robô: o motor A é a roda esquerda e o motor B é a roda direita.
Diagrama de Ligação

This image is created using Fritzing. Click to enlarge image
Tabela de ligação do Módulo DRV8833 e do Arduino Uno
| Módulo DRV8833 | Arduino Uno / Outro |
|---|---|
| IN1 | → Pino 10 |
| IN2 | → Pino 9 |
| IN3 | → Pino 6 |
| IN4 | → Pino 5 |
| EEP | → 5V |
| GND | → GND (e GND da fonte de alimentação de 5V) |
| VCC | → positivo (+) da fonte de alimentação de 5V pelo conector de alimentação DC |
| OUT1, OUT2 | → motor A (esquerdo) |
| OUT3, OUT4 | → motor B (direito) |
Como Programar para Dois Motores DC
Para manter o código curto, usamos uma função auxiliar para cada motor. Ela recebe uma velocidade com sinal:
- Um valor positivo (1 a 255) faz o motor girar para frente
- Um valor negativo (-1 a -255) faz o motor girar em reverso
- 0 deixa o motor em roda livre
Para virar o carrinho, as duas rodas giram em sentidos opostos:
- Virar à esquerda: motor A em reverso, motor B para frente
- Virar à direita: motor A para frente, motor B em reverso
Código Arduino - DRV8833 com Dois Motores DC
O código abaixo move o carrinho para frente, para trás, vira à esquerda, vira à direita e depois para.
Passos Rápidos
- Faça a ligação para dois motores como mostrado no diagrama acima
- Conecte o Arduino ao PC por cabo USB
- Copie o código acima e abra-o com a Arduino IDE
- Clique no botão Upload na Arduino IDE para fazer o upload do código para o Arduino
- Levante as rodas da mesa (ou coloque o carrinho no chão com espaço suficiente)
- Veja o resultado no Serial Monitor
※ Nota:
Se o carrinho virar à direita quando deveria virar à esquerda, troque os dois fios de um motor nos pinos OUT dele, ou troque o motor A e o motor B no código.