电炉温度自动控制系统的软件设计论文三.docx
《电炉温度自动控制系统的软件设计论文三.docx》由会员分享,可在线阅读,更多相关《电炉温度自动控制系统的软件设计论文三.docx(28页珍藏版)》请在冰豆网上搜索。
电炉温度自动控制系统的软件设计论文三
电炉温度自动控制系统的软件设计
作者:
赖再林指导老师:
陈燕娟
【摘要】本文介绍了一种以单片机8051为控制核心,采用开关控制与PID控制相结合的控制算法,实现较高精度的电炉温度自动控制的系统软件设计。
【关键词】电炉温度控制开关控制PID算法单片机
一引言
在冶金工业、化工生产、食品加工等许多领域中,人们都需要对各类加热炉、反应炉和锅炉中温度进行监测和控制。
以往对这些用电加热设备多采用常规化仪表加接触器的断续控制方法,不能很好地实现实时控制,难以达到高精度的温控要求。
本文根据电炉温度控制的特点,主要从控制策略及软件设计方面讨论电炉温度自动控制系统的实现。
二系统论证
对电炉温度的控制可根据电炉的实际温度实时调整电炉的平均电功率来达到目的。
因此,实现较高精度的温度自动控制系统需要解决两方面问题,一是较高精度的温度测量电路及其数据处理,二是控制策略及其控制电路的研究。
下面从这两方面阐述系统的设计思想。
1温度测量及数据处理
温度测量部分是整个系统的基础。
温度检测元件的选择与被控温度及精度有关。
本系统设计成控温范围0℃~1024℃,分辨率1℃。
这样,整个系统的温度采用点数为1024点。
考虑到A/D转换的±1LSB误差及各种干扰因素,10位A/D转换器为临界应用,系统的线性度,准确度难以保证。
故采用12位A/D转换器。
温度测量分辨力为0.25℃。
对电炉温度的控制实质是对强电(AC220V)功率的控制,存在各种干扰。
实际温度信号被认为是变化缓慢的。
为提高温度测量的抗干扰能力,达到所需的测控精度,必须进行滤波处理。
本系统采用数字滤波技术,与模拟滤波相比,具有经济,可靠,灵活,稳定性好的优点。
2控制策略及控制电路
实际温度控制系统中,常采用开关控制或PID控制方式。
开关控制的特点是可以使系统以最快的速度向平衡点靠近。
但在实际应用中很容易造成系统在平衡点附近振荡,使得精度不高。
而PID控制具有广泛的实用性,稳态误差小。
但误差较大时系统容易出现积分饱和,从而导致系统出现很大超调量,甚至失控。
针对以上问题,人们不断在研究各种控制策略的应用。
其中具有智能特点的模糊控制倍受青睐。
但模糊控制含有大量专家经验,实际实现比较困难。
因此,本系统采用开关控制与PID控制相结合的方法。
具体控制过程为:
当温差大时,利用开关控制迅速减小偏差,以缩小调节时间;当温差小于某一值时采用PID控制以使系统快速稳定,并保持系统无静差。
在这种控制方法中,由于PID控制在较小温差时才开始进入,这样可有效避免数字积分器的饱和。
本系统采用在给定控制周期内选通交流电半周期数来控制电炉的平均电功率,达到调节温度的目的。
对于工频交流电(f=50HZ)设控制周期为2.5S,则在一个控制周期内有250个交流电半周期。
假设电炉在2.5S内全导通时的功率为PH,而实际输出功率
将和每个控制周期内导通的交流电半周期数成正比。
公式表示为:
。
电路构成如图
(1)中功率控制执行电路。
P1.4控制继电器的通断。
如果由程序控制P1.4在每个2.5S内输出低电平时间的长短,则通过继电器的交流电半周期数目可控。
三系统硬件框图
本系统采用8051单片机为控制核心。
温度传感器输出的温度电压信号经放大及模数转换后得到温度数字信号,再进入单片机进行处理和控制运算,并将运算得到的控制量输出到功率控制执行电路。
过零脉冲提取电路用于获取交流电半周期数信息。
键盘和数码显示实现用户与系统之间对话。
8051单片机本身含有4KB的程序存储器,简化了电路设计。
在过零脉冲提取电路中,一般情况下,D1、D2中总有一个是正向导通的,则T1、T2总有一个处于饱和导通状态,输出电压V0为高电平。
在市电过零点附近,交流电压小于Vd(Vd为二极管的正向导通压降)。
此时,两个二极管均截止,V0输出低电平脉冲。
用这种方法可以精确的提取过零脉冲。
对此脉冲计数即可知道经过的交流电半周期数目。
四系统软件设计
1温度控制算法
PID(比例—积分—微分)控制实质是偏差控制,是根据实际测量值与设定值的偏差e(t),按比例—积分—微分的函数关系进行运算,其结果(为一个数字量)用以输出控制。
根据控制理论[1],对连续PID控制的理想微分方程为
式中e(t)=UR(t)-Uy(t)称为偏差值,是调节器的输入信号。
UR(t)为给定值,Uy(t)为被测变量值。
KP为比例系数,TI为积分系数,TD为微分系数。
U(t)为控制器的输出控制信号。
将上式离散化,变成适合于计算机计算的差分方程形式。
通常微分用差分近似,积分用求和近似。
若设温度的采样周期为T,第n次采样得到的输入偏差为en,调节器输出为Un,则差分方程形式为:
这是数字PID位置式算法。
由此可得数字PID增量式算法
该算法的计算量和存储量都比较小。
本系统的PID控制采用增量式算法,并将其转换为位置式输出形式。
即
其中KI=T/TI,KD=TD/T,△en=en-en-1,△2en=△en-△en-1
但是,典型的温度控制系统是一纯滞后系统,由单纯的PID控制,在偏差较大时超调量大,调节时间长。
如前所述,开关控制却能够以最快的速度向平衡点靠近。
所以,系统的控制采用开关控制与PID控制相结合的方法,较好的解决了以上问题。
该控制方法用公式表示为:
当|en|>ε时,Un=最大值或最小值(开关控制)
当|en|<ε时,
(PID控制)
ε为根据实验得到的整定值。
在PID算法中,控制参数KP,TI,TD的具体值直接关系到控制品质的优劣。
因此,必须对这些参数认真整定。
可依扩充响应曲线法进行整定,得到初值,再通过实验方法仔细调整。
2控制程序设计
整个温控系统是在程序的控制下工作的。
系统的控制工作由实时测量(采样),实时决策(控制运算)和实时控制(调功)三部分组成。
因此,所设计的应用程序中应包括数据采集滤波,开关控制与PID控制运算以及输出控制三部分主体程序。
这些控制工作集中安排在T0中断服务程序中完成。
为提高控制精度,在进行控制运算时,将所有数据按4字节单精度浮点数格式参加运算。
其精度接近于十进制7位有效数字。
浮点数的具体格式是:
CPU内部RAM中有关参数的分配列出于图(3)。
本系统的温度控制程序由主程序,T0中断服务程序及T1中断服务程序组成。
现分述如下:
(1)主程序
主程序应包括8051本身初始化,8279初始化,显示准备好信息等。
为简化起见,本程序只给出完成开中断,启动定时器及运行前的各参数初始化,如设定偏差为理想情况,置en=△en-1=0,赋予调节器输出Un-1一个合适的值等。
程序流程图如图(4)。
(2)T0中断服务程序
T0中断服务程序是温度控制的主体程序。
用于启动A/D转换,数字滤波,控制运算和继电器输出控制等。
由于T0被设置为计数器方式2,初值为06H,故它的溢出中断时间为250个过零脉冲,约为2.5S。
这是系统的控制周期。
在PID控制中,P1.4引脚上输出的触发脉冲宽度由T1计数器的溢出中断控制。
即由T1计数器对交流电的半周期计数,达到所需选通的半周期数时,产生溢出中断,令P1.4为高电平,关闭继电器。
8051单片机利用等待T1溢出中断空隙时间(形成P1.4输出脉冲低电平宽度)完成把本次采样值转换成显示值而放入显示缓冲区和调用显示子程序。
8051单片机从T1中断服务程序返回后便可以恢复现场和返回主程序,以等待下次T0中断。
因为T1中断是嵌套在T0中断之中的,为保证系统正常工作,T1计数器产生溢出中断的时间必须小于T0中断服务程序的执行时间。
即必须保证选通交流电时间小于一个控制周期。
系统设定PID控制中选通交流电半周期数最大值为248。
若是开关控制,其控制量(开关信号)直接由控制运算子程序根据偏差en的正负输出。
在T0中断服务程序中,需要用到一系列子程序。
例如采样子程序,数字滤波子程序,控制运算子程序,标度转换子程序和温度显示子程序等。
T0中断服务程序流程图如图(5)。
(3)T1中断服务程序
该程序主要完成关电炉和清标志位工作。
T1计数器的溢出时间由控制运算的输出量决定。
程序流程图如图(6)。
(4)子程序
1①数字滤波子程序SAMP:
实际温度信号被认为是变化缓慢的。
在对强电功率控制过程中易产生高次谐波干扰,所以本系统中温度信号主要是受脉冲干扰。
因此,系统采用了防脉冲干扰的平均滤波程序。
滤波原理为连续四次采样,去掉最大值,去掉最小值,对两个中间数据取平均值。
程序中R0作计数器,R1R2存放最大值,R3R4存放最小值,R5R6存放结果。
程序同时将结果转换成浮点数。
该程序需要调用采样子程序。
2② 控制决策运算程序CTRL:
由上文温度控制算法所述,控制算法用公式可表示为:
当|en|>ε时,Un=最大值或最小值(开关控制)
当|en|<ε时,
(PID控制)
根据此算法即可编写出程序。
PID运算结果是浮点数格式,对其取整数存入20H单元作为控制输出。
程序流程图如图(8)。
③温度标度转换程序TRAST:
目的是要把实际采样的二进制值转换成BCD码形式的温度值,再存到显示缓冲区。
对一般线性仪表,标度转换公式为:
A0为一次测量仪表的下限;Am为一次测量仪表的上限;AX为实际测量值(工程量);N0为仪表下限所对应的数字量;Nm为仪表上限所对应的数字量;Nx为测量所得数字量。
本系统的参数为温控范围0℃~1024℃,A/D转换位数12位。
即A0=0Am=1024N0=0Nm=212=4096
∴
所以将测量值右移2位,再转化为BCD码,可得温度值的十进制表示。
应对移出位作四舍五入。
若移出的第二位为0,则舍去;为1则进位。
4④ 键盘输入与数码显示
本部分程序主要完成温度设定值的输入和温度设定值、测量值的显示。
键盘输入采用中断方式。
在编制程序时,应注意温度输入值的分辨力为1℃,用二进制数表示是10位数字。
而测量值的分辨力为0.25℃,用二进制数表示是12位数字。
为使输入值与测量值运算精度相同,应将输入值左移2位。
在控制运算中,使用的是浮点数格式。
必须将设定值化为浮点数格式,并存入以34H单元开始的连续4字节中。
转化方法是先赋给设定值正确的阶数,再调用规格化子程序对其规格化。
本系统软件在TCS-51仿真系统上调试通过。
由于实验条件限制,调试时温度测量部分使用8位A/D,高位字节由赋值方式完成。
但这并不影响系统软件的正确性。
五结束语
整个系统的设计思想是提高静态控温精度,减少调节时间和超调量。
由于采用12位A/D转换器和数字滤波技术,以及在控制运算中使用4字节浮点数格式,使系统的测控精度大为提高;在控制策略上,采用开关控制PID控制相结合的控制方法,较好地解决了超调量与调节时间的问题。
该系统的软件设计是以温度测量值已线性化为前提的,但实际系统中往往是非线性的,即实际温度值与传感器的输出电压不是线性关系。
对此,可设立线性化表,通过查表方法线性化。
参考文献:
[1]何克忠李伟编著·计算机控制系统[M]·北京:
清华大学出版社·1998
[2]李清泉杜继宏编著·计算机控制系统及其应用[M]·北京:
机械工业出版社·1988
[3]胡汉才编著·单片机原理及其接口技术[M]·北京:
清华大学出版社·1996
[4]张振荣晋明武王毅平编著·MCS-51单片机原理及实用技术[M]·北京:
人民邮电出版社·2000
[5]何立民主编·单片机应用文集
(2)[C]·北京:
北京航空航天大学出版社·1993.7
TheDesignofSoftwareinElectric-stove-
temperatureAutomaticControlSystem
Author:
LaiZaiLinDirectTeacher:
ChenYanJuan
AbstractThepaperintroducesinformationaboutthedesignofthesoftwaretorealizehigheraccuracyelectric-stove-temperature-automaticcontrolsystemwhichisbaseonthemicrocontroller8051andusesacombinedmethodofswitchcontrolandPIDcontrolalgorithm.
KeywordElectricstoveTemperaturecontrolSwitchcontrolPIDalgorithmMicrocontroller
附录:
;电炉温度自动控制系统的程序清单
;定义常量
UYEQU30H
UREQU34H
EEQU38H
KPEQU3CH
KIEQU40H
KDEQU44H
ORG0000H
LJMPMAIN
ORG000BH
LJMPCT0
ORG001BH
LJMPCT1
;主程序
ORG0050H
MAIN:
MOVSP,#50H
CALLSTR79;初始化8279
CALLSTART;参数初始化
CALLREADY;显示准备好信息
WAIT1:
JBP3.3,WAIT1;等待键盘输入
SETBEA;开中断,响应键盘中断
SETBEX1
NOP
NOP
MOVTMOD,#56H;初始化定时器T0为工作方式2,T1为方式1
MOVTL0,#06H;T0赋初值
MOVTH0,#06H
CLRPT0;设置T0为低中断优先级
SETBTR0;开T0中断
SETBET0
LOOP:
NOP;等待T0中断
AJMPLOOP
;T1中断服务程序
CT1:
CLR0FH;清标志位
SETBP1.4;关继电器
RETI
;T0中断服务程序
CT0:
PUSHACC;保护现场
PUSHDPL
PUSHDPH
SETB0FH;设置标志位
ACALLSAMP;采样滤波
ACALLCTRL;控制运算
JNB0FH,AA;开关量输出否?
是则转
CLRP1.4;开继电器
MOVA,20H;取补
CPLA
INCA
MOVTL1,A;设置T1计数器
MOVTH1,#0FFH
SETBPT1
SETBTR1
SETBET1
AA:
LCALLTRAST;标度转换
LCALLDISPLY;显示温度值
WAIT2:
JB0FH,WAIT2;等待T1中断
CLRET1;关T1中断
POPDPH;恢复现场
POPDPL
POPACC
RETI
SAMP:
CLRA;数字滤波子程序
MOVR1,A;最大值初态
MOVR2,A
MOVR5,A;累加和初态
MOVR6,A
MOVR3,#0FH;最小值初态
MOVR4,#0FFH
MOVR0,#04H;设置采样次数N=4
DAV1:
ACALLRDAD;调用采样子程序,采样结果在BA中
MOVR7,A;累加输入值
ADDA,R6
MOVR6,A
MOVA,B
ADDCA,R5
MOVR5,A
CLRC;最大值与输入值比较
MOVA,R2
SUBBA,R7
MOVA,R1
SUBBA,B
JNCDAV2;输入值大于最大值则更新最大值
MOVA,R7
MOVR2,A
MOVR1,B
DAV2:
CLRC;输入值与最小值比较
MOVA,R7
SUBBA,R4
MOVA,B
SUBBA,R3
JNCDAV3;最小值大于输入值则更新最小值
MOVA,R7
MOVR4,A
MOVR3,B
DAV3:
DJNZR0,DAV1;采样4次到否?
否则继续采样
CLRC
MOVA,R6;累加和中减去最大值
SUBBA,R2
XCHA,R5
SUBBA,R1
XCHA,R5;累加和中减去最小值
SUBBA,R4
XCHA,R5
SUBBA,R3
CLRC;除以2
RRCA
XCHA,R5
RRCA
MOVR6,A;R5R6中为平均值
MOV22H,R5;存放测量值二进制值
MOV23H,R6
MOVR4,#0DH;化为浮点数格式
MOVR7,#00H
ACALLTEST;规格化处理
MOV30H,R4;写入30H~33H单元
MOV31H,R5
MOV32H,R6
MOV33H,R7
RET
CTRL:
MOVR0,#UR;控制运算子程序
ACALLLDR0
MOVR0,#UY;取温度设定值,温度测量值
ACALLLDR4
CPLRS0
ACALLFPSUB;计算en
MOVR0,#00H
ACALLOUTR4;en存入0组工作寄存器R0-R3
CPLRS0
MOVR4,24H;取en-1
MOVR5,25H
MOVR6,26H
MOVR7,27H
ACALLFPSUB;计算△en
MOVR0,#24H;更新en-1
ACALLOUTR4
MOVR0,#E;取设定偏差ε
ACALLLDR0
CPLRS0
ACALLTES;求|en|
ACALLFPSUB;计算ε-en
MOVA,R5
JNBACC.7,PID;ε>en则转PID控制运算
MOVC,2FH;根据en数符将P1.4置0或1
MOVP1.4,C
CLR0FH;清标志位
START:
CLRA;设置运行参数
MOV24H,A
MOV25H,A
MOV26H,A
MOV27H,A
MOV28H,A
MOV29H,A
MOV2AH,A
MOV2BH,A
MOV2CH,#07H;置Un-1=80
MOV2DH,#50H
MOV2EH,A
MOV2FH,A
CLRRS0
RET
PID:
MOVR0,#28H;PID控制运算
ACALLLDR4;取△en-1
CLRRS0
MOV28H,R4;更新△en-1
MOV29H,R5
MOV2AH,R6
MOV2BH,R7
MOV08H,R4;取△en至1组工作寄存器R0-R3
MOV09H,R5
MOV0AH,R6
MOV0BH,R7
SETBRS0
ACALLFPSUB;计算△2en
MOVR0,44H;取KD
MOVR1,45H
MOVR2,46H
MOVR3,47H
ACALLFPMUL;计算KD·△2en
MOVR0,#00H
ACALLOUTR4
CLRRS0
ACALLFPADD;计算△en+KD·△2en
MOVR0,#KI;取KI
ACALLLDR0
MOVR0,#24H;取en
ACALLLDR4
CPLRS0
ACALLFPMUL;计算KI·en
MOVR0,#00H
ACALLOUTR4
CPLRS0
ACALLFPADD计算△en+KD·△2en+KI·en
MOVR0,#KP;取KP
ACALLLDR4
MOVR0,#04H
ACALLLDR0
CPLRS0
ACALLFPMUL;计算KP·[△en+KD·△2en+KI·en]
MOVR0,2CH;取Un-1
MOVR1,2DH
MOVR2,2EH
MOVR3,2FH
ACALLFPADD;计算Un=Un-1+KP·[△en+KD·△2en+KI·en]
MOV2CH,R4
MOV2DH,R5
MOV2EH,R6
MOV2FH,R7
CX:
JB2DH.7,CX1;为负数,以零处理
JNB2CH.7,CX2;小于1,以零处理
CX1:
MOVR3,#00H
AJMPCXZ
CX2:
CJNER4,#9H,CX3;阶大于等于9,以最大值输出
CX3:
JCCX4
MOVR3,#248
AJMPCXZ
CX4:
INCR4;取整数,结果存于R3中
MOVR3,#00H
CX5:
XCHA,R6
RLCA
XCHA,R6
XCHA,R5
RLCA
XCHA,R5
XCHA,R3
RLCA
XCHA,R3
DJNZR4,CX5
CJNER3,#248,CX6;Un≥248以248输出
CX6:
JNCCX3
CXZ:
MOV20H,R3
CLRRS0
RET
;以下是运算子程序
TES:
MOVA,R5;求绝对值子程序
JNBACC.7,BB;正数,绝对值为