打印
[程序源码]

串级PID算法到PD算法

[复制链接]
1031|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
最近在做一个恒定气压(负压)控制的PID算法,真空泵会持续的从气缸中吸气,气缸连接有一个气压传感器和两个进气口A和B。其中A进气口连接了一个流量比例阀控制补气量,B进气口会有打开和关闭两种状态。要求当B进气口关闭后通过控制A进气口的补气量维持气压传感器值恒定。普通的单级PID算法实际控制效果差强人意,给大家看看打印csv文件的波形图:

交代一下传感器的输出为模拟电压,负压越强电压越低。可以看到过冲很严重,在反复调校PID参数后无果,增大微分可以有效减小过冲但是却增加了系统不稳定性,有些目标AD值会出现震荡的情况:

过冲还是可以勉强接受的但是振荡就零容忍,所以事情似乎就陷入僵局。单靠调整PID参数已经无法满足要求了。受四轴飞行器控制高度算法的启发我想引入串级PID控制算法,通过第一级PID输出目标微分值(传感器值变化率),当前值,目标值,输出值之间的关系为:
①当前值离目标值远则输出值大;
②当前值接近目标值则输出值小;
③当前值高于目标值则输出值负;
④当前值低于目标值则输出值正;
当前值为传感器值,目标值为设定目标值,输出值为输出目标微分值。
第二级PID将第一级PID的输出目标微分值作为目标值,控制输出使当前微分值跟随目标微分值变化。
总结下来控制策略就是:当前值离目标值远则让其快速接近目标值,当当前值接近目标值后则慢速接近目标值防止发生过冲。经过一通操作下来发现这不就是把PID算法去掉'I'并把位置PID改成增量的形式(输出 += 比例 + 微分)吗,还要啥串级PID?要啥自行车?经过我的魔改之后发现确实也可以实现恒定气压控制,只是多数档位都会发生振荡只有最高档可以实现比较好的控制效果:

从波形上来看微分太弱了基本看不到起伏,几乎没有发挥什么作用,所以接下来应该是加强微分...

2108162a419a055472.png (220.61 KB )

2108162a419a055472.png

使用特权

评论回复

相关帖子

沙发
zwsam| | 2022-6-27 11:29 | 只看该作者

使用特权

评论回复
板凳
llllll008| | 2022-6-27 14:17 | 只看该作者
楼主,这个图形是有那个软件做的,我也有个项目,做温控,控制水温的,提供一下

使用特权

评论回复
地板
shipeng1989|  楼主 | 2022-6-28 14:32 | 只看该作者
llllll008 发表于 2022-6-27 14:17
楼主,这个图形是有那个软件做的,我也有个项目,做温控,控制水温的,提供一下 ...

按照csv文件格式串口打印你会不会?串口助手把接收到的数据保存为csv文件,再用excel打开选中所有数据列->插入->折线,就可实现下面的效果

使用特权

评论回复
评论
shipeng1989 2022-6-28 14:37 回复TA
这个其实很不方便效率很低,每次修改PID参数后都要重新打印生成文件,不能实时观察控制曲线严重拖慢开发进度 
5
efen| | 2022-6-28 23:55 | 只看该作者
我也习惯用增量式pd,简单实用。多数档位振荡可以把k调试,分档位分k参数

使用特权

评论回复
6
zwsam| | 2022-8-6 19:14 | 只看该作者

使用特权

评论回复
7
shipeng1989|  楼主 | 2022-8-9 11:05 | 只看该作者
efen 发表于 2022-6-28 23:55
我也习惯用增量式pd,简单实用。多数档位振荡可以把k调试,分档位分k参数

这样做虽不算高明但也似乎是最合适的解决方案

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

128

帖子

1

粉丝