硬件课程设计模拟温度控制课案.docx
《硬件课程设计模拟温度控制课案.docx》由会员分享,可在线阅读,更多相关《硬件课程设计模拟温度控制课案.docx(33页珍藏版)》请在冰点文库上搜索。
硬件课程设计模拟温度控制课案
《硬件课程设计》
姓名:
汪珊
学号:
_08133329__
班级:
计算机科学与技术13-5班
题目:
模拟温度控制实验
指导老师:
__王凯
中国矿业大学计算机科学与技术学院
摘要
温度是生产生活中最基本的物理量之一,它反映出了物体的冷热程度,在自然界中有很多的物理、化学过程都与温度有着紧密的联系。
目前随着信息技术的发展,传感器技术的广泛应用,温度的测量与控制已向自动化、智能化的方向发展。
数字温度计相对于传统的温度计有读书更为方便且准确的优点。
目前,在很多生产过程中,温度的测量和控制都直接和安全生产、提高生产效率、节约能源等重大技术指标密切联系。
所以,温度的测量与控制在生产生活的各个领域中都受到了高度的重视。
在许多情况下,在实际生活生产活动要考虑温度的影响和对温度的精确控制,如食物的存储、自动控制的空调和房屋防火装置等。
因为集成电路制造技术的不断提高,出现了高性能、高可靠的集成芯片。
温度控制系统在工业领域得到了广泛的应用。
温度控制系统在性能方面具有精度高,实时性好,易于测量环境温度并控制。
而且,温度控制系统在很大程度上节约了人力资源,改善了传统温度测量的繁琐和效率低。
这些使得温度控制系统的研究和开发得到的各方面的广泛关注和支持。
关键词:
温度控制;8255芯片;AD0809;DA0832;模数转换;LCD液晶显示器
目录
1设计任务与要求1
1.1选题报告1
1.2提出问题1
2需求分析1
2.1设计思想2
2.1.1模拟温度要求2
3硬件方案2
3.1设备器材2
3.2硬件的选择以及芯片说明2
3.2.1系统所需硬件2
3.2.28255A芯片介绍3
3.2.3AD0809芯片介绍4
3.2.4DA0832芯片介绍7
3.3硬件电路9
3.4实验连线图10
3.4.1硬件连接图描述:
11
4软件方案12
4.1功能模块12
4.2系统各模块程序流程图12
4.2.18255初始化模块:
12
4.2.2温度过高报警模块:
13
4.2.3温度过低报警模块:
14
4.2.4温度计算子程序模块:
15
4.2.5显示程序模块:
16
4.2.6lcd_disp子程序模块:
16
5源程序清单和注释17
6运行结果23
7问题分析与解决方案24
7.1实验设计前的问题与解决方案24
7.2实验设计中的问题与解决方案24
8结论与体会25
结论:
25
体会:
25
参考文献26
1设计任务与要求
1.1选题报告
这次所选择的实验是温度控制实验,要求利用可编程并行接口元件8255A,模数转换器AD0809,数模转换器DA0832,直流电机,继电器模拟环境温度的自动控制。
1.2提出问题
1)如何实时反映外部温度的变化?
2)如何将模拟量转变成数字量?
3)如何将采集到的数据显示在液晶显示器上?
2需求分析
目前在很多领域的一些特殊地方,对环境的要求非常苛刻,要有严格的控制,例如,在一个大企业的计算机数据中心,它们的温度有严格限制范围,这就需要一个可靠地温度控制系统时刻监管着环境的温度,因此各种各样的温度控制系统孕育而生。
利用微机接口技术实验系统设计制作一个温度控制系统。
由于硬件条件有限,所以只能实现上下限温度的控制,要求是能够利用实验箱中的LCD液晶屏显示实时温度,同时当温度高于上限温度时,启动直流电机模拟散热系。
当温度低于下限温度时,启动继电器模拟加热系统。
实现的功能与流程如下所述:
2.1设计思想
该温度控制系统设计的思想是通过一个模拟温度变化的感应设备,将检测到的模拟温度转换成数据保存起来,然后将保存起来的温度数据与先前设置好的上下限温度进行比较,对应的去执行相应的控制设备,同时还将检测到的温度数据显示在LCD液晶屏上。
2.1.1模拟温度要求
(1)实时反映外部温度的变化;
(2)将采集到的温度数据显示在LCD液晶显示屏上;
(3)当温度高于设置的温度上限时,自动启动直流电机模拟散热;
(4)当温度低于设置的温度下限时,自动启动继电器模拟加热;
(5)当采集到的温度在上下限温度之间时,直流电机,继电器都停止工作。
3硬件方案
3.1设备器材
硬件课程设计实践TPC-ZK实验箱一个
PC电脑一台
3.2硬件的选择以及芯片说明
3.2.1系统所需硬件
设计所需芯片:
8255A、AD0809、DA0832
所需设备:
电位器、LCD液晶显示器、直流电机、继电器;
将8255A的A口与LCD液晶屏的八为数据口相连,对8255A进行初始化编程,控制LCD液晶屏显示,8255A的B口的PB2口作为继电器的控制口。
将AD0809的IN0、IN1与电位器相连,编程启动AD0809实时采集外部温度变化的数据。
将DA0832的Ua口与直流电机相连,编程启动AD0832,对直流电机的控制。
3.2.28255A芯片介绍
图3-18255A引脚图图3-28255A内部电路图
图3-3方式选择控制字格式图
引脚功能:
(只记述用到的引脚)
CS:
芯片选择信号线,当这个输入引脚为低电平时,即/CS=0时,表示芯片被选中,允许8255与CPU进行通讯;/CS=1时,8255无法与CPU做数据传输.
PA0~PA7:
端口A输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入锁存器。
PB0~PB7:
端口B输入输出线,一个8位的I/O锁存器,一个8位的输入输出缓冲器。
PC0~PC7:
端口C输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入缓冲器。
端口C可以通过工作方式设定而分成2个4位的端口,每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。
3.2.3AD0809芯片介绍
图3-4AD0809引脚信号图
(1)主要特性
1)8路输入通道,8位A/D转换器,即分辨率为8位。
2)具有转换起停控制端。
3)转换时间为100μs(时钟为640kHz时),130μs(时钟为500kHz时)
4)单个+5V电源供电
5)模拟输入电压范围0~+5V,不需零点和满刻度校准。
6)工作温度范围为-40~+85摄氏度
7)低功耗,约15mW。
(2)内部结构
ADC0809是CMOS单片型逐次逼近式A/D转换器,内部结构如图所示,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型A/D转换器、逐次逼近寄存器、逻辑控制和定时电路组成。
外部特性(引脚功能)
ADC0809芯片有28条引脚,采用双列直插式封装,如图所示。
下面说明各引脚功能。
IN0~IN7:
8路模拟量输入端。
2-1~2-8:
8位数字量输出端。
ADDA、ADDB、ADDC:
3位地址输入线,用于选通8路模拟输入中的一路
ALE:
地址锁存允许信号,输入,高电平有效。
START:
A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。
EOC:
A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。
OE:
数据输出允许信号,输入,高电平有效。
当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。
CLK:
时钟脉冲输入端。
要求时钟频率不高于640KHZ。
REF(+)、REF(-):
基准电压。
Vcc:
电源,单一+5V。
GND:
地。
实验连线图
图3-5AD0809引脚及连线图
(3)工作过程
首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。
此地址经译码选通8路模拟输入之一到比较器。
START上升沿将逐次逼近寄存器复位。
下降沿启动 A/D转换,之后EOC输出信号变低,指示转换正在进行。
直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。
当OE输入高电平 时,输出三态门打开,转换结果的数字量输出到数据总线上。
转换数据的传送 A/D转换后得到的数据应及时传送给单片机进行处理。
数据传送的关键问题是如何确认A/D转换的完成,因为只有确认完成后,才能进行传送。
为此可采用下述三种方式。
1)定时传送方式
对于一种A/D转换器来说,转换时间作为一项技术指标是已知的和固定的。
例如ADC0809转换时间为128μs,相当于6MHz的MCS-51单片机共64个机器周期。
可据此设计一个延时子程序,A/D转换启动后即调用此子程序,延迟时间一到,转换肯定已经完成了,接着就可进行数据传送。
2)查询方式
A/D转换芯片有表明转换完成的状态信号,例如ADC0809的EOC端。
因此可以用查询方式,测试EOC的状态,即可确认转换是否完成,并接着进行数据传送。
3)中断方式
把表明转换完成的状态信号(EOC)作为中断请求信号,以中断方式进行数据传送。
不管使用上述哪种方式,只要一旦确定转换完成,即可通过指令进行数据传送。
首先送出口地址并以信号有效时,OE信号即有效,把转换数据送上数据总线,供单片机接受
3.2.3AD0832芯片介绍
图3-6DA0832引脚信号图
(1)主要特性:
DAC0832是采用CMOS工艺制成的单片直流输出型8位数/模转换器。
如图4-82所示,它由倒T型R-2R电阻网络、模拟开关、运算放大器和参考电压VREF四大部分组成。
运算放大器输出的模拟量V0为:
图3-7DA0832内部运算放大器电路
1)特点:
一个8位D/A转换器有8个输入端(其中每个输入端是8位二进制数的一位),有一个模拟输出端。
输入可有28=256个不同的二进制组态,输出为256个电压之一,即输出电压不是整个电压范围内任意值,而只能是256个可能值。
D0~D7:
数字信号输入端。
ILE:
输入寄存器允许,高电平有效。
CS:
片选信号,低电平有效。
WR1:
写信号1,低电平有效。
XFER:
传送控制信号,低电平有效。
WR2:
写信号2,低电平有效。
IOUT1、IOUT2:
DAC电流输出端。
Rfb:
是集成在片内的外接运放的反馈电阻。
Vref:
基准电压(-10~10V)。
Vcc:
是源电压(+5~+15V)。
AGND:
模拟地NGND:
数字地,可与AGND接在一起使用。
DAC0832输出的是电流,一般要求输出是电压,所以还必须经过一个外接的运算放大器转换成电压。
实验线路如图
图3-8DA0832内部电路
IN0~IN7:
8路模拟信号输入端。
A1、A2、A0:
地址输入端。
ALE地址锁存允许输入信号,在此脚施加正脉冲,上升沿有效,此时锁存地址码,从而选通相应的模拟信号通道,以便进行A/D转换。
START:
启动信号输入端,应在此脚施加正脉冲,当上升沿到达时,内部逐次逼近寄存器复位,在下降沿到达后,开始A/D转换过程。
EOC:
转换结束输出信号(转换接受标志),高电平有效。
OE:
输入允许信号,高电平有效。
CLOCK(CP):
时钟信号输入端,外接时钟频率一般为640kHz。
Vcc:
+5V单电源供电。
、
Vref(+),Vref(-):
基准电压的正极、负极。
一般Vref(+)接+5V电源,Vref(-)接地。
D7~D0:
数字信号输出端。
由A2、A1、A0三地址输入端选通8路模拟信号中的任何一路进行A/D转换。
3.3硬件电路
图3-9实验硬件电路连接图
3.4实验连线图
图3-10温度控制实验连线图
3.4.1硬件连接图描述:
8255A引脚接线:
CS-288H-28BH
A口:
PA0-PA7-------LCD液晶屏八位数据口
B口:
PB2——继电器
C口:
PC0-液晶屏的D/I口PC1--液晶屏的RW口
PC2--液晶屏的E口
AD0809引脚接线
CS--298HIN0,IN1--电位器
GATE0,GATE1--5V
DA0832引脚接线
CS--290HUa--直流电机
4软件方案
4.1功能模块
图4-1软件功能模块图
4.2系统各模块程序流程图
4.2.18255初始化模块:
1>8255A的初始化:
图4-28255初始化流程图
4.2.2温度过高的报警模块:
1>启动直流电机
图4-3温度过高流程图
4.2.3温度过低的报警模块:
1>启动继电器
图4-4温度过低流程图
4.2.4温度计算子程序模块:
1>数据分解
开始
图4-5温度计算流程图
4.2.5显示程序模块:
1>液晶屏显示
图4-6显示子程序流程图
4.2.6lcd_disp子程序模块
1>液晶显示
图4-7lcd_disp子程序显示流程图
5源程序清单和注释
io8255aequ288h
io8255bequ289h
io8255cequ28ah
io8255kzequ28bh
PORT1EQU290H;DA0832端口
io0809aequ298h;以上为各个端口
datasegment
hz_tabdw0cec2h,0b6c8h,0a1c3h,0a1a0h,0a1a0h,0a1a0h,0a1e3h,0a3c3h
dw0b5cdh,0cec2h,0c1c1h,0a1a0h,0a1a0h,0b8dfh,0cec2h,0d7aah;显示屏幕第二行和第三行字符表
hz_adrdb?
;存放显示起始行端口地址
dis_numdb?
;定义变量用来存放采集的模拟量
temp0db?
;以下模拟量分离产生个位,十位,百位
temp1db?
temp2db?
buf1dw0
temphigdb200d;为系统设置温度上限
templowdb100d;设置温度下限
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movdx,io8255kz
moval,80h
outdx,al;8255初始化
read:
movdx,io0809a
outdx,al;启动0809芯片
calldelay;调用延时子程序
inal,dx;采集ADC0809收集的模拟量
movdis_num,al
MOVAL,0ffh;直流电机停止
MOVDX,300h
OUTDX,AL
callnext1;调用温度过低警报子程序
callnext2;调用温度过高警报子程序
callsegret;调用模拟量分离的子程序
callclear;LED清屏
leabx,hz_tab
movch,2;显示第二行信息
calllcd_disp
leabx,hz_tab
movch,3;显示第3行信息
calllcd_disp
jmpread;跳转到read标志继续执行
movah,4ch;退出
int21h
next1proc;温度过低启动继电器
pushdx;压栈
pushax
pushcx
movdx,io8255c
moval,00h
outdx,al
movcl,dis_num
movdx,io8255b
moval,00h
outdx,al
cmpcl,templow;当温度低于已经设置的温度下限
jbn1;跳转的n1
popcx
popax
popdx
ret;返回主程序
n1:
movdx,io8255b
moval,08h
outdx,al;pb3输出高电平
loopn1
popcx;出栈
popax
popdx
ret;返回主程序
next1endp
next2proc;温度过高启动直流电机
pushdx;压栈
pushax
pushcx
MOVAL,00H
MOVDX,PORT1
OUTDX,AL
movcl,dis_num
cmpcl,temphig;当温度高于系统设置上限
jan2;跳转到n2
popcx;出栈
popax
popdx
ret;返回主程序
n2:
MOVBUF1,0400H
MOVCX,BUF1
DELAY1:
LOOPDELAY1
MOVAL,0FFH
MOVDX,PORT1
OUTDX,AL
calldelay
popcx
popax
popdx
ret;返回主程序
next2endp
segretproc;将模拟分量分离的子程序
pushax;将ax压栈
movah,0;将ax的ah置0
moval,dis_num;dis_num放入al
movbl,10;10放入bl
divbl;ax值除以bl
movtemp0,ah;将个位数放入temp0
movah,0
movbl,10
divbl
movtemp1,ah;将十位放入temp1
movtemp2,al;将百位放入temp2
popax;出栈
pushax
moval,temp2
movah,0
addax,0a3b0h
mov[hz_tab+6],ax;将百位放入第二行字符显示表
popax
pushax
moval,temp1
movah,0
addax,0a3b0h
mov[hz_tab+8],ax;将十位放入字符显示表
popax
pushax
moval,temp0
movah,0
addax,0a3b0h
mov[hz_tab+10],ax;将个位放入字符显示表
popax
ret;返回主程序
segretendp
clearproc
moval,0ch
movdx,io8255a
outdx,al;设置清除命令
callcmd_setup;启动LCD执行命令
ret;返回主程序
clearendp
lcd_dispproc
leabx,hz_tab
cmpch,2
jzdisp_sec
movbyteptrhz_adr,88h;第三行起始端口地址
addbx,16;指向第二行信息
jmpnext
disp_sec:
movbyteptrhz_adr,90h
next:
movcl,8
continue:
pushcx
moval,hz_adr
movdx,io8255a
outdx,al
callcmd_setup;设定DDRAM地址命令
movax,[bx]
pushax
moval,ah;先送汉字编码高位
movdx,io8255a
outdx,al
calldata_setup;输出汉字编码高字节
calldelay
popax
movdx,io8255a
outdx,al
calldata_setup;输出汉字编码地位字节
calldelay
incbx
incbx;修改显示内码缓冲区指针
incbyteptrhz_adr;修改LCD显示端口地址
popcx
deccl
jnzcontinue
ret
lcd_dispendp
cmd_setupproc
movdx,io8255c;指向8255端口控制端口
nop
moval,00h;pc1置0,pc0置0(LCDI端=0W端=0)
outdx,al
calldelay
nop
moval,04h;pc2置1(LCDE端=1)
outdx,al
nop
calldelay
moval,00h;pc2置0
outdx,al
calldelay
ret
cmd_setupendp
data_setupproc
movdx,io8255c;指向8255端口的控制端口
moval,01h;pc1置0,pc0置1(LCDI端=1)
outdx,al
nop
calldelay
moval,05h;pc2置1(LCDE端=1)
outdx,al
nop
calldelay
moval,01h;pc2置0(E端=0)
outdx,al
nop
calldelay
ret
data_setupendp
delayproc;延时子程序
pushcx
pushdx
movcx,0ffffh
x1:
loopx1
popdx
popcx
ret
delayendp
codeends
endstart
6运行结果
注:
1)上限温度:
200℃
2)下限温度:
100℃
图6-1152℃时结果图
图6-3212℃时结果图
图6-466℃时结果图
7问题分析与解决方案
7.1实验设计前的问题与解决方案
(1)温度如何用0~5v直流电压模拟?
解决方案:
最后解决方案是依据0809A/D转换器将电压转换为0~255的数值,将其存入数据段的一个存储单元里。
(2)怎样控制直流电机转?
解决方案:
解决方案是用0832控制直流电机的转与停。
7.2实验设计中的问题与解决方案
(1)究竟该怎样将12864的四行与我们设计的显示内容对应起来?
解决方案:
我们是在LCD液晶屏的自定义实验的基础上修改得来,自定义实验只有两行显示,通过对代码的分析,发现四行的端口地址并不是顺序排列的。
经过不断的试验,得到各口地址为:
第一行:
80H;第二行:
90H;第三行:
88H;第四行:
98H。
通过判断需要输出哪一行的信息,输出汉字表中的相应汉字,LED显示屏的每一行能显示八个字符,所以根据汉字在LED屏幕上的位置以计算得出汉字在表中位置。
8结论与体会
结论:
本次模拟温度控制实验所设计的芯片有8255A,AD0809,DA0832,及其他的硬件设备,如:
试验箱上的电位器,LCD液晶显示屏,继电器,直流电机,导线若干。
实验的设计思路是通