Motor de Passo com Módulo Driver ULN2003

Esse exemplo de projeto  é o mais simples para controle de um motor de passo (stepper motor). Mesmo assim, não pode ser desprezado. O módulo de controle com o chip ULN2003 facilita muito a montagem em um projeto. Possui uma vantagem de ser controlado com precisão num sistema de circuito aberto (nenhuma informação de feedback sobre a posição é necessária). Ou seja, elimina a necessidade de caros sistemas de detecção, como codificadores ópticos. Sua posição é conhecida somente através do controle dos impulsos de entrada. Esse motor possui uma caixa de redução embutida (motivo o eixo aparente do motor não estar no centro), daí sua lentidão, porém um grande torque em relação ao seu tamanho.
Detalhes do Motor 28YBJ-48 Stepper Motor :
  • Ângulo de Passo (sequência de 8 Passos: Motor Interno sozinho): 5.625° (64 passos por revolução)
  • Ângulo de Passo ( sequência de 4 Passos: Motor Interno sozinho): 11,25° (32 passos por revolução)
  • Gear Relação de redução: 1/64 (Não é realmente exato: provavelmente 63.68395:1)
        Então: leva (64 * 64 = 4096 passos por volta do eixo de saída. Em sequência de 8 passos.
        Então: leva (32 * 64 = 2048 passos por volta do eixo de saída. Em sequência de 4 passos.
        NOTA: Na biblioteca "Stepper Library" é executado em modo de 4 passos.

 Faça a conexão dos conforme a indicação abaixo:
 IN1 --> Porta Digital 4 do Arduino
 IN2 --> Porta Digital 6 do Arduino  --> Porta Digital 5 para a Biblioteca CustomStepper.h
 IN3 --> Porta Digital 5 do Arduino  --> Porta Digital 6 para a Biblioteca CustomStepper.h
 IN4 --> Porta Digital 7 do Arduino
 Alimente o motor de passo com +5V e o GND provenientes do Arduino.

Motor de Passo com Módulo Driver ULN2003

Depois da ligação dos fios, carregue o código:

 1  #include <Stepper.h>

 2  #define STEPS 32 // Taxa de variação de velocidade "Stepper Library" é executado em modo de 4 passos

 3 

 4  Stepper stepper(STEPS, 4, 5, 6, 7);   // Define os parametros de ligação do motor de passo.

 5 

 6  void setup()

 7  {

 8 

 9  }

10 

11  void loop()

12  {

13      stepper.setSpeed(700); // Máxima velocidade de rotação do eixo  para esse exemplo é 700 passos por minuto

14      stepper.step(2048); // 2048 passos para uma rotação de 360° ( 32 * 64 = 2048 passos por volta do eixo de saída. Em sequência de 4 passos)

15      delay(1000);

16      stepper.setSpeed(400);

17      stepper.step(-1024);  // Volta 1024 passos, ou seja, 180° no sentido contrário

18      delay(200);

19  }

Programa bem simples como pode-se observar, que permite um giro completo em um sentido e meio giro no sentido contrário com velocidades distintas.
A seguir é apresentado um outro código com a biblioteca  "CustomStepper.h":


 1  #include <CustomStepper.h>
 2 
 3  CustomStepper stepper(4, 5, 6, 7, (byte[])
 4  {8, B1000, B1100, B0100, B0110, B0010, B0011, B0001,
 5  B1001}, 4075.7728395, 12, CW);
 6 
 7  boolean rotate1 = false;
 8 
 9  void setup()
10  {
11      stepper.setRPM(12);            // Define a velocidade do motor
12 
13      stepper.setSPR(4075.7728395);  // Define o numero de passos por rotacao
14 
15      // (64 * 25792)/405 =  4075.7728395
16      // (32 * 25792)/405 =  2037.88642
17  }
18 
19  void loop()
20  {
21      if (stepper.isDone() && rotate1 == false)
22      {
23          delay(1000);
24          stepper.setDirection(CW);
25          //stepper.rotateDegrees(360);  // Define o ângulo que vai girar
26          stepper.rotate(2);            //  Define o numero de rotacoes
27          rotate1 = true;
28      }
29 
30      if (stepper.isDone() && rotate1 == true)
31      {
32          delay(1000);
33          stepper.setDirection(CCW);    //  Define o sentido de rotacao (CCW = Anti-horario)
34          //stepper.rotateDegrees(180);  // Define o ângulo que vai girar
35          stepper.rotate(1);            //  Define o numero de rotacoes
36          rotate1 = false;
37      }
38 
39      stepper.run();                      //   Comando obrigatorio para funcionamento da biblioteca
40  }
41 




Percebemos que a biblioteca  "CustomStepper.h" é um pouco mais rica em comandos em relação à "Stepper.h", isso permite mais facilidade no controle do motor de passo.

Para finalizar esse tópico de Motor de Passo com o Módulo ULN2003, é apresentado aqui um projeto alternativo de controle pelo Monitor Serial, onde foi colocado ao motor de passo um transferidor para auxiliar a observação da precisão desse motor a qual é bem razoável.  

Motor de Passo com Módulo Driver ULN2003

Eis o código


 1  #include <CustomStepper.h>

 2  CustomStepper stepper(4, 5, 6, 7, (byte[])

 3  {8, B1000, B1100, B0100, B0110, B0010, B0011, B0001, B1001},

 4   4075.7728395, 12, CW);

 5  float veloc;

 6  float ang;

 7 

 8  void setup()

 9  {

10      while (!Serial);

11      Serial.begin(9600);

12      stepper.setSPR(4075.7728395);  // Define o numero de passos por rotacao

13      Serial.println("Entre com a velocidade em RPM e Angulo em graus, respectivamente:  ");

14  }

15 

16  void loop()

17  {

18      if(Serial.available())

19      {

20          veloc = Serial.parseFloat();

21          ang   = Serial.parseFloat();

22 

23          if (stepper.isDone() && ang >= 0)

24          {

25              stepper.setRPM(veloc);     // Define a velocidade do motor

26              stepper.setDirection(CW);  // Define o sentido de rotacao (CW = Horario)

27              stepper.rotateDegrees(ang);// Define o ânngulo que vai girar

28          }

29          if (stepper.isDone() && ang < 0)

30          {

31              stepper.setRPM(veloc);      // Define a velocidade do motor

32              stepper.setDirection(CCW);  // Define o sentido de rotacao (CCW = Anti-horário)

33              stepper.rotateDegrees(-ang);// Define o ângulo que vai girar

34          }

35          Serial.print(ang);

36          Serial.print(" graus com ");

37          Serial.print(veloc);

38          Serial.print(" RPM de velocidade ");

39          Serial.println(" ");

40      }

41      stepper.run();

42  }
print(ang);
41          Serial.print(" graus com ");
42          Serial.print(veloc);
43          Serial.print(" RPM de velocidade ");
44          Serial.println(" ");
45      }
46      stepper.run();
47  }
 

Depois do código carregado, é possível observar a facilidade de controle de ângulo e velocidade pelo Monitor Serial.


Nenhum comentário:

Postar um comentário