Framework Arduino II: Aula 21 Motores de Passo Parte III Bibliotecas

Imagem meramente ilustrativa


Recapitulando

   Já vimos como usar um motor de passo com driver, como alterar o sentido da rotação, com alterar a frequência da rotação e até como alterar o ângulo de passo. Tudo isso utilizando um driver e um pouco de código.

    Para quem achou isso muito difícil temos a aula de hoje que é sobre o uso de bibliotecas para facilitar o controle de Motor de Passo

Bibliotecas para controle de Motor de Passo

    Você viu que podemos controlar o motor de passo sem o uso de bibliotecas. No entanto bibliotecas otimizadas facilitam a codificação e permitem um maior controle do motor com pouco código.

    Existem várias bibliotecas para controle de motor de passo e o estudante mais dedicado poderá fazer a sua própria biblioteca, seja ela começada do zero ou baseada em alguma biblioteca já consolidada pelo mercado.

    Entre as mais populares hoje em dia temos a StepperDriver e a TMCStepper que receberam mais de 500 estrelas e tiveram mais de 200 forks entre a bibliotecas documentadas pela arduino.cc

    A StepperDriver é uma biblioteca que pode ser utilizada com motores de passo genéricos utilizando os pinos STEP e DIR de módulos drivers como A4988, DRV8824, DRV8825, DRV8834, DRV8880 suportando o modo de controle de passos (micro steps) e aceleração. Já a TMCStepper é destinada a motores da marca Trinamic.

    Outras duas mais antigas e muito utilizadas nos tutorias pela Web são a Stepper e a AccelStepper, ambas suportadas pelo Wokwi com alguns exemplos básicos disponibilizados pelo suporte da plataforma, mas que não deixam claro a utilização da pinagem.

 Biblioteca StepperDriver

    Por ser uma biblioteca mais nova e que dá suporte para drivers mais recentes como a DRV8834, capaz de trabalhar até com um modo de controle de passo de 1/32, vou utilizá-la como exemplo para montagem. O GitHUb do mantenedor tem outros exemplos de utilização mais sofisticados, mas vou focar no básico.

Montagem

    Como o Wokwi não tem o DRV8834, vou utilizar a A4988 com a biblioteca StepperDriver e para utilização dos exemplos, o mantenedor da biblioteca sugere as seguintes conexões com os pinos do Arduino:

  • Pino 8 ligado ao terminal DIR do driver que controla o sentido da rotação
  • Pino 9 ligado ao terminal STEP do driver que controla os pulsos para o passo
  • Pinos 10, 11, 12 ligados respectivamente aos terminais MS1, MS2 e MS3 do driver
  • Pino 13 pode ser ligado ao RESET, mas no nosso caso vamos manter a ligação com o SLEEP

    É claro que você pode modificar esses pinos, mas estou usando essas conexões assim você poderá usar essa mesma montagem para testar os outros exemplos do GitHub. Como sempre vamos disponibilizar uma montagem pronta para ganhar tempo, basta você acessar o Wokwi com sua conta e salvar uma cópia nos seus projetos:

Simulação do Wokwi com A4988 e biblioteca StepperDriver
Simulação do Wokwi com A4988 e biblioteca StepperDriver


    Link: https://wokwi.com/projects/415264261703876609

Sketch

    Esse Sketch é bem simples quando comparado com os das últimas aulas, mas tome cuidado porque o Wokwi NÃO instala automaticamente esta biblioteca. Se você fez uma cópia do nosso projeto, a biblioteca foi junto.

    Caso contrário, você precisará ir até o Library Manager, clicar em +, digitar o nome da biblioteca, localiza-la na lista e clicar nela para instalar:

Instalando a biblioteca StepperDriver
Instalando a biblioteca StepperDriver

    Caso você esteja utilizando a Arduino IDE, poderá instala-la no Gerenciador de Bibliotecas:

Instalando a biblioteca na Arduino IDE
Instalando a biblioteca na Arduino IDE

    Dito isso vamos ao código. Na primeira linha temos o comando para incluir a classe e métodos que serão utilizados da biblioteca StepperDriver para o driver específico A4988. Nos exemplos do GitHub da biblioteca, muitas vezes o mantenedor coloca comentários nos códigos que são específicos para um driver, devendo o desenvolvedor "descomentar" o código que for utilizado.

    Nas demais linhas temos a definição de macros que poderiam também ser constantes para definir os pinos seguindo a sugestão do mantenedor da biblioteca. Também declarei quatro variáveis: 

  • rpm ou rotação por minuto para especificar a velocidade do motor, 
  • rotacao para especificar o ângulo que será feito, por exemplo, 360 para uma volta completa, 180 para meia volta, etc.
  • passos_por_rotacao  e controle_de_pass que estão diretamente relacionados ao modo de controle de passo e ângulo de passo que estudamos em outras aulas

    Na linha 11 é que vemos a biblioteca em ação quando instanciamos um objeto chamado stepper com base na classe A4988, utilizando os parâmetros dos pinos definidos. Na função setup() apenas iniciamos esse objeto para trabalhar com os valores de RPM e controle de passo adotados. Lembrando que no Wokwi eu só consigo trabalhar com controle de passo FULL e HALF.

    No loop eu começo instruindo o objeto stepper a usar o método rotate() para rodar o ângulo do valor da rotação. Como eu adotei 360 no início do programa, ele vai dar uma volta completa. Dei um tempo de 3 segundos para você assimilar o que aconteceu com o delay(), depois eu mando ele dar meia-volta.

    Em seguida ele dá 1/4 de volta, mais outro 1/4 de volta, completando ao todo duas voltas ou 400 passos (steps), como mostra o motor do Wokwi. Depois eu uso o método move() para fazer ele rodar no sentido inverso e parar no mesmo ponto que ele estava.

    Como ele faz isso duas vezes, desconta do número de passos, terminando o ciclo na marca 0 steps.

  1. #include "A4988.h"
  2. #define psentido 8
  3. #define ppasso 9
  4. #define pms1 10
  5. #define pms2 11
  6. #define pms3 12
  7. int rpm=120;
  8. int rotacao=360;
  9. int passos_por_rotacao=200;
  10. int controle_de_passo=1; // 1=full, 2=half, etc
  11. A4988 stepper(passos_por_rotacao, psentido, ppasso, pms1, pms2, pms3);

  12. void setup() {
  13.   stepper.begin(rpm, controle_de_passo);
  14. }
  15. void loop() {
  16.     stepper.rotate(rotacao);
  17.     delay(3000);
  18.     stepper.rotate(rotacao/2);
  19.     delay(3000);
  20.     stepper.rotate(rotacao/4);
  21.     delay(3000);
  22.     stepper.rotate(rotacao/4);
  23.     delay(3000);     
  24.     stepper.move(-passos_por_rotacao*controle_de_passo);
  25.     delay(3000);  
  26.     stepper.move(-passos_por_rotacao*controle_de_passo);
  27.     delay(3000);            
  28. }

       Você deve ter reparado que, com apenas uma linha eu fiz ele dar uma volta completa e com outra linha eu posso fazer ele dar outra volta, mas no sentido contrário. Viu que é bem mais fácil com a biblioteca? Aula que vem iniciámos outro assunto.

Próxima Aula                                                                                                                        Aula Anterior

Referências

ARDUINO DOCS. StepperDriver. Disponível em <https://docs.arduino.cc/libraries/stepperdriver> Acesso em 21 nov 2024.

BLOG ELETROGATRE. Tudo Sobre DRIVER A4988 e Motor de Passo. Disponível em <https://blog.eletrogate.com/driver-a4988-motor-de-passo-usando-o-arduino/> Acesso em 21 nov 2024.

BLOG DA ROBÓTICA. Como acionar motor de passo com Driver ULN2003 e Arduino. Disponível em <https://www.blogdarobotica.com/2022/06/30/como-acionar-motor-de-passo-com-driver-uln2003-e-arduino/> Acesso em 21 nov 2024.

WOKWI. Referência do wokwi-a4988. Disponível em <https://docs.wokwi.com/pt-BR/parts/wokwi-a4988> Acesso em 21 nov 2024.

WOKWI. Referência do wokwi-stepper-motor. Disponível em <https://docs.wokwi.com/pt-BR/parts/wokwi-stepper-motor> Acesso em 21 nov 2024.