Advertisement
xdesig

motor 28byj-48

Mar 8th, 2016
223
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.19 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  8     //Definimos as saidas que compoñen as bobinas.
  13. #define M2  9
  14. #define M3  10
  15. #define M4  11
  16.  
  17. #define Iana 0   //Definimos a entrada analoxica para comparar
  18.  
  19.  
  20. //Esta é a variable paso. Como vemos, es unha matriz que inclue cada unha das catro fases durante 8 ciclos, nos que imos alternando a activación de un 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.  
  35. boolean Direcion = true; //Define el sentido del motor.
  36.  
  37. int Steps = 0;       // Define el paso actual de la secuencia
  38.  
  39. int Vanalox = 0;     // Define a variable de lectura analoxica
  40.  
  41. int RETARDO = 1000;     //Tempo en microsegundos que tarda o motor en dar un paso
  42.  
  43. void setup() {
  44.      pinMode(M1, OUTPUT); //Declaramos como saidas as fases do motor
  45.      pinMode(M2, OUTPUT);
  46.      pinMode(M3, OUTPUT);
  47.      pinMode(M4, OUTPUT);
  48.      
  49.      pinMode(Iana, INPUT);
  50. }
  51.  
  52. void loop()
  53.    {
  54.     int Vanalox = analogRead(Iana); // Lemos a entrada analoxica conctada o Joystick
  55.  
  56.  
  57.     if (Vanalox > 520 or Vanalox < 500)      // Se o valor non é o de repouso do Joystick movemos o motor
  58.         {
  59.           if (Vanalox > 520)  {Direcion = true;}  // Definimos o sentido de xiro
  60.           if (Vanalox < 500)  {Direcion = false;} // Cambiamos o sentido de xiro
  61.          
  62.           stepper() ;     // Avanza un paso
  63.        
  64.         if (Vanalox > 1000 or Vanalox < 60) {RETARDO = 60;} // comprobamos se o potenciometro está no extremo para poder axustar a velocidade
  65.        
  66.         else {RETARDO = 500;}  // se non esta cerca do extremo velocidade normal ( poderimaos facer un retardo inverso a resistencia e vaiar a velocidade proporcioal o potenciometro)
  67.  
  68.          delayMicroseconds(RETARDO); // retardamos para o seguinte paso
  69.        
  70.        
  71.           }
  72.      
  73.      delay(1); //Retardo para ler a entrada analoxica
  74.      
  75.      apaga(); // apagamos o motor para consumir menos
  76.      
  77.      
  78.    }
  79.  
  80. void stepper()            //Avanza un paso
  81.    {  digitalWrite( M1, Paso[Steps][ 0] );
  82.       digitalWrite( M2, Paso[Steps][ 1] );
  83.       digitalWrite( M3, Paso[Steps][ 2] );
  84.       digitalWrite( M4, Paso[Steps][ 3] );
  85.       /*
  86.        * En funcion da posición na que estemos da matriz activanse unha fase ou outra.
  87.        * Logo con setDirecion avanzamos unha posición ou a retrocedemos.
  88.        */
  89.       SetDirecion();
  90.    }
  91.  
  92. void SetDirecion() // Establece o  sentido
  93.    {  
  94.       if(Direcion)
  95.          {Steps++;}
  96.       else
  97.          {Steps--;}
  98.  
  99.       Steps =  (Steps+8) %8 ;
  100.    }
  101.  
  102.    void apaga()            //Apaga o motor
  103.    {  digitalWrite( M1, 0 );
  104.       digitalWrite( M2, 0 );
  105.       digitalWrite( M3, 0 );
  106.       digitalWrite( M4, 0 );
  107.    }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement