DSP

PID自动控制

2019-07-13 16:29发布

安富莱DSP教程(PID控制):http://forum.armfly.com/forum.php?mod=viewthread&tid=7576&highlight=ControllerFunctions%B5%C4%CA%B9%D3%C3 深入浅出PID控制算法:
https://blog.csdn.net/kilotwo/article/category/7343689 PID形象解释
这个解释形象的说明了参数P,I,D的使用。(内容来自网上)
  • 小明接到这样一个任务:有一个水缸点漏水(而且漏水的速度还不一定固定不变),要求水面高度维持在某个位置,一旦发现水面高度低于要求位置,就要往水缸里加水。 小明接到任务后就一直守在水缸旁边,时间长就觉得无聊,就跑到房里看小说了,每30分钟来检查一次水面高度。水漏得太快,每次小明来检查时,水都快漏完了,离要求的高度相差很远,小明改为每3分钟来检查一次,结果每次来水都没怎么漏不需要加水,来得太频繁做的是无用功。几次试验后,确定每10分钟来检查一次。这个检查时间就称为采样周期。
  • 开始小明用瓢加水,水龙头离水缸有十几米的距离,经常要跑好几趟才加够水,于是小明又改为用桶加,一加就是一桶,跑的次数少了,加水的速度也快了,但好几次将缸给加溢出了,不小心弄湿了几次鞋,小明又动脑筋,我不用瓢也不用桶,老子用盆,几次下来,发现刚刚好,不用跑太多次,也不会让水溢出。这个加水工具的大小就称为比例系数。
  • 小明又发现水虽然不会加过量溢出了,有时会高过要求位置比较多,还是有打湿鞋的危险。他又想了个办法,在水缸上装一个漏斗,每次加水不直接倒进水缸,而是倒进漏斗让它慢慢加。这样溢出的问题解决了,但加水的速度又慢了,有时还赶不上漏水的速度。于是他试着变换不同大小口径的漏斗来控制加水的速度,最后终于找到了满意的漏斗。漏斗的时间就称为积分时间 。
  • 小明终于喘了一口,但任务的要求突然严了,水位控制的及时性要求大大提高,一旦水位过低,必须立即将水加到要求位置,而且不能高出太多,否则不给工钱。小明又为难了!于是他又开努脑筋,终于让它想到一个办法,常放一盆备用水在旁边,一发现水位低了,不经过漏斗就是一盆水下去,这样及时性是保证了,但水位有时会高多了。他又在要求水面位置上面一点将水凿一孔,再接一根管子到下面的备用桶里这样多出的水会从上面的孔里漏出来。这个水漏出的快慢就称为微分时间。
积分运算表达式:
3482555-005232d2677c4f20.png 在这里插入图片描述
https://blog.csdn.net/qq_24163555/article/details/83350984

PID的算法表达式有两种

pid算法中位置型和增量型有什么区别:http://www.elecfans.com/dianzichangshi/20171124585738.html 1、位置式PID算法表达式
3482555-62839a4fdb595d70.png 在这里插入图片描述 由于计算机输出的Out可直接控制执行机构(如阀门),Out的值和执行机构的位置(如阀门开度)是一一对应的,因此通常称该公式为位置式PID控制算法。 缺点:每次输出均与过去的状态有关,计算时要对Ek进行累加,计算机运算工作量大。 2、增量式PID算法表达式
3482555-1e7979b85caf8a28.png 在这里插入图片描述 执行机构需要的是控制量的增量(例如驱动步进电机)时,数字控制器的输出只是控制量的增量,该公式称为增量式PID控制算法 增量式PID的计算只需要最近3次的偏差(本次偏差,上次偏差,上上次偏差),不需要处理器存储大量的历史偏差值,计算量也相对较少,容易实现。 区别:
  • 位置式PID控制的输出与整个过去的状态有关,用到了误差的累加值;而增量式PID的输出只与当前拍和前两拍的误差有关,因此位置式PID控制的累积误差相对更大;
  • 增量式PID控制输出的是控制量增量,并无积分作用,因此该方法适用于执行机构带积分部件的对象,如步进电机等,而位置式PID适用于执行机构不带积分部件的对象,如电液伺服阀。
  • 由于增量式PID输出的是控制量增量,如果计算机出现故障,误动作影响较小,而执行机构本身有记忆功能,可仍保持原位,不会严重影响系统的工作,而位置式的输出直接对应对象的输出,因此对系统影响较大。
增量式 PID 算法的 STM32 实现
https://blog.csdn.net/weixin_38663832/article/details/81139187 STM32的PID温控
https://blog.csdn.net/weixin_42068537/article/details/83684234 STM32的DSP库中PID的使用介绍
https://blog.csdn.net/zuoyioo7/article/details/80569547 https://www.arduino.cn/thread-15176-1-2.html