精品电热锅炉温度控制器ad590mcs51单片机.docx
《精品电热锅炉温度控制器ad590mcs51单片机.docx》由会员分享,可在线阅读,更多相关《精品电热锅炉温度控制器ad590mcs51单片机.docx(29页珍藏版)》请在冰点文库上搜索。
精品电热锅炉温度控制器ad590mcs51单片机
摘 要:
本文介绍了以MCS-51单片机为核心的温度控制器的设计,在该设计中采用高精度的温度传感器AD590对电热锅炉的温度进行实时精确测量,用超低温漂移高精度运算放大器OP07将温度-电压信号进行放大,再送入12位的AD574A进行A\D转换,从而实现自动检测,实时显示及越限报警。
控制部分采用PID算法,实时更新PWM控制输出参数,控制可控硅的通断时间,最终实现对炉温的高精度控制。
关键词:
MCS-51单片机;温度;软硬件;硬件原理图;程序框图;设计
一、任务
(2)
二、工艺要求
(2)
三、本系统的性能指标
(2)
四、系统组成和总体控制方案
(2)
五、硬件设计(3)
六、软件设计(8)
七、程序说明(16)
八、调试方法及结果分析(18)
九、对象特性的测量和识别(21)
十、设计总结(22)
电热锅炉温度控制器的设计
一、任务:
用单片机自动控制电热锅炉温度调节系统。
二、工艺要求:
1.系统应有良好的操作性能,为了使用方便和维修,系统控制开关要少。
2.通用性好,便于扩充。
3.系统可靠性要高。
三、本系统的性能指标:
输出功率:
20KW
温度设定:
键盘
温度显示:
4位LED数码管
显示误差:
±5°C
控制温度:
500℃-1000℃
四、系统组成和总体控制方案。
系统设计总体框图如下:
A.初步选定系统采用单闭环控制。
因为所带负载是阻性元件,其线性度比较好,温度变化不太高,但对控制精度有一定的要求。
B.执行机构采用三相电热丝,我们用控制电流的变化来控制温度的变化。
C.计算机部分起巡回检测、闭环调节和计算推理的作用。
五、硬件设计:
MCS-51
电源引脚Vcc和Vss:
Vcc,电源端,接+5V;Vss,接地端。
时钟电路引脚:
XTAL1:
接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,若使用外部TTL时钟时,该引脚必须接地。
XTAL2:
接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出,若使用外部TTL时钟时,该引脚为外部时钟的输入端。
地址锁存允许ALE:
系统扩展时,ALE用于控制地址锁存器锁存P0口输出的低8位地址,从而实现数据与低位地址的复用
外部程序存储器读选通信号/PSEN:
是读外部程序存储器的选通信号,低电平有效。
程序存储器地址允许输入端/EA:
当为高电平时,CPU执行片内程序存储器指令,但当PC
中的值超过0FFFH时,将自动转向执行片外程序存储器指令。
当为低电平时,CPU只执行片外程序存储器指令。
复位信号RST:
该信号高电平有效,在输入端保持两个机器周期的高电平后,就可以完成。
输入/输出口引脚P0、P1、P2和P3:
P0口(P0.0~P0.7):
该端口为漏极开路的8位双向口,负载能力为8个LSTTL负载,它是8位地址线和8位数据线的复用端口。
P1口(P1.0~P1.7):
它是一个内部带上拉电阻的8位准双向I/O口,P1口的驱动能力为4个LSTTL负载。
P2口(P2.0~P2.7):
同P1口。
在访问外部程序存储器时,它作存储器的高8位地址线。
P3口(P3.0~P3.7):
P3口同样是内部带上拉电阻的8位准双向I/O口,P3口除了作为一般的I/O口使用之外,还具有其它特殊功能。
2、铂热电阻:
铂热电阻是电阻体采用铂金属、具有正的温度系数的一种电阻,广泛用作稳定温度系数的电阻以及温度传感器。
铂热电阻的端子有不同的联结方式,如图
(1)既2线式,3线式和4线式。
它虽是一种阻值随温度改变的温度传感器,但实际上使用时要把引线电阻记算在内。
因此2线式适用于传感器在印制板上。
图
(1)
(a)2接线(b)3接线(c)4接线
测量铂热电阻的阻值大致有二种方法即恒压法和恒流法。
恒压法就是加在铂热电阻两端电压保持恒定,测量电流变化的方法。
若有恒压源(标准电池),恒压法的电路就非常简单,另外,组成桥就可进行温漂补偿,因此,这种方法被广泛使用。
但电流与铂热电阻的阻值变化成反比,用于很宽的温测范围,进行线性时要特别注意。
恒流法就是流经铂热电阻的电流保持恒定,测量其两端电压的方法。
对于恒流法,电流与铂热电阻的阻值变化成正比,因此,线性化简便,但要获得准确的恒流源时电路比较复杂。
图
(2)是2线式的铂热电阻接线图,它是一种检测温度的电路。
这种接法属于恒压法,但实际选用的R1阻值比RT高很多,因此RT阻值变化引起的测量电流变化不大,获得近似恒流的线性输出。
图
(2)
3、模拟量输入电路
1)8155
(b)引脚图
主要接口信号:
AD0~AD7地址数据复用线
ALE地址锁存信号,它除进行AD0~AD7的地址锁存控制外,还用于片选信号CE和
等信号锁存控制
读选通信号
写选通信号
片选信号
I/O与RAM选择信号
RESET复位信号,81A、B、C口均为输55以600ns的正脉冲进行复位,复位后入方式
4.模拟量输出电路
引脚功能:
D0~D7数字量数据输入线,ILE为数据锁存允许信号,高电平有效;CS为输入寄存器选择信号,低电平有效。
输入寄存器的“写”选通信号,负脉冲有效,当
、ILE=1、
时,D0~D7的数据被锁存至输入器;
为数据转移控制信号线,低电平有效
Vref其准电压输入线
RFb反馈信号输入线,芯片内已有反馈电阻
IOUT1和IOUT2电流输出线,IOUT1和IOUT2的和为常数,IOUT1随DAC寄存器的内容线性变化
VCC工作电源,DGND为数字地,AGND为模拟信号地,由于D/A转换芯片输入是数字量,输出为模拟量,模拟信电源和数字信号的干扰而引起波动。
5、光电耦合输出电路如下图:
工作状况:
当单片机引脚为低电平时:
a.光电耦合器的发光二极管承受正向电压,导通,有电流流过,发光
b.光电耦合器的光敏三极管受到光照,进入导通状态,其集电极处于零电位
c.继电器线圈得电,闭和,接通外部电路
当单片机引脚为高电平时:
a.光电耦合器的发光二极管承受反向电压,截止,无电流流过,不发光
b.光电耦合的光敏二极管末受到光照,进入截止状态,其集电极处于高电位
c.线电器线圈失电,断开外部电路
6.键盘和显示电路
(1)4×4键盘工作原理
由图可见:
16个键分两部分,十个数字键0~9;六个命令键A~F。
CPU每次通过接口对某一行Xi输出扫描信号0、列线Yj的状态来确定键闭合的位置。
列线Y接+5v/无安键时,行X和列Y线断开,列线Y1~Y4呈现高电平。
当某一按键闭合时,该键所在行、列线短接。
若该行线输出为0,则该列线电平被拉成0(其余3根列线仍为1),此时CPU可判断出按键闭合所在行、列及键号。
为了便于CPU处理。
将行、列信号拼装成一个字节,然后求反得到4号键对应的“特征字”,也叫键值。
即:
列线Y行线X
CPU操作时,先输出行有效信号,再输入列信号,经过拼装、求反得到键值,由于这种对应是唯一的,所以根据上述关系可求出其他键值如下:
键盘上的字符
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
键值
81H
82H
42H
22H
84H
44H
24H
88H
48H
28H
18H
14H
12H
11H
21H
41H
CPU得到键值后,,很容易判断按键闭合号码。
不同的接线方式,得到键值可能不同,但键号和键值的对应关系是唯一的。
(2)LED动态显示方式
按图从左向右轮流显示8位LED的位选码为
六、软件设计:
系统软件采用模块化程序结构,主要由主程序、控制算法程序、系统初始化子程序、A\D转换程序、显示键盘子程序等组成。
(一)主程序流程图(图1)
(二)中断服务流程图(图2)
(图1)
(图2)
(三)数据处理和温度判断子程序(图3)
否
是
否
是
否
①
①
是
(图3)
(四)乘法子程序流程图
(五)、程序清单
1)主程序清单
ORG2000H
DCWINT-T
ORG4080H
MAIN:
LDSP,#060H;设堆栈指针
DI ;关中断
CLRB AD-COMMAND;清有关寄器
CLRB INT-PEND
CLRAX
CLRBBX
CLREX
CLRBDL
CLRBEL
CLRFX
CLRGL
CLRGH
CLRHX
LDBINT-M,#01H;允许定时器溢出中断
LDBICO1,#08H ;允许定时器T2溢出断
LDAX,#4100H ;中断服务程序首址
STAX,#2000H[0] ;中断矢量
LDBIOCO,#86H ;设HSI1输入为T2
LDREG1,T2
M1:
LDBAL,#0CFH ;设8155工作方式:
A口为输入
B口为输出
C口为输出
定时器工作为11
STBAL,#1800H[0]
LDAX,#0003H
STAX,#1804H[0]
LCALL REG ;调用PD参数子程序
E1 ;开中断
SJMPM1
2)中断服务程序清单
ORG4100H
INT-T:
PUSHF;保护现场
LDBPORT2,#0FH
LDBPORT2,#00H
LDBBL,#05H;设置通道采样次数
LDCX,00A0H;数据存放首址
送CX寄存器
SAPE:
LDBDL,#04H;从ACH4开始采样
LDBEL,#04H;一次采集通道数
LDFX,CX;转存地址
LOOP1:
ADDBAD-COMMAND, ;启动A/D转换器
DL, #08H
NOP
NOP;等待
LOOP2:
JBSAD_RES_LO,3, LOOP2
LDBAL,AD_RES_LO;转换结果低位送AL
LDBAH,AD_RES_HI;高位送AH
STBAL,[CX]+;存放数据
STB AH,[CX];
ADD CX,#0009H;求下一个通道地址
INCB DL;通道号加1
DECB EL;通道号减1
JNE LOOP1;EL≠0时,继续采样
DJNZ BL,ADDR;BL≠0时,继续采样
SCALL DMR4;调用处理子程序
POPF;恢复现场
RET;返回
ADDR:
LDCX,FX;恢复CX内容
INCCX;CX内容加2
INCCX;
SJMPSAPE;
3)数据处理和温度判断程序清单
ORG4150H
DMR4:
PUSHF;保护现场
LDBBL,#05H;置数据个数
LDCX,#00A0H;取数据
LOOPD:
LDBAL,[CX]
LDBAH,[CX]
SHRAX,#06H;调整CX内容
ADDGX,AX;累加数据
INCCX;修改地址
DJNZBL,LOOPD;BL≠0时,继续累加
DIVUGX,#05H ;取平均值
LDHX,#00D6H ;存放数据
SHLGX,#01H
STGX,[HX]
SHLGX,#05H
STGX,REGA ;温度反馈值
送REGA
ANDAX,AX
CMPCL,#6A00H ;超温判断
JGTCC;是,转CC
JVCC;判断Pk是否有溢出,是转CC
LDMX,#6400H;设温度给定值
STMX,REGC
LDAX,AX
SUBCMX,GX;计算偏差值Ek
LDREG4,MX;Ek→REG4
LDDX,REG1E;是否进入保温段
NOP
ANDAX,AX
SUBCMX,DX
JGEAA;否,转AA
NOP
LCALLPD;是,调PD
SCALLCLR;调CLR子程序
LCALLLEDSHOW;调显示子程序
POPF;恢复现场
RET;返回
ORG41B0H
AA:
LDBQL,#0F0H;输出最大值
STBQL,1801H[00]
SCALLCLR
LCALLLEDSHOW;调显示子程序
POPF;恢复现场
RET;返回
ORG41C0H
CC:
LDBQL,#00H;输出00H
STBQL,1801H[00]
SCALLCLR
LCALLLEDSHOW;调显示子程序
POPF;恢复现场
RET;返回
ORG41D0H
CLR:
CLRGL;清有关寄存器
CLRGH
CLRAX
RET;返回
4)显示子程序清单
ORG41E0H
LEDSHOW:
LDSHOWADDR,#SHOWBUFF
LDBX,#00H
LDAX,[HX]
SHRAX,#03H
DIVUBA,1000
ORBAL,#20H
STBAL,00H[SHOWADDR]
DIVUBBX,#100
LDBZEAX,BL
LDREG16,#6000H;设KD值
LDREG1E,#1400H
RET
ORBAL,#30H
STBAL,01H[SHOWADDR]
LDBZEAL,BH
DIVUBAX,#10
ORBAL,#40H
STBAL,02H[SHOWADDR]
ORBAH,#50H
STBAH,03H[SHOWADDR]
LDSHOWADDR,#SHOWBUFF
SCALLDELAY
SCALLDELAY
LDBCL,#04H
LSHOW:
LDBAL,[SHOWDDR]+
STBAL,1802H[00H]
ORBAL,#0F0H
STBAL,1802H[00]
DJNECL,LSHOW
RET
5)延时子程序清单
ORG4300H
DELAY:
PUSHF
LDBAL,#OFFH
DELAY1:
LDBHSOC,#39H
ADDHSOT,TIMER1,EX
LDBAH,#080H
DELAY2:
NOP
NOP
EI
DJNZAH,DELAY2
NOP
NOP
DJNZAL,DELAY1
POPE
RET
6)乘法子程序清单
ORG4300H
MULLDCL,#10H;设循环次数
LDAX,#0000H;AX清零
SHARDX,#01H;DX算术右移1次
L2:
SHARAX,#01H;AX算术右移
SHRBX,#01H;BX逻辑右移
JCL;有进位转
DECBCL;没有,循环次
数减1
CLRC;进位标志清零
JEL1;循环次数
为零转L1
SJMPL2;
L:
DECBCL;CL-1送CL
JEL1;循环次数
为零转L1
ADDAX,DX;AX+BX送AX
SJMPL2
L1:
JNCL3;进位标志为零转
ANDCL,CL
SUBCAX,DX;AX-DX送AX
L3:
SHLBX,#01H;AX,BX算术左移
SHLAX,#01H
RET;返回
七、程序说明
在程序清单中左边第一列是内存地址,第二列是机器码,存放内存地址的内容,在数据区则是参数与数的代码。
第三列是标号。
第四列是相应的助记符。
第五列是注释。
下面分别说明主程序和各子和程序的内容:
(一)主程序
开始先对有关寄存器清零,对定时器T2设置中断矢量、中断服务程序首地址与外部脉冲源
对8155进行初始化;8155的A、B、C并行接口设置为输出方式。
8155的定时器/计数器被设置成对外部事件计数。
由于外部脉冲源为一标准时钟湖,8155定时器/计数器实际被用来作为一个可变的长延时(由几百毫秒到几十分钟)。
在初始化之后,设定定时为1MIN开放中断,此后,则在开放中断的状态下保持循环,等待定中断的到来。
1MIN定时是通过扩展脉冲源,8155和T2定时器的级连来实现的。
改变8155的时间常数可以得到不同的中断时间。
(二)中断服务程序
中断服务程序开始,首先是保护程序状态字(PSW),这意味着禁止所有中断,此后指令不能立即产生中断调用。
接下来设置平均采样次数和数据存放区首地址。
平均采样次数的多少取决于抗干扰噪声的大小和所允许的残余误差大小。
本程序平均采样次设置为5次。
在这之后,设定采样所用的通道号数并启动A/D转换器,把转换结果低2位暂存入AL寄存器,高8位暂存入AH寄存器。
为了采集5次数据,须先把第1次采集到的数据(暂存在AL和AH,人)存入数据存放区(00A0H~00A9H),每次数据占2个字节00A0H,00A1H,高位在前(00A0H),低位在后(00A1H)。
5次采集的数据共占10个字节。
然后判断采样次数是否已经够5次,如果不够,程序转到LOOP1,继续采样,直到点次全部采集完,并逐一把采集到的数据存入0A0H~0A9H单元中。
当数据采集完后就去调用数据处理和温度判断子程序,最后恢复状态字和中断返回。
(一)数据处理和温度判断子程序
1.程序功能
●把次采集到的确良6位数据经过处理,得到一个比较正确的采样值Uik,提供运算和显示用;
●判断温度是否进入保温段;
●判断温度是否大于上限值
●判断输出值Pk是否有溢出。
进入该程序后,首先是保护现场,然后,设置温度采样值的累加次数,本程序为5次。
进一步氢前面对次的采样值送入AL和AH寄存器进行累加。
为了得到一个10的采样值[因为每次采样值勤均分2次分别存入AH(高8位)和AL(低2位放在D7,D6上)],同进也为了防止数据在累加时溢出,须把采样值缩小(右移植次)供显示用,此时最大显示为1023。
当采样值为最大时(0FFFFH),取平均值得03FFH。
如果要想得到一个8位的采样值(根据需要而定,如后面谈到的发送程序采用的就是8位),可再把03FFH右移2次即可得00FFH。
考虑到在后面要调用PD控制算法程序,而在这程序中只用8位来进行运算,其运算精度是不够的,所以把8位的Uik左移8次,扩展为16位的数据,存入REGA和REGB单元。
2.温度判断:
把经过数据处理的温度采样值Uik与上限温度(本程序定为6AH)进行比较,如果Uik大于6AH就转到“CC”,使输出为“0”,迫使温度降下来。
如果Uik小于6AH,再将Uik和给定值勤Uok进行比较,以便确定控制方程。
当炉温小于80°C时,即当Ek≥14H时,就让Pk=1,即全功率输出。
接着调节器用显示子程序对Uik进行显示,然后返回中断服务程序。
当炉温大于80
°C时,就进入保温段,进行PD或PID运算,输出相应的控制量Pk并显示Uik,然后返回中断服务程序。
在Uik和上限温度(6AH)比较后,还要判断控制量Pk是否溢出,因为在PD运算过程式中Pk是有可能溢出的,即程序中的JVCC指令。
如果有溢出就转去“CC”,输出“00”,迫使温度降下来。
没有这一条指令,则难以维持系统的温度为恒定。
(三)控制算法子程序
输入的Uok和Uik是单字节的,但为了提高精度,在计算中改用又字节数,同时在计算Pk的过程中,为了不使计算机溢出,须将▲U0、▲Ui衰减256倍。
为此氢输入单字节数送给高位字节(AH,DH)而使低位字节为0(AL,DL)。
根据十六进制代码和十进制代码对应关系和这种代码可表示的数不能超过(-1,1)范围。
为了提高A/D转换系数,设模拟量5V转换为数字量FF,这样氢采样的数接送高8位,实际上等于左移了一位。
若选PD算法,则转到4290H计算Pk。
在调用乘法子程序之前,先把乘数,被乘数分别送到寄存器对BX,DX。
由乘法子程序返回到原程序后,乘积保存在AX,BX(只读AX)。
(四)乘法子程序
准备阶令CL为16以决定循环次数。
保存乘积的寄存器AX,设初值为0。
DX算术右移是将被乘数[X]除以2。
在循环中,作16次AX,BX算术右移。
作用之一是将乘数[Y]的最低位移到进位C,用于判定是否作茧自缚加法(如Yi=1作加法);作用之二是将乘积除以2。
在循环中,根据Yi否为1确定是否把([X]·2¯
)加于AX(保存乘积的中间结果)。
因为I=1,…,15,故这一步作15次。
最后按Y0是否为1(存放于C),决定是否做减法。
再将AX,BX算术左移,相当于乘以2,得到乘积。
乘法子程序入口地址为4300H。
八、调试方法及结果分析
(一)、单元的调试
1.铂电阻及其信号放大电路的调试
*按照“铂电阻及其信号放大线路图”接线,利用电阻箱代表铂电阻R,调放大倍数K1,适当调整R1的值,分别测试放大器在空载和带负载时的特性曲线。
空载时:
RT0=100.00Ω(0ºC时的铂电阻值)U出≈0伏
RT=197.76Ω(256ºC时的铂电阻值)U出≈5伏
带负载时:
R/Ω
100
110
120
130
140
150
160
170
180
190
200
U/V
0.02
-0.46
-0.96
-1.47
-1.96
-2.46
-2.96
-3.45
-3.93
-4.41
-4.89
2.模拟量输入电路的调试
*改变输入信号(铂电阻放大信号),用逻辑学习机上的发光二机管测量输出的数字量。
使模拟/数字量的转换如下:
模拟量/V
0
1
2
3
4
5
数字量
00
32
61
93
CA
FF
3.模拟量输出电路的调试
注意DAC-0832的电源电压为+5伏,K1,K2放大器的电源电压为±15伏。
*输入的数字量可以由逻辑学习机上的开关信号提供,也可由计算机提供。
4.*调整放大器亏得W值,使其输入输出关系如下表:
5.
驱动器的调试
按下列顺序分别调好死区补偿电路、PWM和SSR电路。
*死区补偿电路:
在输入端(M点)加上一个可调的直流电压(0∽5伏),改变电位器W1和W2的阻值,使死区补偿电路输出端(O点)电压为1∽3.5伏。
W2用来改变输出电压的斜率,W1用来改变输出电压(O点)的起始值。
*PWM电路:
在SG3524N的输入端(管脚2)加上一个可调的直流电压(0∽5伏),用示波器观察PWM的输出端(3524管脚11)的波形,看其波形是否是一串方波,且方波的占空比是否随输入电压大小改变而改变(输入电压在1V∽3.5伏时)。
当输入电压小于1V时,输出端为零电平。
当输入电压大于3.5V时,输出为一高电平。
调整电位器W3的数值,可以改变脉冲的工作频率。
*SSR电路:
在受控端加交流电源(通过负载),在输入端加一个5V直流电压,用示波器观察负载电阻上是否有电压降,或者用交流电流表串接在负载中,观察是否有电流流过,且其电流值是否符合欧姆定律。
然后把输入端电压降到零电平,用同样的方法观察负载电阻上的波形,此时应当没有电压降。
*把三个电路连接好。
在输入端(M点)加上一个0∽5V的直流电压,观察负载电阻上的波形(或电流值)是否随输入电压而相应变化。
(二)、程序的调试
根据所编的程序,先用单步键分别调好主程序和各个子程序。
用十进制电阻箱代替铂电阻并改变RT的数值,模拟炉温的变化情况,使PID(或PD)控制算法的输出值与温度值的关系(稳定时)大致有表3-4的关系
注:
表中T,PK为十六进制
从上述数据中可以看出:
①当温度值T由0→48H时,输出值一直为PE,既为自由生温段。
②当温度值T由48→4AH时,既为自由生温段进入PID调节时,输出值PK开始变小,随着T的逐渐增加,PK值逐渐减小,也没有出现突变的现象。
③在保温值附近(T=64H)输出值PK与M值的大小相当。
(三)、系统的调试
在单元和程序调试的基础上,根据系统原理图及接线图,连接各单元,组成炉温控制系统,使系统的性能指标达到工艺要求。
(四)结果分析
从调试过程和结果来看,所得结果虽然满足了工艺的各项要求,但为了调试的方便和进一步改善品质指标,建议从以下几个