control de motor paso a paso a través de un pic

16
Control de Motor paso a paso a través de un PIC 1. #include <16F877.h> 2. #use delay(clock=1000000) 3. #fuses NOWDT,NOPROTECT,NOLVP,NODEBUG,PUT 4. int retardo; 5. void main() 6. { retardo=300; //CON ESTE VALOR SE CAMBIA LA VELOCIDAD DE GIRO DEL MOTOR 7. WHILE(input(PIN_C0)) // INICIALIZO LOS PINES EN VALOR BAJO, PARA QUE EL MOTOR NO SE MUEVA 8. { 9. OUTPUT_LOW(PIN_B0); 10. OUTPUT_LOW(PIN_B1); 11. OUTPUT_LOW(PIN_B2); 12. OUTPUT_LOW(PIN_B3); 13. 14. } 15. do{ 16. if(!input(pin_C0)&&(input(pin_c1))) // GIRO EN UN SENTIDO (GIRO 1) 17. { 18. OUTPUT_LOW(PIN_B0); 19. OUTPUT_HIGH(PIN_B1); 20. OUTPUT_LOW(PIN_B2); 21. OUTPUT_LOW(PIN_B3);

Upload: niyuby-blanco-c

Post on 04-Sep-2015

14 views

Category:

Documents


1 download

DESCRIPTION

Programacion y pic

TRANSCRIPT

Control de Motor paso a paso a travs de un PIC1. #include 2. #use delay(clock=1000000)3. #fuses NOWDT,NOPROTECT,NOLVP,NODEBUG,PUT4. int retardo; 5. void main() 6. { retardo=300; //CON ESTE VALOR SE CAMBIA LA VELOCIDAD DE GIRO DEL MOTOR 7. WHILE(input(PIN_C0)) // INICIALIZO LOS PINES EN VALOR BAJO, PARA QUE EL MOTOR NO SE MUEVA8. {9. OUTPUT_LOW(PIN_B0);10. OUTPUT_LOW(PIN_B1);11. OUTPUT_LOW(PIN_B2);12. OUTPUT_LOW(PIN_B3);13. 14. }15. do{16. if(!input(pin_C0)&&(input(pin_c1))) // GIRO EN UN SENTIDO (GIRO 1) 17. { 18. OUTPUT_LOW(PIN_B0);19. OUTPUT_HIGH(PIN_B1);20. OUTPUT_LOW(PIN_B2);21. OUTPUT_LOW(PIN_B3);22. delay_ms(retardo); }if(!input(pin_C0)&&(input(pin_c1))) // GIRO EN UN SENTIDO (GIRO 1) 23. { 24. OUTPUT_LOW(PIN_B0);25. OUTPUT_LOW(PIN_B1);26. OUTPUT_HIGH(PIN_B2);27. OUTPUT_LOW(PIN_B3);28. delay_ms(retardo); }if(!input(pin_C0)&&(input(pin_c1))) // GIRO EN UN SENTIDO (GIRO 1) 29. { 30. OUTPUT_LOW(PIN_B0);31. OUTPUT_LOW(PIN_B1);32. OUTPUT_LOW(PIN_B2);33. OUTPUT_HIGH(PIN_B3);34. delay_ms(retardo); }if(!input(pin_C0)&&(input(pin_c1))) // GIRO EN UN SENTIDO (GIRO 1) 35. { 36. OUTPUT_HIGH(PIN_B0);37. OUTPUT_LOW(PIN_B1);38. OUTPUT_LOW(PIN_B2);39. OUTPUT_LOW(PIN_B3);40. delay_ms(retardo); }if(input(pin_C0)&&(!input(pin_c1)))// GIRO EN UN SENTIDO (GIRO 2) 41. { 42. OUTPUT_HIGH(PIN_B0);43. OUTPUT_LOW(PIN_B1);44. OUTPUT_LOW(PIN_B2);45. OUTPUT_LOW(PIN_B3);46. delay_ms(retardo); }if(input(pin_C0)&&(!input(pin_c1))) // GIRO EN UN SENTIDO (GIRO 2) 47. { 48. OUTPUT_LOW(PIN_B0);49. OUTPUT_LOW(PIN_B1);50. OUTPUT_LOW(PIN_B2);51. OUTPUT_HIGH(PIN_B3);52. delay_ms(retardo); }if(input(pin_C0)&&(!input(pin_c1))) // GIRO EN UN SENTIDO (GIRO 2) 53. { 54. OUTPUT_LOW(PIN_B0);55. OUTPUT_LOW(PIN_B1);56. OUTPUT_HIGH(PIN_B2);57. OUTPUT_LOW(PIN_B3);58. delay_ms(retardo); }if(input(pin_C0)&&(!input(pin_c1))) // GIRO EN UN SENTIDO (GIRO 2) 59. { 60. OUTPUT_LOW(PIN_B0);61. OUTPUT_HIGH(PIN_B1);62. OUTPUT_LOW(PIN_B2);63. OUTPUT_LOW(PIN_B3);64. delay_ms(retardo); }}while(true); 65. }66. Programa utilizado: CCS CompilerControl de velocidad para un Motor Paso a Paso para el PIC 16f877a

#include #device adc=8#FUSES NOWDT, RC, PUT, NOPROTECT,NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT#use delay(clock=20000000)#org 0x1f00,0x1fff{}#build (reset=0x04)#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)#define t1 delay_ms(200);#include //#device ICD=TRUE//#fuses HS,NOWDT,NOPROTECT,NOLVP//#use delay(clock=20000000)//#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)#use FAST_IO(B)#use FAST_IO(C)#byte FASES= 0x06int velocidad=300;void GiroDerecha(){output_b (0x30); //paso 1delay_ms(velocidad);output_b (0x60); //paso 2delay_ms(velocidad);output_b (0xc0); //paso 3delay_ms(velocidad);output_b (0x90); // paso 4delay_ms(velocidad);}void GiroIzquierda(){FASES=0b001100; //paso 1delay_ms(velocidad);FASES=0b001001; //paso 2delay_ms(velocidad);FASES=0b000011; //paso 3delay_ms(velocidad);FASES=0b001100; // paso 4delay_ms(velocidad);}void main(void){char valor=0;SET_TRIS_B(0x00);while(TRUE){if(kbhit())valor=getc();switch (valor){case 'a'://motor paradoFASES=0b000000;break;

case 'b': //Marcha Manual Lenta Izquierdavelocidad=10;GiroIzquierda();break;

case 'c': //Motor paradoFASES=0b000000;break;

case 'd': //Marcha manual rpida izquierdavelocidad=3;GiroIzquierda();break;

case 'e': //Motor paradoFASES=0b000000;break;

case 'f': //Marcha manual lenta derechavelocidad=10;GiroDerecha();break;

case 'g': //Motor paradoFASES=0b000000;break;

case 'h': //Marcha manual rpida derechavelocidad=3;GiroDerecha();break;

case 'A': //Marcha Automtica lenta izquierdavelocidad=10;GiroIzquierda();break;

case 'B': //Marcha Automtica lenta izquierdavelocidad=10;GiroIzquierda();break;

case 'C': //Marcha Automtica rpida izquierdavelocidad=3;GiroIzquierda();break;

case 'D': //Marcha Automtica rpida izquierdavelocidad=3;GiroIzquierda();break;

case 'E': //Marcha automtica lenta derechavelocidad=10;GiroDerecha();break;case 'F': //Marcha automtica lenta derechavelocidad=10;GiroDerecha();break;

case 'G': //Marcha automtica rpida derechavelocidad=3;GiroDerecha();break;

case 'H': //Marcha automtica rpida derechavelocidad=3;GiroDerecha();break;case 'n':break;

default:velocidad=15;break;}

}}

zona de codigo AVR Studio 4

PROGRAMADO: jose yovany rojas tecnologo BIOMEDICA SENA CEET *graduacion 2013*ESTUDIANTE INGENIERIA FUNDACION UNIVERSIDAD CENTRAL *activo*

/*sena CEET biomedica 28/09/2012********************************/

#include // Libreria standar#include // Libreria para usar puertos de entrada y salidas#include // Libreria para retardos

int main (void) { DDRD= 0b11110100; // declaran los bit 7 al 4 como salida; 0 y 1 como entrada PORTD=0b00000011; // activamos resistencias pull-up en los bit 1 y 0 DDRB= 0b00111001; char A,B; //variable de tipo caracter char i;

while(1) { A=PIND & 0b00000001; // bit 1 activa pulsador 1 pind es nombrar el puerto B=PIND & 0b00000010; // bit 2 activa pulsador 2 for(i=0;i