工业生产中过程控制是流量测量与仪表应用的一大领域,流量与温度、压力和物位一起统称为过程控制中的四大参数,人们通过这些参数对生产过程进行监视与控制。对流体流量进行正确测量和调节是保证生产过程安全经济运行、提高产品质量、降低物质消耗、提高经济效益、实现科学管理的基础。流量的检测和控制在化工、能源电力、冶金、石油等领域应用广泛。
系统工作原理
系统的工作原理是流量传感器采集到流量信息,通过变换器,转化为电信号,AD转换器将模拟电信号转化为离散信号,传给单片机。单片机软件系统根据事先的设定值对采集的信息进行处理,输出离散的控制信号。DA转换器将离散的控制信号转化为模拟电量。通过模拟电量来控制阀门的动作,从而调节流量,实现流量的精确控制。
硬件构成
本系统主要由水泵、流量传感器、电动阀门和MCS-51单片机控制系统以及液体管线和控制线、监视线等组成。
系统结构框图如下所示:
流量是指单位时间内通过管道某一截面的物料数量。本控制系统的任务是对通过某一管道截面的物料数量即降粘剂流量进行控制。本系统采用单片机控制,通过流量计采集流量信息,传给单片机。单片机通过预先设定值和系统软件进行分析,发出相应的控制信号,驱动调节阀动作,从而确定降粘剂的配比与耗量,实现生产过程自动化。
系统硬件结构图如图所示:
其中,电磁流量计作为流量传感器,采集流量信息,经放大器放大后送到AD转换器。AD转换器将连续的模拟量转化为单片机能接受的离散的数字量。单片机收到流量信号后,在控制系统软件的作用下,发出相应的执行命令给执行机构——步进电机。步进电机带动阀门动作,对流体流量进行控制。软件设计
软件设计思路
该控制系统的软件设计可以分为三部分:
1.主程序部分:该部分完成存储器分区、数据定义和系统的初始化等,以及调用各个子程序,完成主要的控制功能。
2.流量控制程序:通过PID控制算法,编写出相应的流量控制子程序,实现对流量的控制,达到预期的控制要求;
3.各子程序:各个子程序完成具体的实现方法,主要包括:设定值输入、数码管显示、步进电机控制、AD转换中断、T0定时器中断、采样中断等。 软件流程图如下
主程序设计
主程序部分,主要完成存储器分配、系统初始化和系统整体控制等,并通过调用各子程序段,实现软件的总体设计功能。
初始化:系统初始化程序的功能是对8155和89C51进行初始化,使D/A输出为0,步进电机处于停机状态,将RAM中的标志位和工作单元置为初始状态,提示符CPUREADY写入缓冲器。更新显示器子程序的功能是将显示缓冲器的内容,分别转化为段数据,输出到8155。显示器0~12的显示数据缓冲器分别为73H~7FH单元。当系统处于停机状态时,显示器0~4显示参数,显示器5~7显示参数地址,所以73H~77H作为数据缓冲器,78H~7AH作为地址缓冲器,在运行状态时,73H~77H作为瞬时流量缓冲器,78H~7FH作为累计流量缓冲器。 初始化程序的流程如图所示:
流量控制子程序
在流量测试的基础上,把流量设定值和实际测试得到的瞬时流量进行比较计算出误差,采用数字PID调节算法,计算输出到AD0809的变量Uio增量式PID控制算法的计算公式为
式中:ei为本次实际测得的流量和设定值之差;
P为比例系数;I为积分系数;D为微分系数;输出控制变量表达式为:
程序的入口参数:偏差ek、ek-1、ek-2、测量值y、给定值r。这5个参数均为3字节的浮点数,分别将它们存放在RAM单元中。低字节存放浮点数的阶数和符号,其中符号存放在最高位,阶数以补码的形式存放在另7位中。尾数以原码的形式存放在另2个字节中。
中断服务子程序
设定值输入程序
本程序将4位BCD码按千、百、十、个依次存放在89C51片内RAM的30H~33H单元中,每个地址单元的高4位为0,低4位为BCD码。 程序代码如下:
RDS:MOV R0,#30H;初始化,存放单元首址
MOV R2,#7FH;P1口高4位置控制字及低4位置输入方式
MOV R3,#04H;读入4个BCD码 MOV A,R2
LOOP:MOV P1,A;P1口送控制字及低4位置输入方式
MOV A,P1;读如BCD码 ANL A,
#0FH;屏蔽高4位
MOV @R0,A;送入存储单元
INC R0;指向下个存储单元
MOV A,R2;准备下一片拨盘的控制端置0
RR A;
MOV R2,A;
DJNZ R3,LOOP;未读完返回
RET;读完结束
A/D中断子程序
A/D中断子程序流程图如下所示:
程序代码如下:
INT0:PUSH ACC ;保护现场
PUSH DPH
PUSH DPL
PUSH PSW
SETB PSW.3 ;选工作寄存器区1
MOV DPTR,#0DF01H;读取8155A口数据
MOVX A,@DPTR MOV R2, A
ANL A, #0F0H ;屏蔽低4位 JNZ ND5 ;
MOV A,R2
JNB 02H, D51 ;判断是否采样零信号
MOV C, ACC.0 ;
MOV 30H, C MOV C, ACC.7
MOV 37H,C AJMP D14
D51: MOV C,ACC.0 ;万位和标志位→荷重信号缓冲器
MOV 48H,C
MOV C,ACC.7
MOV 4FH,C
AJMP D14
ND5: MOV A,R2 ;判断是否读出千位
JNB ACC.7,ND4
JNB 02H,D41 ;判断是否采样零信号
ANL A, #0FH ;千位→零信号缓冲器
SWAP A
MOV 25H,A
AJMP D14
D41: ANL A,#0FH
SWAP A
MOV 28H, A
AJMP D14
ND4: JNB ACC.6, ND3 ;判断是否读出百位
JNB 02H,D31 ;判断是否采样零信号
MOV R1, #25H ;百位→零信号缓冲器
ANL A,#0FH
XCHP A,@R1
AJMP D14
D31: MOV R1, #28H
ANL A,#0FH
XCHD A,@R1
AJMP D14
ND3: JNB ACC.5, ND2 ;判断是否读出十位
JNB 02H, D21 ;判断是否采样信号
ANL A, #0FH ;十位→零信号缓冲器
SWAP A
MOV 24H, A
AJMP D14
D21: ANL A, #0FH
SWAP A MOV 24H,A
AJMP D14
ND2: JNB 02H,D11 ;判断是否采样零信号
ANL A,#0FH ;个位→零信号缓冲器
MOV R,#24H
XCHD A,@R1 CLR 02H
MOV DPTR,#0DFF3H ;启动A/D转换
MOV A, #30H
MOVX @DPTR,
A ADS1:SETB P1.6
NOP
NOP
CLR P1.6
AJMP D14
D11: ANL A,#0FH
MOV R1,#27H
XCHD A,@R1
MOV 2AH,24H ; 采样数据送处理缓冲器
MOV 2BH,25H
MOV 2CH,26H
MOV 2DH,27H
MOV 2EH,28H
MOV 2FH,29H
SETB 03H ;置一次A/D采样结束标志
D14: POP PSW ;恢复现场
POP DPL
POP DPH
POP ACC
RETI
定时器中断子程序
定时器T0中断程序流程图如下图所示。
程序代码如下
PIT0: PUSH PSW ;保护现场
PUSH ACC
PUSH DPH
PUSH DPL
JNB 00H, T01 ;允许采样否?
DJNZ 10H, T02 ;采样周期计数器减1,不为1转T02
DJNZ 11H,T02
MOV 10H,#0A0H ;恢复采样周期计数器初值
MOV 11H, #0FH
SETB 0FH
CLR 0DH
CLR P3.4
MOV DPTR, #0DFF3H ; 对零点采样
MOV A, #00H
MOVX @DPTR, A
SETB 04H
SETB 04H
T02: JB 01H, T05
T01 SETB P1.7
NOP
CLR P1.7
T05:CLR P1.6
DJNZ 16H, T06 ;调试用脉冲周期计数器减1
CPL P1.4 ;使P1.4产生方波
MOV 16H,17H
T06: POP DPL ;恢复现场
POP DPH
POP ACC
POP PSW
ERTI
数码管显示子程序
程序流程图如下所示:
15
在单片机内部RAM的20H和21H单元中有四位十六进制数(20H中为高两位),以下是将其自左到右显示出来的程序。 程序代码如下:
ORG 2000H
SDIAPLAY:MOV A,20H ;20H中数送A
ANL A,#0F0H ;截取高4位
MOV P1,A ;送1#MC14495
MOV A,20H ;20H中数送A
SWAP A ;低4位送高4位
ANL A,#0F0H ;去掉低4位
INC A ;A1A0指向2#MC14495
MOV P1,A ;送2#MC14495
MOV A,21H ;21H中数送A
ANL A,#0F0H ;截取高4位
ADD A,#02H ;A1A0指向3#MC14495
MOV P1,A ;送3#MC14495
MOV A,21H ;21H中数送A
SWAP A ;低4位送高4位
ANL A,#0F0H ;去掉低4位
ADD A,#03 ;A1A0指向4#MC14495
MOV P1,A ;送4#MC14495
RET
步进电机控制程序
程序代码如下: ORG 2100H
PUSH ACC ;保护现场
MOV R4,#N ;步进马达步进数送R4
CLR C ;Cy清零
ORL C,PSW.5 ;转向标志状态送Cy
JC ROTE ;若为反转,则转ROTE
MOV R0,#20H ;正转模型始址送R0
AJMP NEXT ; 转入NEXT
ROTE:MOV R0,#27H ;反转模型始址送R0
NEXT:MOV A,@R0 ;输出控制模型的值
MOV P1,A ;输出控制脉冲 ACALL DELA
Y ;延时(形成脉宽) INC R
0 ;准备下个模型指针 MOV A,#00
H ;判断送完一遍模型值
ORL A,@R0 JZ TP
L ;若模型结束,则TPL LOOP:DJNZ R4,NEXT ;若步进数未走完,则N
EXT
POP AC
C ;恢复现场
RE
T :返回
TPL:MOV A,R0 CLR C
SUBB A,#06H MOV R0,A ;恢复模型始址
AJMP LOOP ;判断步进马达步数走完?
DELAY:MOV R2,#M1 ;延时
DELAY1:MOV R2,#M2
DELAY2:DEC A JNZ
DELAY2 DJNZ R2,DELAY1
RET
END
上述控制程序是利用程序延时来控制电机的通电时间(即形成控制脉冲)以达到正转、反转、启动和停止的。这种控制的缺点是CPU因执行延时程序而降低了效率。为了提高CPU的使用效率,常常也可采用单片机内部定时/计数器编制上述程序。