Tutorial · Iniciante · 30 min
A4988: ligação e Vref para definir o limite de corrente
Ligue um A4988 a um Arduino e a um NEMA 17, depois defina o limite de corrente com um multímetro. Veja a fórmula de Vref e a armadilha do resistor.
Para que serve realmente o driver
Um A4988 não é um interruptor. É um regulador de corrente que também faz comutação.
Essa distinção importa porque a bobina de um motor de passo é um indutor de baixa resistência — de 2 a 4 ohms é o típico. Conecte diretamente uma bobina de 2,8 Ω a 24 V e a lei de Ohm resulta em 8,6 A, o que destruiria o motor em segundos. O trabalho do driver é fazer o circuito chopper chavear a fonte milhares de vezes por segundo para que a corrente média se estabilize em um valor escolhido por você e, depois, fazer essa corrente alternar entre as duas bobinas de maneira que o campo gire.
Portanto, o driver precisa receber um número: quantos ampères por fase. Esse é o limite de corrente, e defini-lo é o único ajuste na placa. Todo o resto — microstepping, direção, habilitação — é um pino que se configura uma vez.
Ligando
| Pino do A4988 | Vai para | Observação |
|---|---|---|
| VMOT | Fonte de alimentação do motor de 8–35 V | Não a 5 V do Arduino. Nunca. |
| GND (ao lado de VMOT) | Massa da fonte de alimentação do motor | Retorno de corrente elevada |
| VDD | 5 V do Arduino | Fonte lógica, alguns miliampères |
| GND (ao lado de VDD) | GND do Arduino | Precisa compartilhar a massa com a fonte do motor |
| 1A, 1B | Uma bobina do motor | Qualquer ordem — isso só inverte o sentido |
| 2A, 2B | A outra bobina do motor | Errar o pareamento é o erro fatal |
| STEP | Qualquer saída do Arduino | Um pulso, um micropasso |
| DIR | Qualquer saída do Arduino | Nível alto ou baixo escolhe o sentido |
| ENABLE | GND, ou um pino do Arduino | Ativo em baixo: conecte ao baixo para energizar |
| RESET, SLEEP | Ligados um ao outro | Ambos precisam estar altos; o jumper entre eles faz isso |
| MS1, MS2, MS3 | Veja a tabela abaixo | Flutuante significa passo completo |
Duas regras de ligação concentram quase todo o risco:
- Um capacitor eletrolítico de 100 µF entre VMOT e GND, próximo da placa. Não é opcional. A folha de dados e a documentação de todas as placas adaptadoras dizem isso, e o motivo é que o circuito chopper consome corrente em picos abruptos; sem um capacitor de reserva próximo, a indutância dos fios da fonte transforma esses picos em surtos de tensão que excedem a tensão nominal de 35 V do chip. As placas morrem na alimentação, não durante a operação, e essa é geralmente a razão.
- Nunca desconecte o motor enquanto o driver estiver ligado. Interromper uma bobina energizada produz um grande surto indutivo sem caminho por onde escoar. Desligue a fonte primeiro, sempre.
Se os quatro fios do motor não estiverem identificados, encontre os pares com um multímetro: dentro de uma bobina você mede alguns ohms e entre bobinas lê circuito aberto. Identifique-os por continuidade e conecte um par a 1A/1B e o outro a 2A/2B.
Definindo o limite de corrente
Há um potenciômetro na placa, e girá-lo altera uma tensão de referência que o chip compara com a tensão através de seus resistores de amostragem de corrente. Meça essa referência — Vref — entre o cursor do potenciômetro e a massa.
A fórmula do A4988 é:
Vref = I_phase × R_sense × 8
Aqui está a armadilha que faz muita gente perder motores. O R_sense não é o mesmo em todas as placas. As placas adaptadoras vêm com resistores de amostragem de corrente de 0,1 Ω ou 0,05 Ω, e a resposta da fórmula muda por um fator de dois:
| Resistor de amostragem | Marca na placa | Vref para 1,0 A | Vref para 1,2 A | Vref para 1,5 A |
|---|---|---|---|---|
| 0,1 Ω | R100 |
0,80 V | 0,96 V | 1,20 V |
| 0,05 Ω | R050 |
0,40 V | 0,48 V | 0,60 V |
| 0,068 Ω | R068 |
0,54 V | 0,65 V | 0,82 V |
Leia a marca dos dois resistores SMD pretos próximos à parte inferior da placa antes de calcular qualquer coisa. Definir 1,2 V em uma placa com resistores de 0,05 Ω é pedir 3 A através de um motor de 1,7 A.
O procedimento:
- Alimente a placa — VMOT conectado, motor desconectado. O chip precisa da tensão do motor para regular, mas você não precisa fazer o motor girar.
- Consulte a corrente nominal por fase do motor. Um NEMA 17 comum é de 1,5 A ou 1,7 A.
- Use de 70–85% dela como alvo. A corrente nominal pressupõe as condições de resfriamento especificadas na folha de dados que talvez você não tenha, e os últimos 20% de corrente acrescentam muito pouco torque enquanto produzem muito calor.
- Calcule Vref a partir da fórmula e do resistor de amostragem de corrente que você realmente tem.
- Coloque a ponta preta do multímetro em um pino de massa e a ponta vermelha no parafuso metálico do potenciômetro. Gire-o lentamente — um quarto de volta já é uma grande mudança — até o multímetro indicar o valor desejado.
Vale usar uma chave de fenda cerâmica pequena. Uma metálica que faz ponte entre o potenciômetro e outra coisa enquanto a placa está energizada é uma forma comum de danificar o driver de motor.
Vale dizer claramente: o limite de corrente é o T_peak na equação de torque que governa tudo o que um motor de passo faz. Defina-o baixo e o motor ficará cada vez mais atrasado para a mesma carga e perderá passos mais cedo. Defina-o alto e o motor aquece para obter torque que talvez não precise. É o único valor que exige uma decisão criteriosa.
Pinos de microstepping
MS1, MS2 e MS3 têm pull-downs internos, portanto qualquer coisa que você deixe flutuando será lida como nível baixo:
| MS1 | MS2 | MS3 | Resolução | Passos por volta |
|---|---|---|---|---|
| baixo | baixo | baixo | Passo completo | 200 |
| alto | baixo | baixo | Meio passo | 400 |
| baixo | alto | baixo | Quarto de passo | 800 |
| alto | alto | baixo | Oitavo de passo | 1600 |
| alto | alto | alto | Décimo-sexto passo | 3200 |
A maioria das montagens conecta os três pinos em alto e os deixa assim. O motivo não é a precisão — microstepping não compra precisão sob carga — mas sim que o décimo-sexto passo reduz as oscilações do motor em cada passo, o que deixa a máquina silenciosa e evita que a ondulação fique visível no trabalho. O custo é que seu microcontrolador agora precisa emitir dezesseis vezes mais pulsos por milímetro, uma restrição real em um Arduino Uno acima de aproximadamente 10 000 passos por segundo.
Acionando-o
O código mínimo útil. Observe que não há biblioteca aqui: um passo é um pulso, e é literalmente isso.
const int STEP_PIN = 3;
const int DIR_PIN = 4;
const int EN_PIN = 5; // active LOW
void setup() {
pinMode(STEP_PIN, OUTPUT);
pinMode(DIR_PIN, OUTPUT);
pinMode(EN_PIN, OUTPUT);
digitalWrite(EN_PIN, LOW); // energise the coils
digitalWrite(DIR_PIN, HIGH);
}
void loop() {
// One revolution at 1/16 stepping = 3200 pulses.
for (int i = 0; i < 3200; i++) {
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(2); // datasheet minimum is 1 us
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(300); // this delay IS the speed
}
delay(1000);
}
Esse código funciona e também é exatamente o que você não deve usar em produção, por dois motivos.
O primeiro é que a taxa de passos salta imediatamente de zero para a máxima. Ao solicitar uma taxa acima do limite de partida do motor, ele vai vibrar sem avançar — com os padrões do simulador de motor de passo, comandar velocidade máxima a partir da parada perde 280 passos completos em um movimento de 60 mm e deixa o eixo em 4 mm. O mesmo movimento com uma rampa chega exatamente ao alvo. Essa é a diferença que um perfil de aceleração faz, e não é um refinamento.
O segundo é que delayMicroseconds bloqueia. Enquanto o laço está dando passos, mais nada no microcontrolador é executado — nenhuma verificação de fim de curso, nenhuma leitura pela serial, nenhum segundo eixo. Para qualquer coisa real, use o padrão de temporização não bloqueante ou entregue a tarefa ao AccelStepper, que implementa a rampa e o agendamento para você:
#include <AccelStepper.h>
AccelStepper axis(AccelStepper::DRIVER, STEP_PIN, DIR_PIN);
void setup() {
pinMode(EN_PIN, OUTPUT);
digitalWrite(EN_PIN, LOW);
axis.setMaxSpeed(8000); // steps/s -> 100 mm/s at 80 steps/mm
axis.setAcceleration(16000); // steps/s2 -> 200 mm/s2
axis.moveTo(80 * 50); // 50 mm
}
void loop() {
axis.run(); // returns immediately; call it constantly
}
setMaxSpeed e setAcceleration fornecem um perfil trapezoidal e nada mais — não há opção de curva S. Se quiser um perfil com limite de jerk, gere o valor de referência você mesmo.
A4988 ou uma das alternativas?
| Driver de motor | Corrente | Microstepping | Ruído | Escolha quando |
|---|---|---|---|---|
| A4988 | 1 A sem refrigeração, ~1,5 A com refrigeração | até 1/16 | Audível | Barato, disponível em todo lugar e bem documentado |
| DRV8825 | 1,5 A sem refrigeração, ~2,2 A com refrigeração | até 1/32 | Audível | Você precisa de mais corrente ou micropassos mais finos |
| TMC2208 | ~1,2 A | até 1/256 | Quase silencioso | O ruído importa; é por isso que as impressoras migraram |
| TMC2209 | ~1,7 A | até 1/256 | Quase silencioso | O mesmo caso, mais referenciamento sem sensor |
| ULN2003 + 28BYJ-48 | ~0,3 A | Meio passo | Zumbido | Uma demonstração em escala de brinquedo, não uma máquina |
O DRV8825 é compatível com os pinos, mas sua fórmula de Vref é diferente — Vref = I × 0.5 — e o potenciômetro gira no sentido oposto. Trocar um sem reler a fórmula é uma forma clássica de queimar um motor.
Os drivers TMC valem o dinheiro assim que uma máquina fica em um lugar onde você pode ouvi-la. Eles fazem o mesmo trabalho com uma forma de onda de corrente mais suave, e é por isso que uma impressora com eles faz ruído de ventilador em vez de ruído de motor.
Quando algo dá errado
| Sintoma | Causa | Solução |
|---|---|---|
| O motor vibra, mas não gira | Pares de bobinas ligados incorretamente | Encontre os pares por continuidade e religue |
| Nada acontece | ENABLE flutuante ou alto, ou RESET/SLEEP baixo | Conecte ENABLE ao baixo; conecte RESET a SLEEP |
| O driver fica quente demais para tocar e desliga | Limite de corrente alto demais | Meça Vref novamente; adicione dissipador e fluxo de ar |
| O motor fica quente, mas o driver está bem | Normal | É normal esperar 60–80 °C na carcaça |
| Passos perdidos apenas em movimentos rápidos | Tensão de alimentação baixa demais para essa velocidade | Aumente VMOT — mais corrente não ajudará |
| Passos perdidos em acelerações fortes | Rampa muito agressiva ou corrente baixa demais | Reduza a aceleração ou aumente Vref em direção à corrente nominal |
| A placa morreu assim que foi alimentada | Falta o capacitor de reserva em VMOT | Capacitor eletrolítico de 100 µF, próximo aos pinos |
| O motor mantém a posição, mas gira de forma irregular | Passo completo | Conecte MS1–MS3 em alto para 1/16 |
| A resistência aparece em circuito aberto em um “par” | Os dois fios são de bobinas diferentes | Refaça o pareamento |
Próximo passo
Com o driver definido, a questão restante é quantos pulsos valem um milímetro de deslocamento — o que depende inteiramente do que o eixo está girando. Isso é passos por milímetro, e é o número com o qual todas as outras partes da máquina são calibradas.
Explore o grafo
Faz parte destas montagens
Projetos e caminhos de aprendizagem que incluem este tutorial.
Leitura complementar