(1)温度控制的算法。
通常电阻炉炉温控制采用偏差控制法。偏差控制的原理是先求出实测炉温对所需炉温的偏差值,然后对偏差进行值处理而获得控制信号去调节电阻炉的加热功率,以实现对炉温的控制。
在工业上,偏差控制又称为PID控制。这是工业过程控制中应用最广泛的一种控制形式,一般都能收到令人满意的效果。
控制论告诉我们,PID控制的理想微分方程为:
(9-1)
式中,e(t)=r(t)=y(t)称为偏差值,可作为温度调节器的输入信号,其中r(t)为给定值,y(t)为被测变量值,kp为比例系数;Ti为积分时间常数;Td为微分时间常数;U(t)为调节器的输出控制电压信号。
但计算机只能处理数字信号,故上述数学方程必须加以变换。若设温度的采样周期为T,第n次采样得到的输入偏差为en,调节器输出为un,则有:
(微分用差分代替)
(积分用求和代替)
这样,式(9-1)便可改写为:
(9-2)
写成递推形式为:
改写成:
(9-3)
(2)温度控制程序。
温度控制程序的设计应考虑如下问题:
① 键盘扫描、键码识别和温度显示。
② 炉温采样,数字滤波。
③ 数据处理时把所有数按定点纯小数补码形式转换,然后把8位温度采样值Umin和Umax都变成16位参加运算,运算结果取8位有效值。
④ 越限报警和处理。
⑤ PID计算,温度标度转换。
通常,符合上述功能的温度控制程序由主程序和T0中断服务程序组成,现分述如下。
①主程序。
主程序应包括8031本身的初始化、8155初始化等。为简化起见,本程序只给出有关标志、暂存单元和显示缓冲区清零、T0初始化、开CPU中断、温度显示和键盘扫描等程序。相应程序框图如图9-13所示。
图9-13 主程序流程图
程序清单为:
ORG 0l00H
DISM0 DATA 78H
DISM1 DATA 79H
DISM2 DATA 7AH
DISM3 DATA 7BH
DISM4 DATA 7CH
DISM5 DATA 7DH
MOV SP, #50H ;50H送SP
CLR 5EH ;清本次越限标志
CLR 5FH ;清上次越限标志
CLR A ;清累加器A
MOV 2FH, A ;清暂存单元
MOV 30H, A
MOV 3BH, A
MOV 3CH, A
MOV 3DH, A
MOV 3EH, A
MOV 44H, A
MOV DISM0, A ;清显示缓冲区
MOV DISMl, A
MOV DISM2, A
MOV DISM3, A
MOV DISM4, A
MOV DISM5, A
MOV TMOD, #56H ;设T0为计数器方式2,T1为方式1
MOV TL0, #06H ;赋初值
MOV TH0, #06H
CLR PT0 ;令T0为低中断优先级
SETB TR0 ;启动T0工作
SETB ET0 ;允许T0中断
SETB EA ;开CPU中断
LOOP: ACALL DISPLY ;调用显示程序
ACALL SCAN ;调用扫描程序
AJMP LOOP ;等待中断
注意:由于T0被设定为计数器方式2,初值为06H,故它的溢出中断时间为250个过零同步触发脉冲。为了保证系统正常工作,T1中断服务程序的执行时间必须满足T0的这一时间要求,因为T1的中断是嵌套在T0中断之中的。
② T0中断服务程序CT0。
T0中断服务程序是温度控制系统的主体程序,用于启动A/D转换、读入采样数据、数字滤波、越限温度报警和越限处理、PID计算和输出晶闸管的同步触发脉冲等。P1.3引脚上输出的同步触发脉冲宽度由T0计数器的溢出中断控制,8031利用等待T1溢出中断空隙时间(形成P1.3输出脉冲顶宽)完成把本次采样值转换成显示值并放入显示缓冲区和调用温度显示程序。8031从T0中断服务程序返回后便可恢复现场和返回主程序,以等待下次T0中断。
在T0中断服务程序中,还需要用到一系列子程序。例如:采样温度值的子程序、数字滤波子程序、越限处理程序、PID计算程序、标度转换程序和温度显示程序。在PID计算程序中,又需要用到双字节加法子程序、双字节求补子程序和双字节带符号数乘法子程序等。T0中断服务程序框图如图9-14所示。
图9-14 T0中断服务程序流程图
为了帮助读者阅读T0中断服务程序,现把CPU内部RAM中有关参数的分配列出于图9-15。
注意:5EH内为本次越限标志位,5FH内为上次越限标志位。
相应程序清单为:
ORG 000BH
AJMP CT0
CT0: PUSH ACC ;保护现场
PUSH DPL
PUSH DPH
SETB D5H ;置标志
ACALL SAMP ;调用采样子程序
ACALL FILTER ;调用数字滤波程序
CJNE A,42H,TPL ;若Ui(K)≠Umax,则TPL
WL: MOV C,5EH ;(5EH)送5FH
MOV 5FH,C
CLR 5EH ;清5EH单元
ACALL UPL ;转上限处理程序(略)
POP DPH
POP DPL
POP ACC
RETI ;中断返回
TPL: JNC TPL1 ;若Ui(K)> Umax,则TPL1
CLR 5FH ;清上次越限标志
CJNE A,43H,MTPL;若Ui(K)≠Umax,则MTPL
HAT: SETB P1.1 ;若温度不越限,则令绿灯亮
ACALL PID ;调用计算PID子程序
MOV A,2FH ;PID值送A
CPL A ;对PID值求补,作为TL1值
INC A
NM: SETB P1.3 ;令P1.3输出高电平脉冲
MOV TL1,A ;T1赋初值
MOV TH1,#0FFH
SETB PT1 ;T1高优先级中断
SETB TR1 ;启动T1
SETB ET1 ;允许T1中断
ACALL TRAST ;调用标度转换程序
LOOP: ACALL DISPLY ;显示温度
JB D5H,LOOP ;等待T1中断
POP DPH ;恢复现场
POP DPL
POP ACC
RETI ;中断返回
MTPL: JNC HAT ;若Ui(K)> Umax,则HAT
SETB P1.0 ;否则,越下限声光报警
MOV A,45H ;取PID最大值输出
CPL A ;对PID值求补,作为TL1
INC A
AJMP NM ;转NM执行
TPLl:SETB 5EH ;若Ui(K)> Umax,则5EH单元置位
JNB 5FH,WL ;若上次未越限,则转WL
INC 44H ;越限计数器加“1”
MOV A,44H
CLR C
SUBB A,#N ;越限N次么
JNZ WL ;越限小于N次,则WL
SETB P1.2 ;否则,越上限声光报警
CLR 5EH ;清越限标志
CLR 5FH
POP DPH ;恢复现场
POP DPL
POP ACC
RETI ;中断返回
图9-15 内部RAM中有关参数分配图
T1中断服务程序:
ORG 001BH
AJMP CT1
CT1:CLR D5H ;清标志
CLR P1.3 ;令P1.3变为低电平
RETI ;中断返回
③ 子程序。
采样子程序SAMP:流程图如图9-16所示,子程序清单如下。
SAMP: MOV R0,#2CH ;采样值始址送R0
MOV R0,#03H ;采样次数初值送R2
MOV DPTR,#03F8H;
SAM1: MOVX @DPTR,A ;启动ADC0809工作
MOV R3,#20H
DLY: DJNZ R3,DLY ;延时
HERE: JB P3.3,HERE ;等待A/D完成
MOVX A,@DPTR ;采样值送A
MOV @R0,A ;存放采样值
INC R0
DJNZ R0,SAM1 ;若采样未完,则SAM1
RET ;若已采样完,则返回
数字滤波子程序FILTER:用于滤去来自控制现场对采样值的干扰信号。数字滤波程序的算法颇多,现以中值滤波为例加以说明。
中值滤波原理很简单,只需对2CH、2DH和2EH中3次采样值进行比较,取中间值存放到2AH单元内,以作为温度标度转换时使用。
图9-18为中值滤波程序框图,相应程序清单为:
FILTER:MOV A,2CH ;(2CH)送A
CJNE A,2DH,CMP1;若(2CH)≠(2DH),则CMP1
AJMP CMP2 ;否则,转CMP2
CMP1: JNC CMP2 ;若(2CH)> (2DH),则CMP2
XCH A,2DH ;(2CH) (2DH)
XCH A,2CH
CMP2: MOV A,2DH ;(2DH)送A
CJNE A,2EH,CMP3;若(2DH)≠(2EH),则CMP3
MOV 2AH,A ;否则,(2DH)送2AH
RET ;返回
CMP3: JC CMP4 ;若(2DH)< (2EH),则CMP4
MOV 2AH,A ;否则,(2DH)送2AH
RET ;返回
CMP4: MOV A,2EH ;(2EH)送A
CJNE A,2CH,CMP5;若(2EH)≠(2CH),则CMP5
MOV 2AH,A ;否则(2EH)送2AH
RET ;返回
CMP5: JC CMP6 ;若(2EH)< (2CH),则CMP6
XCH A,2CH ;否则,(2EH) (2CH)
CMP6: MOV 2AH,A ;A送2AH
RET
图9-16 采样子程序流程图 图9-17 数字滤波程序流程图
PID计算程序,式(9-3)可以改写成:
(9-4)
我们可以根据式(9-4)编程,相应程序框图如图9-18所示(程序清单略)。
图9-18 PID算法程序流程图
双字节带符号乘法子程序MULT1,程序框图如图9-19所示(程序清单略)。
图9-19 带符号双字节乘法程序
温度标度转换程序TRAST:目的是要把实际采样的二进制值转换成BCD形式的温度值,然后存放到显示缓冲区78H~7DH。对一般线性仪表来说,标度转换公式为:
(9-5)
式中,A0为一次测量仪表的下限;Am为一次测量仪表的上限;Ax为实际测量值(工程量);N0为仪表下限所对应的数字量;Nm为仪表上限所对应的数字量;Nx为测量所得数字量。
例如:若某热处理仪表量程为200℃~800℃,在某一时刻计算机采样得到的二进制值ui(K)=CDH则相应的温度值为:
根据上述算法,只要设定热电偶的量程,相应温度转换子程序TRAST不难编出来。