Advertisement
AguHDz

PicPas_Control_Motor_PaP

May 28th, 2017
260
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 5.63 KB | None | 0 0
  1. {
  2. *  (C) AguHDz 28-05-2017
  3. *  Ultima Actualizacion: 28-05-2017
  4. *
  5. *  Compilador PicPas v.0.6.5 (https://github.com/t-edson/PicPas)
  6. *  Giro de motor paso a paso de 4 polos con botones de START, STOP y
  7.    giros a DERECHA e IZQUIERDA (horario y antihorario).
  8. *
  9. *  Pulsadores:
  10. *    - DERECHA: Memoriza que el giro del motor sea en sentito horario.
  11. *    - IZQUIERDA: Memiriza que el giro del motor sea en sentido antihorario.
  12. *    - START: Inicia el giro del Motor.
  13. *    - STOP: Detiene el giro del Motor.
  14. *
  15. *  Se puede cambiar el sentido del giro sin necesidad de pulsar previamente STOP.
  16. *  Se puede programar el sentodo de giro antes de pulsar START.
  17. *
  18. *  A partir de la version 0.6.5 PicPas implementa la sentencia FOR de la que
  19. *  hace uso el procedimiento Girar de este programa. Tambien se hace uso de
  20. *  los comandos internos SetAsInput y SetAsOutput para configurar los puertos
  21. *  o pines individualmente (equivalente a configurarlos directamente escribido
  22. *  los registros TRISA y TRISB)
  23. }
  24.  
  25. {$FREQUENCY 8 MHZ }
  26. program Motor_Paso_a_Paso;
  27.  
  28. uses PIC16F84A;
  29.  
  30. const
  31.   GIRO_DERECHA   = true;           // Giro a la derecha (sentido horario)
  32.   GIRO_IZQUIERDA = false;          // Giro a la izquierda (sentido antihorario)
  33.   PAUSA_GIRO     = 100;            // Pausa entre giros de 90 grados del motor.
  34.  
  35. var
  36.   Start     : bit absolute PORTA.0; // Pulsador START
  37.   Stop      : bit absolute PORTA.1; // Pulsador STOP
  38.   Derecha   : bit absolute PORTA.2; // Pulsador DERECHA
  39.   Izquierda : bit absolute PORTA.3; // Pulsador IZQUIERDA
  40.   Motor     : byte absolute PORTB;  // Motor Paso a Paso (RB0 a RB4)
  41.   ST_Start  : boolean;              // Memoriza pulsacion de boton START.
  42.   ST_Stop   : boolean;              // Memoriza pulsacion de boton STOP.
  43.   ST_Giro   : boolean;              // Memoriza el sentido de giro del Motor.
  44.  
  45. //***********************************************************************
  46. // PROCEDURE CompruebaPulsadores
  47. // Ademas de comprobar y memorizar la pulsacion de los botones de control
  48. // proporciona pausa en cambio de posicion del eje del motor (velocidad)
  49. //***********************************************************************
  50. procedure CompruebaPulsadores;
  51. begin
  52.   if Start=1 then               // Si se pulsa el boton START el motor gira.
  53.     ST_Start := true;
  54.     ST_Stop  := false;
  55.   elsif Stop=1 then             // Si se pulsa el boton STOP el motor de detiene.
  56.     ST_Start := false;
  57.     ST_Stop  := true;
  58.     Motor    := $00;
  59.   end;
  60.  
  61.   if Derecha=1 then             // Si se pulsa el boton DERECHA el motor gira en sentido horario.
  62.     Motor := $00;               // Detiene el motor temporalmente antes de cambiar sentido de giro.
  63.     ST_Giro := GIRO_DERECHA;    // Memoriza giro a la derecha.
  64.   elsif Izquierda=1 then        // Si se pulsa el boton IZQUIERDA el motor gira en sentido horario.
  65.     Motor := $00;               // Detiene el motor temporalmente antes de cambiar sentido de giro.
  66.     ST_Giro := GIRO_IZQUIERDA;  // Memoriza giro a la izquierda.
  67.   end;
  68.  
  69.   if ST_Start then              // Si el motor esta girando produce pausa  
  70.     delay_ms(PAUSA_GIRO);       // para dar tiempo al movimiento fisico del eje
  71.   end;                          // del motor. Cambiando el valor de PAUSA_GIRO se
  72. end;                            // puede ajustar la velocidad del motor.
  73.  
  74. //***********************************************************************
  75. // PROCEDURE Girar
  76. // Gira el motor Paso a Paso en el sentido que se le haya indicado.
  77. //***********************************************************************
  78. procedure Girar;
  79. var contador : byte;
  80. begin
  81.   for contador:=1 to 4 do          // Motor PaP de 4 posiciones
  82.     CompruebaPulsadores;           // Comprueba si se ha presionado algun pulsador.
  83.     if contador=1 then             // Si inicio de secuencia de giro.
  84.       if ST_Giro then Motor:=$08;  // Inicia giro a la derecha (horario)
  85.       else Motor:=$01;             // Inicia giro a la izquierda (antihorario)
  86.       end;
  87.     else
  88.       if ST_Giro then Motor:=Motor>>1; // Continua giro a la derecha.
  89.       else Motor:=Motor<<1;            // Continua giro a la izquierda.
  90.       end;
  91.     end;    
  92.   end;
  93. end;
  94.  
  95. //***********************************************************************
  96. // PROCEDURE Parar
  97. // Detiene el giro del motor Paso a Paso.
  98. //***********************************************************************
  99. procedure Parar;
  100. begin
  101.   Motor := $00;              // Detiene el Motor.
  102.   CompruebaPulsadores;       // Comprueba la pulsacion de botones.
  103. end;
  104.  
  105. //***********************************************************************
  106. // PROGRAMA PRINCIPAL ***************************************************
  107. //***********************************************************************
  108. begin
  109.   // ------------- SETUP
  110.   SetAsInput(Start);         // Configura el Pin Start como entrada.
  111.   SetAsInput(Stop);          // Configura el Pin Stop como entrada.
  112.   SetAsInput(Derecha);       // Configura el Pin Derecha como entrada.
  113.   SetAsInput(Izquierda);     // Configura el Pin Izquierda como entrada.
  114.   SetAsOutput(Motor);        // Configura el Puerto Motor como salida.
  115.  
  116.   ST_Giro  := GIRO_DERECHA;  // Sentido de giro tras reinicio de uC.
  117.   ST_Start := false;         // Tras reinico de uC el motor estara parado
  118.   ST_Stop  := true;          // a la espera de que se pulse START
  119.   Motor := $00;              // Motor parado.
  120.   // ------------ END SETUP
  121.  
  122.   // ------------ LOOP
  123.   while true do
  124.     if (ST_Start and not ST_Stop) then Girar;    // El Motor gira.
  125.     elsif (not ST_Start and ST_Stop) then Parar; // El Motor de detiene.
  126.     end;
  127.   end;
  128.   // ------------ END LOOP
  129. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement