深入理解PID的微分、积分电路

很多朋友觉得PID是遥不可及,很神秘,很高大上的一种控制,对其控制原理也很模糊,只知晓概念性的层面,知其然不知其所以然,那么本文从另类视角来探究微分、积分电路的本质,意在帮助理解PID的控制原理。

(PID:P表示比例控制;I表示积分控制;D表示微分控制)

在认清微分、积分电路之前,我们都知道电容的特性:电容的电流超前电压相位90°,很多教材都这么描述,让人很费解,其本质又是什么呢?

01 


电容的本质

要彻底掌握微分、积分电路或PID控制思路,首先得了解电容。

电容就是装载电荷的容器,从微观角度看,当电荷流入容器时,随着时间的变化极间电场逐渐增大。

以图1为例:

  • 充电开始时Uc=0V,压差△U=Ur=Ui,此刻容器内无电荷,也就无电场排斥流入的电荷;所以电流Ic最大,表现为容抗最小,近似短路;

  • 当Uc上升,压差△U开始减小,该过程形成电场,容器开始排斥流入的电荷;电流Ic逐渐减小,表现为容抗逐渐增大;

  • 当Uc=Ui,压差△U=Ur=0V,此刻容器内电场最强,以最大排斥力阻止流入的电荷;电流Ic=0,表现为容抗最大,近似开路。

7e6e7c132e9fca7b90d21692d89d2300.png

图1 电容容器充电模型

当电荷流出容器时,随着时间的变化极间电场逐渐减小;该放电过程的电容可看成是一个内阻为0的电压源,以图2为例(移除电源并接地):

  • 放电开始时Uc=Ui,此刻容器内充满电荷,因此电场最强,而电阻不变,则放电电流Ic最大(方向与充电相反),电阻两端的电压Ur=Uc,则Ur=Ui;

  • 当Uc下降,该过程电场减弱,放电电流Ic逐渐减小,Ur=Uc也逐渐减小;

  • 放电耗尽Uc=0V,此刻容器内无电荷,因此无电场,Ur=0V。

2fcdbc93dbd552a5aa2480eefa12a480.png

图2 电容容器放电模型

电容就好比水桶一样,流入的水流无论是大还是小,水位的变化一定是从最低位开始连续上升的;而电容内的电荷也是逐渐从0开始积累起来的,积累过程与自然常数e有关系,这里就不深入讨论了。

图3就是电容充放电的电压-电流曲线。

1ece5d2fa4f0f56404e58760958bb236.png

图3 电容充放电,电压-电流曲线

联系前面的分析,可总结为:

  • 电容电压不能突变,电流可突变(教材的定义是电容的电流与电压的变化率成正比);

  • 充电过程中的电容可等效成一个可变电阻,放电过程中的电容可等效成一个电压源;

  • 电容电流反映的是单位时间内流动的电荷量,电容电压(或电场)反映的是电荷量的多少。通俗的理解就是流动的电荷才会导致电荷量多少的变化(与①相吻合);用数学语言描述则是电容的电流超前电压相位90°;

  • 电容充放电速度与电容和电阻大小有关。

02 


微分电路和积分电路

对电容充分了解之后,首先我们先来认识最简单的分压电路,如图4根据欧姆定律VCC=2.5V,该纯阻性的分压电路就是比例运算电路的雏形。

20d81dcd74511a5c74383582a37cdbb2.png

图4 分压电路

如图5,我们把R2换成104(0.1μF)电容,C1电容充满电后近似开路,VCC=5V;该电路就是积分运算电路的雏形。那么把5V改成信号源就构成了低通滤波电路。

5281af695821b055f8000ca57338c23f.png

图5 积分电路

如图6为上图的充电波形,红色表示5V的波形,蓝色表示VCC的波形,因为电容充电时的容抗由小变大直至开路,所以分压VCC也由小变大直至为5V。而且电容充电需要一定的时间,导致VCC的波形要缓一些。(该5V是开关电源上电软启动时的输出波形)

b61067d218d43a8c0b517beb001af7cb.jpeg

图6 积分电路波形

把图4图5组合就得到图7的电路,这就是我们经常使用的PI电路(比例积分),在参考电压或分压电路里很常见,加电容的目的就是增加延时性,稳定VCC的电压不受5V波动而波动,VCC=2.5V。

1989f386fb8c94f9df1b501680b06119.png

图7 PI电路

把图5中电容和电阻的位置交换一下得到如图8的电路,C1电容充满电后近似开路,VCC=0V;该电路就是微分运算电路的雏形。那么把5V改成信号源就构成了高通滤波电路。

286992ecb3fe5c9c76150297f1075590.png

图8 微分电路

如图9为上图的充电波形,红色表示5V的波形,蓝色表示VCC的波形,因为电容充电时的容抗由小变大直至开路,所以分压VCC由大变小直至为0V。也就是红色波形从0开始跳变一瞬间,VCC已经是最大值,所以微分有超前预判的性质(反映的是输入信号的变化率)。

6ce171b2d719c31b7df02a92ea74227b.jpeg

图9 微分电路波形

如图10为(反相)比例运算电路。

05a31b835aef5c6ed1062a4fee36bc89.png

图10 比例运算电路

如图11,Uo与Ui成线性关系。

66343e0f0cc38585e5ab6d513dc4fa47.png

图11 比例运算电路波形

如图12、图13为微分运算电路的充放电过程:

充电过程的电容C1可等效成一个可变电阻,C1开始充电时的容抗为0,电压不可突变则电压为0,运放-输入端得到的分压为正最大峰值,于是Uo为运放的负最大峰值,随着电容充满电,U0逐渐变为0。

334233821bd525770ca980d82a80ceb9.png

图12 微分运算电路-充电

放电过程的电容C1可等效成一个电压源,且电压不可突变,此时电流反向为最大值,R1电压瞬间反向也为最大值,运放-输入端得到的分压则为负最大峰值,于是Uo为运放的正最大峰值,随着电容放完电,U0逐渐变为0。

dd0658348f16998a567ecee864cd6db4.png

图13 微分运算电路-放电

如图14为微分运算电路的输入输出波形,联系前面的分析结果,则Uo反映的是Ui的变化率,这样就达到了预判超前的效果。

d8457a4251b8c84bd8b030869099d857.png

图14 微分运算电路波形

如图15为微分运算仿真电路,为了防止运放出现饱和,必须限制输入电流,实际使用时需要在电容C1输入端串联一个小电阻R2。串联电阻后的电路已经不是理想微分运算电路了,但是只要输入信号周期大于2倍RC常数,可以近似为微分运算电路。

eb54eb9cf9c5f0474e3e9d1c3a8ea63c.png

图15 微分运算仿真电路

如图16为微分运算仿真电路波形,其中IN-为运放-输入端的波形。

1c3b28cac7be6e5c58d5f2148e6239e3.png

图16 微分运算仿真电路波形

如图17、图18为积分运算电路的充放电过程:

充电过程的电容C1可等效成一个可变电阻,C1开始充电时的容抗为0,电压不可突变则电压为0,运放-输入端得到的分压为0,于是Uo为0,随着电容充满电,运放-输入端得到的分压为正最大值,U0为运放的负最大峰值。

00591da5b112dfb5a70ede514f0caf75.png

图15 积分运算电路-充电

放电过程的电容C1可等效成一个电压源,且电压不可突变,运放-输入端得到的分压也不可突变,随着电容放完电,于是Uo由负最大峰值逐渐变为0。

c26b18b5cf3c111a3dbf341b49851fd6.png

图16 积分运算电路-放电

如图17为积分运算电路的输入输出波形,联系前面的分析结果,则Uo反映的是Ui的积累过程,这样就达到了延迟稳定的效果。

062fa9db84055dd2caf25ce7ef0108e2.png

图17 积分运算电路波形

如图18为积分运算仿真电路,为了防止运放出现饱和,实际使用时需要在电容C2两端并联一个电阻R3。并联电阻后的电路已经不是理想积分运算电路了,但是只要输入信号周期大于2倍RC常数,可以近似为积分运算电路。

93d707bee36938d5e50eff577edb04bd.png

图18 积分运算仿真电路

如图19为积分运算仿真电路波形,其中IN-为运放-输入端的波形。

2dc50140fb279291c8f527e03a399348.png

图19 积分运算仿真电路波形

03 


要点

  • 微分、积分运算电路利用了电容充放电时其电压不可突变的特性达到调节输出的目的,对变化的输入信号有意义;

  • 微分D控制有超前预判的特性,积分I控制有延迟稳定的特性,在PID调节速度上,微分D控制>比例P控制>积分I控制。

来源:电卤药丸

-END-


往期推荐:点击图片即可跳转阅读

05dbe29a08b5be1727befe8aacf37725.jpeg

用Excel编写俄罗斯方块?没错!

a66f35692da51415a0235950f3cd5378.jpeg

计算机中有哪些令人拍案叫绝的设计?

af76fb3c4f41106a575f1fbc2f9f8efb.jpeg

上车吧,国产CPU

3d99668971fe30acebbe53299e34afcf.jpeg

为什么中国的数字是四位一进,而西方的是三位一进?

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的PID控制器的代码示例,包括积分微分和限幅功能。请注意,这只是一个示例代码,可能需要根据您的特定应用程序进行修改和调整。 ```python class PIDController: def __init__(self, kp, ki, kd, output_limits=None): self.kp = kp self.ki = ki self.kd = kd self.integral = 0 self.last_error = 0 self.output_limits = output_limits def step(self, error, sample_time): self.integral += error * sample_time derivative = (error - self.last_error) / sample_time output = self.kp * error + self.ki * self.integral + self.kd * derivative if self.output_limits is not None: output = max(min(output, self.output_limits[1]), self.output_limits[0]) self.last_error = error return output ``` 在这个例子中,`kp`、`ki`和`kd`分别代表比例、积分微分系数,`error`是当前误差,`sample_time`是控制器执行的时间间隔。`integral`和`last_error`是用于计算积分微分的变量,`output_limits`是一个元组,用于限制输出值的范围。 为了使用PID控制器,您可以创建一个实例并调用`step`方法,该方法将当前误差作为参数并返回控制器的输出值。例如: ```python pid = PIDController(kp=1.0, ki=0.5, kd=0.1, output_limits=(-1.0, 1.0)) output = pid.step(error=0.2, sample_time=0.1) ``` 这个例子中,PID控制器的比例系数为1.0,积分系数为0.5,微分系数为0.1,输出值限制在-1.0到1.0之间。在每个时间步长中,控制器将当前误差0.2传递给`step`方法,并返回一个输出值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值