数字温度计课程设计报告
数字温度计课程设计报告本文简介:《基于1-wrie串行总线应用系统的设计》课程设计报告专业:电子科学与技术班级:0902姓名:xxx指导教师:xxxxx二0一二年十月十八日目录一、设计任务…………………………………………………………………………31.1设计题目及要求……………………………………………………………………31.2设计思
数字温度计课程设计报告本文内容:
《基于1-wrie串行总线应用系统的设计》
课程设计报告
专
业:
电子科学与技术
班
级:
0902
姓
名:
xxx
指导教师:
xxxxx
二0一二年
十
月
十八
日
目录
一、设计任务…………………………………………………………………………3
1.1设计题目及要求……………………………………………………………………3
1.2
设计思路……………………………………………………………………………3
二、设计方案…………………………………………………………………………4
2.1
单片的选择…………………………………………………………………………4
2.2
温度传感器的选择…………………………………………………………………4
2.3
显示器的选择………………………………………………………………………5
2.4
设计方案……………………………………………………………………………5
三、电路设计…………………………………………………………………………5
3.1
AT89S51单片机的特殊功能部件…………………………………………………5
3.2
DS18B20的工作原理………………………………………………………………6
3.3
硬件电路设计及其分析……………………………………………………………7
3.4
DS18B20测温流程及软件设计……………………………………………………10
四、心得体会…………………………………………………………………………19
五、参考书目…………………………………………………………………………19
第一部分
设计任务
1.1设计题目及要求
设计制作一个DS18B20温度计。
1.利用单总线完成对DS18B20的初始化操作。
2.利用4位数码显示实时环境温度
3.增加2个按键,分别用于实现启动测温和关闭(停止)测温功能。
4.硬件方面需要9V转5V稳压电路。
1.2
设计思路
温度计电路设计总体设计方框图如图1所示,控制器采用单片机AT89S51,温度传感器采用DS18B20,用2位LED数码管传送数据实现温度显示。
主
控
制
器
LED显
示
温
度
传
感
器
单片机复位
时钟振荡
报警点按键调整整
图1
总体设计方框图
第二部分
设计方案
2.1单片机的选择
采用AT89S51单片机。中央微处理器
AT89S51:
AT89S51是一个低功耗,高性能CMOS
8位单片机,片内含4k
Bytes
ISP(In-system
programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80S51引脚结构,芯片内集成了通用8位中央处理器和ISP
Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。AT89S51具有如下特点:40个引脚,4k
Bytes
Flash片内程序存储器,128
bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
2.2温度传感器的选择
采用数字单片智能温度传感器DS18B20。
DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式;温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出,其工作电源既可在远端引入,也可采用寄生电源方式产生;多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。DS18B20支持“一线总线”接口,测量温度范围为
-55℃~+125℃,在-10℃~+85℃范围内,精度为0.5℃。DS18B20的精度较差为±0.2℃
。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量。如:环境控制、设备或过程控制、测温类消费电子产品等。与前一代产品不同,新的产品支持3V~5.5V的电压范围,使系统设计更灵活、方便。由于DS18B20将温度传感器、信号放大调理、A/D转换、接口全部集成于一芯片,与单片机连接简单、方便,与AD590相比是更新一代的温度传感器,所以温度传感器采用DS18B20。
2.3显示器的选择
采用传统的七段数码LED显示器。
LED数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划“a,b,c,d,e,f,g,dp“的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
2.4设计方案
采用数字温度芯片DS18B20
测量温度,输出信号全数字化。便于单片机处理及控制,省去传统的测温方法的很多外围电路。且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线形较好。在0—100
摄氏度时,最大线形偏差小于1
摄氏度。DS18B20
的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器AT89S51构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。这样,测温系统的结构就比较简单,体积也不大。采用51
单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。既可以单独对多DS18B20控制工作,还可以与PC
机通信上传数据,另外AT89S51
在工业控制上也有着广泛的应用,编程技术及外围功能电路的配合使用都很成熟。
第三部分
电路设计
3.1
AT89S51单片机的特殊功能部件
(1)定时/计数器
AT89S51有两个16位可编程定时/计数器T0和T1,它们分别有两个独立的8位寄存器THx和TLx构成,通过编程设置可以实现4种工作方式。
(2)中断系统
51单片机具备较完善的中断功能,有2个外部中断、2个内部定时器中断和1个串行口中断,可以实现不同的控制要求,并具有两级的优先级。
(3)时钟振荡电路
51内置一个振荡器和时钟电路,用于产生整个单片机运行的脉冲时序,常用频率为6MHZ、11.0592MHZ、12MHZ。振荡器实际上是一个高增益反相器,使用时需外接一个晶振和两个相匹配的电容。
3.2
DS18B20的工作原理
DS18B20的测温原理如图3-1所示,图中低温度系数晶振的振荡频率受温度的影响很小用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量.计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55
℃所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55
℃所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器
1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温图2中的斜率累加器用于补偿和修正测温过程中的非线性其输出用,于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值。
另外,由于DS18B20单线通信功能是分时完成的,他有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作必须按协议进行。操作协议为:初始化DS18B20
(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。
图3-1DS18B20的测温原理
3.3
硬件电路设计及其分析
硬件电路由总控制器电路、DS18B20测温电路、LED动态显示电路组成。
(1)总控制器
总控制器有电源电路、时钟电路、复位电路三部分构成。
时钟电路对单片机系统而言是必需的。由于单片机内部是由各种各样的数字逻辑器件(如触发器寄存器存储器等)构成,这些数字器件的工作必须按时间顺序完成,这种时间顺序就称为时序。时钟电路就是提供单片机内部各种操作的时间基准的电路,没有时钟电路单片机就无法工作。此次设计中,我们采用由由内部方式产生时钟的方法形成时钟电路。
内部方式:在XTAL1和XTAL2端外接石英晶体作定时元件,内部反相放大器自激振荡,产生时钟。时钟发生器对振荡脉冲二分频,即若石英频率fosc=6MHz,则时钟频率=3MHZ,因此,时钟是一个双相信号,由P1相和P2相构成。fosc可在2MHZ—12MHZ选择。小电容可以取30PF左右。
XTAL1和XTAL2为片内振荡电路输入线,这两个端子用来外接石英晶体和微调电容。在石英晶体的两个管脚加交变电场时,它将会产生一定频率的机械变形,而这种械振动又会产生交变电场,上述物理现象称为压电效应。一般情况下,无论是机械振动的振幅,还是交变电场的振幅都非常小。但是,当交变电场的频率为某一特定值时,振幅骤然增大,产生共振,称之为压电振荡。这一特定频率就是石英晶体的固有频率(谐振频率)。即用来连接单片机内OSC的定时反馈回路。石英晶振起振后要能在XTAL2线上输出一个3V左右的正弦波,以便使单片机片内的OSC电路按石英晶振相同频率自激振荡。通常OSC输出时钟频率f为0.5MHz~16MHz,典型值为12MHz或者11.0592MHz。电容C3和C4可以帮助起振,典型值为30pF,调节它们可以达到微调f的目的。时钟电路和单片机的连接如图3-2所示。
图3-2时钟电路与单片机的连接图
复位电路的设计,单片机在开机时都需要复位,以便中央处理CPU以及其他功能部件都处于一个确定的初始状态,并从这个状态开始工作。单片机的复位后是靠外部电路实现的,
在时钟电路工作后,只要在单片机的RST引脚上出现24个时钟振荡脉冲(2个机器周期)以上的高电平,单片机便可实现初始化状态复位。单片机的RST引脚是复位信号的输入端。单片机时钟频率为12MHz,则复位脉冲宽度至少应该为2μs,复位电路如图3-3所示
图3-3单片机复位电路
(2)DS18B20测温电路
DS18B20
最大的特点是单总线数据传输方式,DS18B20
的数据I/O
均由同一条线来完成。DS18B20
的电源供电方式有2
种:
外部供电方式和寄生电源方式。工作于寄生电源方式时,VDD
和GND
均接地,他在需要远程温度探测和空间受限的
场合特别有用,原理是当1
W
ire
总线的信号线DQ
为高电平时,窃取信号能量给DS18B20
供电,同时一部分能量给内部电容充电,当DQ为低电平时释放能量为DS18B20
供电。但寄生电源方式需要强上拉电路,软件控制变得复杂(特别是在完成温度转换和拷贝数据到E2PROM
时),同时芯片的性能也有所降低。因此,在条件允许的场合,尽量采用外供电方式。无论是内部寄生电源还是外部供电,I/O口线要接5KΩ左右的上拉电。在这里采用前者方式供电。DS18B20与芯片连接电路如图。
外部电源供电方式是DS18B20最佳的工作方式,工作稳定可靠,抗干扰能力强,而且电路也比较简单,可以开发出稳定可靠的多点温度监控系统。站长推荐大家在开发中使用外部电源供电方式,毕竟比寄生电源方式只多接一根VCC引线。在外接电源方式下,可以充分发挥DS18B20宽电源电压范围的优点,即使电源电压VCC
降到3V
时,依然能够保证温度量精度。
(3)LED动态显示电路
数码管由8个发光二极管(以下简称字段)构成,通过不同的组合可用来显示数字0
~9、字符A
~
F、H、L、P、R、U、Y、符号“-”及小数点“.”。
采用4位共阳极数码管。共阳极数码管的8个发光二极管的阳极(二极管正端)连接在一起。通常,公共阳极接高电平(一般接电源),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为低电平时,则该端所连接的字段导通并点亮。根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。
将数码管公共极COM接到+5V,段选段接单片机P0口(当单片机P0口高电平输出时,要接上拉电阻以增大驱动能力),位选端加三极管驱动接单片机P2口。数码管与单片机的接口电路如图4-4中所示。
系统总电路图:
3.4
DS18B20测温流程及软件设计
初始化DS18B20
(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据
复位时序:复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待16~60
微秒左右,后发出60~240
微秒的存在低脉冲,主CPU
收到此信号表示成功.
主机发送(Tx)--复位脉冲(最短为480μs
的低电平信号)。接着主机便释放此线并进入接收方式(Rx)。总线经过4.7K的上拉电阻被拉至高电平状态。在检测到I/O
引脚上的上升沿之后,DS18B20
等待15~60μs,并且接着发送脉冲(60~240μs
的低电平信号)。然后以存在复位脉冲表示DS18B20
已经准备好发送或接收,然后给出正确的ROM
命令和存储操作命令的数据。DS18B20
通过使用时间片来读出和写入数据,时间片用于处理数据位和进行何种指定操作的命令。它有写时间片和读时间片两种:
写时间片:当主机把数据线从逻辑高电平拉至逻辑低电平时,产生写时间片。有两种类型的写时间片:写1
时间片和写0
时间片。所有时间片必须有60
微秒的持续期,在各写周期之间必须有最短为1微秒的恢复时间.
读时间片:从DS18B20
读数据时,使用读时间片。当主机把数据线从逻辑高电平拉至逻辑低电平时产生读时间片。数据线在逻辑低电平必须保持至少1
微秒;来自DS18B20
的输出数据在时间下降沿之后的15
微秒内有效。为了读出从读时间片开始算起15微秒的状态,主机必须停止把引脚驱动拉至低电平。在时间片结束时,I/O
引脚经过外部的上拉电阻拉回高电平,所有读时间片的最短持续期为60
微秒,包括两个读周期间至少1μs
的恢复时间。
一旦主机检测到DS18B20
的存在,它便可以发送一个器件ROM
操作命令。所有ROM
操作命令均为8位长。
所有的串行通讯,读写每一个bit
位数据都必须严格遵守器件的时序逻辑来编程,同时还必须遵守总线命令序列,对单总线的DS18B20
芯片来说,访问每个器件都要遵守下列命令序列:首先是初始化;其次执行ROM
命令;最后就是执行功能命令(ROM
命令和功能命令后面以表格形式给出)。如果出现序列混乱,则单总线器件不会响应主机。当然,搜索ROM命令和报警搜索命令,在执行两者中任何一条命令之后,要返回初始化。
基于单总线上的所有传输过程都是以初始化开始的,初始化过程由主机发出的复位脉冲和从机响应的应答脉冲组成。应答脉冲使主机知道,总线上有从机,且准备就绪。
在主机检测到应答脉冲后,就可以发出ROM
命令。这些命令与各个从机设备的唯一***
位ROM
代码相关。在主机发出ROM命令,以访问某个指定的DS18B20,接着就可以发出DS18B20支持的某个功能命令。这些命令允许主机写入或读出DS18B20便笺式RAM、启动温度转换。主机首先发出一个复位脉冲,信号线上的DS18B20
器件被复位。接着主机发送ROM命令,程序开始读取单个在线的芯片ROM编码并保存在单片机数据存储器中,把用到的DS18B20
的ROM
编码离线读出,最后用一个二维数组保存ROM
编码。
系统工作时,把读取了编码的DS18B20
挂在总线上。发温度转换命令,再总线复位。
然后就可以从刚才的二维数组匹配在线的温度传感器,随后发温度读取命令就可以获得对应的度值了。
在主机初始化过程,主机通过拉低单总线至少480us,来产生复位脉冲。接着,主机释放总线,并进入接收模式。当总线被释放后,上拉电阻将单总线拉高。在单总线器件检测到上升沿后,延时15~60us,接着通过拉低总线60~240us,以产生应答脉冲。
写时序均起始于主机拉低总线,产生写1
时序的方式:主机在拉低总线后,接着必须在15us之内释放总线。产生写0
时序的方式:在主机拉低总线后,只需在整个时序期间保持低电平即可(至少60us)。在写字节程序中的写一个bit
位的时候,没有按照通常的分别写0时序和写1
时序,而是把两者结合起来,当主机拉低总线后在15us
之内将要写的位c
给DO:如果c
是高电平满足15us
内释放总线的要求,如果c是低电平,则DO=c这条语句仍然是把总线拉在低电平,最后都通过延时58us
完成一个写时序(写时序0或写时序1)过程。
写时间时序:当主机把数据从逻辑高电平拉到逻辑低电平的时候,写时间隙开始。有两种写时间隙,写1
时间隙和写0
时间隙。所有写时间隙必须最少持续60μs,包括两个写周期至少1μs
的恢复时间。I/O线电平变低后,DS18B20
在一个15μs
到60μs
的窗口内对I/O
线采样。如果线上事高电平,就是写1,如果是低电平,就是写0。主机要生成一个写时间隙,必须把数据线拉到低电平然后释放,在写时间隙开始后的15μs
内允许数据线拉到高电平。主机要生成一个写0
时间隙,必须把数据线拉到低电平并保存60μs。每个读时隙都由主机发起,至少拉低总线1us,在主机发起读时序之后,单总线器件才开始在总线上发送0
或1。所有读时序至少需要60us。
读时间时序:当从DS18B20
读数据时,主机生成读时间隙。当主机把数据从高电平拉到低电平时,写时间隙开始,数据线必须保持至少1μs;从DS18B20输出的数据在读时间隙的下降沿出现后15μs
内有效。
因此,主机在读时间隙开始后必须把I/O
脚驱动拉为的电平保持15μs,以读取I/O
脚状态。、在读时间隙的结尾,I/O
引脚将被外部上拉电阻拉到高电平。所有读时间隙必须最少60μs,包括两个读周期至少1μs的恢复时间。
图3-6读DS18B20流程图
图3-7写DS18B20流程图
系统总程序设计:
(1)数字温度计工作主要分为温度采集、温度转化、数据处理、显示这几部分。单片机对与DS18B20主要完成对温度的检测和补偿,通过AT89S51单片机对DS18B20芯片的控制和数据传输,查询当前的DS18B20温度采集和转换是否完成是关键,并且完成对转换后的数据的读取。
(2)系统总程序
#include
#define
uchar
unsigned
char
#define
uint
unsigned
int
uchar
code
table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,//0~9
0x40,0x89,0x24,0x30,0x19,0x12,0x02,0x88,0x00,0x10,//10~19
0xbf,//20符号-
0xff,//不显示};
//ds18b20与单片机连接口
***it
DQ=P3^2;
uchar
data
disdata[5];//存放温度值
uint
tvalue;//温度值
uchar
tflag;//温度正负标志
/*************************显示程序**************************/
void
delay(uint
k)//延时1毫秒(不够精确的)
{unsigned
int
i,j;
for(i=0;i>=1;//下一位数码管
if(i==3)
break;
}
}
/******************************ds1820程序***************************************/
void
delay_18B20(uint
i)//延时1微秒
{
while(i--);
}
/*ds1820复位*/
void
ds1820rst()
{
DQ
=
1;
//DQ复位
delay_18B20(4);
//延时
DQ
=
0;
//DQ拉低
delay_18B20(100);
//精确延时大于480us
DQ
=
1;
//拉高
delay_18B20(40);
}
/*从ds18b20中读数据*/
uchar
ds1820rd()
{
uchar
i=0;
uchar
dat=0;
for(i=8;i>0;i--)
{
DQ
=
0;
//给脉冲信号
dat>>=1;
DQ
=
1;
//给脉冲信号
if(DQ)
dat|=0x80;
delay_18B20(10);
}
return(dat);
}
/*向ds18b20中写数据*/
void
ds1820wr(uchar
wdata)
{
uchar
i=0;
for
(i=8;i>0;i--)
{
DQ=0;
DQ=wdata
delay_18B20(10);
DQ=1;
wdata>>=1;
}
}
/*读取温度值并转换*/
void
read_temp()
{
uchar
a,b;
ds1820rst();
ds1820wr(0xcc);//*跳过读序列号*/
ds1820wr(0x44);//*启动温度转换*/
ds1820rst();
ds1820wr(0xcc);//*跳过读序列号*/
ds1820wr(0xbe);//*读取温度*/
a=ds1820rd();
b=ds1820rd();
tvalue=b;
tvalue<<=8;
tvalue=tvalue|a;
if(tvalue<0x0fff)
tflag=0;
else
{
tvalue=~tvalue+1;
tflag=1;
}
tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数
}
/********************主程序***********************************/
void
main()
{
//初始化显示
while(1)
{
read_temp();//读取温度
weixuan();
display
(ucharlp,uchar
lc)
;
}
}
第四部分
心得体会
在本次课程设计中,不仅自己付出了很多心血,也得到了很多老师和同学的支持,为我创造了很多有利条件,在这里,我要特别感谢我的指导老师,在课程设计的开始,老师给了我很多帮助,指导我了解了很多单片机的相关知识,并在当我设计遇到困难时,及时的给予帮助和鼓励。同时,我还要感谢实习组及实验室的所有老师,为我的课程设计提供了非常便利的条件。最后还要感谢帮助我的同学,在我遇到困难时给予我耐心的帮助。再次对在本次课程设计中给予过我帮助的老师和同学至上我最真挚的谢意。
参考文献
(1)贾立新,《电子系统设计与实践》清华大学出版社,2011
(4)唐颖,《单片机原理与应用及C51程序设计》北京大学出版社,2011
(5)王福瑞,《单片机测控系统设计大全》航空航天大学出版社,1998
(6)张萍,基于数字温度计DS18B20
的温度测量仪的开发.
19