Neste tutorial, veremos como acionar um motor de passo bipolar utilizando um controlador DRV8825. 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
- Controlador de passo DRV8825 (ou A4988 ou SilentStepStick)
- 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 ao sentido de rotação do motor. O módulo DRV8825 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 DRV8825
Minimum operating voltage | 8.2 V |
Maximum operating voltage | 45 V |
Continuous current per phase | 1.5 A |
Maximum current per phase | 2.2 A |
Minimum logic voltage | 2.5 V |
Maximum logic voltage | 5.25 V |
Microstep resolution | full, 1/2, 1/4, 1/8, 1/16 and 1/32 |
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
Por exemplo:
Se o valor da corrente for 1A, o valor apresentado no multímetro deve ser igual a 0,5V.
MaxCurrent=1.0A –> Vref = 0.5V
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.
M0 | M1 | M2 | Microstep resolution |
---|---|---|---|
Low | Low | Low | Full step |
High | Low | Low | 1/2 step |
Low | High | Low | 1/4 step |
High | High | Low | 1/8 step |
Low | Low | High | 1/16 step |
High | Low | High | 1/32 step |
Low | High | High | 1/32 step |
High | High | High | 1/32 step |
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