Tengo el siguiente algoritmo PID que arrebaté de un sitio web cuyo nombre olvidé y necesito limitar la salida para que su valor máximo sea, digamos, 90. ¿Cómo hago eso? Intenté usar la función de mapa de Arduino pero necesito saber el valor máximo de la salida para poder usar eso. Aquí está el código:
//working variables
unsigned long lastTime;
//double Input, Output, Setpoint;
double errSum, lastErr;
double kp, ki, kd;
void Compute()
{
//How long since we last calculated
unsigned long now = millis();
double timeChange = (double)(now - lastTime);
//Compute all the working error variables
double error = Input;
errSum += (error * timeChange);
double dErr = (error - lastErr) / timeChange;
//Compute PID Output
Output = kp * error + ki * errSum + kd * dErr;
Output = map(Output, 0, 1500,0,90);
//Remember some variables for next time
lastErr = error;
lastTime = now;
}
void SetTunings(double Kp, double Ki, double Kd)
{
kp = Kp;
ki = Ki;
kd = Kd;
}
La llamada de la función de mapa fue agregada por mí como una forma ineficiente de limitar la salida.
Si te ayuda de alguna manera, quiero usarlo para un robot de balanceo pero suceden cosas extrañas cuando el valor de la salida supera los 90 (la función write () de la biblioteca del servo solo acepta valores entre 0 y 180).
Gracias de antemano!