前几天开始我就计划把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. 积分器的分离- 比如误差小于某个值,关闭积分器,大于某个值开启积分器。
- 这种方法是有效的,但存在问题,比如电流会间断。比如要处理很多不同扭矩变化的情况。
- 用的并不多。
- 比较常见的pid处理积分的方式,积分限幅,输出限制。记得大学,智能车比赛用的就是这种。
- 限制积分无上限的累计嘛。
- 根据P的信号做限制。
- 背后的思想大概:当系统存在很大的误差,P的控制已经达到系统的饱和状态了,显然不需要I的。
- 动态的钳位:当在系统饱和的情况下,当比例和积分器的输出大于系统输出的时候,就积分部分就减掉多出的这部分。显然P的输出越大,积分器的钳位值就越小。
- 比例的输出占系统的输出的前导。要满足:
- 比例+积分<=系统输出
- 如果超出,不好意思,超出部分,积分器来减去。
- 记得大学做比赛的时候,就有讨论“电机用增量pid比较好,啥啥的”。虽然我当时内环用的是这个,不过当时也感觉都差不多,还觉得没位置式好调。
- 这个增量pid在陈博的视频中,是和动态钳位效果差不多。
- 我使用matlab测试,发现它跟系统有关。在同样的参数下,并不能得到更好的控制效果,可能还会出现更坏的效果。
- 你会发现和动态钳位模型差不多的,只不过对于上面的动态,加了个调节系数,而系数为1的时候,就和动态钳位模型一样。
- 这个系数不能太大,也不能太小。太大,可能退出边界了。太小,没有效果了。
我用matlab仿真了一个波形(故意加大了积分器)
- 黄色:是没有积分处理,输出也没做限幅
- 橙色:静态钳位
- 绿色和蓝色:那两跟差不多重合的线,是动态钳位和增量pi。它两能差不多重合,是因为我调过传递函数。
- 紫色:是back-cal的方法,不过系数比较大。
看的出来,积分器的不同处理方法,对系统的控制带来的效果是不同的。
我用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”获取。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)