ESP32 - Driver de Motor DC DRV8833
Este tutorial ensina você a usar o ESP32 para girar motores DC por meio da pequena placa driver de motor DRV8833. Começamos com um único motor (acelerar, desacelerar, mudar de direção, roda livre e freio), e depois ligamos um segundo motor para que o ESP32 possa controlar as duas rodas de um pequeno carrinho robô.

Se você já tem a placa L298N, que é maior, o tutorial ESP32 - Motor DC cobre essa placa. O DRV8833 é a opção menor e que esquenta menos, e se encaixa muito bem em projetos alimentados por bateria.
Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables ESP32 Starter Kit (ESP32 included) | |
| 1 | × | DIYables ESP32 S3 Starter Kit (ESP32 S3 included) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
A primeira parte precisa de apenas um motor DC. O segundo motor é para a parte com dois motores.
Sobre o Driver de Motor DRV8833
O DRV8833 é um chip de ponte H dupla fabricado pela Texas Instruments. Um chip tem dois canais, então um módulo pode acionar dois motores DC com escovas nos dois sentidos (ou um pequeno motor de passo bipolar, que não é abordado aqui). As saídas são MOSFETs com uma resistência baixa de cerca de 360 mΩ, então muito pouca tensão é perdida dentro do driver. Com o L298N, boa parte de uma bateria de 6V é desperdiçada como calor. Com o DRV8833, quase tudo chega ao motor.
| DRV8833 | |
|---|---|
| A tensão de alimentação do motor (VCC/VM) | 2.7V a 10.8V |
| A corrente de saída por canal | cerca de 1.5A RMS, 2A de pico (com boa refrigeração) |
| A lógica de controle | sinais de 3.3V e 5V funcionam |
| A frequência PWM | até 50kHz |
| A proteção | bloqueio por subtensão, sobrecorrente, desligamento térmico |
O chip gera sua própria tensão lógica interna a partir da alimentação do motor, então o módulo não tem um pino separado de alimentação lógica. É por isso que os pinos GPIO de 3.3V do ESP32 podem controlá-lo diretamente. Se você precisa de mais corrente para um motor grande, os dois canais podem ser ligados em paralelo para cerca de 3A, mas não vamos fazer isso aqui.
Pinagem do DRV8833

A placa breakout DRV8833 vermelha/azul comum tem estes pinos. Os nomes variam entre os fabricantes: algumas placas imprimem AIN1/AIN2/BIN1/BIN2, AOUT1/AOUT2/BOUT1/BOUT2, SLP e FLT no lugar.
- Pinos IN1, IN2: conecte estes pinos a dois pinos GPIO do ESP32 com suporte a PWM. Eles controlam o motor A.
- Pinos IN3, IN4: conecte estes pinos a outros dois pinos GPIO do ESP32 com suporte a PWM. Eles controlam o motor B.
- Pinos OUT1, OUT2: conecte estes pinos aos dois fios do motor A.
- Pinos OUT3, OUT4: conecte estes pinos aos dois fios do motor B.
- Pino VCC: conecte este pino ao positivo da fonte de alimentação do motor (2.7V a 10.8V).
- Pino GND: conecte este pino ao negativo da fonte de alimentação do motor E a um pino GND do ESP32.
- Pino EEP (nSLEEP): conecte este pino ao pino 3.3V do ESP32 (ou a um GPIO colocado em HIGH). Quando ele está em LOW, o chip dorme e os motores não se movem.
- Pino ULT (nFAULT): uma saída open-drain que vai para LOW quando o chip detecta uma falha. Ele é opcional, você pode deixá-lo desconectado.
Como o DRV8833 Controla a Velocidade e a Direção
Ao contrário do L298N, o DRV8833 não tem pino de velocidade ENA/ENB. Cada canal é controlado apenas pelos seus dois pinos de entrada. A tabela abaixo é para 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 até parar) |
| HIGH | LOW | Para frente |
| LOW | HIGH | Reverso |
| HIGH | HIGH | Freio (o motor para rapidamente) |
Para definir a velocidade, o ESP32 envia um sinal PWM para uma entrada e mantém a outra em LOW:
- Para ir para frente em uma velocidade escolhida: PWM em IN1, IN2 em LOW
- Para ir em reverso em uma velocidade escolhida: IN1 em LOW, PWM em IN2
Isso significa que os dois pinos de entrada de cada canal precisam suportar PWM. No ESP32 isso é fácil, porque quase todo GPIO de saída consegue gerar PWM. O código deste tutorial usa analogWrite() com um valor de 0 (parado) a 255 (velocidade máxima), a mesma função que os outros tutoriais de ESP32 deste site usam.
Como Controlar Um Motor DC usando o DRV8833
Diagrama de Ligação
O motor funciona com um adaptador externo de 5V, não com o ESP32. Nunca tire a alimentação do motor do pino 5V ou 3.3V da placa ESP32. A única ligação compartilhada entre os dois lados de alimentação é o fio de terra.
- Como conectar o ESP32 e o módulo DRV8833 com fios jumper

This image is created using Fritzing. Click to enlarge image
Se você não sabe como alimentar o ESP32 e outros componentes, veja as instruções no tutorial a seguir: Como alimentar o ESP32.
- Como conectar o ESP32 e o módulo DRV8833 usando a placa breakout com bornes de parafuso

This image is created using Fritzing. Click to enlarge image
| Módulo DRV8833 | ESP32 / Outro |
|---|---|
| IN1 | → GPIO27 |
| IN2 | → GPIO26 |
| EEP | → 3.3V |
| GND | → GND do ESP32 e negativo (-) do adaptador de 5V |
| VCC | → positivo (+) do adaptador de 5V |
| OUT1, OUT2 | → os dois fios do motor DC |
Como Programar
- Defina os dois pinos de entrada como saídas:
- Gire para frente em uma velocidade de 0 a 255:
- Gire em reverso em uma velocidade de 0 a 255:
- Deixe o motor parar em roda livre:
- Freie o motor com força:
Código ESP32 - Um Motor DC
O código abaixo repete este ciclo: acelera o motor para frente, mantém a velocidade máxima, deixa em roda livre, faz o motor girar em reverso a cerca de 70% da velocidade e depois freia. Cada etapa é impressa no Serial Monitor.
Passos Rápidos
- Se esta é a primeira vez que você usa o ESP32, veja como configurar o ambiente para ESP32 no Arduino IDE.
- Faça a ligação como na imagem acima. Deixe o adaptador de 5V desconectado por enquanto.
- Conecte a placa ESP32 ao seu PC por um cabo USB Type-C.
- Abra o Arduino IDE no seu PC.
- Selecione a placa ESP32 correta (por exemplo, ESP32 Dev Module) e a porta COM.
- Copie o código acima e abra com o Arduino IDE. Nenhuma biblioteca extra é necessária.
- Compile e faça o upload do código para a placa ESP32 clicando no botão Upload no Arduino IDE.
- Conecte o adaptador de 5V para alimentar o motor.
- Abra o Serial Monitor e observe o motor ao mesmo tempo.
※ Nota:
Se o motor girar no sentido "errado" quando o Serial Monitor mostrar Forward, é só trocar os dois fios do motor em OUT1 e OUT2. Se o motor não se mover de jeito nenhum, verifique se o pino EEP está conectado ao 3.3V.
Como Controlar Dois Motores DC usando o DRV8833
Diagrama de Ligação
Agora adicione o segundo motor em OUT3/OUT4 e conecte IN3/IN4 a mais dois pinos do ESP32. Pense no motor A como a roda esquerda e no motor B como a roda direita de um pequeno carro.
- Como conectar o ESP32 e o módulo DRV8833 com fios jumper

This image is created using Fritzing. Click to enlarge image
- Como conectar o ESP32 e o módulo DRV8833 usando a placa breakout com bornes de parafuso

This image is created using Fritzing. Click to enlarge image
| Módulo DRV8833 | ESP32 / Outro |
|---|---|
| IN1 | → GPIO27 |
| IN2 | → GPIO26 |
| IN3 | → GPIO33 |
| IN4 | → GPIO32 |
| EEP | → 3.3V |
| GND | → GND do ESP32 e negativo (-) do adaptador de 5V |
| VCC | → positivo (+) do adaptador de 5V |
| OUT1, OUT2 | → motor A (esquerda) |
| OUT3, OUT4 | → motor B (direita) |
Código ESP32 - Dois Motores DC
Para manter o loop() curto, o código tem duas funções auxiliares, motorA(speed) e motorB(speed). A velocidade é um número com sinal de -255 a 255: um valor positivo gira para frente, um valor negativo gira em reverso e 0 deixa o motor em roda livre. Com essas duas funções auxiliares, cada movimento do carro precisa de apenas duas linhas.
Passos Rápidos
- Faça a ligação para dois motores como na imagem acima.
- Copie o código acima e abra com o Arduino IDE.
- Clique no botão Upload no Arduino IDE para fazer o upload do código para o ESP32.
- Alimente os motores com o adaptador de 5V. Se você testar em cima de uma mesa, levante as rodas da mesa primeiro.
- Veja o resultado no Serial Monitor e nos motores:
Ao virar à esquerda, o motor A (esquerda) gira para trás e o motor B (direita) gira para frente, então o carro gira no mesmo lugar. Virar à direita é o oposto. Se uma roda for para o lado errado, troque apenas os dois fios desse motor.
※ Nota:
Este tutorial controla a velocidade de forma relativa (um valor PWM de 0 a 255). Para controlar a velocidade exata em rotações por minuto, você precisa de um motor com encoder e um laço de controle PID.