ArduinoMega2560_SPI 1.0
Cargando...
Buscando...
Nada coincide
motorStep.h
Ir a la documentación de este archivo.
1#ifndef MOTOR_PASO_H
2#define MOTOR_PASO_H
3
4#include <Arduino.h>
5
6#define PASOS_POR_VUELTA 4096
7
8/**
9 * @class MotorPaso
10 * @brief Controlador para motores paso a paso 28BYJ-48 con driver ULN2003.
11 *
12 * Esta clase permite:
13 * - Controlar pasos individuales (adelante/atrás)
14 * - Establecer velocidad en RPM
15 * - Realizar movimientos relativos en grados
16 * - Obtener información del progreso del movimiento
17 * - Depurar el comportamiento mediante mensajes por consola
18 *
19 * La clase está organizada por familias funcionales para facilitar
20 * la lectura, mantenimiento y generación de documentación.
21 */
22class MotorPaso {
23public:
24
25 // =========================================================
26 // CONSTRUCTOR
27 // =========================================================
28
29 /**
30 * @brief Constructor del motor paso a paso.
31 * @param pinA Pin conectado a la bobina A.
32 * @param pinB Pin conectado a la bobina B.
33 * @param pinC Pin conectado a la bobina C.
34 * @param pinD Pin conectado a la bobina D.
35 */
36 MotorPaso(uint8_t pinA, uint8_t pinB, uint8_t pinC, uint8_t pinD);
37
38 // =========================================================
39 // CONFIGURACIÓN GENERAL
40 // =========================================================
41
42 /**
43 * @brief Establece la velocidad del motor en RPM.
44 * @param rpm Revoluciones por minuto.
45 */
46 void fijarVelocidad(float rpm);
47
48 // =========================================================
49 // CONTROL BÁSICO DE PASOS
50 // =========================================================
51
52 /**
53 * @brief Avanza un paso en la secuencia del motor.
54 */
55 void pasoAdelante();
56
57 /**
58 * @brief Retrocede un paso en la secuencia del motor.
59 */
60 void pasoAtras();
61
62 /**
63 * @brief Aplica un paso específico de la secuencia (0–7).
64 * @param indicePaso Índice de la secuencia.
65 */
66 void aplicarPaso(int indicePaso);
67
68 // =========================================================
69 // MOVIMIENTO CONTINUO
70 // =========================================================
71
72 /**
73 * @brief Ejecuta movimiento continuo según la velocidad configurada.
74 */
75 void movimientoContinuo();
76
77 // =========================================================
78 // MOVIMIENTO RELATIVO (ÁNGULOS)
79 // =========================================================
80
81 /**
82 * @brief Mueve el motor hacia un ángulo relativo usando el camino más corto.
83 * @param grados Ángulo objetivo en grados.
84 * @param debugMSG Si es true, imprime información detallada del movimiento.
85 */
86 void movimientoPosicionRelativo(float grados, bool debugMSG = false);
87
88 // =========================================================
89 // MATEMÁTICAS DE ÁNGULOS Y PASOS
90 // =========================================================
91
92 /**
93 * @brief Calcula la diferencia circular entre dos ángulos.
94 * @param gradosActuales Ángulo actual.
95 * @param gradosObjetivo Ángulo objetivo.
96 * @return Diferencia circular entre -180 y +180 grados.
97 */
98 float diferenciaCircular(float gradosActuales, float gradosObjetivo);
99
100 /**
101 * @brief Normaliza un ángulo al rango 0–360 grados.
102 * @param grados Ángulo a normalizar.
103 * @return Ángulo normalizado.
104 */
105 float normalizarGrados(float grados);
106
107 /**
108 * @brief Convierte grados a pasos del motor.
109 * @param grados Ángulo en grados.
110 * @return Número de pasos equivalentes.
111 */
112 int convertirGradosAPasos(float grados);
113
114 /**
115 * @brief Convierte pasos del motor a grados.
116 * @param pasos Número de pasos.
117 * @return Ángulo equivalente en grados.
118 */
119 float convertirPasosAGrados(int pasos);
120
121 // =========================================================
122 // PROGRESO DURANTE EL MOVIMIENTO
123 // =========================================================
124
125 /**
126 * @brief Actualiza y devuelve los grados recorridos durante el movimiento.
127 * @param movimientoPasos Pasos ejecutados hasta el momento.
128 * @return Grados recorridos.
129 */
130 float movimientoDePosicionGradosCorriendo(int movimientoPasos);
131
132 // =========================================================
133 // DEPURACIÓN
134 // =========================================================
135
136 /**
137 * @brief Imprime información detallada del movimiento relativo.
138 * @param pasoActualDelBucle Paso actual dentro del bucle de movimiento.
139 */
140 void debugMovimientoRelativo(int pasoActualDelBucle);
141
142private:
143
144 // =========================================================
145 // HARDWARE (PINES DEL MOTOR)
146 // =========================================================
147
148 uint8_t pinA; ///< Bobina A
149 uint8_t pinB; ///< Bobina B
150 uint8_t pinC; ///< Bobina C
151 uint8_t pinD; ///< Bobina D
152
153 // =========================================================
154 // CONTROL DE VELOCIDAD Y TIEMPO
155 // =========================================================
156
157 unsigned long retardoPaso; ///< Microsegundos entre pasos (determina la velocidad)
158 unsigned long tiempoUltimoPaso; ///< Marca temporal del último paso ejecutado
159 short rpm; ///< Velocidad configurada en RPM
160
161 // =========================================================
162 // ESTADO DEL MOTOR (SECUENCIA DE PASOS)
163 // =========================================================
164
165 int pasoActual; ///< Índice de la secuencia (0–7)
166 int pasosPorVuelta = PASOS_POR_VUELTA; ///< Pasos necesarios para 360°
167
168 // =========================================================
169 // MOVIMIENTO RELATIVO (DATOS DEL MOVIMIENTO)
170 // =========================================================
171
172 int pasos; ///< Pasos totales a ejecutar en el movimiento actual
173 float gradoActual; ///< Ángulo actual del motor (0–360 normalizado)
174 float gradosObjetivo; ///< Ángulo objetivo solicitado
175 float gradosCorriendo; ///< Ángulo recorrido durante el movimiento (progreso)
176 float diferencia; ///< Diferencia circular entre gradoActual y gradosObjetivo (–180 a +180)
177 bool direccionAdelante; ///< Dirección: true = adelante
178 bool direccionAtras; ///< Dirección: true = atrás
179};
180
181#endif // MOTOR_PASO_H
uint8_t pinD
Bobina D.
Definition motorStep.h:151
float gradosCorriendo
Ángulo recorrido durante el movimiento (progreso).
Definition motorStep.h:175
void movimientoPosicionRelativo(float grados, bool debugMSG=false)
Mueve el motor hacia un ángulo relativo usando el camino más corto.
int pasos
Pasos totales a ejecutar en el movimiento actual.
Definition motorStep.h:172
int pasoActual
Índice de la secuencia (0–7).
Definition motorStep.h:165
uint8_t pinB
Bobina B.
Definition motorStep.h:149
float diferenciaCircular(float gradosActuales, float gradosObjetivo)
Calcula la diferencia circular entre dos ángulos.
float gradoActual
Ángulo actual del motor (0–360 normalizado).
Definition motorStep.h:173
void pasoAtras()
Retrocede un paso en la secuencia del motor.
Definition motorStep.cpp:58
bool direccionAdelante
Dirección: true = adelante.
Definition motorStep.h:177
void movimientoContinuo()
Ejecuta movimiento continuo según la velocidad configurada.
Definition motorStep.cpp:91
uint8_t pinA
Bobina A.
Definition motorStep.h:148
int convertirGradosAPasos(float grados)
Convierte grados a pasos del motor.
float movimientoDePosicionGradosCorriendo(int movimientoPasos)
Actualiza y devuelve los grados recorridos durante el movimiento.
unsigned long retardoPaso
Microsegundos entre pasos (determina la velocidad).
Definition motorStep.h:157
MotorPaso(uint8_t pinA, uint8_t pinB, uint8_t pinC, uint8_t pinD)
Constructor del motor paso a paso.
Definition motorStep.cpp:12
float convertirPasosAGrados(int pasos)
Convierte pasos del motor a grados.
void aplicarPaso(int indicePaso)
Aplica un paso específico de la secuencia (0–7).
Definition motorStep.cpp:69
bool direccionAtras
Dirección: true = atrás.
Definition motorStep.h:178
int pasosPorVuelta
Pasos necesarios para 360°
Definition motorStep.h:166
unsigned long tiempoUltimoPaso
Marca temporal del último paso ejecutado.
Definition motorStep.h:158
uint8_t pinC
Bobina C.
Definition motorStep.h:150
void fijarVelocidad(float rpm)
Establece la velocidad del motor en RPM.
Definition motorStep.cpp:33
void pasoAdelante()
Avanza un paso en la secuencia del motor.
Definition motorStep.cpp:47
float diferencia
Diferencia circular entre gradoActual y gradosObjetivo (–180 a +180).
Definition motorStep.h:176
void debugMovimientoRelativo(int pasoActualDelBucle)
Imprime información detallada del movimiento relativo.
short rpm
Velocidad configurada en RPM.
Definition motorStep.h:159
float normalizarGrados(float grados)
Normaliza un ángulo al rango 0–360 grados.
float gradosObjetivo
Ángulo objetivo solicitado.
Definition motorStep.h:174
#define PASOS_POR_VUELTA
Definition motorStep.h:6