Se você já conferiu nosso artigo Tudo Sobre DRIVER A4988 e Motor de Passo, agora é hora de dar um passo adiante com um controlador ainda mais robusto, preciso e versátil: o DRV8825. Neste post você vai entender tudo sobre esse driver, como funciona, suas vantagens, diferenças frente ao A4988 e como usá-lo com Arduino em seus projetos!
O DRV8825 é um driver de motor de passo bipolar com microstepping (Micro passos) integrado, desenvolvido para controlar motores de passo de forma precisa e eficiente. Ele é ideal para aplicações que exigem alta resolução, torque elevado e operação estável — como impressoras 3D, máquinas CNC, braços robóticos e dispositivos automatizados em geral.
Esse módulo é, na prática, um circuito integrado que recebe comandos simples de direção e passos (STEP/DIR) e controla a corrente dos enrolamentos do motor, realizando a movimentação de forma suave.
O DRV8825 usa H-bridges duplas e um indexador de microstepping interno para controlar o motor passo por passo.
Basta aplicar pulsos de STEP para movimentar o motor, e o pino DIR controla a direção. Cada pulso no STEP faz o motor avançar um passo (ou fração dele, dependendo do microstepping configurado).
O ajuste de limite de corrente é feito com um pequeno trimpot na placa, garantindo que o driver entregue exatamente a corrente que seu motor suporta — protegendo tanto o motor quanto o driver.
O DRV8825 aparece em muitos projetos que precisam de precisão e força, como:
O módulo DRV8825 possui 16 pinos no total, e cada pino tem uma função específica. Na figura abaixo, é possível visualizar todos os pinos e suas funções.

O driver DRV8825 oferece seis opções diferentes de resolução de passos: passos inteiros, meio passo, quarto de passo, oitavo de passo, décimo sexto de passo e trinta e dois avos de passo. Cada modo divide os passos de forma diferente para proporcionar vários níveis de precisão.
O DRV8825 possui três pinos dedicados que permitem escolher a resolução de micropasso desejada os pinos:M0, M1 e M2 mostrados na imagem a baixo:

Ao definir diferentes níveis lógicos (ALTO ou BAIXO) nesses pinos, você pode selecionar qualquer um dos seis modos de passo disponíveis:
| M0 | M1 | M2 | Resolução de micropassos |
| Baixo | Baixo | Baixo | Passo completo |
| Alto | Baixo | Baixo | Meio passo |
| Baixo | Alto | Baixo | 1/4 de passo |
| Alto | Alto | Baixo | 1/8 de passo |
| Baixo | Baixo | Alto | 1/16 de passo |
| Alto | Baixo | Alto | 1/32 de passo |
| Baixo | Alto | Alto | 1/32 de passo |
| Alto | Alto | Alto | 1/32 de passo |
É importante notar que esses pinos possuem resistores internos de pull-down que os mantêm em nível BAIXO por padrão. Isso significa que, se você deixar esses pinos desconectados, o motor funcionará automaticamente no modo de passo completo. Para mais detalhes do CI no módulo consulte o datasheet.
Para desenvolver o projeto, iremos precisar de:
Conexões do os pinos do Arduino:
| Driver de motor DRV8825 | Arduino |
| RST | 5V |
| SLP | 5V |
| GND | GND |
| STEP | 3 |
| DIR | 2 |
Conexões com o motor de passo:
| Driver de motor DRV8825 | Motor |
| A1 | A1 |
| A2 | A2 |
| B1 | B1 |
| B2 | B2 |

// Pino de conexão
const int dirPin = 2;
const int stepPin = 3;
const int stepsPerRevolution = 200;
void setup() {
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
}
void loop() {
// Seta a direção do motor para sentido horário
digitalWrite(dirPin, HIGH);
// Gire o motor lentamente
for (int x = 0; x < stepsPerRevolution; x++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(2000);
digitalWrite(stepPin, LOW);
delayMicroseconds(2000);
}
delay(1000); // Espera um segundo
// Ajuste a direção do motor no sentido anti-horário.
digitalWrite(dirPin, LOW);
// Girar o motor rapidamente
for (int x = 0; x < stepsPerRevolution; x++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(1000);
digitalWrite(stepPin, LOW);
delayMicroseconds(1000);
}
delay(1000); // Espera um segundo
}
O esboço começa definindo os pinos do Arduino que se conectam aos pinos STEP e DIR do DRV8825.
const int dirPin = 2;
const int stepPin = 3;Também definimos uma variável para armazenar o número de passos que o motor precisa para completar uma rotação. No nosso caso, são 200 passos por revolução, o que é padrão para a maioria dos motores de passo NEMA 17. Se o seu motor tiver um número diferente de passos por revolução, basta ajustar esse valor de acordo.
const int stepsPerRevolution = 200;Na seção setup(), configuramos os pinos STEP e DIR como saídas para que o Arduino possa enviar sinais através deles.
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);Na seção loop(), primeiro fazemos o motor girar no sentido horário em uma velocidade baixa. Para isso, definimos o pino DIR como ALTO, o que indica ao motor que gire no sentido horário. Em seguida, executamos um loop que envia 200 pulsos para o pino STEP — um pulso para cada passo do motor. Entre cada pulso, aguardamos 2000 microssegundos (ou 2 milissegundos), o que faz o motor girar lentamente.
digitalWrite(dirPin, HIGH);
for (int x = 0; x < stepsPerRevolution; x++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(2000);
digitalWrite(stepPin, LOW);
delayMicroseconds(2000);
}
delay(1000);Após completar a primeira rotação, fazemos uma pausa de um segundo. Em seguida, alteramos a direção definindo o pino DIR como BAIXO, o que faz o motor girar no sentido anti-horário. Enviamos novamente os mesmos 200 pulsos para o pino STEP, mas desta vez reduzimos o atraso entre os pulsos para 1000 microssegundos. Esse atraso menor faz o motor girar duas vezes mais rápido na direção oposta. Após uma pausa de um segundo, todo o loop recomeça.
digitalWrite(dirPin, LOW);
for (int x = 0; x < stepsPerRevolution; x++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(1000);
digitalWrite(stepPin, LOW);
delayMicroseconds(1000);
}
delay(1000); A chave para controlar a velocidade do motor está em ajustar o atraso entre os sinais HIGH e LOW enviados para o pino STEP. Um atraso menor faz o motor girar mais rápido, enquanto um atraso maior o faz girar mais devagar.
Com este projeto, aprendemos mais sobre drivers de motor de passo, e que existem drives para aplicações específicas como, por exemplo, em projetos onde é necessário o microstepping para aumentar a precisão do movimento.
Para mais materiais como esse, continue acompanhando as postagens semanais do blog e não deixe de visitar nossa loja. Lá você encontra todos os componentes necessários para desenvolver esse e muitos outros projetos!
Que a força esteja com vocês!
Até mais!
Algumas referências utilizadas no artigo:
|
A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.
Conheça a Metodologia Eletrogate e Lecione um Curso de Robótica nas Escolas da sua Região!