#PID涉及相关知识
开环控制系统:开环系统,无反馈系统,即系统的输入不受输出的影响,在受到外界干扰输出效果减小,此时输入也不会增加,因为输出不会对输入施加影响,像是断开的环一样称为开环,
闭环控制系统:也就是有反馈信息的控制系统,输出量通过反馈信息去影响调节输入量,从而使输出量不断接近设定期望值。当外界存在干扰时,可以通过反馈信息,调节输入,从而抵消干扰。
PID数学表达式:这个表达式是离散型数学表达式,单片机是离散的表达式,内部是一些数字量而不是连续的模拟量。
稳态误差:当P算法调节接近预定值的时候,P算法提供的力会减小,此时距离预定值还有很小的误差,但是没有办法解决这个误差叫做稳态误差。
#PID相关介绍
PID算法是嵌入式开发中最为常用的算法,只要你想用任何一个项目都能用上PID,非常重要。PID算法由 P I D 三种算法组成,可以进行不同的组合来达到不同的控制效果,这三种算法分别对应上面公式的 1 2 3 位每个算法也有不同的含义,以及不同的作用。在实际使用中通常不会使用三种算法,通常是拆分。
P算法作用:在P算法里面 e是指的误差,这里可以看出误差越大,这里P的输出越大,P
算法的作用,是减小测量值和理论值之间的误差(差值),让测量值不断接近理论值。
#但是如果只用P算法会存在一个情况,那就是过度调节出现不断靠近预定值,也就是过度调节的情况,一般P算法是跟D算法一起进行使用的,D算法可以减少P算法过度调节而出现的震荡这种情况。
这里可以看到当Kp为10 Kd为0的时候,小球不会靠近点,会围绕着这个点运动,震荡,就是不会接近这个点,这里因为此时的KD为0,只有KP。这个实验网站链接放在文章末尾,
D算法作用:D算法就是为P算法提供阻力,当P算法参数过大时,就会造成输入很大,这时会出现过度调节显现,D算法就是在此时为P算法提供阻力,防止P算法提供哦过冲现象,让系统刚好停留在理论值防止出现过冲现象。1
(ek-ek-1)-某种程度上就是代表着,系统对P算法调节的阻力响应程度,前文提到e代表着误差,(ek-ek-1)就代表着前后误差绝对值,当ek越大 ek-1越小,就代表了,此时P算法作用力,很大,也就是此时过度响应,此时(ek-ek-1)也就变大,提供的阻力也就越大,反之阻力也就越小。
这里网站实验加入KD之后,发现小球在接近目标点之后,就没有发生移动了,也就验证了D算法对P算法提供的阻力,这里如果只用D算法是没有用的,D算法是对P算法提供阻力,P算法是提供一个调节的力。
i算法作用: 当系统很接近预定目标值的时候,p算法提供的里很小,起不到继续减小误差的作用,就会出现稳态误差,此时需要用到i算法,让误差值不断地累加,并将累加后的值,进行输出调节,所以i算法通常用于更加精准的控制。不论误差有多少,I算法会累加的越来越大。
#代码表达PID算法
int PID_function(float measure ,float set)//measure 测量值 set 设定值
{ err = measure -set; //差值err_sum += err;//累加差值I_limit();//ki限制err_diff = err - err_last; //d算法err_last = err;return Kp*err +Ki*err_sum +Kd*err_diff;
}
当在看一个PID函数的时候,看它的返回值类型,就可以知道,这个函数使用了PID里面的几种算法。
return Kp*err //P算法return Kp*err+Kd*err_differ //PD算法组合return Kp*err+Kd*err_sum //PI算法组合return Kp*err+Kd*err_differ+Kd*err_sum //PID算法组合
希望对你所有帮助!!!
Simple PID Online Simulator | PID 在线模拟器 (longluo.me)