Autor Tema: Ayuda controlar motor a psos  (Leído 1030 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Hansot

  • PIC10
  • *
  • Mensajes: 10
Ayuda controlar motor a psos
« en: 31 de Agosto de 2014, 14:18:24 »
Soy nueva en esto así que discúlpenme xD necesito controlar la velocidad y sentido de giro de un motor a pasos, ya tengo el código y lo simule y parece estar bien pero mi duda es si hay alguna manera mas simple de hacerlo y como colocaría un botón de paro
Gracias!



Código: [Seleccionar]
#include <16F84A.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading

#use delay(clock=4000000)

#byte PORTA=5
#byte PORTB=6

void main()
{

set_tris_A(0xff);
set_tris_B(0b00);
portb=0b00; 
         
          int i;
          i=0;
         
          do{
          do {
          }
          while (!bit_test(PORTA,0));
          do {
          do {
          (bit_set(PORTB,0));
          (bit_set(PORTB,1));
          delay_ms (40);
          (bit_clear(PORTB,0));
          (bit_clear(PORTB,1));
          delay_ms (40);
          (bit_set(PORTB,1));
          (bit_set(PORTB,2));
          delay_ms (40);
          (bit_clear(PORTB,1));
          (bit_clear(PORTB,2));
          delay_ms (40);
          (bit_set(PORTB,2));
          (bit_set(PORTB,3));
          delay_ms (40);
          (bit_clear(PORTB,2));
          (bit_clear(PORTB,3));
          delay_ms (40);
          (bit_set(PORTB,3));
          (bit_set(PORTB,0));
          delay_ms (40);
          (bit_clear(PORTB,0));
          (bit_clear(PORTB,3));
          delay_ms (40);
          }
          while (bit_test(PORTA,1));
         
          do{
          (bit_set(PORTB,0));
          (bit_set(PORTB,1));
          delay_ms (150);
          (bit_clear(PORTB,0));
          (bit_clear(PORTB,1));
          delay_ms (150);
          (bit_set(PORTB,1));
          (bit_set(PORTB,2));
          delay_ms (150);
          (bit_clear(PORTB,1));
          (bit_clear(PORTB,2));
          delay_ms (150);
          (bit_set(PORTB,2));
          (bit_set(PORTB,3));
          delay_ms (150);
          (bit_clear(PORTB,2));
          (bit_clear(PORTB,3));
          delay_ms (150);
          (bit_set(PORTB,3));
          (bit_set(PORTB,0));
          delay_ms (150);
          (bit_clear(PORTB,0));
          (bit_clear(PORTB,3));
          delay_ms (150);
          }
          while (bit_test(PORTA,2));
          delay_ms (7000);
          do{
          (bit_set(PORTB,0));
          (bit_set(PORTB,3));
          delay_ms (40);
          (bit_clear(PORTB,0));
          (bit_clear(PORTB,3));
          delay_ms (40);
          (bit_set(PORTB,3));
          (bit_set(PORTB,2));
          delay_ms (40);
          (bit_clear(PORTB,3));
          (bit_clear(PORTB,2));
          delay_ms (40);
          (bit_set(PORTB,2));
          (bit_set(PORTB,1));
          delay_ms (40);
          (bit_clear(PORTB,2));
          (bit_clear(PORTB,1));
          delay_ms (40);
          (bit_set(PORTB,1));
          (bit_set(PORTB,0));
          delay_ms (40);
          (bit_clear(PORTB,1));
          (bit_clear(PORTB,3));
          delay_ms (40);
          }
          while (bit_test(PORTA,3));
          delay_ms(3000);
         
          i=i+1;
         
          }
          while(i<=5);
          }
          while (true);

}

 :g) :g)

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re: Ayuda controlar motor a psos
« Respuesta #1 en: 04 de Septiembre de 2014, 12:54:55 »
Para controlar la velocidad deberías modificar el valor del retardo (delay_ms (150)).

Un botón de paro, lo pondría en alguno de esos pulsadores de tal manera que cuando suceda dicho evento, inmediatamente ponga a 0L los terminales del ULN2003, y salga del lazo principal.

Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32


 

anything