当我第一次看到PID计算公式时,我总是问“为什么是这样的公式”。
为了理解这些公式,我计算了当时未简化的公式。
现在,我要进入这个计算过程。
理解会有所帮助,但是如果您从一开始就对问题的答案有某种抽象的了解,那么您可以更快地理解它!首先,我推荐白志刚的“从入门到熟练的PID 2.0版本”。
阅读完第一章和第二章后,建议您先练习然后阅读本书中的其他章节,以使您更好地掌握本书。
PID用于对输入偏差执行比例积分微分计算,然后将计算的叠加结果用于控制执行器。
在实践中,如何将这一原理转化为程序?为什么要使用这些错误进行计算?以下是我用来控制闭环智能汽车速度的PID程序的摘录:P:比例比例I:积分D:微分Pwm_value:输出Pwm Current_error:当前偏差last_error:最后偏差prev_error:最后偏差增量PID计算公式:P = Kp *(current_error﹣last_error); D = Kd *(current_error﹣2 * last_error ﹢ prev_error); I = Ki * current_error; PID_add = Pwm_value + P ﹢ I ﹢ D; 1.为什么PID_add = Pwm_value +(P ﹢ I ﹢ D)而不是PID_add = P + I + D?如上图所示,一个人前往目的地A。
他使用视觉传感器检测到目的地的距离为100m,即当前与目的地的偏差为100。
他将Δ= 100J的能量输出到他的脚跑了10秒钟之后,他又进行了一次目视检查。
此时,距离为40m,即current_error = 40。
他与10秒钟前的last_error = 10偏差(即current_error-last_error = -60)进行比较,这是一个负数,他意识到自己更接近目标。
您无需运行得如此之快,因此输出Δ= 100 +(-60)= 40J的能量。
凭借40J的能量,他以4m / s的速度奔跑。
10秒钟后,他发现自己已经达到目标点。
current_error = 0,大脑思考了current_error-last_error = 0-40 = -40,双脚获得的能量Δ= 40 +(-40)= 0,也就是说,他已经到达目的地并且不需要再次运行。
在刚才的描述中,可以看到增量P + I + D输出是增量,并且通过将增量与调整值相加而获得的值是最终输出,这反映了先前的输出处于当前状态。
,它应该增加还是减少。
2.纯比例控制P = Kp *(current_error﹣last_error),如何理解(current_error﹣last_error)? PID中的纯比例控制是将控制量的偏差乘以一个系数作为调节器的输出。
在增量PID中,它反映在程序中,而控制量就是误差。
实际上,例如,在速度控制中,错误=目标速度×当前速度,因此目的很明确:我们将误差控制为接近0,最后使当前速度接近目标速度。
如上图所示,经过时间Δt之后,函数从y1变为y2时,y的增加百分比是多少?显然:K =(y2-y1)/Δt;以速度控制为例,如果y为误差,如上图所示,在时间t1至t2内,我们可以得到输出控制变量误差的趋势为(current_error-last_error)/Δt。
得到偏差的变化趋势后,将其乘以Kp可使输出和误差相对变化。
这个原理就像在模拟电子电路中一样,声音信号被功率放大器管放大,并且输出信号对应于输入信号的线性变化。
3.引入差动控制吗?但是,在正常情况下,我们的控制量不会完全按比例变化,如下图所示:比例代表变化趋势,而差异代表趋势变化率。
映射到图像曲线就是导数的变化!在上图中,如果获得曲线中从x2到x1的点的斜率,则当Δt足够小时,可以近似为(y2-y1)/Δt,并且可以看出从x3到x1的导数是﹛(y3-y2)-(y2- y1)﹜ /Δt=(y3-2 * y2 ﹢ y1)/Δt。
将y1,y2和y3在不同的时间映射到prev_error,last_error,current_error;则误差趋势的变化为{(current_error-last_error)-(last_error-prev_error)﹜ /Δt= ﹛(current_error-2 * last_error ﹢ prev_error)/Δt,导数D = Kd *(current_error﹣2 * last_error ﹢ prev_error)。
给系统增加微分反映了系统偏差信号的变化率,