Arduino - Controlar Motor de Passo 28BYJ-48 usando o Driver ULN2003

Neste tutorial, vamos aprender:

Motor de passo 28BYJ-48 com Arduino e ULN2003

Motores de passo são ótimos motores para controle de posição. Os motores de passo dividem uma revolução completa em um número de “passos” iguais. Eles são usados em muitos dispositivos, como impressoras, impressoras 3D, máquinas CNC, e também na automação industrial.

Uma das formas mais baratas de aprender sobre motores de passo é usar motores de passo 28BYJ-48. Eles geralmente vêm com uma placa driver baseada no ULN2003, o que os torna super fáceis de usar.

Sobre o Motor de Passo 28BYJ-48

De acordo com o datasheet, quando o motor 28BYJ-48 funciona no modo de passo completo, cada passo corresponde a uma rotação de 11.25°. Isso significa que há 32 passos por revolução (360°/11.25° = 32).

Além disso, o motor tem um conjunto de engrenagens de redução de 1/64. Isso significa que ele, na verdade, tem 32 x 64 = 2048 passos. Cada passo equivale a 360°/2048 = 0.1758°.

Conclusão: se o motor der 2048 passos (no modo de passo completo), o motor gira uma revolução

Pinagem

O motor de passo 28BYJ-48 tem 5 pinos. Não precisamos nos preocupar com os detalhes desses pinos. Basta encaixá-lo no conector do driver de motor ULN2003.

Motor de passo 28BYJ-48

Sobre o Módulo Driver de Motor de Passo ULN2003

O ULN2003 é um dos Módulos driver de motor mais comuns para motores de passo.

  • O módulo tem quatro LEDs que mostram a atividade das quatro linhas de entrada de controle (para indicar o estado do passo). Eles criam um efeito muito bonito durante os passos.
  • O módulo também vem com um jumper ON/OFF para isolar a alimentação do motor de passo.

Pinagem do ULN2003

Pinagem do Driver de Motor de Passo ULN2003

O módulo ULN2003 tem 6 pinos e um conector fêmea:

  • Pino IN1: é usado para acionar o motor. Conecte-o a um pino de saída do Arduino.
  • Pino IN2: é usado para acionar o motor. Conecte-o a um pino de saída do Arduino.
  • Pino IN3: é usado para acionar o motor. Conecte-o a um pino de saída do Arduino.
  • Pino IN4: é usado para acionar o motor. Conecte-o a um pino de saída do Arduino.
  • Pino GND: é um pino de terra comum. Ele DEVE ser conectado tanto ao GND do Arduino quanto ao GND da fonte de alimentação externa.
  • Pino VDD: fornece alimentação para o motor. Conecte-o à fonte de alimentação externa.
  • Conector do Motor: é onde o motor é encaixado.

※ Nota:

  • A tensão da fonte de alimentação externa deve ser igual à tensão do motor de passo. Por exemplo, se um motor de passo funciona com 12V DC, precisamos usar uma fonte de alimentação de 12V. No caso do motor de passo 28BYJ-48, ele funciona com 5V DC, então usaremos uma fonte de alimentação de 5V.
  • Mesmo que um motor de passo precise de uma fonte de alimentação de 5V, por favor, NÃO conecte o pino VDD ao pino 5V do Arduino. Em vez disso, conecte-o a uma fonte de alimentação externa de 5V. Isso porque o motor de passo consome energia demais.

Diagrama de Ligação

Diagrama de Ligação do Arduino com motor de passo e driver ULN2003

This image is created using Fritzing. Click to enlarge image

Observe que não precisamos nos preocupar com a cor dos fios do motor de passo. Basta encaixar o conector macho (no motor de passo 28BYJ-48) no conector fêmea (no driver ULN2003)

Como Programar para controlar um motor de passo

Existem três métodos para controlar um motor de passo:

  • Passo completo (full-step)
  • Meio passo (half-step)
  • Micropasso (micro-step)

Para aplicações simples, podemos usar o método de passo completo. Os detalhes dos três métodos serão apresentados na última parte deste tutorial. Programar esses métodos é complicado. Felizmente, existem muitas bibliotecas que já fazem isso por nós. Só precisamos usar a biblioteca.

O Arduino IDE tem uma biblioteca Stepper embutida. No entanto, não recomendamos que você use essa biblioteca porque:

  • A biblioteca é bloqueante. Isso significa que ela impede o Arduino de fazer outras tarefas enquanto controla o motor de passo.
  • Ela não tem funções suficientes.

Em vez disso, recomendamos que você use a biblioteca AccelStepper. Esta biblioteca suporta:

  • Aceleração
  • Desaceleração.
  • Acionamento em passo completo e meio passo.
  • Vários motores de passo simultâneos, com passos independentes e concorrentes em cada motor.
  • Desvantagem: NÃO suporta acionamento em micropasso

Código Arduino

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-controls-28byj-48-stepper-motor-using-uln2003-driver */ // Include the AccelStepper Library #include <AccelStepper.h> // define step constant #define FULLSTEP 4 #define STEP_PER_REVOLUTION 2048 // this value is from datasheet // Pins entered in sequence IN1-IN3-IN2-IN4 for proper step sequence AccelStepper stepper(FULLSTEP, 11, 9, 10, 8); void setup() { Serial.begin(9600); stepper.setMaxSpeed(1000.0); // set the maximum speed stepper.setAcceleration(50.0); // set acceleration stepper.setSpeed(200); // set initial speed stepper.setCurrentPosition(0); // set position stepper.moveTo(STEP_PER_REVOLUTION); // set target position: 64 steps <=> one revolution } void loop() { // change direction once the motor reaches target position if (stepper.distanceToGo() == 0) stepper.moveTo(-stepper.currentPosition()); stepper.run(); // MUST be called in loop() function Serial.print(F("Current Position: ")); Serial.println(stepper.currentPosition()); }

Passos Rápidos

  • Vá até o ícone Libraries na barra esquerda do Arduino IDE.
  • Pesquise “AccelStepper” e encontre a biblioteca AccelStepper de Mike McCauley
  • Clique no botão Install para instalar a biblioteca AccelStepper.
Biblioteca AccelStepper no Arduino
  • Copie o código acima e abra-o no Arduino IDE
  • Clique no botão Upload no Arduino IDE para carregar o código no Arduino
  • Veja o motor girando. Ele deve:
    • Girar uma revolução no sentido horário e, em seguida,
    • Girar duas revoluções no sentido anti-horário e, em seguida,
    • Girar duas revoluções no sentido horário.

    Esse processo se repete infinitamente.

    • Veja o resultado no Serial Monitor
    ∞
    Newbiely | Arduino IDE 2.3.8
    ──
    ☐
    ✕
    File
    Edit
    Sketch
    Tools
    Help
    Arduino Uno
    Newbiely.ino
    ···
    8 Serial.println("Hello World!");
    Output
    Serial Monitor
    Message (Enter to send message to 'Arduino Uno' on 'COM15')
    New Line
    9600 baud
    Ln 11, Col 1
    Arduino Uno on COM15
    2

Como controlar vários motores de passo 28BYJ-48

Vamos aprender a controlar dois motores de passo de forma independente ao mesmo tempo.

Diagrama de Ligação para dois motores de passo 28BYJ-48

Diagrama de Ligação do Arduino com dois motores de passo e drivers ULN2003

This image is created using Fritzing. Click to enlarge image

Código Arduino para dois motores de passo 28BYJ-48

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-controls-28byj-48-stepper-motor-using-uln2003-driver */ // Include the AccelStepper Library #include <AccelStepper.h> // define step constant #define FULLSTEP 4 #define STEP_PER_REVOLUTION 2048 // this value is from datasheet // Pins entered in sequence IN1-IN3-IN2-IN4 for proper step sequence AccelStepper stepper_1(FULLSTEP, 11, 9, 10, 8); AccelStepper stepper_2(FULLSTEP, 7, 5, 6, 4); void setup() { Serial.begin(9600); stepper_1.setMaxSpeed(1000.0); // set the maximum speed stepper_1.setAcceleration(50.0); // set acceleration stepper_1.setSpeed(200); // set initial speed stepper_1.setCurrentPosition(0); // set position stepper_1.moveTo(STEP_PER_REVOLUTION); // set target position: 64 steps <=> one revolution stepper_2.setMaxSpeed(1000.0); // set the maximum speed stepper_2.setAcceleration(50.0); // set acceleration stepper_2.setSpeed(200); // set initial speed stepper_2.setCurrentPosition(0); // set position stepper_2.moveTo(STEP_PER_REVOLUTION); // set target position: 64 steps <=> one revolution } void loop() { // change direction once the motor reaches target position if (stepper_1.distanceToGo() == 0) stepper_1.moveTo(-stepper_1.currentPosition()); if (stepper_2.distanceToGo() == 0) stepper_2.moveTo(-stepper_2.currentPosition()); stepper_1.run(); // MUST be called in loop() function stepper_2.run(); // MUST be called in loop() function Serial.print(F("stepper_1# current position: ")); Serial.println(stepper_1.currentPosition()); Serial.print(F("stepper_2# current position: ")); Serial.println(stepper_2.currentPosition()); }

Conhecimento Adicional

1. O motor de passo vibra enquanto se move

NÃO se preocupe se o motor de passo vibrar enquanto se move. Essa é uma característica do motor de passo. Podemos reduzir a vibração usando o método de controle em micropasso.

Além disso, por causa dessa característica, se controlarmos corretamente, o motor de passo pode produzir sons musicais como se fosse um instrumento musical. Você pode ver este projeto no Arduino Project Hub.

2. Métodos de controle de motores de passo

  • Passo completo: a unidade de movimento é um passo, que equivale a um valor em graus especificado no datasheet ou no manual do motor de passo.
  • Meio passo: divide cada passo completo em dois passos menores. A unidade de movimento é metade do passo completo. Este método permite que o motor se mova com o dobro da resolução.
  • Micropasso: divide cada passo completo em vários passos menores. A unidade de movimento é uma fração do passo completo. A fração pode ser 1/4, 1/8, 1/16, 1/32 ou até mais. Este método permite que o motor se mova com uma resolução maior. Ele também faz o motor se mover de forma mais suave em baixas velocidades. Quanto maior o divisor, maior a resolução e mais suave o movimento.

Por exemplo, se o datasheet do motor especificar 1.8 grau/passo:

  • Passo completo: o motor pode se mover com 1.8 grau/passo <⇒ 200 passos/revolução
  • Meio passo: o motor pode se mover com 0.9 grau/passo <⇒ 400 passos/revolução
  • Micropasso: o motor pode se mover com 0.45, 0.225, 0.1125, 0.05625 grau/passo <⇒ 800, 1600, 3200, 6400... passos/revolução

O código acima usou o método de controle em passo completo.

3. Problema de Ressonância

Este é um uso avançado. Os iniciantes NÃO precisam se preocupar com isso. Isso acontece em uma faixa de velocidade na qual a taxa de passos é igual à frequência natural do motor. Pode haver uma mudança audível no ruído produzido pelo motor, além de um aumento na vibração. Em aplicações reais, o desenvolvedor DEVE prestar atenção a esse problema.

Vídeo

WARNING

Observe que este tutorial está incompleto. Vamos avisar na nossa página do Facebook quando o tutorial estiver completo. Curta a página para ficar atualizado.

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!