资源描述:
《基于C语言的数字PID控制算法及实现.pdf》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、2010NO.30科技创新导报ScienceandTechnologyInnovationHeraldIT技术基于C语言的数字PID控制算法及实现卢亚平(苏州大学应用技术学院江苏苏州215325)摘要:目前随着控制理论和电子技术的发展,数字PID控制正逐渐取代模拟PID控制,并逐步成为现代工业控制器的核心。本文以单回路控制器为基础,应用C语言编程,来详细说明其编程思路。关键词:数字PID控制C语言单回路中图分类号:TP13文献标识码:A文章编号:1674-098X(2010)10(c)-0024-02PID控制器是工业控制应用中常
2、见的回路核心部件。一般有两其中,T为采样周期,一般为200ms,e(k)为系统第k次采样时刻种,在20世纪80年代,PID控制器主要是模拟PID控制器,通过硬件的偏差值,e(k-l)为系统第(k-l)次采样时刻的偏差值,i为采样序(主要是电子元件,包括电阻、电容、电感等)来实现其功能,但是存号,i=0,1,2,⋯。将上面的(3)式和(4)式代入(1)式,则可以得到离散在器件组成复杂,容易损坏老化,不能灵活搭配等问题。随着电子的PID表达式i技术的发展,特别是处理器CPU的出现,数字PID控制器得到了飞Tåe(j)+TD速的发展,其
3、与模拟PID控制器相比优点是:具有强的灵活性,可以u(i)=Kp{e(i)+TT[e(k)-e(k-1)]}(5)1j=0根据试验和经验在线调整参数,可以更好的控制性能。如果采样周期T足够小(200ms),该算式可以很好的逼近模拟当然数字PID控制器的广泛应用也离不开变送器和执行元件PID算式,因而使被控过程与连续控制过程十分接近。通常把(5)式的发展,数字PID控制器的输入和输出都是以数字来表达的,所以称为PID的位置式控制算法。若把(5)式进行转化,则:对变送器和执行元件的信号就必须进行A/D,D/A转换。在转换过0.2tdu
4、(i)=k*e+k*e+k*(p-p)(6)程中转换的标准是制约数字PID控制器发展的关键,现在,传感器tii0.2ivxv1式(6)即为数字PID控制算法的编程表达式,p为第(i-1)次测和执行元件的规格都基本设定为1-5V和4-20mA,这就为数字PIDvx量值,p为第i次测量值。回路控制器的应用打下了基础。v1其程序流程图如图1所示。其中给定转换s/25+1是要把设定本文以单回路设计为例,C语言为编程语言,来具体说明数字v1值数模转化,比如要求给定液位100CM,则通过转换100/25+1=5,PID编程方法。代表的是最高液
5、位所测量的电压为5V。而对于数模转化(O+25)/P16.25是要把输出转化为电流大小,假如输出O为100%,那么1软件设计思想P1PID典型的控制算法如下公式所示:其中kp为比例系数;T为(100+25)/6.25=20,代表输出为最大电流20MA。I积分时间常数;T为微分时间常数;e(t)为给定值和测量值两者的对于输入输出量,要注意内部的数模/模数转换关系:经过变D偏差值。送器输出(1~5v)模拟量,送入A/D模块转化为(0~250)数字量,数1tde(t)字量要与给定量进行比较,就必须要数模转化,把0~250十进制数u(t)
6、=Kp[e(t)+Tò0e(t)dt+TDdt](1)转换为1.00~5.00V,数据处理公式参考下面程序。反之,同样可把1由于计算机控制是一种采样控制系统,它只能根据采样时刻(4~20mA)进行模数转化,得出0~250十进制数,再经过D/A模块,的偏差值计算控制量。因此,式中的积分和微分项不能直接使用,把模拟量送给执行元件。(图1)需要进行离散化处理。现令T为采样周期,以一系列的采样时刻点k代表连续时间t,以累加求和近似代替积分,以一阶后向差分近2软件设计T似代替微分,做如下的近似变换:下面程序是以C语言为基础,实现数字PID控
7、制算法的核心程t=kT(2)序。在这段程序中,程序循环时间为200ms,set为启动按钮,ei为第itii次采样时刻的偏差值,s为给定值,p为测量值,O为运算结果输e(jT)=Te(j)(3)v1v1P2ò0e(t)dt»Tåå出。通过k、t、t三相系数的选择,来选择P调节、PI调节和PID调节j=0j=0ide(k)-e(k-1)的三种调节模式。de(t)/d(t)»{e(k)-e[(k-l)T]}/=T(4)TTifset=1thenifk=0andti=0andtd=0thenq0=0q1=0q2=0endifei=(sv1
8、/250+1)-pv1ifk<>0andti<>0thenq0=k*eimx=k*0.2*ei/tiq2=k*td*(pvx-pv1)/0.2endififk=0thenq0=0cb=1mx=cb*0.2*ei/tiq2=cb*td*(pvx-pv