Code前端首页关于Code前端联系我们

PID对输入偏差进行比例、积分、微分运算,如何将原理转化为程序?

terry 2年前 (2023-09-27) 阅读数 61 #数据结构与算法

  PID对输入偏差进行比例积分微分运算,运算的叠加结果用于控制执行机构。如何将这一原则转化为实践练习计划?为什么要使用这些误差进行计算?

  以下是我提取的PID程序,用于对智能车的速度进行闭环控制:

  P:比例

  I:积分

  D:微分

   Pwm_value:打印 Pwm 临时通比值

  Current_error:当前偏差 last_error:上一次偏差 prev_error:上一次偏差

   增量 PID 计算公式: ♹Current_errorerror;

  D=Kd*(current_error_2*last_error_prev_error);

  I=Ki*当前误差;

  PID_add=Pwm_value+P﹢I﹢D;

1。为什么是PID_add=Pwm_value+(P﹢I﹢D)而不是PID_add=P+I+D?

PID对输入偏差进行比例积分微分运算,原理如何转化为程序?如左图所示,一个人要去目的地A,他用眼视觉传感器目视检测到距目的地还有100米,即当前与目的地的偏差为100 他向脚发出 Δ=100J 的能量并奔跑。 10 秒后,他又进行了一次目视检查。此时距离为40m,即current_error=40。他将其与10s前的偏差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输出的是增量。将增量和调整量相加后得到最终的输出。 P+I+D反映了先前状态下输出是否应该增加或减少。

2。纯比例控制P=Kp*(current_error_last_error),怎么理解﹙current_error_last_error﹚?

PID对输入偏差进行比例积分微分运算,原理如何转化为程序?

  PID中的纯比例控制是将被控变量的偏差乘以一个系数作为调节器的输出。在增量式PID中,体现在程序中的是误差,但实际上,比如在速度控制中,误差=目标速度-当前速度,所以目的很明确:通过控制误差接近0,最终使当前速度逼近设定的目标速度。

如右图所示,如果考试中有这样一道题:当函数通过时间Δt从y1变化到y2时,y增加的比例是多少?很容易得到答案:K=﹙y2-y1﹚/Δt;

PID对输入偏差进行比例积分微分运算,原理如何转化为程序?

以速度控制为例,如果 y 为误差,如右图,在时间 t1 到 t2 的过程中,我们可以得到输出控制量误差的变化趋势为 (current_error—last_error)/ Δt 。得到偏差的变化趋势后,乘以Kp,使输出和误差相对变化。这个原理就像在模拟电子电路中,音频信号经过功放管放大,输出信号随输入信号而变化。

3.微分控制:

但是,通常我们的控制量并不是纯粹按比例变化,如下图:

PID对输入偏差进行比例积分微分运算,原理如何转化为程序? 比例代表变化的趋势,微分代表趋势的变化率的变化。 ,映射到图像曲线就是导数的变化!在图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_v_error﹜﹢不同 D=Kd*(current_error_2*通过将微分投影系统的偏差信号的变化率加入到系统中,可以预测偏差变化的趋势,具有提前控制和提前处理偏差的功能。

4。积分控制:PID对输入偏差进行比例积分微分运算,原理如何转化为程序?

积分控制可以消除偏差,在公式中更容易理解。电流偏差差经系数Ki放大后映射为输出控制量,即I=Ki*电流误差。 P 只要前后偏差差为0,即current_error—last_current=0,则不进行调整。 D 只要前后偏差变化率为0,即(current_error-2*last_error+prev_error)=0,则不进行调整。对于积分来说,只要存在偏差,总会进行调整,这样积分就可以消除误差,但在某些情况下,一定范围内的误差是允许的,如果积分调整总是存在于这个时候可能会导致系统变得不稳定。性质减小,如右图所示,此时可以通过削弱积分系数Ki来使系统稳定。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门