Advertisement
xdesig

motor paso a paso unipolar ( uln)

Mar 14th, 2016
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.14 KB | None | 0 0
  1. /*Control de un motor paso a paso 28 byj-48.
  2.  *
  3.  * Este motor unipolar está conectado mediante un xogo (4)de Pardarlington ULN 2003
  4.   *
  5.   * Este programa vai excitando as fases do motor, primero unha, logo esa misma e a seguinte, después a siguinte.
  6.   *
  7.  * Con este parámetro, consiguese un motor equilibrado, que non consuma excesiva potencia e sen perder demasiado par.
  8.  */
  9.  
  10.  
  11.  
  12. #define M1  5     //Definimos as saidas que compoñen as bobinas.
  13. #define M2  6
  14. #define M3  7
  15. #define M4  8
  16.  
  17. #define Iana 0   //Definimos a entrada analoxica para comparar
  18.  
  19.  
  20. //Esta é a variable paso. Como vemos, é unha matriz que inclue cada unha das catro fases durante 8 ciclos, nos que imos alternando a activación de unha o duas fases.
  21.  
  22. int Paso [ 8 ][ 4 ] =
  23.    {  {1, 0, 0, 0},
  24.       {1, 1, 0, 0},
  25.       {0, 1, 0, 0},
  26.       {0, 1, 1, 0},
  27.       {0, 0, 1, 0},
  28.       {0, 0, 1, 1},
  29.       {0, 0, 0, 1},
  30.       {1, 0, 0, 1}
  31.    };
  32.  
  33.  
  34. boolean Direcion = true; //Define el sentido del motor.
  35.  
  36. int Steps = 0;       // Define el paso actual de la secuencia
  37.  
  38. int Vanalox = 0;     // Define a variable de lectura analoxica
  39.  
  40. int RETARDO = 1000;     //Tempo en microsegundos que tarda o motor en dar un paso
  41.  
  42. void setup() {
  43.      pinMode(M1, OUTPUT); //Declaramos como saidas as fases do motor
  44.      pinMode(M2, OUTPUT);
  45.      pinMode(M3, OUTPUT);
  46.      pinMode(M4, OUTPUT);
  47.      
  48.      pinMode(Iana, INPUT);
  49. }
  50.  
  51. void loop()
  52.    {
  53.     int Vanalox = analogRead(Iana); // Lemos a entrada analoxica conctada o Joystick
  54.  
  55.  
  56.     if (Vanalox > 520 or Vanalox < 500)      // Se o valor non é o de repouso do Joystick movemos o motor
  57.         {
  58.           if (Vanalox > 520)  {Direcion = true;}  // Definimos o sentido de xiro
  59.           if (Vanalox < 500)  {Direcion = false;} // Cambiamos o sentido de xiro
  60.          
  61.           stepper() ;     // Avanza un paso
  62.        
  63.         if (Vanalox > 1000 or Vanalox < 60) {RETARDO = 900;} // comprobamos se o potenciometro está no extremo para poder axustar a velocidade
  64.        
  65.         else {RETARDO = 90000;}  // se non esta cerca do extremo velocidade normal ( poderimaos facer un retardo inverso a resistencia, e vaiar a velocidade proporcional o potenciometro)
  66.  
  67.          delayMicroseconds(RETARDO); // retardamos para o seguinte paso
  68.                
  69.           }
  70.      
  71.      
  72.     // apaga(); // apagamos o motor para consumir menos
  73.      
  74.      
  75.    }
  76.  
  77. void stepper()            //Avanza un paso
  78.    {  digitalWrite( M1, Paso[Steps][ 0] );
  79.       digitalWrite( M2, Paso[Steps][ 1] );
  80.       digitalWrite( M3, Paso[Steps][ 2] );
  81.       digitalWrite( M4, Paso[Steps][ 3] );
  82.       /*
  83.        * En funcion da posición na que estemos da matriz activanse unha fase ou outra.
  84.        * Logo con setDirecion avanzamos unha posición ou a retrocedemos.
  85.        */
  86.       SetDirecion();
  87.    }
  88.  
  89. void SetDirecion() // Establece o  sentido
  90.    {  
  91.       if(Direcion)
  92.          {Steps++;}
  93.       else
  94.          {Steps--;}
  95.  
  96.       Steps =  (Steps+8) %8 ;
  97.    }
  98.  
  99.    void apaga()            //Apaga o motor
  100.    {  digitalWrite( M1, 0 );
  101.       digitalWrite( M2, 0 );
  102.       digitalWrite( M3, 0 );
  103.       digitalWrite( M4, 0 );
  104.    }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement