抗积分饱和 PID代码实现,matlab仿真实现

抗积分饱和 PID代码实现,matlab仿真实现,第1张

抗积分饱和 PID代码实现,matlab仿真实现 抗饱和PID

前几天开始我就计划把c电机仿真的PI控制器代码优化一下的时候,群里刚好讨论了Microchip的AN1078文档中的PI框图:
在这里插入图片描述

找了点视频和文章,大家感兴趣可以去看看,相信你会收获更多。

  • TI的公开培训
    https://www.bilibili.com/video/BV1LE411W7M9?p=5

  • 陈博视频
    https://www.bilibili.com/video/BV1NT4y1j76y?from=search&seid=5197738155280057976&spm_id_from=333.337.0.0

  • 知乎的文章
    https://zhuanlan.zhihu.com/p/49572763

好了,我大概总结一下。

1. 积分器的分离
  • 比如误差小于某个值,关闭积分器,大于某个值开启积分器。
  • 这种方法是有效的,但存在问题,比如电流会间断。比如要处理很多不同扭矩变化的情况。
  • 用的并不多。
2. 静态钳位

  • 比较常见的pid处理积分的方式,积分限幅,输出限制。记得大学,智能车比赛用的就是这种。
  • 限制积分无上限的累计嘛。
3. 动态钳位

  • 根据P的信号做限制。
  • 背后的思想大概:当系统存在很大的误差,P的控制已经达到系统的饱和状态了,显然不需要I的。
  • 动态的钳位:当在系统饱和的情况下,当比例和积分器的输出大于系统输出的时候,就积分部分就减掉多出的这部分。显然P的输出越大,积分器的钳位值就越小。
  • 比例的输出系统的输出的前导。要满足:
    • 比例+积分<=系统输出
    • 如果超出,不好意思,超出部分,积分器来减去。
4. 增量PID

  • 记得大学做比赛的时候,就有讨论“电机用增量pid比较好,啥啥的”。虽然我当时内环用的是这个,不过当时也感觉都差不多,还觉得没位置式好调。
  • 这个增量pid在陈博的视频中,是和动态钳位效果差不多。
  • 我使用matlab测试,发现它跟系统有关。在同样的参数下,并不能得到更好的控制效果,可能还会出现更坏的效果。
5. back-calculation

  • 你会发现和动态钳位模型差不多的,只不过对于上面的动态,加了个调节系数,而系数为1的时候,就和动态钳位模型一样。
  • 这个系数不能太大,也不能太小。太大,可能退出边界了。太小,没有效果了。
matlab 仿真

我用matlab仿真了一个波形(故意加大了积分器)


  • 黄色:是没有积分处理,输出也没做限幅
  • 橙色:静态钳位
  • 绿色和蓝色:那两跟差不多重合的线,是动态钳位和增量pi。它两能差不多重合,是因为我调过传递函数。
  • 紫色:是back-cal的方法,不过系数比较大。
    
    看的出来,积分器的不同处理方法,对系统的控制带来的效果是不同的。
c电机仿真

我用c语言的电机控制仿真,控制直流电机的转速,也做了波形的测试,效果和matlab的差不多。
感兴趣可以去试试:
https://github.com/chongweiwang/MCS_V1/blob/main/app/sim_module_test/test_pid/test_pid.c

额外思考的问题

主要是针对动态钳位。

  • 我们对于钳位的深度是没有限制的,那么当err很大,比例的输出远远大于系统限幅,而系统输出限制比较小,积分系数又比较小的时候。这时候出现了这个输出减去系统的限制输出,这一项会去一直限制积分器。比例输出越大,积分器随着时间会越退越多。
  • 或者也说back-cal这里面的kc值调试大的情况。
  • 这时候会出现问题,积分器退的太多了。甚至超过了反方向的限制。
    
    这个情况,对积分器做限制。或者又说,我们可以对进入控制器的err做一次限幅。

几种pid的c语言的实现代码:
https://github.com/chongweiwang/MCS_V1/tree/main/components/controller/pid 

simulink的模型,我丢qq群了:528884293

或者关注我的微信公众号“王崇卫” ,输入“simulink”获取。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5593152.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存