不同就不同在PID算法上,与近三次的误差有关。
/**
* @brief PID算法实现
* @param val 目标值
* @note 无
* @retval 通过PID计算后的输出
*/
float PID_realize(float temp_val)
{
/*计算目标值与实际值的误差*/
pid.err = pid.target_val - temp_val;
/*PID算法实现*/
pid.actual_val += pid.Kp * (pid.err - pid.err_next)
+ pid.Ki * pid.err
+ pid.Kd * (pid.err - 2 * pid.err_next + pid.err_last);
/*传递误差*/
pid.err_last = pid.err_next;
pid.err_next = pid.err;
/*返回当前实际值*/
return pid.actual_val;
}