#include "pid.h" static inline float Saturation(float val, float min, float max) { if (val < min) val = min; if (val > max) val = max; return val; } float PID_Update(float Value, float Current, PID_Data& Coef, float de) { float p, i, d; float e = Value - Current; p = e * Coef.P.C; p = Saturation(p, Coef.P.Min, Coef.P.Max); i = Coef.i; i += e * Coef.I.C; i = Saturation(i, Coef.I.Min, Coef.I.Max); Coef.i = i; d = de * Coef.D.C; d = Saturation(d, Coef.D.Min, Coef.D.Max); return Saturation(p + i + d, Coef.Min, Coef.Max); }