Como usar motores de passo no Arduino

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


Neste tutorial, discutiremos como os motores de passo funcionam, descrever configurações de passo uni-polares e bipolares, controlar os motores de passo usando o driver do motor de passo ULN2003, bem como seus requisitos de energia. Discutiremos métodos de controle do número de rotações, velocidade, etapas e direção do motor de passo. Usando o motor de passo 28BYJ-48, criaremos um circuito para demonstrar a configuração básica de um motor de passo. Então, como controlar a velocidade dos motores de passo com um potenciômetro. O último projeto mostrará como controlar a direção de um motor de passo pressionando um botão.

Anúncio PCBWay
Como usar motores de passo no Arduino 1
Controlador de motor de passo, Arduino UNO e ULN2003

Componentes necessários para este tutorial do projeto:

Como funciona o motor de passo

Os motores de passo são usados ​​quando é necessário um controle preciso do eixo rotativo. Um bom exemplo seria um braço robótico que alcança um componente, o pega e o coloca exatamente onde é necessário.

Os motores de passo são motores CC sem escova com o eixo conectado a uma série de ímãs permanentes que controlam a rotação do eixo em 32 etapas iguais. O eixo está conectado a uma série de engrenagens para reduzir sua velocidade e aumentar o torque do motor. Em um 28BJY-48, essas engrenagens reduzem a velocidade em um fator de 64. Portanto, o eixo do motor deve girar 32 vezes para obter 1 rotação completa do eixo, que gira 64 vezes para obter 1 rotação completa do motor de passo.

A utilização de um driver ULN2003 e um Arduino UNO, ou Arduino Pro-Mini, fornece sincronismo preciso, controle direcional e gerenciamento de energia para o stepper.

Existem dois tipos de configurações de motores de passo: o unipolar e o bipolar. Cada um possui atributos específicos a serem considerados ao projetar um dispositivo usando motores de passo.

Como usar motores de passo no Arduino 2

Para que o motor de passo avance para a próxima etapa, inverta a corrente através dos eletroímãs.

Como usar motores de passo no Arduino 3

Motores de passo unipolares e bipolares

Cada uma das duas configurações básicas do motor de passo, unipolar e bipolar, tem diferenças específicas que no passado eram importantes devido ao alto custo dos comutadores de transistores. Hoje, com transistores de baixo custo do par Darlington disponíveis, o custo-benefício de um motor de passo unipolar perdeu alguns de seus apelos iniciais.

Como usar motores de passo no Arduino 4

Cada uma das configurações acima utiliza um eixo rotativo composto por vários ímãs permanentes poderosos.

Como usar motores de passo no Arduino 5

Conecte dois transistores a cada bobina para controlar a corrente através dos enrolamentos da bobina.

Como usar motores de passo no Arduino 6
Como usar motores de passo no Arduino 7

Controlando a direção do fluxo de corrente através dos transistores de acionamento, a rotação do motor de passo pode ser facilmente controlada.

Leia Também  As experiências são mais importantes que o sucesso!
Como usar motores de passo no Arduino 8
Como usar motores de passo no Arduino 9
Como usar motores de passo no Arduino 10
Como usar motores de passo no Arduino 11

“Meio passo” e “passo completo” são métodos pelos quais os motores de passo controlam sua saída. Ele configura os transistores de acionamento de maneira ligeiramente diferente, usando dois motores simultaneamente, conforme discutido no exemplo bipolar. Meio passo move o stepper pela metade da distância, mas consome mais energia, pois você está usando dois motores ou, no caso da unipolar, está usando a capacidade total de ambas as bobinas. O benefício da meia etapa é que etapas menores oferecem mais controle, mais precisão e mais torque. A desvantagem é que você está consumindo mais energia do que consumiria na etapa completa.

Um motor de passo 28BYJ-48 está configurado para criar um total de 32 etapas completas em uma rotação (proporção 32: 1). Em seguida, é conectado a uma série de engrenagens que reduzem ainda mais a velocidade e aumentam o torque (proporção de 64: 1). O motor deve pisar 32 vezes para que o eixo gire uma vez e, em seguida, o eixo deve girar 64 vezes para que a redução da engrenagem faça o motor de passo girar uma vez.

Excitador do motor deslizante ULN2003

O motor de passo 28BYJ-48 pode consumir até 240 mA, consideravelmente mais do que o que um Arduino pode oferecer através de qualquer uma de suas portas. Portanto, você precisará de algum tipo de driver para controlar com segurança o motor de passo. Existem inúmeras maneiras de criar um driver começando com um transistor simples para cada uma das bobinas. Essa solução também exigiria diodos de fixação para proteger o Arduino da tensão indutiva induzida pela bobina.

Existem circuitos pré-fabricados contendo LEDs para exibir qual bobina está ativada, além de plugues para simplificar as conexões com o Arduino e o motor de passo. Eles incorporam o circuito integrado ULN2003. Você também pode usar apenas o circuito integrado ULN2003 avaliado em 500 mA a 50V, que é um pouco mais barato que o PCB pré-fabricado. Como a placa de circuito pré-fabricada e as conexões ULN2003 são quase idênticas, neste tutorial, usaremos apenas o circuito integrado.

Como usar motores de passo no Arduino 12
Motor deslizante 28BYJ-48 e PCB ULN2003 pré-fabricado
Como usar motores de passo no Arduino 13
O IC ULN2003
Como usar motores de passo no Arduino 14

O diagrama acima mostra o ULN2003 conectado ao motor de passo 28BYJ-48. O pino 9 do ULN2003 fornece a tensão para o motor de passo, enquanto os pinos 1 a 4 estão conectados ao Arduino.

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br

Instalação do motor de passo

Agora que entendemos como controlar as ações do motor de passo, comece a montar o circuito conforme descrito abaixo.

Como usar motores de passo no Arduino 15
Como usar motores de passo no Arduino 16

Como programar o motor de passo

Faça o upload deste código para o Arduino:

#include 
const int stepsPerRevolution = 2048;
const int rpm = 6;
Stepper stepper1 = Stepper(stepsPerRevolution, 8, 10, 9, 11);

void setup() {
  stepper1.setSpeed(rpm);
}

void loop() {
  stepper1.step(stepsPerRevolution);
  delay(100);
  stepper1.step(-stepsPerRevolution);
  delay(100);
}

Após compilar e fazer o upload do código, o motor de passo deve fazer uma rotação completa no sentido horário em 10 segundos. Depois, inverte a direção e completa uma rotação no sentido anti-horário em 10 segundos.

Explicando o código

A primeira entrada é a biblioteca que facilita o controle do motor de passo seguido da criação de duas variáveis: stepsPerRevolutione rpm.

O próximo cria um objeto de motor de passo usando a biblioteca para referenciar o motor de passo específico. No nosso exemplo, usamos “stepper1”, é por isso que tem que ser Stepper stepper1 = Stepper(stepsPerRevolution, 8, 10, 9, 11);. A função usa 5 variáveis, o número de etapas por rotação, bem como as 4 portas usadas para conectar o Arduino ao driver.

Para o setup() função, setSpeed(), stepper1.setSpeed(rpm); foi utilizado para indicar a velocidade do eixo do motor com a variável rpm configurado anteriormente.

Para o loop() função, usamos o step() para indicar o número total de etapas em uma revolução. Desde o stepsPerRevolution variável já foi configurada anteriormente, usamos stepper1.step(stepsPerRevolution); seguido por um delay(), depois inverteu a direção do stepper com o step() funcionar novamente.

Demonstração

  1. Colocou o stepsPerRevolution para 200 e a rpm para 1.
  2. Em seguida, execute o código modificado enquanto toca no motor de passo (provavelmente será quente ao toque). Veja se você consegue sentir os passos conforme o passo gira. 200 passos a 1 rpm fará com que o motor se mova quase imperceptivelmente, mas você sentirá o motor pisando.
  3. Altere a rpm para 10 e as etapas definidas para 2048 e tente novamente. Você pode pensar em stepsPerRevolution como distância e rpm como velocidade.
  4. Tente diferentes variações de rpm e etapas. As RPMs variam de (1-16), as etapas variam de (20 – 2048).

Existem alguns problemas com motores de passo, como os usuários não têm opções para definir o passo de início, sem acréscimos de hardware elaborados. Começará no mesmo local em que completou a última revolução. Se você precisar especificar a posição inicial, considere usar um servo motor.

Controle da velocidade do motor de passo com um potenciômetro

Como usar motores de passo no Arduino 17

Código para controle de velocidade do motor de passo com um potenciômetro

#include 
const int stepsPerRevolution = 200;  
Stepper stepper1(stepsPerRevolution, 8, 9, 10, 11);

void setup() {}

void loop() {
  int potReading = analogRead(A0);
  int motorSpeed = map(potReading, 0, 1023, 0, 100);
  if (motorSpeed > 0) {
    stepper1.setSpeed(motorSpeed);
    stepper1.step(stepsPerRevolution / 100);
  }
}

Depois de adicionar o código bastante simples, faça o upload para o seu Arduino. A velocidade do motor de passo será agora controlada pelo potenciômetro.

A saída do potenciômetro é lida na porta analógica A0. Na próxima linha, o número inteiro armazenado em potReading deve estar dentro da faixa de (0-1023) determinada pela tensão lida em A0. Esse número inteiro é mapeado na variável motorSpeed como um número inteiro com um valor de (0-100). Isso é usado com o setSpeed() função para controlar o stepper.

Controle de velocidade e direção com botões de pressão

Enquanto o É bom ter uma função, não permite reverter facilmente as direções sob demanda com o pressionar de um botão. Para fazer isso, você precisará controlar cada bobina diretamente.

Construa o circuito abaixo para permitir o controle de direção com os botões:

Como usar motores de passo no Arduino 18

Código para controlar a velocidade e a direção do motor de passo com botões de pressão

const int IN1 = 8;
const int IN2 = 9;
const int IN3 = 10;
const int IN4 = 11;
const int upButton  = 6;
const int downButton = 7;
const int ledUp  = 2;
const int ledDown = 3;

int coil1[] = {0, 0, 0, 0, 0, 1, 1, 1, 0};
int coil2[] = {0, 0, 0, 1, 1, 1, 0, 0, 0};
int coil3[] = {0, 1, 1, 1, 0, 0, 0, 0, 0};
int coil4[] = {1, 1, 0, 0, 0, 0, 0, 1, 0};

int coilStep = 0;
int rotation = 3;

void setup()
{
  pinMode(IN1,OUTPUT);
  pinMode(IN2,OUTPUT);
  pinMode(IN3,OUTPUT);
  pinMode(IN4,OUTPUT);
  pinMode(ledUp,OUTPUT);
  pinMode(ledDown,OUTPUT);
  pinMode(upButton,INPUT_PULLUP);
  pinMode(downButton,INPUT_PULLUP);
}

void loop()
{
  if (digitalRead(upButton) == LOW)
  {
    rotation = 1;
  } else if (digitalRead(downButton) == LOW)
  {
    rotation  = 2;
  } else
  {
    rotation = 3;
  }
  if (rotation == 1) {              // Forward
    digitalWrite(ledUp, HIGH);
    coilStep++;
    motorDrive(coilStep);
  }   
  else if (rotation == 2) {       // Reverse
    digitalWrite(ledDown, HIGH);
    coilStep--;
    motorDrive(coilStep);
  }
  else {
    motorDrive(8);
    digitalWrite(ledUp, LOW);
    digitalWrite(ledDown, LOW);
  }
  if (coilStep > 7) {
    coilStep = 0;
  }
  if (coilStep < 0) {
    coilStep = 7;
  }
  delay(10);
}

void motorDrive(int d)
{
  digitalWrite(IN1, coil1[d]);
  digitalWrite(IN2, coil2[d]);
  digitalWrite(IN3, coil3[d]);
  digitalWrite(IN4, coil4[d]);
}

Após compilar e carregar o programa, os botões controlam a direção do motor de passo. Os dois LEDs indicam a direção da rotação.

Explicando o código

Observe aqui que não incluímos o biblioteca, pois precisamos inverter a direção do motor de passo sob demanda (pressionar o botão). Precisamos controlá-lo de maneira diferente. Usamos uma matriz para controlar cada bobina. O uso de matrizes simplifica bastante o código necessário. No int coil1[] = {0, 0, 0, 0, 0, 1, 1, 1, 0};, a primeira matriz é o que controla a primeira bobina. Para identificar uma matriz, use o nome da matriz e a posição do item que você deseja.

Nas normas de programação, a contagem começa com 0 0, não 1. Portanto, a primeira entrada em uma matriz seria array_name[0]. Observe também o uso da função motorDrive() criado para acionar cada bobina. Quando a função motorDrive() é chamado, ele passa o valor de coilStep para a função como um número inteiro d. Isso é usado com digitalWrite(IN1, coil1[d]); Na primeira vez em que é chamado, coilStep é "0". Lembre-se de que 0 é o primeiro valor na matriz que chamamos de bobina1. A primeira entrada na matriz coil1[] é o número inteiro 0, então o IN1 é conduzido baixo.

A função continua a digitalWrite(IN2, coil2[d]); já que o número inteiro d ainda é 0. O primeiro elemento da matriz coil2[] é o número inteiro 0. Quando a função motorDrive completa o programa, retorna para onde estava quando a função foi chamada pela primeira vez.

Se o upButton ainda estiver pressionado, a variável coilStep será incrementada em 1. Se o downButton é pressionado, a variável coilStep é revertida. Se nenhum botão for pressionado, a função motorDrive envia o número inteiro 8. A oitava entrada em todas as matrizes é baixa, parando o motor de passo e a função continua.

Como usar motores de passo no Arduino 6
cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br