Site icon AranaCorp

Utilizar um controlador de motor passo a passo DRV8825

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

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 voltage8.2 V
Maximum operating voltage45 V
Continuous current per phase1.5 A
Maximum current per phase2.2 A
Minimum logic voltage2.5 V
Maximum logic voltage5.25 V
Microstep resolutionfull, 1/2, 1/4, 1/8, 1/16 and 1/32
Reverse voltage protection?No
Dimensions15.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:

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.

M0M1M2Microstep resolution
LowLowLowFull step
HighLowLow1/2 step
LowHighLow1/4 step
HighHighLow1/8 step
LowLowHigh1/16 step
HighLowHigh1/32 step
LowHighHigh1/32 step
HighHighHigh1/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

Fontes

Exit mobile version