0% encontró este documento útil (0 votos)
35 vistas3 páginas

Control de motores paso a paso en C

El documento describe el control de motores paso a paso para mover un sistema en dos ejes, pitch y yaw, mediante la recepción de comandos seriales. Se definen constantes y variables para controlar los pines de dirección y paso de cada motor, y se implementan funciones para realizar los movimientos en cada eje y apagar los motores.

Cargado por

diego
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
35 vistas3 páginas

Control de motores paso a paso en C

El documento describe el control de motores paso a paso para mover un sistema en dos ejes, pitch y yaw, mediante la recepción de comandos seriales. Se definen constantes y variables para controlar los pines de dirección y paso de cada motor, y se implementan funciones para realizar los movimientos en cada eje y apagar los motores.

Cargado por

diego
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

P1.

c 15/10/2018 13:21:24

1: const int yaw_steppin = 7;


2: const int yaw_dirpin = 9;
3: const int yaw_sensor = 2;
4: int yaw_grados = 0;
5: const int pitch_steppin = 10;
6: const int pitch_dirpin = 12;
7: const int pitch_sensor = 5;
8: int pitch_grados = 0;
9: const int tiempo = 5;
10: int retardo=10;
11: int dato_rx;
12: int numero_pasos = 0;
13: String leeCadena;
14:
15: void setup(){
16: pinMode(pitch_steppin,OUTPUT);
17: pinMode(pitch_dirpin,OUTPUT);
18: pinMode(pitch_sensor,INPUT);
19: pinMode(yaw_steppin,OUTPUT);
20: pinMode(yaw_dirpin,OUTPUT);
21: pinMode(yaw_sensor,INPUT);
22: [Link](9600);
23: }
24: void loop(){
25: numero_pasos=0;//resetea número de pasos
26: dato_rx=0; //borra variable recibida
27: leeCadena = "";//borra buffer
28: while ([Link]()){
29: delay(retardo); /// Lectura Serial
30: char c = [Link](); /// del comando enviado
31: leeCadena += c; /// desde la interfaz
32: } /// gráfica dato_rx
33: if ([Link]()>0){ /// 8 arriba, 2 abajo
34: /// 4 izquierda, 6 derecha
35: dato_rx = [Link]();/// 1 resetear azimut
36: } /// 3 resetear elevacion
37: ///////////////////////// Elegir accion
38: switch (dato_rx){
39: case 2 :
40: while (34>numero_pasos){
41: paso_levantar();
42: numero_pasos = numero_pasos + 1;
43: }
44: pitch_grados +=1;
45: [Link]("Elevacion: ");
46: [Link](pitch_grados);
47: break;
48: case 8 :
49: while (34>numero_pasos){
50: paso_bajar();
51: numero_pasos = numero_pasos + 1;
52: }
53: pitch_grados -=1;
54: [Link]("Elevacion: ");
55: [Link](pitch_grados);
56: break;
57: case 6 :

1/3 mikroC PRO for 8051 by mikroElektronika


P1.c 15/10/2018 13:21:24

58: while (33>numero_pasos){


59: paso_der();
60: numero_pasos = numero_pasos + 1;
61: }
62: yaw_grados +=1;
63: [Link]("Azimut: ");
64: [Link](yaw_grados);
65: break;
66: case 4 :
67: while (33>numero_pasos){
68: paso_izq();
69: numero_pasos = numero_pasos + 1;
70: }
71: yaw_grados -=1;
72: [Link]("Azimut: ");
73: [Link](yaw_grados);
74: break;
75: case 80 :
76: [Link]("Reseteando a elevacion 0 grados");
77: while (digitalRead(pitch_sensor)==LOW){
78: paso_bajar();
79: }
80: pitch_grados=0;
81: [Link]("Elevacion 0 grados!");
82: break;
83: case 40 :
84: [Link]("Reseteando al norte");
85: while (digitalRead(yaw_sensor)==LOW){
86: paso_izq();
87: }
88: yaw_grados=0;
89: [Link]("Acimut 0 grados!");
90: break;
91: default : printf("invalido"); break;
92: }
93: apagado_pitch();
94: apagado_yaw();
95: }
96: ////////////////////////////
97: void paso_levantar(){
98: digitalWrite(pitch_dirpin,HIGH);
99: digitalWrite(pitch_steppin,HIGH);
100: delay(tiempo);
101: digitalWrite(pitch_steppin,LOW);
102: delay(tiempo);
103: }
104: void paso_bajar(){
105: digitalWrite(pitch_dirpin,LOW);
106: digitalWrite(pitch_steppin,HIGH);
107: delay(tiempo);
108: digitalWrite(pitch_steppin,LOW);
109: delay(tiempo);
110: }
111: void paso_der(){
112: digitalWrite(yaw_dirpin,HIGH);
113: digitalWrite(yaw_steppin,HIGH);
114: delay(tiempo);

2/3 mikroC PRO for 8051 by mikroElektronika


P1.c 15/10/2018 13:21:24

115: digitalWrite(yaw_steppin,LOW);
116: delay(tiempo);
117: }
118: void paso_izq(){
119: digitalWrite(yaw_dirpin,LOW);
120: digitalWrite(yaw_steppin,HIGH);
121: delay(tiempo);
122: digitalWrite(yaw_steppin,LOW);
123: delay(tiempo);
124: }
125: void apagado_pitch(){ // Apagado del Motor
126: digitalWrite(pitch_steppin, LOW);
127: digitalWrite(pitch_dirpin, LOW);
128: }
129: void apagado_yaw(){ // Apagado del Motor
130: digitalWrite(yaw_steppin, LOW);
131: digitalWrite(yaw_dirpin, LOW);
132: }

3/3 mikroC PRO for 8051 by mikroElektronika

También podría gustarte