基本公式:
PID控制器的基本公式为:
u(t) = Kp * e(t) + Ki * ∫e(t)dt + Kd * de(t)/dt
其中: u(t)为输出控制信号; e(t)为当前时刻的偏差(目标值与实际值之差); Kp为比例增益; Ki为积分增益; Kd为微分增益; ∫e(t)dt为误差的积分项; de(t)/dt为误差的微分项。
该公式表示整个控制过程是由比例、积分和微分三部分组成的,分别对应了偏差的当前值、偏差的累积值和偏差的变化率。
PID控制器根据偏差的大小和变化率来调节输出控制信号,使得目标值和实际值尽可能接近,并保持稳定。增益系数Kp、Ki和Kd的选择对控制器的性能有很大影响,需要通过实际系统的调试和优化来确定。
使用环境:
用于在不同环境下对某输出量的控制,减小环境对硬件的影响,想要控制什么量,就要监测相应的量。(使用相应外设)
PID的结果是什么:
PID的结果是一个计数器的pwm的pulse值,在没有做事先处理的情况下,我们通过改变pulse来改变pwm占空比,因此我所设置的目标速度,也应该是对应占空比的一个计数值。监测量的信息也是一个计数值。总的来说,三者应有相同的定义。
PID代码(HAL库):
int PID_analysis(int real_speed,int set_speed,PID pid_position){
static int error_sum, error_diff,pid_value;
pid_position.error=set_speed-real_speed;
error_diff=pid_position.error-pid_position.last_error;
error_sum+=pid_position.error;
if(pid_position.Ki!=0&&error_sum>PWM_MAX/pid_position.Ki){
error_sum=PWM_MAX/pid_position.Ki;}
pid_position.last_error=pid_position.error; pid_value=pid_position.Kp*pid_position.error+pid_position.Ki*error_sum+pid_position.Kd*error_diff;
if(pid_value>PWM_MAX) return PWM_MAX;
else if(pid_value<0) return 0;
return pid_value;
}