📄 单片机在温度控制中的应用.txt
字号:
单片机在温度控制中的应用 您要打印的文件是:单片机在温度控制中的应用 打印本文
单片机在温度控制中的应用
作者:张伟玲 邢金萍 崔慧霞 转贴自:本站原创 点击数:9436
摘要:本文列举了单片机在热处理炉中的一个实际应用,对温度控制模块的
组成及主要所选器件进行了详细的介绍。
关键词:单片机;控制;温度
一、 前言
单片微型计算机是随着超大规模集成电路技术的发展而诞生的,由于它具有
体积小、功能强、性价比高等特点,把单片机应用于温度控制中,采用单片机做
主控单元,无触点控制,可完成对温度的采集和控制的要求。所以广泛应用于电
子仪表、家用电器、节能装置、机器人、工业控制等诸多领域,使产品小型化、
智能化,既提高了产品的功能和质量,又降低了成本,简化了设计。本文主要介
绍单片机在温度控制中的应用。
二、单片机用于温度控制的设计
1.确定系统功能与性能
本系统的功能主要有数据采集、数据处理、输出控制。能对0~1000 ºc范围内
的各种电加热炉的温度进行精密测量,同时,四位LED显示器直接跟踪显示被控对
象的温度值,准确度高,显示清晰,稳定可靠,使用方便(在具体设计编程、调
试过程中,为了调试方便,编程把温度范围设在0~100 ºc)。
本系统的原理框图如下图所示。数据采集部分能完成对被测信号的采样,显
示分辨率0.1ºc,测量精度0.1ºc,控制精度0.1ºc,可以实现采集信号的放大及A/D
转换,并自动进行零漂校正,同时按设定值、所测温度值、温度变化速率,自动
进行FID参数自整定和运算,并输出0~10mA控制电流,配以主回路实现温度的控
制。数据处理分为预处理、功能性处理、抗干扰等子功能。输出控制部分主要是
数码管显示控制。
2. 确定系统基本结构及硬件设计
本单片机应用系统结构是以单片机为核心外部扩展相关电路的形式。确定了
系统中的单片机、存储器分配及输入/输出方式就可大体确定出单片机应用系统的
基本组成。
1)单片机选用MCS-51系统的8031
首选8031的理由是:价格便宜,有开发环境。
2) 存储器
程序存储器选用集成度高、价格便宜的EPROM,型号是2764。
3) I/O接口
选用1片可编程的并行I/O接口8155用作键盘显示器的接口,1片UL2003用作
LED数码显示器的接口电路。
4) 总线驱动器 因考虑到此系统外部扩展的器件较多,负载过重,所以要
考虑设计总线驱动器。P0口使用了双向数据总线驱动器75LS245。
5) 抗干扰电路
针对可能出现的各种干扰,设计抗干扰电路。抗干扰电路就是在系统的弱电
路部分(以单片机为核心)的电源入口处对地跨接1个大电容(100µf左右)与1个
小电容(0.1µf左右),在系统内部各芯片的电源端对地跨接1个小电容(0.01µf~0.1µf)。
6) A/D转换器
被采样的模拟信号经放大后进入A/D转换器,选用的A/D转换器是AD574A。
3、原理图的设计、诊断与检查
原理图的设计要符合以下几点要求:
1) 原理图设计要符合项目的工作原理,连线要正确。
2) 图中所使用的元器件要合理选用,电阻,电容等器件的参数要正确标明。
3) 原理图要完整,CPU,外围器件,扩展接口,输入/输出装置要一应俱全。
原理图的设计、诊断与检查在protel 99 SE软件环境下完成。
工作流程是:当由传感器(由电阻来实现)传来模拟信号,经放大电路放大
之后,送到AD574A A/D转换器,转换为数字信号。此信号经两个带输出三态门的
8D锁存器74LS245送到8031里,由8031发出的控制信号经总线驱动器74LS245后分
别送到EPROM2764、键盘显示接口8155。程序指令由EPROM2764送到8031。经8155
输出的信号送到LED数码显示器接口电路UL2003,再送到数码显示器显示。
原理图如下:
系统设计完成后,进入印制板制作、器件焊接及软件编程阶段。在印制板设
计时,要仔细考虑印制板的面积、布局及连线长度,以减小对信号的延时和串
扰。对加工好的印制板还要进行仔细的检查,最后将器件、插座及元件等逐一焊
接在印制板上。
4、程序调计
1) 根据要求,将总体项能分解成若干个子功能模块,每个功能模块完成一个
特定的功能。
2)根据总体要求及分解的功能模块,确定各功能模块之间的关系,设计出完
整的程序流程图。
3) 程序调试将设计完的程序输入,汇编,排除语法错误,生成*OBJ文件。
a. 按所设计的原理图,在实验平台上连线,检查无误。
b. 将汇编后生成的*OBJ文件传送到实验装置,执行该程序,检查该程序、是
否达到设计要求,若未达到,修改程序,直到达到要求为止。
程序说明:此文档是该系统操作运行的所有程序,所提供的程序均在DICE-51
单片仿真机上调试仿真,并已经全部通过。
源程序:
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP KEYS
ORG 000BH
AJMP PTT0
ORG 001BH
AJMP PTT1 ;中断入口及优先级
MAIN: MOV SP,#60H
CLR 5EH
CLR 5FH ;清上、下限越限标志
MOV A,#00H
MOV R7,#09H
MOV R0,#28H
LP1: MOV @R0,A
INC R0
DJNZ R7,LP1
MOV R7,#06H
MOV R0,#39H
LP2: MOV @R0,A
INC R0
DJNZ R7,LP2 ;清变量暂存单元
MOV R7,#06H
MOV R0,#50H
LP3: MOV @R0,A
INC R0
DJNZ R7,LP3 ;清显示缓冲区
MOV 33H,#00H
MOV 34H,#00H ;赋Kp高、低字节
MOV 35H,#00H
MOV 36H,#00H ;赋Ki高、低字节
MOV 37H,#00H
MOV 38H,#00H ;赋Kd高、低字节
MOV 42H,#00H
MOV 43H,#00H ;赋K高、低字节(风扇参数)
MOV TMOD,#56H ;T0方式2,T1方式1计数
MOV TL0,#06H
MOV TH0,#06H ;T0赋初值
MOV 25H,#28H ;设定值默认为40摄氏度
SETB TR0 ;键盘高优先级
SETB ET0
SETB EX0
SETB EA ;开键盘、T0、T1中断
LOOP: MOV R0,#56H
MOV R1,#55H
LCALL SCACOV ;调用标度转化-BCD转化子程序
MOV R0,#53H
LCALL DIR
NOP
LCALL DLY10MS
NOP
LCALL DLY10MS
AJMP LOOP ;等待中断,循环显示当前温度
;**********************************************************
KEYS: CLR EX0 ;[键盘子程序]
CLR EA
PUSH PSW
PUSH ACC ;关中断,压栈
LCALL DLY10MS ;消抖
CC: JB P3.2,AA
SETB 5DH ;置“显示设定温度”标志
MOV A,25H ;取运算位的值(默认为40度)
MOV B,#10 ;进行BCD码转化
DIV AB
MOV 52H,A
MOV A,B
MOV 51H,A
MOV R0,#50H
LCALL DIR ;显示设定温度
NOP
LCALL DLY10MS
NOP
LCALL DLY10MS
JB P1.7,BB
MOV R1,#25H
LCALL DAAD1 ;加一操作
NOP
LCALL DLY10MS
AJMP CC
BB: JB P1.6,CC
MOV R1,#25H
LCALL DEEC1 ;减一操作
NOP
LCALL DLY10MS
AJMP CC
AA: POP ACC
POP PSW
SETB EX0
SETB EA ;出栈,开中断
RETI
;************************************显示子程序]
DIR: MOV SCON,#00H ;置串行口移位寄存器状态
SETB P1.4 ;开显示
JB 5DH,DL1 ;显示设定温度则转
DL2: MOV DPTR,#SEGT
DL0: MOV A,@R0
MOVC A,@A+DPTR
MOV SBUF,A
LOOP1: JNB TI,LOOP1
CLR TI
INC R0
MOV A,@R0
MOVC A,@A+DPTR
ANL A,#7FH ;使个位带小数点
MOV SBUF,A
LOOP2: JNB TI,LOOP2
CLR TI
INC R0
MOV A,@R0
MOVC A,@A+DPTR
MOV SBUF,A
LOOP3: JNB TI,LOOP3
CLR TI
CLR P1.4
CLR 5DH
RET
DL1: MOV 50H,#0AH ;使小数位黑屏
AJMP DL2
SEGT: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
;**********************************************************
DAAD1: MOV A,#00H ;[加1子程序]
ORL A,@R1
ADD A,#01H
CJNE A,#5AH,DAAD2 ;判断超过90度了吗?
DAAD3: MOV @R1,A
DAA: RET
DAAD2: JC DAAD3
MOV @R1,#28H ;超过90度则回到40度
AJMP DAA
;*********************************************************
DEEC1: MOV A,@R1 ;[减1子程序]
DEC A
CJNE A,#28H,DEEC2 ;判断低于40度了吗?
DEEC3: MOV @R1,A
DEE: RET
DEEC2: JNC DEEC3
MOV @R1,#5AH ;低于40度则回到90度
AJMP DEE
;**********************************************************
PTT0: CLR EA ;[T0中断子程序]
PUSH ACC
PUSH PSW
PUSH DPL
PUSH DPH
SETB EA ;压栈后开中断,响应键盘
PPP: LCALL SMAP ;采样数据
LCALL FILTER ;数字滤波
MOV A,2AH ;取采样值
CJNE A,#01H,AAA ;下限40度比较
AJMP BBB
AAA: JC CCC ;小于40度则转移
CJNE A,#0FEH,DDD ;上限90度比较
AJMP BBB ;转到40-90度正常范围内处理
DDD: JC BBB
CLR P1.2 ;大于90度黄灯亮报警
SETB 5EH
CLR P1.1 ; 置标志,启动风扇
AJMP PPP
CCC: CLR P1.3 ;小于40度绿灯亮报警
SETB 5FH
CLR P1.0 ;置标志,启动电炉
AJMP PPP
BBB: SETB P1.0
SETB P1.1
SETB P1.2
SETB P1.3
CLR 5EH
CLR 5FH ;40-90度之间则正常
LCALL PID
JB 20H,EEE ;设定温度< 实际温度,则转到风扇处理
MOV A,29H
ACALL FFF
CLR P1.0
LOOP10: MOV R0,#56H ;存放相乘结果的首址
MOV R1,#55H ;赋显示缓冲区最高位地址(十位)
LCALL SCACOV ;调用“标度转化------二-十进制转化”子程序
MOV R0,#53H ;赋显示首址
LCALL DIR
JB D5H,LOOP10 ;等待T1中断
CLR EA
POP DPH
POP DPL
POP PSW
SETB EA
POP ACC
RETI
EEE: MOV A,28H ;风扇处理
LCALL FFF
CLR P1.1
AJMP LOOP10
FFF: CPL A ;根据PID结果计算T1初值
INC A
MOV TL1,A
MOV TH1,#0FFH
SETB PI1
SETB TR1
SETB ET1
RET
;**********************************************************
SCACOV:MOV R7,#00H ;[“标度转化------二-十进制转化”子程序]
MOV R6,2AH ;取采样值,并转化为双字节
MOV R5,#33H
MOV R4,#24H ;赋参数(纯小数)
LCALL MULT ;调用双字节乘法子程序
MOV R5,#00H
MOV R4,#23H ;赋参数35度
MOV A,@R0
MOV R3,A
DEC R0
MOV A,@R0 ;存乘法结果的整数
MOV R2,A
LCALL DSUM ;调用加法子程序,且R7,R6为有效值(R7=00H)
MOV A,R6
MOV B,#10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -