Neste tutorial, vamos ver como acionar um motor de passo bipolar utilizando um controlador A4988. Este tutorial é compatível com os drivers de motor de passo normalmente utilizados em projectos de fresagem digital ou de impressoras 3D (DRV8825, SilentStepStick, etc.).
Hardware
- Arduino UNO
- Motor de passo A4988
- Cabo USB A macho para USB B macho
Princípio de funcionamento
Os controladores de motores passo a passo permitem que os motores sejam controlados de forma eficiente utilizando apenas dois sinais de controlo, STEP e DIR. O número de impulsos enviados para o controlador corresponde ao número de passos dados, a frequência de impulsos corresponde à velocidade do motor e o sinal dir corresponde à direção de rotação do motor. O módulo A4988 encarrega-se de enviar a sequência para as duas bobinas do motor de acordo com os comandos recebidos como entrada.
Especificações técnicas A4988
Minimum operating voltage | 8 V |
Maximum operating voltage | 35 V |
Continuous current per phase | 1.2 A |
Maximum current per phase | 2 A |
Minimum logic voltage | 3 V |
Maximum logic voltage | 5.5 V |
Microstep resolution | full, 1/2, 1/4, 1/8 and 1/16 |
Reverse voltage protection? | No |
Dimensions | 15.5 × 20.5 mm (0.6″ × 0.8″) |
Diagrama
Antes de ligar o seu motor ao driver, defina corretamente o limitador de corrente. Para o fazer, é necessário:
- fornecer ao Arduino e ao Shield a tensão do motor.
- Em seguida, coloque um voltímetro entre o potenciómetro e a terra.
- Rodar o potenciómetro com uma chave de fendas até obter o valor que segue a regra abaixo.
MaxCurrent=Vref x 2.5
Por exemplo:
Se o valor da corrente for 1A, o valor apresentado no multímetro deve ser igual a 0,4V.
MaxCurrent=1.0A –> Vref = 0.4V
A resolução dos passos do driver pode ser modificada para uma maior precisão. Esta configuração é definida colocando os pinos M0, M1 e M2 em HIGH ou LOW de acordo com a seguinte tabela lógica.
MS1 | MS2 | MS3 | Résolution Microstepping |
Low | Low | Low | Pas complet (full step) |
High | Low | Low | 1/2 pas |
Low | High | Low | 1/4 de pas |
High | High | Low | 1/8 ième de pas |
High | High | High | 1/16 ième de pas |
Código
Para acionar o driver do motor passo a passo, tudo o que precisamos de fazer é enviar um estado HIGH ou LOW para o pino DIR e um impulso para o pino STEP.
const int stepPin = 2; const int dirPin = 3; const int stepsPerRev=200; int pulseWidthMicros = 100; // microseconds int millisBtwnSteps = 1000; void setup() { Serial.begin(9600); pinMode(stepPin, OUTPUT); pinMode(dirPin, OUTPUT); Serial.println(F("A4988 Initialized")); } void loop() { Serial.println(F("Running clockwise")); digitalWrite(dirPin, HIGH); // Enables the motor to move in a particular direction // Makes 200 pulses for making one full cycle rotation for (int i = 0; i < stepsPerRev; i++) { digitalWrite(stepPin, HIGH); delayMicroseconds(pulseWidthMicros); digitalWrite(stepPin, LOW); delayMicroseconds(millisBtwnSteps); } delay(1000); // One second delay Serial.println(F("Running counter-clockwise")); digitalWrite(dirPin, LOW); //Changes the rotations direction // Makes 400 pulses for making two full cycle rotation for (int i = 0; i < 2*stepsPerRev; i++) { digitalWrite(stepPin, HIGH); delayMicroseconds(pulseWidthMicros); digitalWrite(stepPin, LOW); delayMicroseconds(millisBtwnSteps); } delay(1000); }
Para mais funções, pode utilizar a biblioteca AccelStepper.h
Aplicações
- Controlo de um motor passo a passo
- Controlo de vários motores com uma placa CNC
Fontes
- DRV8825
- SilentStepStick
- A4988
- AccelStepper
- Biblioteca para SilentStepStick
- Controlo de um motor passo a passo
https://www.arduinolibraries.info/libraries/accel-stepper