单片机课程设计热敏电阻测温显示系统.docx
《单片机课程设计热敏电阻测温显示系统.docx》由会员分享,可在线阅读,更多相关《单片机课程设计热敏电阻测温显示系统.docx(24页珍藏版)》请在冰豆网上搜索。
单片机课程设计热敏电阻测温显示系统
题目:
热敏电阻测温显示系统
燕山大学课程设计(论文)任务书
设计题目
热敏电阻测温显示系统
设
计
技
术
参
数
设计一个采用热敏电阻为敏感元件的温度测量显示系统,温度显示范围为0-100℃,显示分辨率0.1℃。
设
计
要
求
设计热敏电阻检测电路与单片机的接口电路、4位LED显示电路;编制相应的程序。
工
作
量
设计的内容满足课程设计的教学目的与要求,设计题目的难度和工作量适合学生的知识和能力状况,工作量饱满。
工
作
计
划
查阅资料进行设计准备、设计硬件电路、编制程序,编制程序、验证设计、撰写任务书。
参
考
资
料
单片微型计算机接口技术及其应用张淑清国防工业出版社
单片机原理及应用技术张淑清国防工业出版社
单片机应用技术汇编
指导教师签字
基层教学单位主任签字
说明:
此表一式四份,学生、指导教师、基层教学单位、系部各一份。
2017年6月29日
第5章拓展DS18B20芯片测温显示系统.........................................................23
第一章摘要
随着以知识经济为特征的信息化时代的到来人们对仪器仪表的认识更加深入,温度作为一个重要的物理量,是工业生产过程中最普遍,最重要的工艺参数之一。
随着工业的不断发展,对温度的测量的要求也越来越高,而且测量的范围也越来越广,对温度的检测技术的要求也越来越高,因此,温度测量及其测量技术的研究也是一个很重要的课题。
目前温度计按测使用的温度计种类繁多,应用范围也比较广泛,大致可以包括以下几种方法:
1利用物体热胀冷缩原理制成的温度计
2利用热电效应技术制成的温度检测元件
3利用热阻效应技术制成的温度计
4利用热辐射原理制成的高温计
5利用声学原理进行温度测量
本系统的温度测量采用的就是热阻效应。
本文设计一个采用热敏电阻为敏感元件的温度测量显示系统,温度显示范围为0-100
,显示分辨率为0.1
。
通过热敏电阻温度传感器、A\D模数转换器、LED显示电路并利用汇编语言编写程序,最终实现温度测量系统。
测温电桥的主要部分是热敏电阻。
热敏电阻的主要特点是:
①灵敏度较高,其电阻温度系数要比金属大10~100倍以上,能检测出10-6℃的温度变化;②工作温度范围宽,常温器件适用于-55℃~315℃,高温器件适用温度高于315℃(目前最高可达到2000℃),低温器件适用于-273℃~55℃;③体积小,能够测量其他温度计无法测量的空隙、腔体及生物体内血管的温度;④使用方便,电阻值可在0.1~100kΩ间任意选择;⑤易加工成复杂的形状,可大批量生产;⑥稳定性好、过载能力强。
温度是表征物体冷热程度的物理量,常见的温度传感器有热电阻传感器、热敏电阻传感器、热电偶温度传感器、集成温度传感器。
热敏电阻本身是一个利用其电阻值随温度变化而变化的温度传感元件,而且其灵敏度高、体积小、使用方便、结构简单等优点,因此利用热敏电阻制成的温度计广泛应用于航空、医学、工业及家用电器等方面做测温、控制、温度补偿、流速测量、液面指示等。
采用以单片机为核心的热敏电阻温度计能很容易地减小上述影响,并且读数方便,精确度高,更显数字化。
本设计采用全桥测量电路,使系统产生的误差更小,输出的数据更精确。
而运算放大电路的作用就是把传感器输出的微弱的模拟信号进行一定倍数的放大,以满足A/D转换器对输入信号电平的进行各种转换处理的要求。
ADC0809的A/D转换作用是进行模数转换把模拟信号转变成数字信号,然后把数字信号输送到显示电路中去,由六位(本实验采用四位)八段数码管显示出测量结果。
关键字:
温度传感器热敏电阻A/D数模转换数码管动态显示
第二章总体设计
2.1理论分析
温度测量模块主要为温度测量电桥,当温度发生变化时,电桥失去平衡,从而在电桥输出端有电压输出,但该电压很小。
经过集成放大器放大,将放大后的信号输入AD转换芯片,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来。
显示模块
单片机
测温系统
AD
转
换
模
块
信号放大
↑
电源
图1—1系统框图
图2.1.1系统硬件原理图如图1—1
2.2过程分析
该温度传感器系统硬件原理图如图1—1所示,由热电阻传感器测得外界温度,经过信号放大,然后送给模数转换,将原有的模拟信号转换为可以被单片机识别和运算的数字信号,然后再通过软件编程由显示电路显示出来当前所测得的温度。
它的各部分电路说明如下:
(1).测温模块:
该部分电路主要使用测温电桥,当温度变化时,电桥处于不平衡状态,从而输出不平衡电压,为测温的基础。
(2).信号处理部分:
该部分电路包括电压信号的放大和AD转换,实现模数变换,以及硬件滤波。
(3)单片机部分:
本实验采用8051单片机,其工作在最小模式下,主要任务有:
控制AD0809进行模数转换、形成必要的时序、进行数据计算以及控制数码管显示。
(4).电源电路部分:
该部分电路负责将输入的9V~12V直流电,分别转换为稳定的9V、5V、-9V直流电,给传感器,放大电路,单片机,AD0809等供电。
(5).显示电路:
显示电路的作用是将测量的温度利用动态数码管实时显示出来。
第三章硬件电路设计
3.1传感器电路模块
1测温电桥及信号放大电路
图3.1.1测温电桥及信号放大电路
上图是一个比较常用的温度测量电路,大致分为电源,电阻电桥,运放,输出部分。
电源由R4,R6,C1,U1B组成,R4,R6为分压电路,C1主要滤除VCC中纹波,U1B为LM324运算放大器,工作于电压跟随器方式,其特点是具有高输入阻抗低输出阻抗,为后级电桥提供较稳定的电流。
电桥由R1,R2,R3,R13及热敏电阻组成,通过调节R13使电桥平衡,当温度发生变化时,热敏电阻变化,电桥产生电压差。
运放电路由R7,R8,R9,R10及U1A组成,调节R14可以调节输出电压幅值。
D1主要用于防止输出负电压,保护后级A/D电路。
2.测温电桥
图3.1.2测温电桥
如上图所示,热敏电阻RT和RA1,RB1,RC1,以及可变电阻R2组成一个测温电桥,在温度为20度时,调节R2使电桥达到平衡。
当温度升高时,热敏电阻的阻值变大,电桥失去平衡,电桥输出的不平衡电压,经过滤波后,输入运算放大器,进行放大处理。
3.电桥的分析
图3.1.3电桥原理图
(1)电桥输出电压:
=
(2)电桥平衡条件:
当各桥臂发生微小变化时,电桥失去平衡,其输出为:
一般
R很小,即
R<所以
实际使用中,为了简化桥路设计,同时也为了得到电桥的最大灵敏度,往往取桥臂电阻相等。
4.放大电路
最后经过放大部分,如图3.2.3,为压力传感器的微弱电压输出的放大电路。
分析它是一个差分放大电路,其放大倍数为
那么放大后的电压值为
因为
和温度T有一定的线性关系,A/D转换器的最大输入电压为5v,因此对应A/D输出的电压,与热敏电阻感知的外界温度具有一定的线性关系。
图4.1.3放大电路
3.2A/D变换电路模块
ADC0809是M美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式A/D转换器。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换,是目前国内应用最广泛的8位通用A/D芯片。
1主要特性:
(1)8路输入通道,8位A/D转换器,即分辨率为8位
(2)具有转换启停控制端
(3)转换时间为100us(时钟为640kHZ时),130us(时钟为500KHZ时)
(4)它由单一+5V电源供电,片内带有锁存功能的8路模拟多路开关,ADC0809可对0V—5V的双极性模拟信号进行转换。
(5),引脚图如图4.2.1所示。
各引脚功能说明如下:
:
8位数字量输出引脚,由最低引脚到最高引脚。
IN0—IN7:
8路模拟量输入引脚。
:
+5V工作电压。
GND:
地。
REF(+):
参考电压正端。
REF(—):
参考电压负端。
START:
A/D转换启动信号输入端。
ALE:
地址锁存允许信号输入端。
以上两个信号用于启动A/D转换。
EOC:
转换结束信号输出引脚。
开始转换时为低电平,转换结束时为高电平。
OE:
输出允许控制端。
用以打开三态数据输出锁存器。
CLK:
时钟信号输入端。
ADDA、ADDB、ADDC:
地址输入线。
经译码后可选通IN0—IN78个通道的一个通道进行转换。
图3.2.1ADC0809各引脚图
实验电路及接线如下图示:
连线
连接孔1
连接孔2
1
IN0
温度传感器输出
2
AD_CS
CS2
图3.2.2接线框图
A/D转换器的结构及连线图如上图所示,AD0809的工作过程如下:
首先用指令选择0809的一个模拟输入通道,当执行MOVX@DPTR,A时,产生一个启动信号给START引脚送入脉冲,开始对选中通道转换。
当转换结束后发出结束信号,置EOC引脚信号为高电平,该信号可以作为中断申请信号,当读允许信号到,OE端有高电平,则可以读出转换的数字量,利用MOVXA,@DPTR把该通道转换结果读到累加器A中。
转换电压为0—5V,调节桥路中的电位器,使其输出电压为0—5V,可以在较小范围内波动,当满量程输出时对应八个1的输出,由于前边计算的电压变化和电阻变化成正比关系,而且电阻变化和应变成正比,进而得出的压力和电压是成正比的。
传感器桥路输出的电压经过比例变换后转换成二进制码的形式送入P0口。
其程序框图如下:
图3.2.3A/D转换电路程序框图
3.3八段数码管显示
1.实验线路及接线如下
连线
连接孔1
连接孔2
1
KEY/LED_CS
CS0
图3.3.1接口图
2.动态显示数码管接线部分
图3.3.2数码管电路接线图
用6位8段码LED显示电路,只要按地址输出相应数据,就可以实现对显示器的控制。
显示共有6位,用动态方式显示。
8位段码、6位位码是由两片74LS374输出。
位码经MC1413或ULN2003倒相驱动后,选择相应显示位。
本实验仪中8位段码输出地址为0X004H,位码输出地址为0X002H。
此处X是由KEY/LEDCS决定,参见地址译码。
做LED实验时,需将KEY/LEDCS接到相应的地址译码上。
以便用相应的地址来访问。
例如,将KEY/LEDCS接到CS0上,则段码地址为08004H,位码地址为08002H七段数码管的字型显示表如下:
显示过程如下:
经过单片机P0输出的八位二进制码,变换成BCD码,在数码管上显示,经过段选信号和位选信号的控制,最后在相应数码管上显示出相应的温度值。
程序框图
如下:
图3.3.3数码管程序框图
译码插孔
地址范围
CS0
08000H~08FFFH
CS1
09000H~09FFFH
CS2
0A000H~0AFFFH
CS3
0B000H~0BFFFH
CS4
0C000H~0CFFFH
CS5
0D000H~0DFFFH
CS6
0E000H~0EFFFH
CS7
0F000H~0FFFFH
图3.3.4地址码插孔及对应地址范围
3.48051芯片介绍
本实验采用8051单片机,其管脚图如下:
图3.4.180C51的引脚图
1.电源
(1)VCC-芯片电源,接+5V;
(2)VSS-接地端;
2.时钟
XTAL1、XTAL2-晶体振荡电路反相输入端和输出端。
3.控制线(4根)
(1)ALE/PROG:
地址锁存允许/片内EPROM编程脉冲。
①ALE功能:
用来锁存P0口送出的低8位地址。
②PROG功能:
片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。
(2)PSEN:
外ROM读选通信号。
(3)RST/VPD:
复位/备用电源。
①RST(Reset)功能:
复位信号输入端。
②VPD功能:
在Vcc掉电情况下,接备用电源。
(4)EA/Vpp:
内外ROM选择/片内EPROM编程电源。
①EA功能:
内外ROM选择端。
②Vpp功能:
片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。
4.I/O线
80C51共有4个8位并行I/O端口:
P0、P1、P2、P3口,共32个引脚。
P3口还有第二功能,用于特殊信号输入输出和控制信号(属控制总线)。
3.5电源电路
电源是整套系统工作的基础,要实现温度的精确测量与显示跟一个合适的稳定的电源是密不可分的,由系统组成可知,系统要正常工作需要一个稳定的+5V电源,用来给测温电桥,单片机,显示模块,AD模块供电,要实现信号的放大还需要给放大模块提供稳定的+9V,-9V电源。
第四章温度传感器实验数据采集、显示及程序
4.1数据采集及显示
数据处理子程序是整个程序的核心。
主要用来调整输入值系数,使输出满足量程要求。
另外完成A/D的采样结果从十六进制数向十进制数形式转化。
系数转换在IN0输入的数最大为5V,要求压力80N对应的是5V,为十六进制向十进制转换方便,将系数进行一定倍数的变换,并用小数点位置的变化体现这一过程。
数制之间的转换:
在二进制数制中,每向左移一位表示数增加两倍。
要求压力80N对应的是5V,而压力与电压的变换是线性关系,对应AD转换器的输出为八个1,当有一定的压力值输入时,对应这个关系转化成相应的二进制代码送入P0口。
然后再反过来应用这个变化关系,经最终得到的数值进行二进制到BCD码转化,然后逐位在LED数码管上显示。
数据采集用A/D0809芯片来完成,主要分为启动、读取数据、延时等待转换结束、读出转换结果、存入指定内存单元、继续转换(退出)几个步骤。
ADC0809初始化后,就具有了将某一通道输入的0~5模拟信号转换成对应的数字量00H—FFH,然后再存入存储器的指定单元中。
在控制方面有所区别。
可以采用程序查询方式,延时等待方式和中断方式。
显示子程序是字符显示,首先调用事先编好数码管显示子程序。
初始化命令,然后输出显示命令。
在显示过程中一定要调用延时子程序。
当输入通道采集了一个新的过程参数,当有压力信号输入时,调用显示子程序在数码管上显示。
4.2程序的设计
ADCEQU41H
LED3EQU31H
LED2EQU32H
LED1EQU33H
LED0EQU34H
ORG0000H
LJMPMAIN
MAIN:
MOVLED0,#00H
MOVLED1,#00H
MOVLED2,#00H
MOVLED3,#00H
LOOP:
MOVDPTR,#08000H
MOVA,#00H
MOVX@DPTR,A
LCALLDELAY
MOVDPTR,#08000H
MOVXA,@DPTR
MOVB,A
MOVA,#0FFH
CLRC
SUBBA,B
MOVADC,A
TRSL:
MOVA,ADC
MOVR0,A
XRLA,#0FFH
JZMAX
MOVA,R0
MOVB,#10
MULAB
MOVR0,A
MOVA,B
MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVLED2,A
MOVA,R0
MOVB,#10
MULAB
MOVR0,A
MOVA,B
MOVDPTR,#TABLE
MOVCA,@A+DPTR
ADDA,#80H
MOVLED1,A
MOVA,R0
MOVB,#10
MULAB
MOVA,B
MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVLED0,A
LCALLSMXS
SJMPLOOP
SMXS:
MOVR0,#LED3
MOVR1,#4
MOVR2,#00100000B
SMXS1:
MOVDPTR,#09002H
MOVA,#00H
MOVX@DPTR,A
MOVA,@R0
MOVDPTR,#09004H
MOVX@DPTR,A
MOVDPTR,#09002H
MOVA,R2
MOVX@DPTR,A
LCALLDELAY
MOVA,R2
RRA
MOVR2,A
INCR0
DJNZR1,SMXS1
MOVDPTR,#09002H
MOVA,#00H
MOVX@DPTR,A
RET
DELAY:
MOVR7,#10
DELAY1:
MOVR6,#12
NOP
DJNZR6,$
DJNZR7,DELAY1
RET
MAX:
MOVLED3,#06H
MOVLED2,#3FH
MOVLED1,#3FH
MOVLED0,#3FH
TABLE:
db3fh,06h,5bh,4fh,66h,6dh,7dh,07h
db7fh,6fh,77h,7ch,39h,5eh,79h,71h
第5章拓展
DS18B20芯片测温显示系统
DS18B20数字单线温度计以9位数字量的形式反映器件的温度值。
DS18B20通过一个单线接口发送或接收信息,因此在中央微处理器和DS18B20之间仅需一条连接线(加上地线)。
用于读写和温度转换的电源可以从数据线本身获得,无需外部源。
因为每个DS18B20都有一个独特的片序列号,所以多只DS18B20可以同时连在一根单线总线上,这样就可以把温度传感器放在许多不同的地方。
这一特性在HVAC环境控制、探测建筑物、仪器或机器的温度以及过程监测和控制等方面非常有用。
DS18B20依靠一个单线端口通讯。
在单线端口条件下,必须先建立ROM操作协议,才能进行存储器和控制操作。
因此,控制器必须首先提供下面5个ROM操作命令之一:
1)读ROM,2)匹配ROM,3)搜索ROM,4)跳过ROM,5)报警搜索。
这些命令对每个器件的激光ROM部分进行操作,在单线总线上挂有多个器件时,可以区分出单个器件,同时可以向总线控制器指明有多少器件或是什么型号的器件。
成功执行完一条ROM操作序列后,即可进行存储器和控制操作,控制器可以提供6条存储器和控制操作指令中的任一条。
一条控制操作命令指示DS18B20完成一次温度测量。
测量结果放在DS18B20的暂存器里,用一条读暂存器内容的存储器操作命令可以把暂存器中数据读出。
温度报警触发器TH和TL各由一个EEPROM字节构成。
如果没有对DS18B20使用报警搜索命令,这些寄存器可以做为一般用途的用户存储器使用。
可以用一条存储器操作命令对TH和TL进行写入,对这些寄存器的读出需要通过暂存器。
所有数据都是以最低有效位在前的方式进行读写。
B不过与热敏电阻类似的,DS18B20也必须连接A/D转换器,以实现模拟与数字之间的转换,接线如下图:
与80c51单片机的接线部分,可以在单片机的最小系统中实现,我们连线时只需要连接我们需要的线路就可以了单片机最小系统如下:
显示采用八段数码管显示(实际上只会用到四段数码管)如图:
DS18B20测温程序如下:
(由于水平有限故在此采用C语言程序)
#include
#include
#include
#defineucharunsignedchar
#defineuintunsignedint;
/*****************************************************************************/
//sbitseg1=P1^0;
//sbitseg2=P1^1;
//sbitseg3=P1^2;
sbitDQ=P2^7;//ds18b20端口
sfrdataled=0x80;//显示数据端口
/**********************************************************************/
uchartemp;
ucharflag_get,count,num,minute,second;
ucharcodetab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//7段数码管段码表共阴
uchara,b;
/***********************************************************************/
voiddelay1(ucharMS);
unsignedcharReadTemperature(void);
voidInit_DS18B20(void);
unsignedcharReadOneChar(void);
voidWriteOneChar(unsignedchardat);
voiddelay(unsignedinti);
/************************************************************************/
main()
{
TMOD|=0x01;//定时器设置
TH0=0xef;
TL0=0xf0;
IE=0x82;
TR0=1;//启动定时器
P1=0x00;
count=0;
while
(1)
{
//str[2]=0x39;//显示C符号
a=tab[temp/10];//十位温度
b=tab[temp%10];//个位温度
if(flag_get==1)//定时读取当前温度
{
temp=ReadTemperature()-1;
flag_get=0;
}
}
}
voidtim(void)interrupt1using1//中断,用于数码管扫描和温度检测间隔
{
TH0=0xef;//定时器重装值
TL0=0xf0;
num++;
if(num==50)
{num=0;
flag_get=1;//标志位有效
second++;
if(second>=60)
{second=0;
minute++;
}
}
count++;
if(count==1)
{P1=0xfe;
dataled=a;}//数码管扫描
if(count==2)
{P1=0xfd;
dataled=b;count=0;}
/*if(count==3)
{P1=2;
dataled=str[2];
count=0;}*/
}
/***********************************