数字式温度计的设计课程设计.docx
《数字式温度计的设计课程设计.docx》由会员分享,可在线阅读,更多相关《数字式温度计的设计课程设计.docx(20页珍藏版)》请在冰豆网上搜索。
数字式温度计的设计课程设计
课程设计说明书
课程设计名称:
单片机课程设计
课程设计题目:
数字式温度计的设计
学院名称:
电气信息学院
专业班级:
15电力(3)班
学生学号:
1504200623
学生姓名:
曾高
学生成绩:
指导教师:
易先军
课程设计时间:
2017.10.30至2017.11.5
格式说明(打印版格式,手写版不做要求)
(1)任务书三项的容用小四号宋体,1.5倍行距。
(2)目录(黑体,四号,居中,中间空四格),容自动生成,宋体小四号。
(3)章的标题用四号黑体加粗(居中排)。
(4)章以下的标题用小四号宋体加粗(顶格排)。
(5)正文用小四号宋体,1.5倍行距;段落两端对齐,每个段落首行缩进两个字。
(6)图和表中文字用五号宋体,图名和表名分别置于图的下方和表的上方,用五号宋体(居中排)。
(7)页眉中的文字采用五号宋体,居中排。
页眉统一为:
工程大学本科课程设计。
(8)页码:
封面、扉页不占页码;目录采用希腊字母Ⅰ、Ⅱ、Ⅲ…排列,正文采用阿拉伯数字1、2、3…排列;页码位于页脚,居中位置。
(9)标题编号应统一,如:
第一章,1,1.1,……;论文中的表、图和公式按章编号,如:
表1.1、表1.2……;图1.2、图1.2……;公式(1.1)、公式(1.2)。
课程设计任务书
一、课程设计的任务和基本要求
(一)设计任务(从“单片机课程设计题目”汇总文档中任选1题,根据所选课题的具体设计要求来填写此栏)
1.用DS18B20设计一款能够显示当前温度值的温度计;
2.通过切换按钮可以切换华氏度和摄氏度显示;
3.测量精度误差在正负0.5摄氏度以。
(二)基本要求
1.有硬件结构图、电路图及文字说明;
2.有程序设计的分析、思路说明;
3.有程序流程框图、程序代码及注释说明;
4.完成系统调试(硬件系统可以借助实验装置实现,也可在Proteus软件中仿真模拟);
5.有程序运行结果的截屏图片。
二、进度安排
第9周,10.30~11.5
1)10.30题目分析,文献查阅
2)10.31方案比较,确定设计方案
3)10.31~11.1硬件电路设计
4)11.2~11.4程序设计,程序调试,系统联调,系统改进
5)11.5课程设计说明书撰写
三、参考资料或参考文献
1.林立,俊亮.单片机原理及应用——基于Proteus和KeilC[M].:
电子工业,2013
2.毅刚,喜元.单片机原理与应用设计[M].:
电子工业,2008
3.马忠梅.单片机的C语言应用程序设计(第5版)[M].:
航空航天大学,2013
4.育才主编,MCS-51系列单片微型计算机及其应用.东南大学
5.楼然苗.单片机课程设计指导.:
航空航天大学.2002.
本科生课程设计成绩评定表
专业班级
学号
课程设计题目:
课程设计答辩记录:
(手写)
成绩评定依据:
项目
得分
比例
考勤记录
设计结果
报告撰写
答辩成绩
备注:
成绩评定依据的项目容和项目分值比例可以由老师按指导的专业进行调整,但成绩评定依据的项目数不得少于3项。
最终评定成绩:
指导教师签名:
年月日
第一章引言1
第二章设计任务与要求2
第三章设计方案2
表3.1设计方案2
1.采集与放大2
2.数模转换3
3.数码显示3
第四章设计电路与原理4
1.温度传感器原理4
图4.1DS18B20部结构4
图4.264位ROM的结构5
2.AT89C52的介绍6
图4.3AT89C52引脚图7
3.数码管8
4.结构原理图9
5.程序10
第五章电路的组装与调试15
第六章设计心得16
第一章引言
随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同种类的传感器,可实现诸如电压、湿度、温度、速度、硬度、压力等的物理量的测量。
本文主要介绍了一个基于AT89C52单片机的测温系统,详细描述了利用数字温度传感器DS18B20开发测温系统的过程。
当今信息化时代展过程中,各种信息的感知、采集、转换、传输和处理的功能器件已经成为各个应用领域中不可缺少的重要技术工具。
传感器是信息采集系统的首要部件,是实现现代化测量和自动控制的主要环节,是现代信息产业的源头,又是信息社会赖以存在和发展的物质与技术基础。
可见理解和撑握传感器的知识与技术有着其极重要的意义。
测量温度的关键是温度传感器,温度传感器随着温度而引起的物理参数变化有:
膨胀,电阻,电容,电动势,磁性能,频率,光学特性及热噪声等等。
温度传感器的发展经历了三个发展阶段:
传统的分立式温度传感器、模拟集成温度传感器、智能集成温度传感器。
对采集的信息都希望用最直接的方式显示出来,但是传感器所采集的信息是模拟的信号,并且信号是非常微小的,需要用放大器进行放大。
模拟信号不能直接用数字仪器直接显示,通过模数转换之后就可以将模拟量转变成数字量,在通过数码管进行显示。
有些可以直接与单片机。
数码管有共阳极与共阴极两类,本次设计采用的是共阴极的七段数码管。
第二章设计任务与要求
1.设计任务:
设计一数字温度计,将测量的温度值转换为数字量并显示出来,即将收集的模拟的信号转换成数字信号。
2.设计要求:
必须选择一个温度传感器,并且所设计的数字温度计测量的围为0-100℃,采用数模转换(单片机除外),LED数码管进行数字显示。
第三章设计方案
设计方案主要包括温度的采集与信号的放大,数模转换,数码显示三部分。
表3.1设计方案
温度的采集与放大
数码显示
数模转换
1.采集与放大
温度的改变会影响一些电阻的阻值,温度传感器是通过物体随温度变化而变化的特性来测量的。
一般采用阻值的变化与温度的变化有线性关系的电阻来采集温度,最后通过阻值的变化来反映出温度。
Pt100铂热电阻与温度之间存在着线性的关系,通过阻值的变化可以得到对应的温度。
有些是采用热电偶的方式,温度检测部分可以使用低温热偶,热电偶由两个焊接在一起的异金属导线所组成。
热电偶产生的热电势由两种金属的接触电势和单一导体的温差电势组成。
通过将参考结点保持在已知温度并测量该电压,便可推断出检测结点的温度。
2.数模转换
温度的改变会影响一些电阻的阻值,温度传感器是通过物体随温度变化而变化的特性来测量的。
一般采用阻值的变化与温度的变化有线性关系的电阻来采集温度,最后通过阻值的变化来反映出温度。
Pt100铂热电阻与温度之间存在着线性的关系,通过阻值的变化可以得到对应的温度。
有些是采用热电偶的方式,温度检测部分可以使用低温热偶,热电偶由两个焊接在一起的异金属导线所组成。
热电偶产生的热电势由两种金属的接触电势和单一导体的温差电势组成。
通过将参考结点保持在已知温度并测量该电压,便可推断出检测结点的温度。
本次课程设计主要用LM35,温度传感器,它能集温度的采集与放大于一身的传感器,而且采用LM35的电路比较简单,于其部已将采集的信号进行放大。
3.数码显示
数码显示就是将TC7107转换成的数字信号进行显示。
一般数码管有共阳极与共阴极两类,共阳与共阴的只要区别就是其公共端是接阳极还是接阴极,如果接阴极就为共阴极,反之为共阳极。
数码管根据不同的信号显示不同的值,但是一个数码管只能显示0—9还有负号与小数点。
0—9的显示主要是其a-g管脚的组合显示。
第四章设计电路与原理
1.温度传感器原理
DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单、体积小的特点。
因此用它来组成一个测温系统,线路简单,在一根通信线上,可以挂很多这样的数字温度计,十分方便。
DS18B20是美国DALLAS公司新推出的一种可组网数字式温度传感器,与DS1820相似,DS18B20也能够直接读取被测物体的温度值。
但是与DS1820相比,DS18B20的功能更强大些。
它体积小,电压适用围宽(3~5V),用户还可以通过编程实现9~12位的温度读数,即具有可调的温度分辨率,因此它的实用性和可靠性比同类产品更高。
DS18B20部结构如图4.1所示,主要由4部分组成:
温度传感器、64位ROM、非挥发的温度报警触发器TH和TI、配置寄存器。
由图4.1可见,DS18B20只有一个数据输入输出口,属于单总线专用芯片之一。
DS18B20工作时被测温度值直接以“单总线”的数字方式传输,大大提高了系统的抗干扰能力。
其部采用在线温度测量技术,测量围为55~125°C,在-10~85℃时,精度为±0.5°C。
每个DS18B20在出厂时都已具有唯一的64位序列号,因此一条总线上可以同时挂接多个DS18B20,而不会出现混乱现象。
另外用户还可自设定非易失性温度报警上下限值TH和TL(掉电后依然保存)。
DS18B20在完成温度变换后,所测温度值将自动与存储在TH和TL的触发值相比较,如果测温结果高于TH或低于TL,DS18B20部的告警标志就会被置位,表示温值超出了测量围,同时还有报警搜索命令识别出温度超限的DS18B20。
图4.1DS18B20部结构
64位闪存ROM的结构如图4.2所示
8b检验CLC
48b序列号
8b工厂代码(10H)
MSBLSBMSBLSBMSBLSB
图4.264位ROM的结构
首先是8位的产品单线系列编码,接着是每个器件的唯一的序号,共有48位,最重要的8位是前面56位的CRC校验码(循环冗余校验码),这也是多个DS18B20可以采用一线进行通信的原因。
非易失性温度报警触发器TH和TL,可通过软件写人用户报警上下限。
DS18B20的部测温电路框图如图4.2所示,图中低温度系数振荡器的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1,高温度系数振荡器随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。
图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数,进而完成温度测量。
计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的基数分别置人减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
减法计数器1对低温度系数振荡器产生的脉冲信号进行减法计数,当减法计数器1的预置值减到。
时温度寄存器的值将加1,减法计数器1的预置将重新被装人,减法计数器1重新开始对低温度系数振荡器产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。
图4.2中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就是DS18B20的测温原理。
图4.2DS18B20的部测温电路框图
由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。
DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。
该协议定义了几种信号的时序:
初始化时序、读时序、写时序。
所有时序都是将主机作为主设备,单总线器件作为从设备。
而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。
数据和命令的传输都是低位在先。
2.AT89C52的介绍
AT89C52是美国Atmel公司生产的低电压、高性能CMOS8位单片机,片含8KB的可反复擦写的程序存储器和12B的随机存取数据存储器(RAM),器件采用Atmel公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片配置通用8位中央处理器(CPU)和Flash存储单元,功能强大的AT89C52单片机可灵活应用于各种控制领域。
AT89C52单片机属于AT89C51单片机的增强型,与Intel公司的80C52在引脚排列、硬件组成、工作特点和指令系统等方面兼容。
其主要工作特性是:
①片程序存储器含8KB的Flash程序存储器,可擦写寿命为1000次;②片数据存储器含256字节的RAM;③具有32根可编程I/O口线;④具有3个可编程定时器;⑤中断系统是具有8个中断源、6个中断矢量、2个级优先权的中断结构;⑥串行口是具有一个全双工的可编程串行通信口;⑦具有一个数据指针DPTR;⑧低功耗工作模式有空闲模式和掉电模式;⑨具有可编程的3级程序锁定位;⑩工作电源电压为5V,最高工作频率为24MHz。
软件部分具体分为音乐程序和流水灯程序,利用C语言进行编写。
有发声模块、数码管显示模块、电阻模块。
研究方法:
单片机音乐流水灯系统总体功能的实现与各个模块的基本功能密不可分,因此必须要从各个模块的单独设计入手。
(1)晶振电路模块晶振是晶体振荡器的简称,在电气上它可以等效成一个电容和一个电阻并联再串联一个电容的二端网络,电工学上这个网络有两个谐振点,以频率的高低分其中较低的频率是串联谐振,较高的频率是并联谐振。
由于晶体自身的特性致使这两个频率的距离相当的接近,在这个极窄的频率围,晶振等效为一个电感,所以只要晶振的两端并联上合适的电容它就会组成并联谐振电路。
这个并联谐振电路加到一个负反馈电路中就可以构成正弦波振荡电路,由于晶振等效为电感的频率围很窄,所以即使其他元件的参数变化很大,这个振荡器的频率也不会有很大的变化。
晶振有一个重要的参数,那就是负载电容值,选择与负载电容值相等的并联电容,就可以得到晶振标称的谐振频率。
一般的晶振的负载电容为15p或12.5p,如果再考虑元件引脚的等效输入电容,则两个22p的电容构成晶振的振荡电路就是比较好的选择。
(2)复位电路模块这个模块主要进行复位操作。
(3)流水灯模块要实现流水灯功能,只要将几个发光二极管依次点亮、熄灭,发光二极管便会一亮一灭地成为流水灯了。
在此还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,在控制发光二极管亮灭的时候应该延时一段时间,否则就看不到“流水”效果了。
(4)电阻模块这里将增加一个27KΩ的RP1接在AT89C52单片机的P0.0-P0.7引脚上。
(5)按键模块按键模块将增加一个模式键、一个加速键、一个减速键进行相应的按键操作。
(6)发声模块发声模块的主要部件是蜂鸣器LS1,蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的。
(7)数码管显示此模块主要是用来显示按键模块对音乐控制的显示。
最后单片机音乐流水灯系统的设计和研究必须要实现音乐与流水灯的完美结合,在研究的过程中要切实解决面临的各种问题,认真查找相关文献资料,加强沟通,遇到问题要独立思考。
设计过程中要按照步骤来,一步一个脚印,首先做好整体布局,从理论设计出发,罗列出所需硬件清单,然后购买相应的硬件设施,在经过大量的仿真实验无误后,再动手进行相应的硬件设置
AT89C52并非所有的地址都被定义,从80H—FFH共128个字节只有一部分被定义,还有相当一部分没有定义。
对没有定义的单元读写将是无效的,读出的数值将不确定,而写入的数据也将丢失。
不应将数据写入未定义的单元,由于这些单元在将来的产品中可能赋予新的功能,在这种情况下,复位后这些单元数值总是“0”。
图4.3AT89C52引脚图
3.7段数码管
数码管的一种是半导体发光器件,数码管可分为七段数码管和八段数码管,区别在于八段数码管比七段数码管多一个用于显示小数点的发光二极管单元DP(decimalpoint),其基本单元是发光二极管。
数码管是一类价格便宜使用简单,通过对其不同的管脚输入相对的电流,使其发亮,从而显示出数字能够显示时间、日期、温度等所有可用数字表示的参数的器件。
驱动方式有直流驱动和动态显示驱动。
直流驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。
优点是编程简单,显示亮度高,缺点是占用I/O端口多。
动态显示驱动是将所有数码管通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示。
将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
图4.47段数码管引脚图
4.结构原理图
图4.5接线图
5.程序
#include
#include//包含NOP函数
#defineucharunsignedchar
#defineuintunsignedint
#defineAlarmTemper60//温度报警限设置
sbitDQ=P1^0;
sbitLED=P1^6;
ucharcodetable[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
uchartemperature,ten,bits;//全局变量
//延时50us函数
voiddelay_50us(uintt)//每次50us延时,最大误差13us
{
ucharj;
for(;t>0;t--)
for(j=19;j>0;j--);
}
//延时2us函数
voiddelay_2us(unsignedchari)//每次2us精确延时,最大误差6us
{
while(--i);
}
//蜂鸣器报警函数
voidalarm()
{
if(temperature>=AlarmTemper)
LED=1;
else
LED=0;
}
//数码管显示函数
voidLEDDisplay()
{
P2=table[ten];
P3=0xfb;
delay_50us(20);//十位延时1ms
P3=0xff;
P2=table[bits];
P3=0xf7;
delay_50us(20);//个位延时1ms
P3=0xff;
}
//DS18B20初始化函数
voidDS18B20Reset()
{
DQ=0;
delay_50us(10);//延时513us
DQ=1;
delay_50us
(1);//延时50us
while(!
DQ);
_nop_();
}
//读DS18B20函数
ucharDS18B20ReadByte()
{
uinti;
uchardat=0;
for(i=0;i<8;i++)
{
DQ=0;
_nop_();//延时1us
dat>>=1;
DQ=1;//释放
delay_2us
(2);
if(DQ)
dat|=0x80;
delay_2us(20);//延时40到45us
DQ=1;//释放总线
}
return(dat);
}
//写DS18B20函数
voidDS18B20WriteByte(uchardat)
{
ucharj;
for(j=0;j<8;j++)
{
DQ=0;
delay_2us(5);//拉低电平10到15us
if(dat&0x01)
DQ=1;
delay_2us(15);//延时20到45us
dat>>=1;
DQ=1;//释放总线
_nop_();
}
}
//温度转换函数
voidtemperConvert()
{
DS18B20Reset();
DS18B20WriteByte(0xcc);//跳过读序号列号的操作
DS18B20WriteByte(0x44);//启动温度转换
}
//读出温度函数
voidtemperRead()
{
uchartemph,templ;
DS18B20Reset();
DS18B20WriteByte(0xcc);//跳过读序号列号的操作
DS18B20WriteByte(0xBE);//读RAM数据
templ=DS18B20ReadByte();//温度的低八位
temph=DS18B20ReadByte();//温度的高八位
temperature=(temph<<4)|(templ>>4);
ten=temperature%100/10;//十位
bits=temperature%10;//个位
}
//主函数
voidmain()
{
ucharj;
while
(1)
{
temperConvert();
for(j=0;j<250;j++)
LEDDisplay();
temperRead();//将读RAM的函数放到这儿是因为温度的转换要用750ms时间,这里用Display()函数来达到延时效果
alarm();
}
}
第五章电路的组装与调试
(1)按照电路图对相关元件进行连接,其中注意芯片各管脚的作用以及该如何进行接线。
(2)当上步骤完成后,接通电源,观察数码管和二极管是否亮,若不亮时,要对电路电源进行检测,看是否线路接触不良或者电路短路。
(3)完成之后,观察数码管是否显示数值,然后改变DS18B20的温度值,观察数码管是否随着温度变化而变化。
(4)若数码管数值与温度值相差太大,则要检查信号采集电路中各元件值是否对。
为了验证设计电路的正确性以及它的实验数据,我们对实物进行验证。
用带有温度测量的数字万用表和本次设计的电路对相同温度下物体进行相应的测量并绘成表格进行比较。
结果如图
图5.1原理图
第六章设计心得
在这次实验中,我学到很多东西,加强了我的动手能力,并且培养了我的独立思考能力。
特别是在做实验报告时,因为在做硬件时出现很多问题,如果不解决的话,将会很难的继续下去。
还有画图时,也要用软件画图,还有动手这次实验,使测试技术这门课的一些理论知识与实践相结合,更加深刻了我对测试技术这门课的认识,巩固了我的理论知识。
通过这次课程设计,我觉得综合知识得到了充实,虽然了解的知识皮毛。
但是为以后的学习奠定了基础。
数字温度计在生活中应用也很广泛,能完成这次仿真对自己是一种很大的鼓励。
不仅自己的知识水平有提高,计算机绘制电路图的能力也提高了。
问题时时刻刻存在,但是收获也是不可估量。
总之,能完成这一次的课程设计,不仅有自己的努力,还有老师的指导。
完成设计之后有一种成就感,很快乐。