您的位置: 网站首页 > 电子与嵌入式 > 单片机原理与应用 > 第9章 单片机应用系统设计方法简介 > 【2.温度控制的算法和程序】

2.温度控制的算法和程序

 

2.温度控制的算法和程序

1)温度控制的算法。

通常电阻炉炉温控制采用偏差控制法。偏差控制的原理是先求出实测炉温对所需炉温的偏差值,然后对偏差进行值处理而获得控制信号去调节电阻炉的加热功率,以实现对炉温的控制。

在工业上,偏差控制又称为PID控制。这是工业过程控制中应用最广泛的一种控制形式,一般都能收到令人满意的效果。

控制论告诉我们,PID控制的理想微分方程为:

                                             9-1

式中,et=rt=yt)称为偏差值,可作为温度调节器的输入信号,其中rt)为给定值,yt)为被测变量值,kp为比例系数;Ti为积分时间常数;Td为微分时间常数;Ut)为调节器的输出控制电压信号。

但计算机只能处理数字信号,故上述数学方程必须加以变换。若设温度的采样周期为T,第n次采样得到的输入偏差为en,调节器输出为un,则有:

                     (微分用差分代替)

                                                    (积分用求和代替)

这样,式(9-1)便可改写为:

                                              9-2

写成递推形式为:

改写成:

                                                      9-3

2)温度控制程序。

温度控制程序的设计应考虑如下问题:

键盘扫描、键码识别和温度显示。

炉温采样,数字滤波。

数据处理时把所有数按定点纯小数补码形式转换,然后把8位温度采样值UminUmax都变成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          ;50HSP

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为计数器方式2T1为方式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输出脉冲顶宽)完成把本次采样值转换成显示值并放入显示缓冲区和调用温度显示程序。8031T0中断服务程序返回后便可恢复现场和返回主程序,以等待下次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,42HTPL  ;UiK≠Umax,则TPL

WL:     MOV     C,5EH       ;5EH)送5FH

MOV     5FHC     

CLR     5EH         ;5EH单元

ACALL   UPL             ;转上限处理程序(略)

POP     DPH        

POP     DPL        

POP     ACC        

RETI                ;中断返回

TPL:    JNC         TPL1        ;UiK> Umax,则TPL1

CLR     5FH             ;清上次越限标志

CJNE    A,43HMTPL;UiK≠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      D5HLOOP   ;等待T1中断

POP         DPH             ;恢复现场

POP         DPL        

POP     ACC        

RETI                ;中断返回

MTPL:   JNC         HAT             ;UiK> Umax,则HAT

SETB    P1.0        ;否则,越下限声光报警

MOV     A45H      ;PID最大值输出

CPL     A           ;PID值求补,作为TL1

INC         A          

AJMP    NM          ;NM执行

TPLl:SETB    5EH             ;UiK> Umax,则5EH单元置位

JNB     5FHWL     ;若上次未越限,则转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:用于滤去来自控制现场对采样值的干扰信号。数字滤波程序的算法颇多,现以中值滤波为例加以说明。

中值滤波原理很简单,只需对2CH2DH2EH3次采样值进行比较,取中间值存放到2AH单元内,以作为温度标度转换时使用。

9-18为中值滤波程序框图,相应程序清单为:

FILTER:MOV         A,2CH       ;2CH)送A

CJNE    A,2DHCMP1;若(2CH2DH),则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,2EHCMP3;若(2DH2EH),则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,2CHCMP5;若(2EH2CH),则CMP5

MOV     2AH,A       ;否则(2EH)送2AH

RET                     ;返回

CMP5:   JC      CMP6        ;若(2EH< 2CH),则CMP6

XCH         A,2CH       ;否则,(2EH  2CH

CMP6:   MOV     2AH,A       ;A2AH

RET                    

9-16  采样子程序流程图                       9-17  数字滤波程序流程图

PID计算程序,式(9-3)可以改写成:

                                                                9-4

我们可以根据式(9-4)编程,相应程序框图如图9-18所示(程序清单略)。

9-18  PID算法程序流程图

双字节带符号乘法子程序MULT1,程序框图如图9-19所示(程序清单略)。

9-19  带符号双字节乘法程序

温度标度转换程序TRAST:目的是要把实际采样的二进制值转换成BCD形式的温度值,然后存放到显示缓冲区78H7DH。对一般线性仪表来说,标度转换公式为:

                                           9-5

式中,A0为一次测量仪表的下限;Am为一次测量仪表的上限;Ax为实际测量值(工程量);N0为仪表下限所对应的数字量;Nm为仪表上限所对应的数字量;Nx为测量所得数字量。

例如:若某热处理仪表量程为200800,在某一时刻计算机采样得到的二进制值uiK=CDH则相应的温度值为:

根据上述算法,只要设定热电偶的量程,相应温度转换子程序TRAST不难编出来。