【申精】答网友问:加热系统的PID算法方案!

2020-03-07 17:52发布

收到网友的邮件,让我分析以下 关于加热系统的 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)是上上次计算时的误差值


全文请移步:
http://blog.21ic.com/user1/3407/archives/2011/85193.html
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
highgear
1楼-- · 2020-03-08 14:56
本帖最后由 highgear 于 2011-8-4 21:37 编辑

顶。

我把 PID 的公式稍微解释一下:

时域标准的 PID 公式为:
        y(t) = Kp * e(t) + Ki * ∫(e(t))dt + Kd*d(e(t))/dt

把上面的标准公式转换为数字形式是,一般有两种主要形式

(1)   独立积分式,这种方法把积分器独立出来,
           i(t) = Ki * ∫(e(t))dt
          转换为:
           i(k) = i(k-1) + e(k)
最后把比例,积分,微分三个部分叠加在一起
        y(k) = Kp * e(k) + Ki * i(k) + Kd*(e(k) –e(k-1))

(2)   增量式
对标准的 PID 公式微分后,可得:
         dy = Kp * de + Ki*e + Kd*dde

离散化后得:
           dy(k) = y(k) – y(k-1) = Kp * (e(k) – e(k-1) +Ki*e(k) + Kd* (e(k) -2*e(k-1) +e(k-2))

即:

          dy(k) = y(k) – y(k-1) = (Kp + Ki + Kd) * e(k) +(-Kp -2*Kd)*e(k-1) + Kd*e(k-2)

独立积分式与增量式其实是一个公式,各自表述,没有本质的区别,我们可以从独立积分式导出增量式:
           y(k) = Kp * e(k) + Ki * i(k) + Kd*(e(k) –e(k-1))
           y(k-1) = Kp * e(k-1) + Ki * i(k-1) + Kd*(e(k-1) –e(k-2))

上述两个公式相减可得:
        dy(k) = y(k) – y(k-1) = (Kp + Ki + Kd) * e(k) +(-Kp -2*Kd)*e(k-1) + Kd*e(k-2)
      
从实际应用角度来看,独立积分式略微更简单些,因为没有 e(k-2) 项。



  
mybao
2楼-- · 2020-03-08 18:02
PID, 很棒的帖子
Cortex-M0
3楼-- · 2020-03-08 19:44
 精彩回答 2  元偷偷看……
fskjhm
4楼-- · 2020-03-08 21:20
收下了,谢谢
tangweiwu
5楼-- · 2020-03-08 22:55
xxx
阿柯VS小宝
6楼-- · 2020-03-09 00:46
很不错,很有帮助,想学PID

一周热门 更多>