计算机控制技术课程设计整理版Word文档格式.docx
《计算机控制技术课程设计整理版Word文档格式.docx》由会员分享,可在线阅读,更多相关《计算机控制技术课程设计整理版Word文档格式.docx(28页珍藏版)》请在冰豆网上搜索。
2)温度输出显示技术:
LED静态显示接口技术,所谓静态显示,即CPU输出显示值后,由硬件保存输出值,保持显示结果。
图2为6位BCD码静态显示电路原理图。
图中74LS244为总线驱动器,6位数字显示共用同一组总线,每个LED显示器均配有一个锁存器(74LS377),用来锁存待显示的数据。
当被显示的数据从数据总线经74LS244传送到各锁存器的输入端后,到底哪一个锁存器选通,取决于地址译码器74LS138各输出位的状态。
总线驱动器74LS244由IOW和A9控制,当IOW和A9同时为低电平时,74LS244打开,将数据总线上的数据传送到各个显示器的锁存器74LS377上。
技术特点:
占用机时少,显示可靠,但使用元件多,线路复杂,成本高。
图2:
用锁存器连接的6位静态显示电路
3)报警电路设计:
正常运行时绿灯亮,在保温阶段,一旦炉内温度超出系统允差范围,就要进行报警。
报警时,红灯亮,电笛响,同时发送中断信号至CPU进行处理。
图3:
加热炉报警系统
3.模拟量输入通道设计:
因为所控的实际温度在50~350℃,350-50=300.所以选用8位A/D转换器,其分辨率约为1.5℃/字,再加放大器偏置措施实现(通过调整放大器的零点来实现偏置)。
这里采用一般中速芯片ADC0809。
ADC0809是带有8位A/D转换器,8路多路开关以及微型计算机兼容的控制逻辑的CMOS组件,其转换方法为逐次逼近型。
8路的模拟开关由地址锁存器和译码器控制,可以在8个通道中任意访问一个通道的模拟信号。
这种器件无需进行零位和满量程调整。
由于多路开关的地址输入部分能够进行锁存和译码,而且其三态TTL输出也可以锁存,所以它易于与微型计算机接口。
其具有较高的转换速度和精度,受温度影响较小,能较长时间保证精度,重现性好,功耗较低,故用于过程控制是比较理想的器件。
图4:
ADC0809应用接线图
4.模拟量输出通道设计:
据其实际情况,D/A转换器的位数可低于A/D转换器的位数,因为一般控制系统对输出通道分辨率的要求比输入通道的低,所以这里采用常用的DAC0832芯片。
DAC0832是8位D/A转换器,与微处理器完全兼容。
期间采用先进的CMOS工艺,因此功耗低,输出漏电流误差较小。
它的内部具有两级输入数据缓冲器和一个R-2RT型电阻网络,因DAC0832电流输出型D/A转换芯片,为了取得电压输出,需在电流输出端接运算放大器,Rf为为运算放大器的反馈电阻端。
双极性电压输出的D/A转换电路通常采用偏移二进制码、补码二进制码和符号一数值编码。
只要在单极性电压输出的基础上再加一级电压放大器,并配以相关电阻网络就可以构成双极性电压输出。
在图5中,运算放大器A2的作用是把运算放大器A1的单向输出电压转变为双向输出。
图5:
DAC0832双极性电压输出电路
5.元器件的选择:
1)传感器的选择:
铂铑10—铂热电偶,S型,正极性,量程0—1300℃,使用温度小于等于600℃,允差±
1.5℃。
2)执行元件的选择:
电阻加热炉采用晶闸管(SCR)来做规律控制,结合电阻炉的具体要求,为了减少炉温的纹波,对输出通道采用较高的分辨率的方案,因此采用移相触发方式,并且由模拟触发器实现移相触发。
3)变送器的选择:
因为系统要求有偏置,又需要对热电偶进行冷端补偿,所以采用常规的DDZ系列温度变送器。
4)控制元件:
采用双向可控硅进行控制,其功能相当于两个单向可控硅反向连接,具有双向导通功能,其通断状态有控制极G决定。
在控制极加上脉冲可使其正向或反向导通。
图6:
可控硅加热炉控制原理图
4、数字控制器设计
1)控制算法:
整个闭环系统可用一个带纯滞后的一阶惯性环节来近似,所以其控制算法采用大林算法。
电阻加热炉温度控制系统模型为:
其广义的传递函数为:
大林算法的设计目标是设计一个合适的数字控制器,使整个闭环系统的传递函数相当于一个带有纯滞后的一阶惯性环节,即:
通常认为对象与一个零阶保持器相串联,相对应的整个闭环系统的脉冲传递函数是:
2)计算过程:
连同零阶保持器在内的系统广义被控对象的传递函数:
系统闭环传递函数:
数字控制器:
消除振铃现象后的数字控制器:
离散化:
U(Z)—U(Z)Z—1=1.279E(Z)—1.226E(Z)Z—1
U(K)—U(K—1)=1.279E(K)—1.226E(K—1)
最终得:
U(K)=U(K—1)+1.279E(K)—1.226E(K—1)
图7:
电阻加热炉温度控制系统框图
5、软件设计
1)程序流程图:
a、系统主程序框图:
b、A/D转换子程序流程图:
c、LED显示流程图:
d、报警程序流程图:
e、数字控制算法子程序流程图:
2)源程序:
ORG0000H
AJMPMAIN
ORG0003H
AJMPKEYS
ORG000BH
AJMPPIT0
ORG001BH
AJMPPIT1;
中断入口及优先级
MAIN:
MOVSP,#00H
CLR5FH;
清上下限越限标志
MOVA,#00H
MOVR7,#09H
MOVR0,#28H
LP1:
MOV@R0,A
INCR0
DJNZR7,LP1
MOVR7,#06H
MOVR0,#39H
LP2:
INCR0
DJNZR7,LP2
MOVRO,#50H
LP3:
DINZR7,LP3;
清显示缓冲区
MOV33H,#00H
MOV34H,#00H;
赋KP高低字节
MOV35H,#00H
MOV36H,#00H;
赋KI高低字节
MOV37H,#00H
MOV38H,#00H;
赋KD高低字节
MOV42H,#00H
MOV43H,#00H;
赋K高低字节
MOVTMOD,#56H;
T0方式2,T1方式1计数
MOVTLO,#06H
MOVTHO,#06H
MOV25H,#163H;
设定值默认值350
SETBTR0;
键盘高优先级
SETBET0
SETBEX0
SETBEA;
开键盘T0。
T1中断
LOOP:
MOVR0,#56H
MOVR1,#55H
LCALLSCACOV;
标度转化
MOVR0,#53H
LCALLDIR
NOP
LCALLDLY10MS
AJMPLOOP;
等中断
;
键盘子程序
KEYS:
CLREX0
CLREA
PUSHPSW
PUSHACC;
关中断
LCALLDLY10MS;
消抖
CC:
JBP3.2AA
SETB5DH;
置“显示设定值温度值标志”
MOVA,25H;
取运算位的值
MOVB,#10H;
BCD码转化
DIVAB
MOV52H,A
MOVA,B
MOV51H,A
MOVR0,#50H
LCALLDIR;
显示设定温度
NOP
LCALLDLY10MS
LCALLDLY10MS
JBP1.7,BB
MOVR1,#25H
LCALLDAAD1
LCALLDLY10MS
AJMPCC
BB:
JBP1.6CC
LCALLDEEC1
AJMPCC
AA:
POPACC
POPPSW
SETBEA;
出栈
RETI
显示子程序
DIR:
MOVSCON,#00H;
置串行口移位寄存器状态
SETBP1.4;
开显示
JB5DH,DL1;
DL2:
MOVDPTR,#SEGT
DL0:
MOVA,@R0
MOVCA,@A+DPTR
MOVSBUF,A
LOOP1:
JNBTI,LOOP1
CLRTI
MOVA,@R0
ANLA,#7FH;
使数带小数点
LOOP2:
JNBTI,LOOP2
CLRTI
MOVSBUF,A
LOOP3:
JNBTI,LOOP3
CLRP1.4
CLR5DH
RET
DL1:
MOV50H,#0AH;
小数位黑屏
AJMPDL2
SEGT:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
加一子程序
DAAD1:
MOVA,#00H
ORLA,@R1
ADDA,#01H
CJNEA,#30H,DAAD2;
超过48度了吗?
DAAD3:
MOV@R1,A
DAA:
RET
DAAD2:
JCDAAD3
MOV@R1,#15EH;
超过48则转回到355
AJMPDAA
减一子程序
DEEC1:
MOVA,@R1
DECA
CJNEA,#15EH,DEEC2;
低于355度了吗?
DEEC3:
MOV@R1,A
DEE:
RET
DEEC2:
JNCDEEC3
MOV@R1,#30H;
低于355则转回到48
AJMPDEE
T0中断子程序
PTT0:
CLREA
PUSHACC
PUSHPSW
PUAHDPL
PUSHDPH
SETBEA;
压栈后开中断响应键盘
PPP:
LCALLSMAP;
采样数据
LCALLFILTER;
数字滤波
MOVA,2AH;
取采样值
CJNEA,#07H,AAA;
下限48比较
AJMPBBB
AAA:
JCCCC;
小于48度转
CJNEA,#0FEH,DDD;
上限355比较
AJMPBBB;
转至48~355正常范围处理
DDD:
JCBBB
CLRP1.2;
大于355黄灯亮
SETB5EH
CLRP1.1;
置标志启动风扇
AJMPPPP
CCC:
CLRP1.3;
小于48红灯亮
SETB5FH
BBB:
CLRP1.0;
置标志启动电炉
AJMPPPP
SETBP1.0
SETBP1.1
SETBP1.2
SETBP1.3
CLR5EH
CLR5FH;
50~350之间正常
LCALLPID
JNB20H,EEF;
设定温度小于实际值转到风扇
MOVA,29H
LCALLFFF
CLRP1.0
LOOP10:
MOVR0,#56H;
存放相乘结果的首址
MOVR1,#55H;
赋显示缓冲区最高位地址
LCALLSCACOV;
MOVR0,#53H;
赋显示首址
CLRDIR
JBD5H,LOOP10;
等待T1中断
POPDPH
POPDPL
POPPSW
SETBEA
POPACC
EEE:
MOVA,28H;
风扇处理
LCALLFFF
CLRP1.1
AJMPLOOP10
FFF:
CRLA;
根据PID结果计算T1初值
INCA
MOVTL1,A
MOVTH1,#0FFH
SETBPI1
SETBTR1
SETBET1
标度转化
SCACOV:
PROCNEAR
MOVDX,0
MOVDATA1,#258H
MOVDATA2,#708H
MOVDATA3,#960H
PROCNEAR
MOVAX,DATAP;
取采样时间
CMPAX,DATA3;
时间大于2400?
JAEQ3DOR
CMPAX,DATA2
JAEQ3-Q2;
1800<
时间<
2400
CMPAX,DATA3
JAEQ2-Q1;
600<
1800
Q0:
MOVBX,0.8H;
<
600SQ=50+t/2
MULBX
ADCDX,0
JMPDONE
Q2-Q1:
MOVAX,#15EH;
Q=350
Q3-Q2:
SUBAX,DATA2;
Q=350-(t-1800)/2
MOVBX,0.8H
MOVAX,#15EH
SUBAX,BX
MOV@R1,A
PP:
采样子程序
SWAP:
MOVR0,#20H
MOVR1,#03H
SAW1:
MOVDPTR,#7FF8H
MOVX@DPTRA;
A/D转化
MOVR2,#20H
DLY:
DJNZR2,DLY;
延时
HERE:
JBP3.3,HERE
MOVDPTR,#7FF8H
MOVXA,@DPTR;
读转化结果
MOV@R0,A
DJNZR1,SAM1
FILTER:
MOVA,20H
CJNEA,2DHCMP1
AJMPCMP2
CMP1:
JNCCMP2
XCHA,2DH
XCHA,2CH
CMP2:
MOVA,2DH
CJNEA,22EH,CMP3
MOV2AH,A
AJMPRR
CMP3:
JCCMP4
CMP4:
MOVA,2EH
CJNEA,2CH,CMP5
MOV2AH,A
AJMPRR
CMP5:
JCCMP6
CMP6:
RR:
PIT1:
CLR00H
JB20H,GGG
SETBP1.0;
关闭电炉
GG:
CLRPT1
GGG:
SETBP1.1;
关闭风扇
CLR20H
AJMPGG
延时10MS子程序
DLY10MS:
MOVR7,#0A0H
DLOO:
MOVR6,#0FFH
DL11:
DJNZR6,DL11
DJNZR7,DL00
数字PID算法子程序
PID:
MOVR5,#00H
MOVR4,2DH;
取NX值
MOVR3,#00H
MOVR2,#32H;
取50
LCALLCPL1
LCALLDSUM;
求(NX-32H)值
MOVR0,#5AH;
赋乘法算法运算暂存单元地址首址
MOVR5,#05H
MOVR4,#1CH;
赋参数
LCALLMULT;
调无符号数乘法
MOV31H,5BH
MOV32H,5AH;
存放结果有效值
MOVR5,31H
MOVR4,32H;
取双字节UR(设定)
MOVR3,2AH
MOVR2,#00H;
取双字节实测值
ACALLCPL1;
取U(K)补码
ACALLDSUM;
计算E(K)
MOV39H,R7
MOV3AH,R6;
存E(K)
MOVR5,35H
MOVR4,36H;
取KI参数
MOVR0,#4AH
ACALLMULT1;
计算PI=KI*E(K)
MOVR2,39H
MOVR4,3AH;
取E(K)
MOVR3,3BH
MOVR2,3CH;
取E(K-1)
MOVR5,33H
MOVR4,34H;
取KP参数
MOVR0,#46H
ACALLMULT1;
KP*[E(K)-E(K-1)]
MOVR5,49H
MOVR4,48H
MOVR3,4DH
MOVR2,4CH
KP*[E(K)-E(K-1)]+KI*E(K)
MOV4AH,R7
MOV4BH,R6;
保存上式之和
MOVR5,39H
MOV3CH,3AH;
存E(K)到E(K-1)
MOVA,31H;
取设定值
CJNEA,2AH,AA2;
比较设定值与实测值
AA3:
CLR20H;
清电炉标志
AA1:
AA2JNCAA3
SETB20H;
清风扇标志位
MOVR3,39H
MOVR2,3AH
LCALLCPL1
MOVA,R3
MOVR7,A
MOVA,R2
MOVR6,A
MOVR5,42H
MOVR4,43H;
取K1风扇标志
MOVR0,#5AH
ACALLMULT1;
计算P=K*E(K)且结果存在51H,50H单元中
MOV28H,5BH;
取8位有效值存在28H单元
AJMPAA
DSUM:
MOVA,R4;
双字节加法子程序(R5R4)+(R3R2)(R7R6)
ADDA,R2
MOVA,R5
ADDCA,R3
RET
双字节求补
CPL1:
CPLA
ADDA,#01H
MOVR2,A
MOVA,R3
ADDCA,#00H
MOVR3,A
乘法被乘数R7R6乘数R5R4
MULT1:
MOVA,R7
RLCA
MOV5CH,C;
被乘数符号C15CH位
JNCPOS1;
为正数则转
MOVA,R1;
为负数求补
MOVR6,A
MOVA,R7
MOVR7,A
POS1:
M