DRV8833 vs L298N com ESP32 e PWM por Hardware: Qual é Melhor para Controlar Motor N20?


Comparação entre DRV8833 e L298N com ESP32 usando PWM por hardware para controlar um motor N20 6V de alto torque.
Teste prático com ESP32, DRV8833, L298N e motor N20 6V analisando torque, eficiência e aquecimento.

PWM no ESP32: Controle de Motores DC com LEDC + DRV8833 vs L298N

Se você trabalha com robótica ou automação, controlar a velocidade de um motor DC é essencial. E o coração disso tudo é o PWM (Pulse Width Modulation).

Neste artigo você vai aprender de forma prática e técnica:

  • Como funciona o PWM no ESP32 (LEDC)
  • O que acontece “por baixo dos panos”
  • Como controlar um motor DC na prática
  • Diferença entre DRV8833 e L298N
  • Eficiência, perdas e desempenho real
  • Como o motor N20 com redutor influencia o controle

O que é PWM (Pulse Width Modulation)?

PWM é uma técnica para simular uma tensão variável usando um sinal digital.

Ao invés de enviar 0V ou 3.3V fixo, o ESP32 liga e desliga o sinal muito rapidamente.

Exemplo prático:

  • 50% ligado → motor recebe “meia potência”
  • 80% ligado → maior velocidade
  • 20% ligado → menor velocidade

👉 Ou seja: você controla a potência média, não a tensão diretamente.


PWM REAL vs Controle Digital Simples

Aqui está um erro comum:

Controle digital simples:

  • HIGH = 100%
  • LOW = 0%

PWM real:

  • Alterna HIGH/LOW rapidamente
  • Ajusta o tempo ligado (duty cycle)

👉 Resultado:

  • Controle fino de velocidade
  • Menos trancos
  • Melhor eficiência

PWM no ESP32 (LEDC)

O ESP32 possui um periférico dedicado chamado LEDC (LED Controller) — apesar do nome, é perfeito para motores.

✅ Vantagens:

  • PWM por hardware (não usa CPU)
  • Alta frequência (kHz ou mais)
  • Alta resolução (até 16 bits)

Conceitos básicos

  • Frequência → quantas vezes o ciclo se repete por segundo
  • Duty Cycle → porcentagem do tempo ligado

Funcionamento (nível registrador – simplificado)

Internamente o LEDC funciona assim:

  • Um contador sobe de 0 até um valor máximo
  • Esse valor define a resolução (ex: 8 bits → 0 a 255)
  • O duty define até onde o sinal fica HIGH

Exemplo:

  • Timer: 0 → 255
  • Duty: 128

👉 Resultado:

  • HIGH de 0 até 128
  • LOW de 129 até 255

✔ Isso gera exatamente 50% de PWM


O que é um Driver de Motor?

O ESP32 não pode ligar um motor diretamente.

Por quê?

  • Motor consome mais corrente
  • Gera ruído elétrico
  • Pode danificar o microcontrolador

👉 Entra o driver de motor:

  • Atua como intermediário de potência
  • Permite inverter direção
  • Protege o ESP32

DRV8833 vs L298N (Comparação Real)

O que é uma Ponte H?

Uma ponte H permite controlar:

  • Sentido do motor (frente/reverso)
  • Velocidade (via PWM)
  • Frenagem e parada

Ambos os drivers (DRV8833 e L298N) fazem isso, mas com tecnologias diferentes.

🔷 DRV8833 (moderno)

  • Tecnologia MOSFET
  • Baixa perda de energia
  • Compacto
  • Funciona com 3.3V
  • Ideal para ESP32

👉 Eficiência alta (~90%)


🔶 L298N (clássico/antigo)

  • Transistores bipolares
  • Queda de tensão (~2V)
  • Esquenta bastante
  • Menor eficiência

👉 Eficiência baixa (~60% ou menos)


Eficiência, perdas e comportamento

L298N:

  • Perde energia em forma de calor
  • Motor recebe menos tensão
  • Menor torque

DRV8833:

  • Mais energia vai para o motor
  • Melhor resposta de velocidade
  • Menos aquecimento

👉 Em projetos modernos: DRV8833 é a melhor escolha

Comparação técnica direta

Característica               DRV8833L298N
Tecnologia                     MOSFET                BJT
Tensão motor                     2.7V – 10.8V                até 46V
Corrente contínua                     1.5A por canal               2A por canal
Eficiência                     ~95%               ~70%
Queda de tensão                    ~0.1V               até 2V
Aquecimento                    Baixo                Alto
Compatível 3.3V                    Sim                Não (precisa 5V)
Tamanho                    Muito compacto                Grande
Proteções internas                    Sim                Não
Sleep mode                    Sim                Não

O DRV8833 é mais eficiente e moderno, enquanto o L298N é mais robusto para altas tensões.


Eficiência energética (diferença na prática)

Imagine um motor de 6V:

  • L298N: perde até 2V → motor recebe ~4V
  • DRV8833: perde quase nada → motor recebe quase 6V

👉 Resultado:

  • Mais torque
  • Mais velocidade
  • Menor consumo de bateria 

Isso faz o DRV8833 ser ideal para robôs pequenos e projetos portáteis 


Use DRV8833 quando:

  • Projeto com bateria
  • ESP32 / ESP8266 (3.3V)
  • Robôs pequenos (linha, carrinho, seguidor)
  • Eficiência é importante

Use L298N quando:

  • Motores acima de 12V
  • Alta corrente
  • Projeto educacional básico
  • Não se importa com consumo

Motor usado no exemplo

Mini Motor N20 6V 50RPM (Redução 500:1)

Características:

  • Alto torque
  • Baixa rotação
  • Ideal para robótica

Entendendo o N20 com Redutor (500:1)

Esse motor possui uma caixa de engrenagens interna, que altera completamente seu comportamento.

Como funciona a redução

A relação 500:1 significa:

  • 500 voltas do motor interno
  • 1 volta no eixo de saída

👉 Resultado direto:

  • Velocidade ↓ diminui
  • Torque ↑ aumenta

Velocidade final

Se o motor interno gira ~25.000 RPM:

2500050050 RPM\frac{25000}{500} \approx 50 \text{ RPM}

👉 Um motor lento, porém muito controlável


💪 Ganho de torque

TorquesaidaTorquemotor×500Torque_{saida} \approx Torque_{motor} \times 500

Na prática:

  • Existem perdas mecânicas
  • Mas o ganho de força é alto

👉 Ideal para mover carga e ter precisão

👉 Você literalmente troca velocidade por força


🔧 Quando usar um N20 500:1?

Esse tipo de motor é ideal para:

  • Robôs que precisam de força (ex: subir rampas)
  • Projetos com controle fino de movimento
  • Carrinhos com carga
  • Braços robóticos compactos 
  • O redutor 500:1 transforma um motor rápido e fraco em um sistema lento, forte e preciso.
  • Essa característica torna o N20 uma excelente escolha quando o projeto exige controle e torque, e não velocidade.

Pontos de atenção

  • Reduções altas = mais torque, menos velocidade
  • Pode ficar lento demais para aplicações rápidas
  • Maior desgaste mecânico ao longo do tempo
  • Consome mais corrente sob carga 

⚡ Comportamento com PWM

Motores com alta redução têm uma característica importante:

  • 10–30% duty → pode não girar
  • 40–70% → controle estável
  • 80–100% → força máxima

👉 Isso acontece porque precisa vencer a inércia + engrenagens


Controle de Motor DC com PWM (na prática)


Diagrama de ligação do ESP32 com DRV8833 e motor DC N20 6V usando PWM por hardware.
Esquema de ligação entre ESP32, DRV8833 e motor N20 utilizando PWM por hardware (LEDC).


Código exemplo (ESP32 + LEDC)



/*
  ============================================================
  Autor: RodRobot
  Projeto: Controle de Motor via Web (ESP32 Access Point)

  ✔ Compatível com ESP32 Core 3.x (API NOVA PWM)
  ✔ ESP cria sua própria rede Wi-Fi (Access Point)
  ✔ Interface estilo app (slider + direção)
  ✔ Controle em tempo real

  Rede criada:
  Nome: ESP32_MOTOR
  Senha: 12345678

  Hardware:
  - ESP32
  - DRV8833 ou L298N
  - Motor DC

  Pinos:
  IN1 -> GPIO18
  IN2 -> GPIO19
  PWM -> GPIO5
  ============================================================
*/

#include <WiFi.h>
#include <WebServer.h>

// ===== ACCESS POINT =====
const char* ssid = "ESP32_MOTOR";      // Nome da rede
const char* password = "12345678";     // Senha (mínimo 8 caracteres)

WebServer server(80);

// ===== MOTOR =====
const int IN1 = 18;                  // Direção
const int IN2 = 19;                  // Direção
const int PWM_PIN = 5;               // PWM

// ===== PWM (API NOVA) =====
const int freq = 1000;               // Frequência ideal
const int resolucao = 8;             // 0–255

int velocidade = 0;

// ===== HTML =====
String pagina = R"rawliteral(
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body {
  font-family: Arial;
  background: #020617;
  color: white;
  text-align: center;
}

.container {
  margin-top: 40px;
}

h1 {
  font-size: 24px;
}

.slider {
  width: 80%;
}

.barra {
  width: 80%;
  height: 20px;
  background: #1e293b;
  border-radius: 10px;
  margin: 20px auto;
  overflow: hidden;
}

.progresso {
  height: 100%;
  width: 0%;
  background: linear-gradient(90deg, #22c55e, #4ade80);
  transition: width 0.2s;
  box-shadow: 0 0 10px #22c55e;
}

button {
  padding: 15px 25px;
  margin: 10px;
  font-size: 16px;
  border: none;
  border-radius: 12px;
  cursor: pointer;
}

.frente { background: #22c55e; }
.re { background: #ef4444; }

.valor {
  font-size: 22px;
  margin-top: 10px;
}
</style>
</head>

<body>

<div class="container">

<h1>Controle de Motor ESP32</h1>

<button class="frente" onclick="frente()">FRENTE</button>
<button class="re" onclick="re()">RE</button>

<br><br>

<input type="range" min="0" max="255" value="0" class="slider" id="slider">

<div class="valor"><span id="percent">0</span>%</div>

<div class="barra">
  <div class="progresso" id="barra"></div>
</div>

</div>

<script>

let slider = document.getElementById("slider");
let percent = document.getElementById("percent");
let barra = document.getElementById("barra");

slider.oninput = function() {

  let valor = this.value;

  let p = Math.round((valor / 255) * 100);
  percent.innerHTML = p;
  barra.style.width = p + "%";

  fetch("/pwm?valor=" + valor);
}

function frente() {
  fetch("/frente");
}

function re() {
  fetch("/re");
}

</script>

</body>
</html>
)rawliteral";

// ===== ROTAS =====

void handleRoot() {
  server.send(200, "text/html", pagina);   // Envia página
}

void frente() {
  digitalWrite(IN1, HIGH);                // Motor frente
  digitalWrite(IN2, LOW);
  server.send(200, "text/plain", "OK");
}

void re() {
  digitalWrite(IN1, LOW);                 // Motor ré
  digitalWrite(IN2, HIGH);
  server.send(200, "text/plain", "OK");
}

void setPWM() {
  if (server.hasArg("valor")) {

    velocidade = server.arg("valor").toInt();

    if (velocidade < 0) velocidade = 0;
    if (velocidade > 255) velocidade = 255;

    ledcWrite(PWM_PIN, velocidade);      // PWM (API nova)
  }

  server.send(200, "text/plain", "PWM OK");
}

// ===== SETUP =====
void setup() {

  Serial.begin(115200);

  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);

  // PWM NOVO
  ledcAttach(PWM_PIN, freq, resolucao);

  // INICIA ACCESS POINT
  WiFi.softAP(ssid, password);

  Serial.println("Access Point iniciado!");
  Serial.print("IP: ");
  Serial.println(WiFi.softAPIP());

  // ROTAS
  server.on("/", handleRoot);
  server.on("/frente", frente);
  server.on("/re", re);
  server.on("/pwm", setPWM);

  server.begin();
}

// ===== LOOP =====
void loop() {
  server.handleClient();
}



Frequência ideal para motores DC

  • 500 Hz a 5 kHz → ideal
  • Muito baixa → vibração
  • Muito alta → perdas

👉 Ponto recomendado: ~1 kHz


PWM e comportamento do motor

  • Duty baixo → pode não girar
  • Duty médio → controle suave
  • Duty alto → máxima velocidade

Conclusão

Para um projeto eficiente e profissional:

  • Use PWM por hardware (LEDC do ESP32)
  • Evite controle digital simples
  • Prefira DRV8833 ao invés de L298N
  • Ajuste a frequência corretamente
  • Use motores com redutor (como o N20)

👉 Resultado final:

  • Mais eficiência
  • Menos calor
  • Melhor resposta
  • Controle preciso de movimento

🔧 Acompanhe o RodRobot

Projetos maker com ESP32, Arduino, eletrônica e programação.

RodRobot – Projetos maker, eletrônica e programação na prática.

Comentários

Postagens mais visitadas deste blog

ESP32 Botão Touch: Como Usar o Sensor Touch (Tutorial com LED e Relé)

ESP32 para Iniciantes: Projeto LED Piscando Passo a Passo