搜索
bottom↓
回复: 202

PID 温控系统 解决方法(转帖)

  [复制链接]

出0入0汤圆

发表于 2011-8-3 09:59:47 | 显示全部楼层 |阅读模式
这个帖子转自http://blog.21ic.com/user1/3407/archives/2011/85193.html,是一位高手给的指点,希望对大家有帮助。。。
收到网友的邮件,让我分析以下 关于加热系统的 PID算法。这里初步给了一个方案,请各位参考参考,由于很久没有做PID这一方面的工作了,有错误难免存在!若有问题,欢迎批评指正。谢谢!

***************************************************求救邮件*******************************************

emailli你好,我在维库电子市场的一个关于pid的帖子里看到你对楼主的回复,表示了自己对pid的理解,我现在也越到了一个关于pid          计算结果输出值与需要控制的量之间对应关系的问题,想了很长时间了都没有想明白,希望你能够有时间帮我指点一下。谢谢……

       我要做的是用一个温度传感器采集水温,经过一个arm芯片(stm13)控制水温。水温要求是在30-60度之间随意设定,然后能在设定温度处保持,精度要求是上下一度。。。要求用pid算法进行处理,我看了一些pid的介绍,能够理解它的两种数字pid算法的推导公式。。我用采集到的真实温度与设定温度进行比较,得出误差e,这个误差经过pid算法之后,得出输出值out,然后再根据这个out值控制加热设备(现在的初步向想法是控制加热的占空比),但是我用了好几天也没有找出这个out的变化规律和e的变化规律之间有什么关系,也就是无法得出如何用out值去调节占空比。。。比如,当out是多大的时候给大的占空比加热,当out是多大的时候就应该停止加热。
      这个问题我现在已经想了很长时间了,但是还没有想出来,可能是我在哪个方面理解有问题,请你指教。。。谢谢。
--乾坤
******************************************求救邮件*******************************************

|

|



*********************************************答复方案****************************************

这个是PID公式:
U(k+1) = U(k) + ( KP*E(k) - KI*E(k-1) + KD*E(k-2) )

对你的系统而言,U(k)就是当前占空比。我这里先假定 你的占空比对应 定时器寄存器设置范围是 0-65535.同时假定 定时器设置为0的时候,

占空比输出为0%,全部是低电平,完全不加热。65535的时候,占空比输出100%,全速加热。

E(k)是当前温度和设定温度的误差值
E(k-1)是上次计算时的误差值
E(k-2)是上上次计算时的误差值



由于KP,KI,KD三个系数现在都不知道。需要整定,有自动整定,也有手动整定。我们先采取手动整定的方案。
我们现在可以知道温度相差40℃,显然,需要比较快速的加热。水温在正常系统使用的时候,显然是0-100℃的。
而你们这里需要目标温度是 30-60℃,故 最大加热的差值可以认为是 60-0 = 60。(假定不是冰,是水开始加热)。
我们可以认为,在需要最大加热差值的时候,仅用比例控制应当是开启全速加热。所以我们可以得到一个KP的估计值。
KP = 65535/60 = 1000左右。 这个意思是 最大温差对应最快加热速度。
然后,假设 KI = 800,KD = 300;
注意,系数需要根据实际情况来整定,此为假设。


好,现在假定设置 需要温度是 60℃,而当前温度是 20℃。那么可以知道

第一次
U(k) = 0              ---最开始是没有占空比输出的。所以是占空比是0
E(k) = 60-20 = 40     ---第一次的误差
E(k-1) = 0            ---还没有上次,所以初始化为0
E(k-2) = 0            ---还没有上上次,所以初始化为0

由于KP假定是1000,所以
U(k+1) = 40*1000 = 40000

所以,现在就可以按照 占空比 40000来加热了。

由于热系统是一个缓慢变化的系统,所以,加热需要一段时间才可以看到效果,假设采用固定间隔时间来设计。这里取5秒。

5秒过后,假定温度上升了5℃,当前温度为25℃。
则计算第二次 占空比过程。

第二次
U(k) = 40000
E(k) = 60-25 = 35
E(k-1) = 40
E(k-2) = 0

U(k+1) = 40000 + 35*1000 - 40*800 + 0 = 43000 (加热加速了)

又过了5秒,假定温度上升了6℃。当前温度为29℃
第三次
U(k) = 43000
E(k) = 60-31 = 29
E(k-1) = 35
E(k-2) = 40

U(k+1) = 43000 + 29*1000 - 35*800 + 40*300 = 56000 (2个周期以后还未达到指定温度,加热继续加速)

继续计算第四次,第五次,第N次 即可。

显然,要一直到出现超调,才会出现加热速度放慢甚至不加热。

若不允许超调,则需要增加一些门限控制。那就不在标准的PID讨论范围以内了。

以上是算法部分。



以下来讨论整定部分。

看系数是否合理,需要通过实验观察。

关于系数的整定,有一些工程的方法。你可以对自己的系统来摸索摸索。

整定的时候,先用整定比例系数。先不给积分,微分系数赋值,然后看加热速度有多快。这个快慢就主要看的是几个整定周期达到目标温度。

先不考虑超调的问题。

所以,你需要先对整个系统做实验,先看全速加热需要多久才可以把温度由 0℃ 加热到 60℃。

全速加热把温度从0℃加热到60℃所需要的时间设置为T,那么我们的整定周期就可以根据T来设置了。假设整定周期为 T/10。

(事实上,整定周期还可以根据偏差值来做动态调整,显然温度越接近目标值,整定周期就需要越短,非标PID不在继续深入,仅仅做一个简单提示)

然后以此来设置不同的KP比例系数,看KP设置为多少,可以接近 10个整定周期 达到同等加热速度,这样得到的KP就是一个比较合理的KP了。



然后再来看KI的整定,看KI设置成多少,可以让超调大约在根号2左右,也就是说 最大只有超调41%,这样得到的KI就是比较合理的。

当然,如果系统温度不允许超调41%,那就需要修改KI来实现了。




最后来整定KD,看KD设置成多少,可以让 最终稳定温度和设置温度的偏差 达到要求,比如偏差在 0.5℃以内。

这个就看你的需求了。


故,你的代码需要记录 整定的时候,PID算法运行的次数,以及每次整定的时候所得到的 温度偏差。通过串口发送出来做记录。

根据这些记录来选取合适的 KP,KI,KD。



以上介绍了 关于PID算法和整定的方案。总的思路应该是比较清晰的,实际应用的时候,需要根据自己的需求多做做修改。

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2011-8-13 23:21:18 | 显示全部楼层
先mark

出0入0汤圆

发表于 2011-8-16 20:53:53 | 显示全部楼层
好东西mark

出0入0汤圆

发表于 2011-8-16 21:15:52 | 显示全部楼层
正需要这东西呢,谢谢了!!

出0入0汤圆

发表于 2011-8-17 01:28:33 | 显示全部楼层
21ic 被屏蔽了。

出0入0汤圆

发表于 2011-8-17 08:36:28 | 显示全部楼层
正在做电机驱动,正弄不明白PID调速环呢,谢谢了

出0入0汤圆

发表于 2011-8-17 11:59:13 | 显示全部楼层
回复【楼主位】hanhai 瀚海
-----------------------------------------------------------------------

若不允许超调,则需要增加一些门限控制。那就不在标准的PID讨论范围以内了。

这个门限控制指的是什么呢?

出0入0汤圆

发表于 2011-8-17 13:16:36 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-17 16:22:09 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-8-17 16:49:16 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-17 17:13:02 | 显示全部楼层
好贴,学习了。支持下。。

出0入0汤圆

发表于 2011-8-17 17:16:54 | 显示全部楼层
mark

出0入97汤圆

发表于 2011-8-17 17:22:42 | 显示全部楼层
那么好的资料,mark

出0入0汤圆

发表于 2011-8-17 17:29:59 | 显示全部楼层
回复【楼主位】hanhai 瀚海
-----------------------------------------------------------------------

不错

出0入0汤圆

发表于 2011-8-19 17:23:53 | 显示全部楼层
值得学习

出0入0汤圆

发表于 2011-8-19 18:29:10 | 显示全部楼层
PID不好调啊,上次调了一天一夜,还是不行。

出0入0汤圆

发表于 2011-8-19 18:50:51 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-8-20 23:58:40 | 显示全部楼层
怎么跟我要做的东西基本上一模一样呢 ??

出0入0汤圆

发表于 2011-8-21 02:41:46 | 显示全部楼层
不错

出0入0汤圆

发表于 2011-8-21 07:58:13 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-21 08:38:53 | 显示全部楼层
实践出真理

出0入0汤圆

发表于 2011-8-21 09:05:49 | 显示全部楼层
呵呵,想做实验

出0入0汤圆

发表于 2011-8-21 14:26:17 | 显示全部楼层
多谢 好贴

出0入0汤圆

发表于 2011-8-21 15:29:46 | 显示全部楼层
虽然位置式PID的控制精度比较高,但是如果控制系统出问题的了,输出还是以全量输出,会很危险,工程一般不允许,所以还是用增量式PID比较保险,如果对精度要求不是很高的话。

出0入0汤圆

发表于 2011-8-25 17:13:56 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-25 17:22:57 | 显示全部楼层
增量式PID

出0入0汤圆

发表于 2011-8-25 19:21:06 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-9-2 09:51:47 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-10-11 13:15:16 | 显示全部楼层
mark 温度的PID控制

出0入0汤圆

发表于 2011-10-11 14:44:19 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-10-11 15:16:13 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-11 16:00:24 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-16 23:01:15 | 显示全部楼层
回复【楼主位】hanhai  瀚海
-----------------------------------------------------------------------

不错的资料。谢谢!

出0入131汤圆

发表于 2011-10-16 23:24:56 | 显示全部楼层
good!

出0入0汤圆

发表于 2011-10-17 08:53:56 | 显示全部楼层
mark pid

出0入0汤圆

发表于 2011-10-17 08:55:39 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-18 11:14:54 | 显示全部楼层
PID

出0入0汤圆

发表于 2011-10-18 17:07:40 | 显示全部楼层
参考

出0入0汤圆

发表于 2011-10-18 19:48:55 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-10-18 20:14:29 | 显示全部楼层
MARK

出0入476汤圆

发表于 2011-10-18 20:21:38 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-18 21:00:55 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-19 08:03:08 | 显示全部楼层
不知道写这篇PID温度控制的原著者是用什么加热的,如果是用加热圈加热的话,还要考虑加热圈自身加热的时间以及温度缓冲量,如果在后期缩短加热周期,反而会使超调变大,加热圈还需要一个加热和散热的自我平衡阶段,这个也需要通过调节加热占空比达到,这样才能使温度最终稳定在设定值附近,加热220度时,误差可以达到正负0.5°,甚至更小。

出0入0汤圆

发表于 2011-10-19 08:38:57 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-19 14:54:20 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-10-22 21:55:09 | 显示全部楼层
学习

出0入0汤圆

发表于 2011-11-3 09:45:46 | 显示全部楼层
大哥公式好像错了啊 ?

出0入0汤圆

发表于 2011-11-3 10:03:27 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-3 15:48:58 | 显示全部楼层
飘过

出0入0汤圆

发表于 2011-11-4 16:31:09 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-7 11:44:37 | 显示全部楼层
好像这个才是推导出来的公式啊:
U(k+1) = U(k) +kp*(e(k)-e(k-1))+ki*e(k)+kd*(e(k)-2e(k-1)+e(k-2))
怎么没人觉得不对么?

出0入0汤圆

发表于 2012-1-17 10:14:06 | 显示全部楼层
太好了

出0入0汤圆

发表于 2012-2-22 12:50:49 | 显示全部楼层
收藏

出0入0汤圆

发表于 2012-5-22 15:52:43 | 显示全部楼层
mark 位置式PID

出0入0汤圆

发表于 2012-5-22 22:17:06 | 显示全部楼层
之前也是有这样的疑惑,现在明白了不少。

出0入8汤圆

发表于 2012-5-25 09:39:28 | 显示全部楼层
mark         

出0入0汤圆

发表于 2012-5-25 10:15:05 | 显示全部楼层
电邮回的很详细,高手啊!吃的很透,看了以后有所了解了!

出0入0汤圆

发表于 2012-5-25 11:43:57 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-5-25 13:03:13 | 显示全部楼层
PID是否有相关的书籍推荐啊

出0入0汤圆

发表于 2012-5-25 22:08:18 | 显示全部楼层
谢谢,受教了。

出0入0汤圆

发表于 2012-6-4 17:32:12 | 显示全部楼层
先mark再,慢慢看

出0入0汤圆

发表于 2012-6-4 18:03:46 | 显示全部楼层
MARK      

出0入0汤圆

发表于 2012-6-4 18:44:48 | 显示全部楼层
坚决留下记号

出0入0汤圆

发表于 2012-6-4 19:58:36 | 显示全部楼层

出0入0汤圆

发表于 2012-6-6 16:25:44 | 显示全部楼层
好帖,我一直在想这个问题,一直没弄懂,现在终于搞清楚了输出的uk和占空比的关系

出0入85汤圆

发表于 2012-6-6 16:36:44 | 显示全部楼层
U(k+1) = U(k) + ( KP*E(k) - KI*E(k-1) + KD*E(k-2) )

这个公式应该是增量PID的按照EK,EK-1,EK-2的合并式,这里的KP,KI,KD,已经不是原来意义上的比例积分微分了吧?程序中若使用这个公式来手动整定参数会不会不合适?

出0入85汤圆

发表于 2012-6-6 16:43:37 | 显示全部楼层
serena 发表于 2011-10-19 08:03
不知道写这篇PID温度控制的原著者是用什么加热的,如果是用加热圈加热的话,还要考虑加热圈自身加热的时间 ...

到最后使用小得控制周期是有道理的,周期变小了,控制分辨率不变,控制精度提高,热惯性也比较正常,有微分在,前提是采集精度要比控制精度高一个等级,这样才有意义,看看美信的充电芯片

出0入0汤圆

发表于 2012-10-10 22:29:21 | 显示全部楼层
非常受用,只是还有一些地方不太懂
所以,你需要先对整个系统做实验,先看全速加热需要多久才可以把温度由 0℃ 加热到 60℃。全速加热把温度从0℃加热到60℃所需要的时间设置为T,那么我们的整定周期就可以根据T来设置了。假设整定周期为 T/10。然后以此来设置不同的KP比例系数,看KP设置为多少,可以接近 10个整定周期 达到同等加热速度,这样得到的KP就是一个比较合理的KP了。

这里全速加热不是KP=65535吗,为什么后面还要重新设置KP,让接近10个整定周期达到同等加热速度。这个整定周期是什么y有什么用

出0入0汤圆

发表于 2012-10-14 21:51:26 | 显示全部楼层
很不错嘛,谢谢LZ的分享

出0入0汤圆

发表于 2012-10-14 22:06:13 | 显示全部楼层
正需要这东西呢,谢谢了!!

出0入0汤圆

发表于 2012-10-15 14:12:11 | 显示全部楼层
先顶起来再说

出0入0汤圆

发表于 2012-10-15 15:48:52 | 显示全部楼层
marshallemon 发表于 2012-6-6 16:36
U(k+1) = U(k) + ( KP*E(k) - KI*E(k-1) + KD*E(k-2) )

这个公式应该是增量PID的按照EK,EK-1,EK-2的合并 ...

同问???????

出0入0汤圆

发表于 2012-10-16 11:00:27 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-11-16 14:08:35 | 显示全部楼层
太喜欢这贴了

出0入0汤圆

发表于 2012-11-18 13:06:23 | 显示全部楼层
受教了。。。。

出0入0汤圆

发表于 2012-11-21 00:04:07 | 显示全部楼层
这个帖子讲的确实不错,很透彻,一下子就明白了,这2天正在搞这PID控制速度,很好。。。

出0入0汤圆

发表于 2012-11-23 21:37:47 | 显示全部楼层
正在学习,Mark!!!

出0入0汤圆

发表于 2012-11-26 14:14:53 | 显示全部楼层
         mark

出0入0汤圆

发表于 2012-11-26 19:16:00 | 显示全部楼层
mark好贴

出0入0汤圆

发表于 2012-11-29 21:47:44 | 显示全部楼层
参考,现在在做,做不好请教下,

出0入0汤圆

发表于 2012-11-29 22:19:42 | 显示全部楼层
好东西mark

出0入0汤圆

发表于 2012-11-30 14:32:58 | 显示全部楼层
顶下,学习了

出0入0汤圆

发表于 2013-1-1 10:12:38 来自手机 | 显示全部楼层
好东西mark

出0入0汤圆

发表于 2013-1-1 10:56:35 来自手机 | 显示全部楼层
mark一下下

出0入0汤圆

发表于 2013-1-2 16:45:48 | 显示全部楼层
mark!                    

出0入0汤圆

发表于 2013-1-2 17:09:12 | 显示全部楼层
很好,谢谢楼主!

出0入0汤圆

发表于 2013-1-2 19:16:23 来自手机 | 显示全部楼层
经典的回复!

出110入8汤圆

发表于 2013-1-3 11:25:32 | 显示全部楼层
MARK

出0入0汤圆

发表于 2013-1-6 10:43:35 | 显示全部楼层
先mark一下。

出0入0汤圆

发表于 2013-1-6 10:55:23 | 显示全部楼层
好东西mark

出0入0汤圆

发表于 2013-1-6 15:12:29 | 显示全部楼层
好东西,谢谢分享!

出0入0汤圆

发表于 2013-1-11 17:18:11 | 显示全部楼层
这个公式没有用过,KP,KI,KD的意义不是比例,积分,微分系数了。

出0入8汤圆

发表于 2013-1-11 21:06:34 来自手机 | 显示全部楼层
谢谢,记下来了!

出0入0汤圆

发表于 2013-1-13 15:17:08 | 显示全部楼层
有用哎,
头像被屏蔽

出0入0汤圆

发表于 2013-3-2 00:06:41 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2013-3-2 01:21:56 来自手机 | 显示全部楼层
好好学习下

出0入0汤圆

发表于 2013-3-4 17:12:22 | 显示全部楼层
标记,回头来学习

出0入0汤圆

发表于 2013-3-4 18:31:46 | 显示全部楼层
谢谢分享,找这个好久了

出0入0汤圆

发表于 2013-3-4 19:07:26 | 显示全部楼层
mark一下

出200入0汤圆

发表于 2013-3-4 20:30:26 | 显示全部楼层
MARK学习
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 11:37

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表