一种pid温度控制算法设计与实现

一种pid温度控制算法设计与实现

ID:5930173

大小:27.50 KB

页数:6页

时间:2017-12-29

一种pid温度控制算法设计与实现_第1页
一种pid温度控制算法设计与实现_第2页
一种pid温度控制算法设计与实现_第3页
一种pid温度控制算法设计与实现_第4页
一种pid温度控制算法设计与实现_第5页
资源描述:

《一种pid温度控制算法设计与实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、一种PID温度控制算法设计与实现  摘要:介绍温度控制中一种实际应用中效果良好的通用的PID温度算法,说明其原理、设计、流程、应用。关键词:PID算法;温度控制;相对误差;控制值;分段积分中图分类号:O231文献标识码:A文章编号:1671-7597(2013)0110057-020引言在仪器设备的制造中精准地控制温度经常成为制造成败的关键,从快速成型设备到小小的自动烹饪锅都离不开它,而PID(ProportionalIntegralDerivative)控制这种技术成熟、应用广泛的控制策略是在控温中经常会采用的策略。最近有几个项目都要求实现PID的温度控

2、制,本人尝试用VC做了一个PID温度算法的程序,在实际中得到了比较好的应用。1原理及设计PID控温算法的原理简单的说是在一个闭环系统中根据测量到的温度与设定温度的差异来调节温度控制器,以求最后达到稳定的设定温度。这其中分成三部分:测量温度,计算控制值,控制温度。1.1测量温度6温度的测量比较简单,一般在程序中通过端口读取所连接测温模块的数据就可以得到。当然实际测量的一般是电压之类的值不会是实际温度,但这个电压与温度的关系表一般厂家会提供,可以把那些具体数据拟合为适当的计算公式,这样就可以轻松的把电压转换为近似温度了。1.2计算控制值这是最重要的部分。它通过

3、测量到的实际温度值与设定要达到的温度值的偏差来计算。一般做法是直接用这个绝对误差值来计算,但考虑到这个绝对误差对控温的影响与实际设定温度有关,从通用性的角度,本人特意用相对误差代替了绝对误差,并为了计算方便加大了100倍,通俗的说就是改成了测量温度与设定温度的误差百分数。具体相对误差的计算如式1所示。Error=(SetPoint-Curvalue)*100/SetPoint(1)其中Error指相对误差,SetPoint指设定要达到的温度,Curvalue指当前测量得到的温度。计算控制值的基本公式也是采用普通的增量式PID算法,如式2所示:U(k)=kp

4、*error(k)+kiΣeror(j)+kd(eror(k)-eror(k-1))(2)6其中u(k)指要求的k时刻的控制值,error(k)指k时刻的相对误差,kp为比例系数,ki为积分系数,kd为微分系数。在采样周期一定的情况下式2中的ki、kd已经把采样周期的值计算在内了。因为在整个PID控制的启动、结束或大幅度增减设定时,短时间内系统输出可能有很大的偏差,会造成PID运算的积分积累,引起系统较大的超调和振荡。特别在温度变化比较缓慢且带有纯滞后环节时,若采用单纯PID控制,当有较大扰动或大幅度改变给定值时,会产生较大的偏差,所以参考别人的做法对式3

5、中的比例系数做了进一步调整,增加了一个分段积分的变化系数λ,最后公式定为:u(k)=kp*error(k)+λ*kiΣeror(j)+kd(eror(k)-eror(k-1))(3)而λ的取值是随着当前相对误差的绝对值的改变而改变的,基本上可以设计为一个分段函数。当相对误差的绝对值越大时,也就是测量值偏离设定值越大时希望让积分系数的影响越小,就把λ取小;相反,当相对对误差的绝对值越小时,就是测量值越靠近设定值时就希望让积分系数的影响越大,就把λ取大些,可以按式4设置λ。1.3控制温度一般来说,控制温度是对温6度控制器的电热元件之类如发热丝、加热棒进行控制。

6、在简单的控制系统中只能控制加热或不加热两种状态。但如果只根据计算出的控制值与某个阀值的大小在一个周期内做加热或不加热两种的控制,一来使计算出的具体控制数值大部分失去了控制意义,不能发挥作用,二来更重要的是使温度控制器控温的惯性温度误差问题显得更加严重,不容易精确的稳定住温度。由于控制温度是要控制加热的功率,而加热功率除了与加热器本身能力有关外,也与加热的时间有关,所以我们可以通过控制周期内加热时间的长短来控制加热器,如果把控制器的加热状态当成1,不加热状态当成0形成一个PWM的方波的话,那么也就是说可以用控制值控制这个PWM的占空比来控制加热功率。基本的控

7、制程序可以类似下面的代码来实现:doubleminval=0;inttimes=int(1000*m_SampleTimes);if(controlval>minval){unsignedintth;unsignedinttl;doublebili;doublelimit=100;if(controlval>limit)bili=1;elsebili=controlval/limit;6th=(int)(times*bili);tl=(int)(times*(1-bili));Heating();//加热Sleep(th);StopHeating();//

8、停止加热Sleep(tl);}else{StopHeating()

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。