====== PID Implementation ====== The PID controller use proportional, integral, derivative and output derivative gain with fixed point arithmetic. ---- ===== Proportional ===== Proportional = Proportional_gain * (Consigne - Reference) ---- ===== Integral ===== if Integral_gain == 0 Integral = 0 else Integral = Integral_gain * (Consigne - Reference) + Previous_integral_gain_sum We saturate the integral term with uIAntiWU_Limit if Integral > uIAntiWU_Limit Integral = uIAntiWU_Limit if Integral < -uIAntiWU_Limit Integral = -uIAntiWU_Limit ---- ===== Derivative ===== Derivative = Derivative_gain * (Error - Previous_error) with Error = (Consigne - Reference) ---- ===== Output Derivative ===== Output_Derivative = Output_derivative_gain * (PID_Output - Previous_PID_output) ---- ===== PID Output ===== (Proportional + Integral + Derivative + Output_Derivative) / Fixed_point_divider ----