一般来说,PID各参数是需要整定的,但是我们也可以尝试由偏差来确定一个动态的kp
例如:让舵机的kp与erro形成函数关系,使kp不再是一个确定的值,而是会根据实际偏差来实时改变,体现在车子上就是,直道更稳定,弯道反应更快
typedef struct //把结构体的关键字重命名成 pid_param_typedef
{
float erro; //偏差
float erro_last; //上一次偏差
float feedback; //理想反馈值
float feedin; //理想输入值
float output; //实际输出值
float input; //实际输入值
float Kp; //比例p
float Kd; //微分d
} pid_param_typedef;
pid_param_typedef Control_turn; //定义一个叫做 Control_turn 的结构体变量
void pid(void)
{
/*建议加上偏差限幅*/
Control_turn.erro = Control_turn.input - Control_turn.feedback; //利用理想输出和实际输入作差获得偏差
Control_turn.kp=(参数1)*ln(|Control_turn.erro|+1)+(参数2)
Control_turn.output = Control_turn.Kp * Control_turn.erro + //kp*erro
Control_turn.Kd * (Control_turn.erro - Control_turn.erro_last);//kp*(erro-lasterro)
/*建议加上输出限幅*/
}