欢迎来到天天文库
浏览记录
ID:57395390
大小:70.00 KB
页数:3页
时间:2020-08-15
《PID-温度控制的实现.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、PID温度控制的实现PID简介 PID(ProportionalIntegralDerivative)控制是控制工程中技术成熟、应用广泛的一种控制策略,经过长期的工程实践,已形成了一套完整的控制方法和典型的结构。它不仅适用于数学模型已知的控制系统中,而且对于大多数数学模型难以确定的工业过程也可应用,在众多工业过程控制中取得了满意的应用效果。 PID工作基理:由于来自外界的各种扰动不断产生,要想达到现场控制对象值保持恒定的目的,控制作用就必须不断的进行。若扰动出现使得现场控制对象值(以下简称被控参数)发生变化,现场检测元件就会将这种变化采集后经变送器送至PID控制器的输入端,并与其给定
2、值(以下简称SP值)进行比较得到偏差值(以下简称e值),调节器按此偏差并以我们预先设定的整定参数控制规律发出控制信号,去改变调节器的开度,使调节器的开度增加或减少,从而使现场控制对象值发生改变,并趋向于给定值(SP值),以达到控制目的,如图1所示,其实PID的实质就是对偏差(e值)进行比例、积分、微分运算,根据运算结果控制执行部件的过程。 图1模拟PID控制系统原理图 PID控制器的控制规律可以描述为: (1) 比例(P)控制能迅速反应误差,从而减小稳态误差。但是,比例控制不能消除稳态误差。比例放大系数的加大,会引起系统的不稳定。积分(I)控制的作用是:只要系统有误差存在,积分控制
3、器就不断地积累,输出控制量,以消除误差。因而,只要有足够的时间,积分控制将能完全消除误差,使系统误差为零,从而消除稳态误差。积分作用太强会使系统超调加大,甚至使系统出现振荡。微分(D)控制可以减小超调量,克服振荡,使系统的稳定性提高,同时加快系统的动态响应速度,减小调整时间,从而改善系统的动态性能。根据不同的被控对象的控制特性,又可以分为P、PI、PD、PID等不同的控制模型。数字PID的实现 在连续-时间控制系统(模拟PID控制系统)中,PID控制器应用得非常广泛。其设计技术成熟,长期以来形成了典型的结构,参数整定方便,结构更改灵活,能满足一般的控制要求。随着计算机的快速发展,人们将计
4、算机引入到PID控制领域,也就出现了数字式PID控制。 由于计算机基于采样控制理论,计算方法也不能沿袭传统的模拟PID控制算法(如公式1所示),所以必须将控制模型离散化,离散化的方法:以T为采样周期,k为采样序号,用求和的形式代替积分,用增量的形式(求差)代替微分,这样可以将连续的PID计算公式离散: (2)式1就可以离散为: (3)或者: (4) 这样就可以让计算机或者单片机通过采样的方式实现PID控制,具体的PID控制又分为位置式PID控制和增量式PID控制,公式4给出了控制量的全部大小,所以称之为全量式或者位置式控制;如果计算机只对相邻的两次作计算,只考虑在前一次基础上,计算机
5、输出量的大小变化,而不是全部输出信息的计算,这种控制叫做增量式PID控制算法,其实质就是求Δμ的大小,而 Δμk =μk -μk-1 ;所以将式4做自减变换有: (5)其中 温度控制PID算法设计 本设计利用了上面所介绍的位置式PID算法,将温度传感器采样输入作为当前输入,然后与设定值进行相减得偏差ek,然后再对之进行PID运算产生输出结果fOut,然后让fOut控制定时器的时间进而控制加热器。为了方便PID运算,首先建立一个PID的结构体数据类型,该数据类型用于保存PID运算所需要的P、I、D系数,以及设定值,历史误差的累加和等信息:typedefstructPID{floatSet
6、Point;//设定目标DesiredValuefloatProportion;//比例系数ProportionalConstfloatIntegral;//积分系数IntegralConstfloatDerivative;//微分系数DerivativeConstintLastError;//上次偏差intSumError;//历史误差累计值}PID;PIDstPID;//定义一个stPID变量 下面是PID运算的算法程序,通过PID运算返回fOut,fOut的值决定是否加热,加热时间是多少。PID运算的C实现代码:floatPIDCalc(PID*pp,intNextPoint){i
7、ntdError,Error;Error=pp->SetPoint*10-NextPoint;//偏差,设定值减去当前采样值pp->SumError+=Error;//积分,历史偏差累加dError=Error-pp->LastError;//当前微分,偏差相减pp->PrevError=pp->LastError;//保存pp->LastError=Error;+pp->Integral*pp->SumEr
此文档下载收益归作者所有