智能仪器课程设计报告.docx
《智能仪器课程设计报告.docx》由会员分享,可在线阅读,更多相关《智能仪器课程设计报告.docx(23页珍藏版)》请在冰点文库上搜索。
智能仪器课程设计报告
专业课程设计报告
题目:
基于DS18B20的温度测量系统
系别:
信息工程系
专业班级:
学生姓名:
指导教师:
丹丹
提交日期:
2012年5月18日
目录
一、前言3
二、系统组成3
1、设计思路4
2、基本要求4
3、课程设计目的4
三、硬件电路组成及工作原理5
1、温度传感器功能模块6
2、AT89C51单片机8
3、8550PNP三极管10
4、晶振电路10
5、复位电路11
6、键盘电路12
7、显示电路13
四、整体仿真调试与实物连接13
五、整体电路图15
六、心得体会16
七、参考文献17
八、附录(源程序)17
智能温度测量系统的设计
一、前言
温度是一种基本的环境参数,人民的生活与环境的温度息息相关,在工业生产过程中需要实时测量温度,在农业生产中也离不开温度的测量。
因此研究温度的测量方法和装置具有重要意义。
测量温度的关键是温度传感器,温度传感器的发展经历了三个发展阶段:
传统的分立式温度传感器、模拟集成温度传感器、智能集成温度传感器。
目前,国际上新型温度传感器正从模拟式向数字式,集成化向智能化、网络化的方向飞速发展。
本文所介绍的智能温度测量系统是基于DS18B20型数字式温度传感器,在89C51单片机的控制下,对环境温度进行实时控制的装置。
该系统测量范围宽、测量精确度高,该系统可广泛适用于人民的日常生活和工、农业生产的温度测量。
二、系统组成
智能温度测量系统主要由数字温度计、单片机控制电路、数字式温度显示电路、风扇降温电路、键盘电路、串口通信电路等六部分组成。
系统原理框图如下:
图1智能温度测量系统原理框图
1、设计思路
智能温度测量系统的设计思路:
用数字温度传感器DS18B20采集环境模拟信号,并在其内部进行A/D转换,将转换后的数字信号送AT89C51单片机,AT89C51单片机在程序的控制下,将处理过的数据送到8550,经8550输出后驱动四位数码管显示出环境温度。
当被测温度高于35℃时,单片机P3.2脚发出信号在LED上显示“8888”,表示错误并报警。
2.基本要求
(1)可以对温度进行自由设定,但是必须在0-100摄氏度单位内,设定时可以适时的显示设定的温度值,温度是可以自由设置的,传感器的测量值可以显示在七段发光二极管上。
(2)如果温度不在20-35度之间,则在LED上显示“8888”,表示错误并报警。
(3)能够保持不间断显示温度,显示位数4位,分别为百位,十位,个位和小数位。
3、课程设计目的
通过该课程设计使学生进一步了解和加深智能化仪器设计的一般原则;熟练掌握智能化仪器与装置的软、硬件设计方法;掌握仪器的软件调试及软硬件联合统调方法与技能。
掌握仪器的接口技术;熟练掌握仪表总线的工作原理、设计步骤、编程及调试;掌握VB(或VC)设计软件的编程与调试方法。
智能温度测量系统原理图如图2所示,
图2智能温度测量系统原理图
三、硬件电路组成及工作原理
1、温度传感器功能模块
美国DALLAS公司生产的数字化温度传感器DS1820是世界上第一片支持“一线总线”接口的温度传感器,使用户可轻松地组建温度传感器检测网络,为检测系统的构建引入全新的概念。
DS1820特点如下:
(1)DS1820在与微处理器连接时仅需要一条传输线即可实现两者之间的双向通讯。
(2)DS1820支持多点组网络功能,多个DS1820可以并联在唯一的三线上,实现组网多点测量。
(3)DS1820在使用中不需要任何外围元件,其传感元件及A/D转换电路都集成在一只形如三极管的芯片内。
(4)工作电压+3~+5.5V,温度测量范围为-55℃~+125℃,在-10°C~+85℃时,精度为±0.5°C;
(5)DS1820可把温度信号直接转换成串行数字信号供单片机处理,测量结果以9~12位数字量方式串行传送。
由于每片DS1820含有唯一的串行序列号,所以在一条总线上可挂接任意多个DS1820芯片。
从DS1820读出的信息或写入DS1820的信息,仅需要一根传输线(单总线接口)。
读写及温度变换功率来源于数据总线,总线本身也可以向所挂接的DS1820供电,而无需额外电源。
DS1820提供九位温度读数,构成多点温度检测系统而无需任何外围硬件。
图3DS1820的内部框图
图3所示为DS1820的内部框图,它主要包括寄生电源、温度传感器、64位激光ROM单线接口、存放中间数据的高速暂存器(内含便笺式RAM),用于存储用户设定的温度上下限值的TH和TL解发器存储与控制逻辑、8位循环冗余校验码(CRC)发生器等七部分。
图4是DS1820温度传感器的封装图与引脚接线方式
,DS1820引脚及功能及指标如下:
GND:
地; VDD:
电源电压
I/O:
数据输入/输出脚(单线接口,可作寄生供电)
图4DS1820封装图与接线方式
(6)DS18B20控制方法
在硬件上,DS18B20与单片机的连接有两种方法,一种是Vcc接外部电源,GND接地,I/O与单片机的I/O线相连;另一种是用寄生电源供电,此时UDD、GND接地,I/O接单片机I/O。
无论是内部寄生电源还是外部供电,I/O口线要接5KΩ左右的上拉电阻。
CPU对DS18B20的访问流程是:
先对DS18B20初始化,再进行ROM操作命令,最后才能对存储器操作,数据操作。
DS18B20每一步操作都要遵循严格的工作时序和通信协议。
如主机控制DS18B20完成温度转换这一过程,根据DS18B20的通讯协议,须经三个步骤:
每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。
程图所示的步骤它分三步完成:
①系统通过反复操作,搜索DS1820序列号;②启动所有在线DS1820做温度A/D变换;③逐个读出在线DS1820变换后的温度数据。
2、AT89C51单片机
AT89C51是一种4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。
1).主要特性:
·与MCS-51兼容
·4K字节可编程闪烁存储器
寿命:
1000写/擦循环
数据保留时间:
10年
·全静态工作:
0Hz-24Hz
·三级程序存储器锁定
·128*8位内部RAM
·32可编程I/O线
·两个16位定时器/计数器
·5个中断源
·可编程串行通道
·低功耗的闲置和掉电模式
·片内振荡器和时钟电路
2).管脚说明:
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
3).振荡器特性:
XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。
在闲置模式下,CPU停止工作。
但RAM,定时器,计数器,串口和中断系统仍在工作。
在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止
3、PNP型三极管8550
8550三极管引脚图
三极管示图
三极管8550是一种常用的普通三极管。
它是一种低电压,大电流,小信号的PNP型硅三极管。
8550三极管(TO-92封装)管脚图
1、发射极2、基极3、集电极
4、晶振电路
AT89C51单片机芯片内部设有一个反向放大器所构成的振荡器,X1和X2分别为振荡电路的输入端和输出端,时钟信号由外部或内部产生,在X1和X2引脚上外接定时元器件,内部振荡电路就会产生自激振荡。
本系统采用的定时元器件为石英晶体和电容组成的并联谐振回路。
晶体振荡频率为12MHz,C1、C2的值为33pF电容的大小可起频率微调的作用。
图7晶振电路
5、复位电路
单片机具有多种复位电路,本系统采用电平式开关复位与上电复位方式,具体电路如图8所示。
当上电时,C3相当于短路,给RST端输入大于24个振荡周期以上的高电平脉冲,使单片机复位,在正常工作时,按下开关使单片机复位。
图8复位电路
6、键盘电路
本系统三个独立键盘来搭建键盘电路。
第一个键用来转换自然风;第二个键用来关断风扇;第三个键用作定时开关。
键盘电路采用软件延时去抖动。
图9键盘电路
7、显示电路
显示电路采用4位的LD-5461AS显示数码管,共阴极接法,前三位显示当前采样到的温度,后一位为单位,显示的温度范围为20~35℃。
图11显示电路
四、系统仿真与实物连接
1.系统仿真
2.实物连接,下图为用面包板连接的实物图
五、整体电路图
六.心得体会
在完成这个设计之后,我也有一定的思考,重新将自己的设计细细看了几遍,同时也把做同样设计的几个同学的设计借来观摩了一番。
在进行对比和分析之后,又有很多所得。
一开始进行设计的时候,我基本上都是参照书本或者网上的例子进行,甚至就是按照它的步骤再做一遍。
当然在初学阶段这未必不可以,这样做可以让我熟悉软件的操作环境,了解设计方法和步骤,更加深刻理解基本概念。
但是等到自己设计的时候,我觉得就应该抛开例子,完全按照自己的思路独立进行,这样可能会在设计中碰到更多的问题,但是这样也能让我学到更多,而且在解决遇到的问题时会更加引发自己的思考,说不上创新,但可能会有新意产生,也就是自己的东西了。
在这方面我做的也不是很好,所以设计之后再回想一下,里面自己的东西很少,这也是以后需要改进的地方。
这一点我想在任何一门课程的学习,在今后任何一行工作都是很重要的。
如果没有探索性,我们只会走着前人走过的路,踩着前人踏过的脚印。
在这这个设计过程中,探索性主要可以体现在下面几个方面。
一个是绘图所用的软件,很多人推荐我们使用protel、protues等软件,因为这几个软件有它们很大的优势,在学习使用过程中我也深有体会。
但是我们同样可以自己摸索,用其他差不多或者更好的软件。
七、参考文献
[1]《单片机原理及接口技术》修订本北京交通大学出版社清华大学出版社梅丽凤王艳秋汪毓铎张军编著
[2]《智能仪器设计基础》哈尔滨工业大学出版社赵新民王祁编著
[3]《微型计算机原理与接口技术》河南科学技术出版社张五一张道光编著
[4]C#基础与实例教程中国电力出版社郝春强
[5]网络资料
周立功单片机
http:
//c-关于51全系列单片机资料
[6]微型计算机接口技术.王兆月等编著.机械工业出版社.2006
[7]数字电子技术.江晓安等编著.西安电子科技大学出版社.1999
[8]ME300B说明书.伟纳电子编著.伟纳电子出版.2006
七、附录(源程序)
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitDQ=P1^2;
sbitwei1=P2^0;
sbitwei2=P2^1;
sbitwei3=P2^2;
sbitwei4=P2^3;
sbitbeep=P1^7;
uchartemp;
unsignedcharcodetable[]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,0x80,
0x90,0x88,0x83,0xc6,
0xa1,0x86,0x8e,0x7f};
ucharsd=36;
voiddelay1(uintcount)
{
uinti;
while(count)
{
i=200;
while(i>0)
i--;
count--;
}
}
voiddelay(uinti)
{
while(i--);
}
//初始化函数
voidInit_DS18B20()
{
unsignedcharx=0;
DQ=1;//DQ复位
delay(8);//稍做延时
DQ=0;//单片机将DQ拉低
delay(80);//精确延时大于480us
DQ=1;//拉高总线
delay(14);
x=DQ;//稍做延时后如果x=0则初始化成功x=1则初始化失败
delay(20);
}
//读一个字节
UcharReadOneChar()
{
uchari=0;
uchardat=0;
for(i=8;i>0;i--){
DQ=0;//给脉冲信号
dat>>=1;
DQ=1;//给脉冲信号
if(DQ)dat|=0x80;
delay(4);
}
return(dat);
}
//写一个字节
voidWriteOneChar(unsignedchardat)
{
uchari=0;
for(i=8;i>0;i--){
DQ=0;
DQ=dat&0x01;
delay(5);
DQ=1;
dat>>=1;
}
}
uintReadTemperature()
{
uchara=0;
ucharb=0;
uintt=0;
floattt=0;
Init_DS18B20();
WriteOneChar(0xCC);//跳过读序号列号的操作
WriteOneChar(0x44);//启动温度转换
Init_DS18B20();
WriteOneChar(0xCC);//跳过读序号列号的操作
WriteOneChar(0xBE);//读取温度寄存器等(共可读9个寄存器)前两个就是温度
a=ReadOneChar();
b=ReadOneChar();
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;//将温度的高位与低位合并
t=tt*10+0.5;//对结果进行4舍5入
return(t);
}
voiddisplay()//显示程序
{
uinttemp;
uchartempp;
temp=ReadTemperature();
tempp=(temp/100)*10+(temp%100/10);
if(sd<=tempp)
{P1=0x00;
beep=0;
}
else
{
P1=0xaa;
beep=1;
}
wei1=0;
wei2=0;
wei3=0;
wei4=0;
P0=table[temp/1000];//显示千位
wei4=1;
delay1(3);
wei4=0;
P0=table[temp/100];//显示百位
wei3=1;
delay1(3);
wei3=0;
P0=table[temp%100/10];//显示十位
wei2=1;
delay1(3);
wei2=0;
P0=table[temp%10];//显示个位
wei1=1;
delay1(3);
wei1=0;
}
voidmain()
{
//init();
Init_DS18B20();
while
(1)
{
temp=ReadTemperature();
display();
//if(temp<=20&&temp>=30)
//beep=1;
}
}