欢迎来到老马的领地~ 这是“压风式散热底座”发明者的个人网站:) 本人QQ:80524554,用户群1:562279766
最近接了个小项目,一个恒温搅拌锅,里面加水,有个磁转子在转,锅里的水要恒温.

为了省事,直接上了ARDUINO,几天就写完了代码lol.gif

http://www.m5home.com/blog//uploadfiles/20241227235204_71698.jpg


硬件方案很简单:

主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
添加评论

昵称 *

E-mail