基于ds18b20的数字温度计设计.docx
- 文档编号:11464876
- 上传时间:2023-03-01
- 格式:DOCX
- 页数:17
- 大小:445.05KB
基于ds18b20的数字温度计设计.docx
《基于ds18b20的数字温度计设计.docx》由会员分享,可在线阅读,更多相关《基于ds18b20的数字温度计设计.docx(17页珍藏版)》请在冰豆网上搜索。
基于ds18b20的数字温度计设计
潍坊学院
微机接口技术与应用课程设计说明书
题目:
基于DS18B20的数字温度计设计
系部:
信息与控制工程学院
专业:
电子信息工程
班级:
二
学生姓名:
李祥学号:
***********
********
2007年12月24日
1设计任务与要求
1.1设计任务
利用学习过的《单片机与接口技术》课程的内容和其他相关课程的内容,基于DS18B20设计数字式温度计。
1.2设计要求
(a)以MCS-51系列单片机为核心器件,组成一个数字式温度计。
(b)采用数字式温度计传感器为检测器件,进行单点温度检测,检测精度为±0.5°C。
(c)温度显示采用3位LED数码管显示,两位整数,一位小数。
(d)具有键盘输入上、下限功能,超过上、下限温度时,进行声音报警。
(e)利用8279作为显示驱动器
2设计方案
2.1数字温度计设计方案论证
2.1.1方案一
由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。
2.1.2方案二
进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。
从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。
2.2方案二的总体设计框图
温度计电路设计总体设计方框图如图1所示,控制器采用单片机AT89S51,温度传感器采用DS18B20,用3位LED数码管以串口传送数据实现温度显示。
图1总体设计方框图
3硬件设计
该电路的核心器件是单片机和单线数字温度传感器,单线器件和单片机的接口只需一根信号线,所以该电路十分简单。
3.1主要器件
3.1.1DS18B20产品的特点:
(a)、只要求一个端口即可实现通信。
(b)、在DS18B20中的每个器件上都有独一无二的序列号。
(c)、实际应用中不需要外部任何元器件即可实现测温。
(d)、测量温度范围在-55。
C到+125。
C之间。
(e)、数字温度计的分辨率用户可以从9位到12位选择。
(f)、内部有温度上、下限告警设置。
3.1.2温度传感器DS18B20引脚分布图及介绍:
图2DS18B20引脚分布图
TO-92封装的DS18B20的引脚排列见下图,其引脚功能描述见下表
表1DS18B20详细引脚功能描述
序号
名称
引脚功能描述
1、2、6、7、8
NC
空引脚,悬空不使用
5
GND
地信号
4
DQ
数据输入/输出引脚。
开漏单总线接口引脚。
当被用着在寄生电源下,也可以向器件提供电源。
3
VDD
可选择的VDD引脚。
当工作于寄生电源时,此引脚必须接地。
3.1.3DS18B20的使用方法
由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。
由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。
DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。
该协议定义了几种信号的时序:
初始化时序、读时序、写时序。
所有时序都是将主机作为主设备,单总线器件作为从设备。
而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。
数据和命令的传输都是低位在先。
3.1.4DS18B20的时序和存储器结构图
(a)、DS18B20的复位时序
图3DS18B20的复位时序图
(b)、DS18B20的读时序
对于DS18B20的读时序分为读0时序和读1时序两个过程。
对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。
DS18B20在完成一个读时序过程,至少需要60us才能完成。
图4DS18B20的读时序图
(c)、DS18B20的写时序
对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。
对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。
图5DS18B20的写时序图
(d)、DS18B20存储器结构图
图6DS18B20存储器结构图
3.1.5DS18B20字节定义及温度值分辨率配置
图7DS18B20字节定义
温度值分辨率配置表如下:
表2DS18B20温度转换时间表
表3一部分温度对应值表
3.2电路原理图及说明
图8电路原理图
图中U1为单片机AT89C52,它的P0和P2口和数码管电路连接(图略),以控制温度的数字显示。
P3.7和DS18B20的引脚DQ连接,作为单一数据线。
单片机的工作时钟频率为11.0592MHz,这决定了指令运行时间,在软件设计中将根据此时间编写各种延时程序。
U2即为温度传感器芯片DS18B20,只使用了一个单线器件。
R2为单线DQ的上拉电阻。
本图采用外部供电的方式,温测电缆采用屏蔽4芯双绞线,其中一对接地线与信号线,另一对接VCC和地线,屏蔽层在源端单点接地。
4软件设计
4.1温度流程图
图9温度流程图
4.2单片机实现温度转换读取温度数值程序流程图
图10单片机实现温度转换读取温度数值程序流程图
4.3主程序代码及其说明如下
uchartplsb,tpmsb;//温度值低位、高位字节
sbitDQ=P3^5;//数据通信线
/*延时t毫秒*/
voiddelay(uintt)
{
uinti;
while(t--)
{
/*对于11.0592M时钟,约延时1ms*/
for(i=0;i<125;i++)
{}
}
}
/*产生复位脉冲初始化DS18B20*/
voidTxReset(void)
{
uinti;
DQ=0;
/*拉低约900us*/
i=100;
while(i>0)i--;
DQ=1;//产生上升沿
i=4;
while(i>0)i--;
}
/*等待应答脉冲*/
voidRxWait(void)
{
uinti;
while(DQ);
while(~DQ);//检测到应答脉冲
i=4;
while(i>0)i--;
}
/*读取数据的一位,满足读时隙要求*/
bitRdBit(void)
{
uinti;
bitb;
DQ=0;
i++;
DQ=1;
i++;i++;//延时15us以上,读时隙下降沿后15us,DS18B20输出数据才有效
b=DQ;
i=8;
while(i>0)i--;
return(b);
}
/*读取数据的一个字节*/
ucharRdByte(void)
{
uchari,j,b;
b=0;
for(i=1;i<=8;i++)
{
j=RdBit();
b=(j<<7)|(b>>1);
}
return(b);
}
/*写数据的一个字节,满足写1和写0的时隙要求*/
voidWrByte(ucharb)
{
uinti;
ucharj;
bitbtmp;
for(j=1;j<=8;j++)
{
btmp=b&0x01;
b=b>>1;//取下一位(由低位向高位)
if(btmp)
{
/*写1*/
DQ=0;
i++;i++;//延时,使得15us以内拉高
DQ=1;
i=8;
while(i>0)i--;//整个写1时隙不低于60us
}
else
{
/*写0*/
DQ=0;
i=8;
while(i>0)i--;//保持低在60us到120us之间
DQ=1;
i++;
i++;
}
}
}
/*启动温度转换*/
voidconvert(void)
{
TxReset();//产生复位脉冲,初始化DS18B20
RxWait();//等待DS18B20给出应答脉冲
delay
(1);//延时
WrByte(0xcc);//skiprom命令
WrByte(0x44);//convertT命令
}
/*读取温度值*/
voidRdTemp(void)
{
TxReset();//产生复位脉冲,初始化DS18B20
RxWait();//等待DS18B20给出应答脉冲
delay
(1);//延时
WrByte(0xcc);//skiprom命令
WrByte(0xbe);//readscratchpad命令
tplsb=RdByte();//温度值低位字节(其中低4位为二进制的“小数”部分)
tpmsb=RdByte();//高位值高位字节(其中高5位为符号位)
}
/*主程序,读取的温度值最终存放在tplsb和tpmsb变量中。
tplsb其中低4位为二进制的“小数”部分;tpmsb其中高
5位为符号位。
真正通过数码管输出时,需要进行到十进
制有符号实数(包括小数部分)的转换。
*/
voidmain(void)
{
do
{
delay
(1);//延时1ms
convert();//启动温度转换,需要750ms
delay(1000);//延时1s
RdTemp();//读取温度
}
while
(1);
}
5调试过程
(1)当操作者按下或松开按键时,按键会产生机械抖动。
这种抖动发生在按下或松开的瞬间,一般持续几到几十毫秒,抖动时间随按键的结构不同而不同。
在扫描键盘过程中,必须想办法消除按键抖动,否则会引起错误。
(2)在键盘扫描中,应当防止一次键而有多个对应键输入的情况。
这种情况的发生是由与键扫描速度和键处理速度较快,当按下的键还未松开时,键扫描程序和键处理程序已执行了多遍。
这样,由于程序执行和按键动作不同步而造成按一次键有多个值输入的错误状态。
为避免发生这种情况,必须保证按一次键,CPU只对该键作一次处理。
为此,在扫描程序中不仅要检测是否有按键按下,在有键按下的情况,作一次键处理,而且在键处理完毕后,还应检测按下的键是否松开,只有当按下的键松开以后,程序才往下执行。
这样每按一个键,只作一个键处理,使两者达到同步,消除按一次按键有多次键值输入的错误情况。
6小结
经过将二周的单片机课程设计,终于完成了我的数字温度计的设计,虽然没有完全达到设计要求,但从心底里说,还是高兴的,毕竟这次设计把实物都做了出来,高兴之余不得不深思呀!
6.1实验过程中遇到的问题及解决方法
(a)电路板测试
测试电路板各触点是否接通。
(b)七段显示器与七段译码器的测量
把显示器与CD4511相连,第一次接时,数码管完全没有显示数字,检查后发现是数码管未接地而造成的,接地后发现还是无法正确显示数字,用万用表检测后,发现是因芯片引脚有些接触不良而造成的,所以确认芯片是否接触良好是非常重要的一件事。
6.2设计体会
通过这次对数字温度计的设计与制作,让我了解了设计电路的程序,也让我了解了关于数字温度计的原理与设计理念,要设计一个电路总要先用仿真仿真成功之后才实际接线的。
但是最后的成品却不一定与仿真时完全一样,因为,再实际接线中有着各种各样的条件制约着。
而且,在仿真中无法成功的电路接法,在实际中因为芯片本身的特性而能够成功。
所以,在设计时应考虑两者的差异,从中找出最适合的设计方法。
通过这次学习,让我对各种电路都有了大概的了解,所以说,坐而言不如立而行,对于这些电路还是应该自己动手实际操作才会有深刻理解。
从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。
我希望老师在我们动手制作之前应先告诉我们一些关于所做电路的资料、原理,以及如何检测电路的方法,还有关于检测芯片的方法。
这样会有助于我们进一步的进入状况,完成设计.
7参考资料
[1] 李朝青单片机原理及接口技术(简明修订版)杭州:
北京航空航天
大学出版社,1998
[2] 李广弟单片机基础[M].北京:
北京航空航天大学出版社,1994
[3] 徐新艳单片机原理、应用与实践高等教育出版社,2005
[4]谢维成,杨加国单片机原理与应用及C51程序设计清华大学出版社,2006
[5]阎石数字电子技术基础(第三版)北京:
高等教育出版社,1989
[6]周坚单片机C语言轻松入门北京:
航空航天大学出版社2006
[7]杜树春单片机C语言和汇编语言混合编程实例详解北京:
航空航天大学出版社2006
[8]胡辉单片机原理及应用设计中国水利水电出版社2005.07
[9]求是科技单片机典型外围器件及应用实例人民邮电出版社2006.08
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 ds18b20 数字 温度计 设计