ArduinoMega2560_SPI 1.0
Cargando...
Buscando...
Nada coincide
pid.h
Ir a la documentación de este archivo.
1#ifndef PID_H
2#define PID_H
3
4#include <Arduino.h>
5
6/**
7 * @class PID
8 * @brief Controlador PID con anti-windup, derivative-on-measurement
9 * y limitación de cambio de salida (slew-rate limit).
10 *
11 * Este controlador está diseñado para sistemas sensibles como motores paso a paso,
12 * actuadores lentos o sistemas donde se requiere suavidad y estabilidad.
13 */
14class PID
15{
16public:
17
18 /**
19 * @brief Constructor del controlador PID.
20 *
21 * @param Kp Ganancia proporcional.
22 * @param Ki Ganancia integral.
23 * @param Kd Ganancia derivativa.
24 * @param outputMin Límite mínimo de salida.
25 * @param outputMax Límite máximo de salida.
26 * @param dt Tiempo de muestreo en segundos.
27 * @param outputMaxChanged Máximo cambio permitido por ciclo (slew-rate).
28 */
29 PID(float Kp, float Ki, float Kd,
30 float outputMin, float outputMax,
31 float dt, float outputMaxChanged);
32
33 /**
34 * @brief Calcula la salida del controlador PID.
35 *
36 * @param setpoint Valor deseado.
37 * @param feedback Valor medido.
38 * @param debugMSG Si es true, imprime información de depuración del PID.
39 * @return Salida del PID.
40 */
41 float calculoPID(float setpoint, float feedback, bool debugMSG = false);
42
43 /**
44 * @brief Establece nuevas ganancias PID.
45 *
46 * @param Kp Nueva ganancia proporcional.
47 * @param Ki Nueva ganancia integral.
48 * @param Kd Nueva ganancia derivativa.
49 */
50 void setKPID(float Kp, float Ki, float Kd);
51
52 /**
53 * @brief Establece los límites de salida del PID.
54 *
55 * @param outputMin Nuevo límite mínimo.
56 * @param outputMax Nuevo límite máximo.
57 */
58 void setOutputLimits(float outputMin, float outputMax);
59
60 /**
61 * @brief Establece un nuevo tiempo de muestreo.
62 *
63 * @param dt Nuevo dt.
64 */
65 void setDt(float dt);
66
67 /**
68 * @brief Reinicia el estado interno del PID.
69 */
70 void resetPID();
71
72 /**
73 * @brief Valida y corrige el tiempo de muestreo.
74 *
75 * @param dt Tiempo de muestreo solicitado.
76 * @return dt válido (mínimo 0.1f).
77 */
78 float statedt(float dt);
79
80 /**
81 * @brief Imprime información de depuración del PID.
82 *
83 * @param setpoint Valor deseado.
84 * @param feedback Valor medido.
85 */
86 void printDebugPID(float setpoint, float feedback);
87
88private:
89
90 // Ganancias del controlador PID
91 float Kp; ///< Ganancia proporcional
92 float Ki; ///< Ganancia integral
93 float Kd; ///< Ganancia derivativa
94
95 // Límites de salida
96 float outputMin; ///< Límite mínimo de salida
97 float outputMax; ///< Límite máximo de salida
98
99 // Intervalo de tiempo
100 float dt; ///< Tiempo de muestreo
101
102 // Estado interno
103 float error; ///< Error actual
104 float prevError; ///< Error previo
105 float proportional; ///< Término proporcional
106 float integral; ///< Acumulador integral
107 float pidNoIntegral;///< PID sin término integral
108 bool saturated; ///< Indica si el PID está saturado
109 float derivative; ///< Término derivativo
110 float output; ///< Salida final del PID
111 float rawOutput; ///< Salida sin limitación de cambio
112 float prevOutput; ///< Salida previa
113 float deltaOutput; ///< Cambio entre salidas
114 float prevFeedback; ///< Feedback previo para derivative-on-measurement
115
116 // Limitación de cambio por ciclo
117 float outputMaxChanged; ///< Máximo cambio permitido por ciclo
118};
119
120#endif // PID_H
float integral
Acumulador integral.
Definition pid.h:106
float Kd
Ganancia derivativa.
Definition pid.h:93
bool saturated
Indica si el PID está saturado.
Definition pid.h:108
PID(float Kp, float Ki, float Kd, float outputMin, float outputMax, float dt, float outputMaxChanged)
Constructor del controlador PID.
Definition pid.cpp:20
float prevError
Error previo.
Definition pid.h:104
void resetPID()
Reinicia el estado interno del PID.
Definition pid.cpp:156
float deltaOutput
Cambio entre salidas.
Definition pid.h:113
float error
Error actual.
Definition pid.h:103
float outputMax
Límite máximo de salida.
Definition pid.h:97
float statedt(float dt)
Valida y corrige el tiempo de muestreo.
Definition pid.cpp:173
float output
Salida final del PID.
Definition pid.h:110
float derivative
Término derivativo.
Definition pid.h:109
float Kp
Ganancia proporcional.
Definition pid.h:91
void printDebugPID(float setpoint, float feedback)
Imprime información de depuración del PID.
Definition pid.cpp:188
float outputMaxChanged
Máximo cambio permitido por ciclo.
Definition pid.h:117
void setOutputLimits(float outputMin, float outputMax)
Establece los límites de salida del PID.
Definition pid.cpp:137
float rawOutput
Salida sin limitación de cambio.
Definition pid.h:111
float outputMin
Límite mínimo de salida.
Definition pid.h:96
float dt
Tiempo de muestreo.
Definition pid.h:100
float prevOutput
Salida previa.
Definition pid.h:112
float prevFeedback
Feedback previo para derivative-on-measurement.
Definition pid.h:114
float Ki
Ganancia integral.
Definition pid.h:92
float proportional
Término proporcional.
Definition pid.h:105
float pidNoIntegral
PID sin término integral.
Definition pid.h:107
void setDt(float dt)
Establece un nuevo tiempo de muestreo.
Definition pid.cpp:148
float calculoPID(float setpoint, float feedback, bool debugMSG=false)
Calcula la salida del controlador PID.
Definition pid.cpp:58
void setKPID(float Kp, float Ki, float Kd)
Establece nuevas ganancias PID.
Definition pid.cpp:124