欢迎来到老马的领地~ 这是“压风式散热底座”发明者的个人网站:) 本人QQ:80524554,用户群1:562279766
最近接了个小项目,一个恒温搅拌锅,里面加水,有个磁转子在转,锅里的水要恒温.
为了省事,直接上了ARDUINO,几天就写完了代码
硬件方案很简单:
主MCU是STM32F103C8T6,温度传感器用NTC,直接MCU的ADC采样.
显示方面,u8g2库从SPI驱动ST7567的12864屏,外加MOC3061过零驱动可控硅.
PID库方面,用的是这个: arduino-pid-control
啥都弄好了,就剩下PID参数整定了.
客户那边工程师张工没怎么玩过PID调整,而我又没折腾自整定库,所以开始是让他自己调,结果调两天都调不好.
于是我就自己接上锅装上水来调,折腾了一晚上调好了,最终调出的性能客户那边很满意:
SV=37度,23度冷水升到36.9度耗时300秒,且无过冲,就稳住了.
因为要求无过冲,所以升温时间上就牺牲了些,但客户那边对升温时间不严格,300秒能接受.
张工网上找来的手调流程没有合适的,看得他一头雾水,怎么调也调不好.
于是我总结了一下自己手调PID的经验与流程发给了张工,自己也记录一下:
P大 = 增快响应速度,太大则容易超调过冲.
I大 = 更快消除稳差,但有积累效应,不可过大,否则刹不住车而导致过冲.
D大 = 增加预判,太大则容易振荡
调整流程:
先让D与I都为极小或为0,只调P.
目标是找到一个接近SV时上升得很慢的P值.
例如SV=37.0,则选取合适的P值以达到在36.5左右就升不上去,稳在这附近.
P过大,会振荡;
P过小,会导致PV无法接近SV.
然后再加I,从小往大调.
目标是让PV尽量接近SV,但不可过大,否则会过冲与振荡.
I越大,则PV与SV有误差时,PV接近SV的速度越快.
当PV基本稳定后,再调D.
D也是从小往大调,越大则对PV的变化越敏感.
对于大惯量系统,本身就难以有大的快的PV波动,则可以让D非常小甚至等于0,不需要预判,即PI控制,例如温度控制.
对于小惯量系统,例如电机转速控制,PV波动会非常大且快速,此时就需要D的参与.
作为参考,这个案子的PID参数如下:
P = 15
I = 0.03
D = 0.00001
为了省事,直接上了ARDUINO,几天就写完了代码

硬件方案很简单:
主MCU是STM32F103C8T6,温度传感器用NTC,直接MCU的ADC采样.
显示方面,u8g2库从SPI驱动ST7567的12864屏,外加MOC3061过零驱动可控硅.
PID库方面,用的是这个: arduino-pid-control
啥都弄好了,就剩下PID参数整定了.
客户那边工程师张工没怎么玩过PID调整,而我又没折腾自整定库,所以开始是让他自己调,结果调两天都调不好.
于是我就自己接上锅装上水来调,折腾了一晚上调好了,最终调出的性能客户那边很满意:
SV=37度,23度冷水升到36.9度耗时300秒,且无过冲,就稳住了.
因为要求无过冲,所以升温时间上就牺牲了些,但客户那边对升温时间不严格,300秒能接受.
张工网上找来的手调流程没有合适的,看得他一头雾水,怎么调也调不好.
于是我总结了一下自己手调PID的经验与流程发给了张工,自己也记录一下:
P大 = 增快响应速度,太大则容易超调过冲.
I大 = 更快消除稳差,但有积累效应,不可过大,否则刹不住车而导致过冲.
D大 = 增加预判,太大则容易振荡
调整流程:
先让D与I都为极小或为0,只调P.
目标是找到一个接近SV时上升得很慢的P值.
例如SV=37.0,则选取合适的P值以达到在36.5左右就升不上去,稳在这附近.
P过大,会振荡;
P过小,会导致PV无法接近SV.
然后再加I,从小往大调.
目标是让PV尽量接近SV,但不可过大,否则会过冲与振荡.
I越大,则PV与SV有误差时,PV接近SV的速度越快.
当PV基本稳定后,再调D.
D也是从小往大调,越大则对PV的变化越敏感.
对于大惯量系统,本身就难以有大的快的PV波动,则可以让D非常小甚至等于0,不需要预判,即PI控制,例如温度控制.
对于小惯量系统,例如电机转速控制,PV波动会非常大且快速,此时就需要D的参与.
作为参考,这个案子的PID参数如下:
P = 15
I = 0.03
D = 0.00001
添加评论
GB2312 https://www.m5home.com/blog/trackback.php?id=155&encode=gb2312
UTF-8 https://www.m5home.com/blog/trackback.php?id=155&encode=utf-8