現在有了AI , 這些算法不用死記硬背了 稍微修改下 就可以用, 主要精力可以放在KP KI KD的整定上,
下面這部分是AI做的, 直接調用, 就行, 在結構體對PID初始化的時候填入整定好的參數即可運行; 但是AI也不是完全準確,他只對共用算法很準確,對STC的單片機就有點問題, PWM部分需要自己重寫,
/********************* PID計算函數 *********************/
float PID_Compute(PID_Controller *pid, float setpoint, float input) {
float error = setpoint - input; //聲明誤差變量
float Pout; //聲明比例變量
float Iout; //聲明積分變量
float Dout; //聲明微分變量
// 死區處理(誤差小于0.3℃時不調節)
if(fabs(error) < 0.3) {
error = 0;
}
// 比例項
Pout = pid->Kp * error;
// 積分項(抗積分飽和)
pid->integral += pid->Ki * error;
if(pid->integral > pid->out_max) pid->integral = pid->out_max;
else if(pid->integral < pid->out_min) pid->integral = pid->out_min;
Iout = pid->integral;
// 微分項
Dout = pid->Kd * (error - pid->prev_error);
pid->prev_error = error; // 保存誤差用于下次計算
// 計算輸出PID
pid->output = Pout + Iout + Dout;
// 輸出限幅
if(pid->output > pid->out_max) pid->output = pid->out_max;
else if(pid->output < pid->out_min) pid->output = pid->out_min;
return pid->output;
} |