Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Como controlar um motor de passo com driver A4988 e Arduino


Neste tutorial do Arduino vamos aprender como controlar um motor de passo usando o driver de passo A4988. Você pode assistir ao vídeo a seguir ou ler o tutorial escrito abaixo.

Visão geral


O A4988 é um driver de microstepping para controlar motores de passo bipolares que possui tradutor embutido para fácil operação. Isso significa que podemos controlar o motor de passo com apenas 2 pinos do nosso controlador, ou um para controlar o sentido de rotação e outro para controlar os passos.

O Driver fornece cinco resoluções de passo diferentes:passo completo, meio passo, quarto de passo, oito passos e décimo sexto passo. Além disso, possui um potenciômetro para ajuste da saída de corrente, desligamento térmico por excesso de temperatura e proteção de corrente cruzada.

Sua tensão lógica é de 3 a 5,5 V e a corrente máxima por fase é 2A se for fornecido um bom resfriamento adicional ou 1A corrente contínua por fase sem dissipador de calor ou resfriamento.

Pinagem do driver de passo A4988


Agora vamos olhar de perto a pinagem do driver e conectá-lo com o motor de passo e o controlador. Então vamos começar com os 2 pinos do lado direito do botão para alimentar o driver, os pinos VDD e Terra que precisamos para conectá-los a uma fonte de alimentação de 3 a 5,5 V e no nosso caso esse será nosso controlador, o Arduino Placa que fornecerá 5 V.  Os 4 pinos a seguir são para conectar o motor. Os pinos 1A e 1B serão conectados a uma bobina do motor e os pinos 2A e 2B à outra bobina do motor. Para alimentar o motor usamos os próximos 2 pinos, Terra e VMOT que precisamos para conectá-los à Fonte de Alimentação de 8 a 35 V e também precisamos usar capacitor de desacoplamento com pelo menos 47 µF para proteger a placa do driver de picos de tensão.

Os próximos 2 pinos, Step e Direction são os pinos que realmente usamos para controlar os movimentos do motor. O pino Direction controla o sentido de rotação do motor e precisamos conectá-lo a um dos pinos digitais do nosso microcontrolador, ou no nosso caso vou conectá-lo ao pino número 4 da minha placa Arduino.

Com o pino Step controlamos os mirosteps do motor e a cada pulso enviado para este pino o motor move um step. Isso significa que não precisamos de nenhuma programação complexa, tabelas de sequência de fases, linhas de controle de frequência e assim por diante, porque o tradutor integrado do Driver A4988 cuida de tudo. Aqui também precisamos mencionar que esses 2 pinos não são puxados para nenhuma tensão internamente, portanto, não devemos deixá-los flutuando em nosso programa.

O próximo é o pino SLEEP e uma lógica baixa coloca a placa em modo sleep para minimizar o consumo de energia quando o motor não está em uso.

Em seguida, o pino RESET define o tradutor para um estado inicial predefinido. Este estado de origem ou posição de micropasso de origem pode ser visto nessas figuras da folha de dados do A4988. Portanto, essas são as posições iniciais de onde o motor parte e são diferentes dependendo da resolução do microstep. Se o estado de entrada para este pino for lógico baixo, todas as entradas STEP serão ignoradas. O pino Reset é um pino flutuante, portanto, se não tivermos intenção de controlá-lo em nosso programa, precisamos conectá-lo ao pino SLEEP para trazê-lo para cima e habilitar a placa.

Os próximos 3 pinos (MS1, MS2 e MS3) são para selecionar uma das cinco resoluções de etapa de acordo com a tabela de verdade acima. Esses pinos possuem resistores pull-down internos, portanto, se os deixarmos desconectados, a placa funcionará em modo full step.

O último, o pino ENABLE é usado para ligar ou desligar as saídas FET. Portanto, uma lógica alta manterá as saídas desabilitadas.

Componentes necessários para este tutorial do Arduino


Você pode obter os componentes em qualquer um dos sites abaixo:
  • Motor de passo (NEMA17)………..
  • Driver de passo A4988……………..
  • Adaptador 12V 2A……………………….
  • Tomada de força…………………………………
  • Placa Arduino ……………………………
  • Breadboard e jump wires …….

Esquema do circuito


Aqui está o esquema completo do circuito. Vou usar o drive em Full Step Mode então vou deixar os 3 pinos MS desconectados e apenas conectar os pinos Direction e Step do drive aos pinos número 3 e 4 da placa Arduino e também o Ground e o 5V pinos para alimentar a placa. Também usarei um capacitor de 100µF para desacoplamento e um adaptador de 12V, 1,5A para alimentar o motor. Usarei um Motor de Passo bipolar NEMA 17 e seus fios A e C serão conectados aos pinos 1A e 1B e os fios B e D aos pinos 2A e 2B.

A4988 Limitação de corrente


Antes de conectar o motor, devemos ajustar a limitação de corrente do driver para ter certeza de que a corrente está dentro dos limites de corrente do motor. Podemos fazer isso ajustando a tensão de referência usando o potenciômetro na placa e considerando esta equação:

No entanto, esta equação nem sempre está correta, pois existem diferentes fabricantes da placa de driver A4988. Aqui está uma demonstração do meu caso:ajustei o potenciômetro e medi a tensão de referência de 0,6V. Portanto, o limite de corrente deve ser aquele valor de 0,6*2, igual a 1,2 A.

Agora como estou usando o Driver em Modo Full Step e de acordo com o Datasheet A4988 neste modo a corrente do enrolamento poderia atingir apenas 70% do limite de corrente, o 1,2A*0,7 seria igual a 0,84A. Para verificar isso, carreguei um código simples que envia uma lógica contínua alta para o pino Step (para que possamos notar melhor a corrente) e conectei meu medidor em série com um enrolamento do motor e o liguei. O que obtive foi 0,5A, o que significa que a equação não estava correta para o meu caso.

Código do Arduino e A4988


Aqui está um código de exemplo. Primeiro temos que definir os pinos Step e Direction. No nosso caso, eles são os pinos número 3 e 4 na placa Arduino e são nomeados stepPin e dirPin e na seção de configuração temos que defini-los como saídas.
/*     Simple Stepper Motor Control Exaple Code
 *      
 *  by Dejan Nedelkovski, www.HowToMechatronics.com
 *  
 */

// defines pins numbers
const int stepPin = 3; 
const int dirPin = 4; 
 
void setup() {
  // Sets the two pins as Outputs
  pinMode(stepPin,OUTPUT); 
  pinMode(dirPin,OUTPUT);
}
void loop() {
  digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction
  // Makes 200 pulses for making one full cycle rotation
  for(int x = 0; x < 200; x++) {
    digitalWrite(stepPin,HIGH); 
    delayMicroseconds(500); 
    digitalWrite(stepPin,LOW); 
    delayMicroseconds(500); 
  }
  delay(1000); // One second delay
  
  digitalWrite(dirPin,LOW); //Changes the rotations direction
  // Makes 400 pulses for making two full cycle rotation
  for(int x = 0; x < 400; x++) {
    digitalWrite(stepPin,HIGH);
    delayMicroseconds(500);
    digitalWrite(stepPin,LOW);
    delayMicroseconds(500);
  }
  delay(1000);
}
Code language: Arduino (arduino)

Na seção de loop, primeiro, definiremos o pino de direção no estado alto, que permitirá que o motor se mova em uma direção específica. Agora, usando este laço for, faremos o motor fazer uma rotação de ciclo completo. Como o driver está definido no modo de passo completo e nosso motor de passo tem um ângulo de passo de 1,8 graus, ou 200 passos, precisamos enviar 200 pulsos para o pino de passo para fazer uma rotação de ciclo completo. Portanto, o loop for terá 200 iterações e, a cada vez, ele definirá o pino Step no estado alto e depois no estado baixo para fazer os pulsos. Entre cada digitalWrite precisamos adicionar algum atraso do qual dependerá a velocidade do motor.

Após esta rotação de ciclo completo, faremos um atraso de um segundo, depois mudaremos a direção de rotação definindo o dirPin em um estado baixo e agora faremos 2 rotações de ciclo completo com este loop de 400 iterações. No final, há mais um segundo de atraso. Agora vamos fazer o upload do código e ver como ele vai funcionar.

Fiz mais um exemplo para este tutorial, onde controlo a velocidade do motor usando um potenciômetro. Aqui está o código-fonte desse exemplo:
/*     Simple Stepper Motor Control Exaple Code
 *      
 *  by Dejan Nedelkovski, www.HowToMechatronics.com
 *  
 */
 
// Defines pins numbers
const int stepPin = 3;
const int dirPin = 4; 

int customDelay,customDelayMapped; // Defines variables
 
void setup() {
  // Sets the two pins as Outputs
  pinMode(stepPin,OUTPUT);
  pinMode(dirPin,OUTPUT);
 
  digitalWrite(dirPin,HIGH); //Enables the motor to move in a particular direction
}
void loop() {
  
  customDelayMapped = speedUp(); // Gets custom delay values from the custom speedUp function
  // Makes pules with custom delay, depending on the Potentiometer, from which the speed of the motor depends
  digitalWrite(stepPin, HIGH);
  delayMicroseconds(customDelayMapped);
  digitalWrite(stepPin, LOW);
  delayMicroseconds(customDelayMapped);
}
// Function for reading the Potentiometer
int speedUp() {
  int customDelay = analogRead(A0); // Reads the potentiometer
  int newCustom = map(customDelay, 0, 1023, 300,4000); // Convrests the read values of the potentiometer from 0 to 1023 into desireded delay values (300 to 4000)
  return newCustom;  
}Code language: Arduino (arduino)

Processo de manufatura

  1. Aceitar moeda de controle com Arduino
  2. Arduino com Bluetooth para controlar um LED!
  3. Arduino Nano:Controle 2 motores de passo com joystick
  4. Controle do Servo Motor com Arduino e MPU6050
  5. Como ler a temperatura e umidade em Blynk com DHT11
  6. Como fazer música com um Arduino
  7. Controle do carro com Arduino Uno e Bluetooth
  8. Como usar o Modbus com Arduino
  9. Controle de motor de passo 28BYJ-48 com joystick
  10. Robô Assistente AI com Arduino e Python