收到网友的邮件,让我分析以下 关于加热系统的 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
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
顶。
我把 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) 项。
一周热门 更多>