STM32制作DS18B20 温度传感器解析

STM32制作DS18B20 温度传感器解析
STM32制作DS18B20 温度传感器解析

折腾了一晚上,才把DS18B20的驱动移植到STM32上来。以前在51上使用过单个和多个连接的DS18B20,有现成的程序了,以为很快就能弄好,结果还是被卡住了,下面说下几个关键点吧:

首先是延时的问题,STM32上若用软件延时的话不太好算时间,所以要么用定时器要么用SysTick这个定时器来完成延时的计算。相比之下用SysTick来的简单方便点。

接着是STM32 IO脚的配置问题,因为51是双向的IO,所以作为输入输出都比较方便。STM32的IO是准双向的IO,网上查了下资料,说将STM32的IO配置成开漏输出,然后外接上拉即可实现双向IO。于是我也按规定做了,但调了老半天都不成功,是因为DS18B20没有响应的信号。在烦躁之际只有试下将接DQ的IO分别拉低和拉高看能不能读入正确的信号。结果果然是读入数据不对,原来我将IO配成开漏输出后相当然的以为读数据是用GPIO_ReadOutputDataBit(),这正是问题所在,后来将读入的函数改为GPIO_ReadInputDataBit()就OK 了。现在温度是现实出来了,但跟我家里那台德胜收音机上显示的温度相差2度,都不知道是哪个准了,改天再找个温度计验证下。

下面引用一段DS18B20的时序描述,写的很详细:

DS18B20的控制流程

根据DS18B20的通信协议,DS18B20只能作为从机,而单片机系统作为主机,单片机控制DS18B20完成一次温度转换必须经过3个步骤:复位、发送ROM指令、发送RAM指令。每次对DS18B20的操作都要进行以上三个步骤。

复位过程为:单片机将数据线拉低至少480uS,然后释放数据线,等待15-60uS让DS18B20接收信号,DS18B20接收到信号后,会把数据线拉低60-240uS,主机检测到数据线被拉低后标识复位成功;

发送ROM指令:ROM指令表示主机对系统上所接的全部

DS18B20进行寻址,以确定对那一个DS18B20进行操作,或者是读取某个DS18B20的ROM序列号。

发送RAM指令:RAM指令用于单片机对DS18B20内部RAM进行操作,如读取寄存器的值,或者设置寄存器的值。

具体的RAM和RAM指令请查阅DS18B20的数据手册。下面简单介绍:

1、ROM操作命令:DS18B20采用一线通信接口。因为一线通信接口,必须在先完成ROM设定,否则记忆和控制功能将无法使用。一旦总线检测到从属器件的存在,它便可以发出器件ROM操作指令,所有ROM操作指令均为8位长度,主要提供以下功能命令:

1 )读ROM(指令码0X33H):当总线上只有一个节点(器件)时,读此节点的64位序列号。如果总线上存在多于一个的节点,则此指令不能使用。

2 )ROM匹配(指令码0X55H):此命令后跟64位的ROM序列号,总线上只有与此序列号相同的DS18B20才会做出反应;该指令用于选中某个DS18B20,然后对该DS18B20进行读写操作。

3 )搜索ROM(指令码0XF0H):用于确定接在总线上DS18B20的个数和识别所有的64位ROM序列号。当系统开始工作,总线主机可能不知道总线上的器件个数或者不知道其64位ROM序列号,搜索命令用于识别所有连接于总线上的64位ROM序列号。

4 )跳过ROM(指令码0XCCH):此指令只适合于总线上只有一个节点;该命令通过允许总线主机不提供64位ROM序列号而直接访问RAM,以节省操作时间。

5 )报警检查(指令码0XECH):此指令与搜索ROM指令基本相同,差别在于只有温度超过设定的上限或者下限值的DS18B20才会作出响应。只要DS18B20一上电,告警条件就保持在设置状态,直到另一次温度测量显示出非告警值,或者改变TH或TL的设置使得测量值再一次位于允许的范围之内。储存在EEPROM内的触发器用于告警。

2、RAM指令

DS18B20有六条RAM命令:

1)温度转换(指令码0X44H):启动DS18B20进行温度转换,结果存入内部RAM。

2)读暂存器(指令码0XBEH):读暂存器9个字节内容,此指令从RAM 的第1个字节(字节0)开始读取,直到九个字节(字节8,CRC值)被读出为止。如果不需要读出所有字节的内容,那么主机可以在任何时候发出复位信号以中止读操作。

3)写暂存器(指令码0X4EH):将上下限温度报警值和配置数据写入到RAM的2、3、4字节,此命令后跟需要些入到这三个字节的数据。

4)复制暂存器(指令码0X48H):把暂存器的2、3、4字节复制到EEPROM 中,用以掉电保存。

5)重新调E2RAM(指令码0XB8H):把EEROM中的温度上下限及配置字节恢复到RAM的2、3、4字节,用以上电后恢复以前保存的报警值及配置字节。

6)读电源供电方式(指令码0XB4H):启动DS18B20发送电源供电方式的信号给主CPU。对于在此命令送至DS18B20后所发出的第一次读出数据的时间片,器件都会给出其电源方式的信号。“0”表示寄生电源供电。“1”表示外部电源供电。

下面是结合实际测试总结出来的DS18B20的操作流程:

1、DS18B20的初始化

(1)先将数据线置高电平“1”。

(2)延时(该时间要求的不是很严格,但是尽可能的短一点)。

(3)数据线拉到低电平“0”。

(4)延时490微秒(该时间的时间范围可以从480到960微秒)。

(5)数据线拉到高电平“1”。

(6)延时等待(如果初始化成功则在15到60毫秒时间之内产生一个由DS18B20所返回的低电平“0”。据该状态可以来确定它的存在,但

是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时控制)。

(7)若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第(5)步的时间算起)最少要480微秒。

(8)将数据线再次拉高到高电平“1”后结束。

2、DS18B20的写操作

(1)数据线先置低电平“0”。

(2)延时确定的时间为2(小于15)微秒。

(3)按从低位到高位的顺序发送字节(一次只发送一位)。

(4)延时时间为62(大于60)微秒。

(5)将数据线拉到高电平,延时2(小于15)微秒。

(6)重复上(1)到(6)的操作直到所有的字节全部发送完为止。

(7)最后将数据线拉高。

3、 DS18B20的读操作

(1)将数据线拉高“1”。

(2)延时2微秒。

(3)将数据线拉低“0”。

(4)延时2(小于15)微秒。

(5)将数据线拉高“1”,同时端口应为输入状态。

(6)延时4(小于15)微秒。

(7)读数据线的状态得到1个状态位,并进行数据处理。

(8)延时62(大于60)微秒。

顺便把程序也贴上来吧,给大家参考下。

使用的方法:

只要调用一次 ds18b20_start() 来初始化DS18B20,然后每次读温度时直接调用 ds18b20_read()就可以了。如

ds18b20_start();

while(1)

{

for(i=1000000;i>0;i--);

val = ds18b20_read();

}

[cpp]view plaincopy

1//========================================================

2

3// DS18B20.C By ligh

4

5//========================================================

6

7#include "STM32Lib//stm32f10x.h"

8#include "DS18B20.h"

9

10

11

12#define EnableINT()

13#define DisableINT()

14

15#define DS_PORT GPIOA

16#define DS_DQIO GPIO_Pin_1

17#define DS_RCC_PORT RCC_APB2Periph_GPIOA

18#define DS_PRECISION 0x7f //精度配置寄存器 1f=9位; 3f=10位; 5f=11位; 7f=12位; 19#define DS_AlarmTH 0x64

20#define DS_AlarmTL 0x8a

21#define DS_CONVERT_TICK 1000

22

23#define ResetDQ() GPIO_ResetBits(DS_PORT,DS_DQIO)

24#define SetDQ() GPIO_SetBits(DS_PORT,DS_DQIO)

25#define GetDQ() GPIO_ReadInputDataBit(DS_PORT,DS_DQIO)

26

27

28static unsigned char

TempX_TAB[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,

0x08,0x09,0x09};

29

30

31void Delay_us(u32 Nus)

32{

33 SysTick->LOAD=Nus*9; //时间加载

34 SysTick->CTRL|=0x01; //开始倒数

35while(!(SysTick->CTRL&(1<<16))); //等待时间到达

36 SysTick->CTRL=0X00000000; //关闭计数器

37 SysTick->VAL=0X00000000; //清空计数器

38}

39

40

41

42unsigned char ResetDS18B20(void)

43{

44 unsigned char resport;

45 SetDQ();

46 Delay_us(50);

47

48 ResetDQ();

49 Delay_us(500); //500us (该时间的时间范围可以从480到960微秒)

50 SetDQ();

51 Delay_us(40); //40us

52 //resport = GetDQ();

53while(GetDQ());

54 Delay_us(500); //500us

55 SetDQ();

56return resport;

57}

58

59void DS18B20WriteByte(unsigned char Dat)

60{

61 unsigned char i;

62for(i=8;i>0;i--)

63 {

64 ResetDQ(); //在15u内送数到数据线上,DS18B20在15-60u读数

65 Delay_us(5); //5us

66if(Dat & 0x01)

67 SetDQ();

68else

69 ResetDQ();

70 Delay_us(65); //65us

71 SetDQ();

72 Delay_us(2); //连续两位间应大于1us

73 Dat >>= 1;

74 }

75}

76

77

78unsigned char DS18B20ReadByte(void)

79{

80 unsigned char i,Dat;

81 SetDQ();

82 Delay_us(5);

83for(i=8;i>0;i--)

84 {

85 Dat >>= 1;

86 ResetDQ(); //从读时序开始到采样信号线必须在15u内,且采样尽量安排在15u的最后

87 Delay_us(5); //5us

88 SetDQ();

89 Delay_us(5); //5us

90if(GetDQ())

91 Dat|=0x80;

92else

93 Dat&=0x7f;

94 Delay_us(65); //65us

95 SetDQ();

96 }

97return Dat;

98}

99

100

101void ReadRom(unsigned char *Read_Addr)

102{

103 unsigned char i;

104

105 DS18B20WriteByte(ReadROM);

106

107for(i=8;i>0;i--)

108 {

109 *Read_Addr=DS18B20ReadByte();

110 Read_Addr++;

111 }

112}

113

114

115void DS18B20Init(unsigned char Precision,unsigned char AlarmTH,unsigned char AlarmTL)

116{

117 DisableINT();

118 ResetDS18B20();

119 DS18B20WriteByte(SkipROM);

120 DS18B20WriteByte(WriteScratchpad);

121 DS18B20WriteByte(AlarmTL);

122 DS18B20WriteByte(AlarmTH);

123 DS18B20WriteByte(Precision);

124

125 ResetDS18B20();

126 DS18B20WriteByte(SkipROM);

127 DS18B20WriteByte(CopyScratchpad);

128 EnableINT();

129

130while(!GetDQ()); //等待复制完成 ///////////

131}

132

133

134void DS18B20StartConvert(void)

135{

136 DisableINT();

137 ResetDS18B20();

138 DS18B20WriteByte(SkipROM);

139 DS18B20WriteByte(StartConvert);

140 EnableINT();

141}

142

143void DS18B20_Configuration(void)

144{

145 GPIO_InitTypeDef GPIO_InitStructure;

146

147 RCC_APB2PeriphClockCmd(DS_RCC_PORT, ENABLE);

148

149 GPIO_InitStructure.GPIO_Pin = DS_DQIO;

150 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //开漏输出151 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //2M时钟速度152 GPIO_Init(DS_PORT, &GPIO_InitStructure);

153}

154

155

156void ds18b20_start(void)

157{

158 DS18B20_Configuration();

159 DS18B20Init(DS_PRECISION, DS_AlarmTH, DS_AlarmTL);

160 DS18B20StartConvert();

161}

162

163

164unsigned short ds18b20_read(void)

165{

166 unsigned char TemperatureL,TemperatureH;

167 unsigned int Temperature;

168

169 DisableINT();

170 ResetDS18B20();

171 DS18B20WriteByte(SkipROM);

172 DS18B20WriteByte(ReadScratchpad);

173 TemperatureL=DS18B20ReadByte();

174 TemperatureH=DS18B20ReadByte();

175 ResetDS18B20();

176 EnableINT();

177

178if(TemperatureH & 0x80)

179 {

180 TemperatureH=(~TemperatureH) | 0x08;

181 TemperatureL=~TemperatureL+1;

182if(TemperatureL==0)

183 TemperatureH+=1;

184 }

185

186 TemperatureH=(TemperatureH<<4)+((TemperatureL&0xf0)>>4); 187 TemperatureL=TempX_TAB[TemperatureL&0x0f];

188

189 //bit0-bit7为小数位,bit8-bit14为整数位,bit15为正负位

190 Temperature=TemperatureH;

191 Temperature=(Temperature<<8) | TemperatureL;

192

193 DS18B20StartConvert();

194

195return Temperature;

196}

197

198

199

200

201

202//============================================

203

204// DS18B20.H

205

206//============================================

207

208#ifndef __DS18B20_H

209#define __DS18B20_H

210

211#define SkipROM 0xCC //跳过ROM

212#define SearchROM 0xF0 //搜索ROM

213#define ReadROM 0x33 //读ROM

214#define MatchROM 0x55 //匹配ROM

215#define AlarmROM 0xEC //告警ROM

216

217#define StartConvert 0x44 //开始温度转换,在温度转换期间总线上输出0,转换结束

后输出1

218#define ReadScratchpad 0xBE //读暂存器的9个字节

219#define WriteScratchpad 0x4E //写暂存器的温度告警TH和TL

220#define CopyScratchpad 0x48 //将暂存器的温度告警复制到EEPROM,在复制期间总线上输出0,复制完后输出1

221#define RecallEEPROM 0xB8 //将EEPROM的温度告警复制到暂存器中,复制期间输出0,复制完成后输出1

222#define ReadPower 0xB4 //读电源的供电方式:0为寄生电源供电;1为外部电源供电

223

224

225void ds18b20_start(void);

226unsigned short ds18b20_read(void);

227

228

229#endif

DS18B20 数字温度传感器

应用指引:在MC430F14板上是标配了DS18B20数字温度传感器器,同时希望用户通过以下DS18B20的讲解能够了解更多1线 MC430F14实物图如下: >>关于MC430F14开发板详情>> 在传统的模拟信号远距离温度测量系统中,需要很好的解决引线误差补偿问题、多点测量切换误差问题和放大电路零点漂移误差问题等技术问题,才能够达到较高的测量精度。另外一般监控现场的电磁环境都非常恶劣,各种干扰信号较强,模拟温度信号容易受到干扰而产生测量误差,影响测量精度。因此,在温度测量系统中,采用抗干扰能力强的新型数字温度传感器是解决这些问题的最有效方案,新型数字温度传感器DS18B20具有体积更小、精度更高、适用电压更宽、采用一线总线、可组网等优点,在实际应用中取得了良好的测温效果。 新的"一线器件"DS18B20体积更小、适用电压更宽、更经济。

美国Dallas半导体公司的数字化温度传感器DS1820是世界上第一片支持 "一线总线"接口的温度传感器,在其内部使用了在板(ON-B0ARD)专利技术。全部传感元件及转换电路集成在形如一只三极管的集成电路内。一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。现在,新一代的DS18B20体积更小、更经济、更灵活。使你可以充分发挥“一线总线”的优点。目前DS18B20批量采购价格仅10元左右。 DS18B20、DS1822 "一线总线"数字化温度传感器 同DS1820一样,DS18B20也支持"一线总线"接口,测量温度范围为-55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。DS1822的精度较差为±2°C。现场温度直接以"一线总线"的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。与前一代产品不同,新的产品支持3V~5.5V的电压范围,使系统设计更灵活、方便。而且新一代产品更便宜,体积更小。 DS18B20、DS1822的特性 DS18B20可以程序设定9~12位的分辨率,精度为±0.5°C。可选更小的封装方式,更宽的电压适用范围。分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。DS18B20的性能是新一代产品中最好的!性能价格比也非常出色!DS1822与DS18B20软件兼容,是DS18B20的简化版本。省略了存储用户定义报警温度、分辨率参数的EEPROM,精度降低为±2°C,适用于对性能要求不高,成本控制严格的应用,是经济型产品。继"一线总线"的早期产品后,DS1820开辟了温度传感器技术的新概念。DS18B20和DS1822使电压、特性及封装有更多的选择,让我们可以构建适合自己的经济的测温系统。 一、DS18B20的主要特性 (1)适应电压范围更宽,电压范围:3.0~5.5V,在寄生电源方式下可由数据线供电 (2)独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯

DS18B20数字温度计使用

DS18B20数字温度计使用 1.DS18B20基本知识 DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。 1、DS18B20产品的特点 (1)、只要求一个端口即可实现通信。 (2)、在DS18B20中的每个器件上都有独一无二的序列号。 (3)、实际应用中不需要外部任何元器件即可实现测温。 (4)、测量温度范围在-55。C到+125。C之间。 (5)、数字温度计的分辨率用户可以从9位到12位选择。 (6)、内部有温度上、下限告警设置。 2、DS18B20的引脚介绍 TO-92封装的DS18B20的引脚排列见图1,其引脚功能描述见表1。 (底视图)图1 表1 DS18B20详细引脚功能描述 3. DS18B20的使用方法 由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。 由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都

是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。 DS18B20的复位时序 DS18B20的读时序 对于DS18B20的读时序分为读0时序和读1时序两个过程。 对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。 DS18B20的写时序 对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。 对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。 4.实验任务 用一片DS18B20构成测温系统,测量的温度精度达到0.1度,测量的温度的范围在-20度到+100度之间,用8位数码管显示出来。 5.电路原理图 6.系统板上硬件连线 (1).把“单片机系统”区域中的P0.0-P0.7用8芯排线连接到“动态数码显示”区域中的ABCDEFGH端子上。 (2).把“单片机系统”区域中的P2.0-P2.7用8芯排线连接到“动态数码显示”区域中的S1S2S3S4S5S6S7S8端子上。 (3).把DS18B20芯片插入“四路单总线”区域中的任一个插座中,注意电源与地信号不要接反。 (4).把“四路单总线”区域中的对应的DQ端子连接到“单片机系统” 区域中的P3.7/RD端子上。 7. C语言源程序 #include

stm32试题及答案

STM32习题集 一、选择题 1.Cortex-M处理器采用的架构是( D ) (A)v4T (B)v5TE (C)v6 (D)v7 2.NVIC可用来表示优先权等级的位数可配置为是( D ) (A)2 (B)4 (C)6 (D)8 3.Cortex-M系列正式发布的版本是( A ) (A)Cortex-M3 (B)Cortex-M4 (C)Cortex-M6 (D)Cortex-M8 4.Cortex-M3的提供的流水线是( B ) (A)2级(B)3级(C)5级(D)8级 5.Cortex-M3的提供的单周期乘法位数是( C ) (A)8 (B)16 (C)32 (D)64 6.STM32处理器的USB接口可达(B ) (A)8Mbit/s (B)12Mbit/s (C)16Mbit/s (D)24Mbit/s 4.下面是Context-M3处理器代码执行方式的是( A ) (A)特权方式(B)普通方式(C)Handle方式(D)Thread方式5.下面是Context-M3处理器的工作模式的是( A ) (A)Thread模式(B)Thumb模式(C)Thumb-2模式(D)Debug模式6.下列是Cortex – M3 处理器可以使用的堆栈的栈是( B ) (A)线程栈(B)进程栈(C)多线程栈(D)空栈7.Context – M3处理器的寄存器r14代表( B ) (A)通用寄存器(B)链接寄存器(C)程序计数器(D)程序状态寄存器 8.Handle模式一般使用( A ) (A)Main_SP (B)Process_SP (C)Main_SP和Process_SP (D)Main_SP或Process_SP 9.Cortex – M3使用的存储器格式是( D ) (A)小端格式(B)大端格式(C)小端或大端格式(D)没有正确答案 10.Cortex – M3的存储格式中专用外设总线区域可以使用( A ) (A)小端格式(B)大端格式(C)小端或大端格式(D)没有正确答案 11.每个通用I/O端口有()个32位的配置寄存器,()个32位的数据寄存器,()个32位的置位/复位寄存器,()个16位的复位寄存器,(B )个32位的锁定寄存器(A)2,1,2,1,1 (B)2,2,1,1,1 (C)2,2,2,1,1 (D)2,2,1,2,1 12.( A )寄存器的目的就是用来允许对GPIO寄存器进行原子的读/修改操作 (A)GPIOX_BSRR和GPIOX_BRR (B)GPIOX_CRL和GPIOX_CRH (C)GPIOX_BSRR和GPIOX_LCKR (D)GPIOX_IDR和GPIOX_ODR 13.所有的GPIO引脚有一个内部微弱的上拉和下拉,当它们被配置为( A )时可以是激活的或者非激活的 (A)输入(B)输出(C)推挽(D)开漏 14.端口输入数据寄存器的地址偏移为( B ) (A)00H (B)08H(C)0CH (D)04H

用1602LCD与DS18B20设计的温度报警器课程设计

程设计温度报警器共11页,2759字。 目录 设计题目 (3) 设计目的 (3) 设计任务和要求 (3) 设计内容 (3) 心得体会 (10) 参考文献 (10) 一、设计题目:温度报警器 二、设计目的: 1.了解温度传感器AD590的基本原理、性能与应用。 2.熟悉单片机AT89C51工作方式和应用。 3.掌握ADC0809的接口方法及其输入程序的设计和调试方法。 4.将所学的单片机原理及检测技术的知识运用于实践,解决实际问题。 三、设计任务和要求: 本设计采用集成温度传感器AD590,设计一个数字显示的温度报警器。定安全温度值范围为77°C~100°C(可根据具体需要在程序中进行调整),对在这一范围内的温度变化采集后送入A/D转换器,A/D转换器的模拟电压范围为0~5V。例如传感器采集的温度为80°C,则对应数码管显示值为80°C。而温度高出100°C或者低于77°C时,不在安全温度范围之内,喇叭会进行报警、二极管发光显示。

ISIS SCHEMATIC DESCRIPTION FORMAT 6.1 ===================================== 设计的温度报警器\22 用1602LCD与DS18B20设计的温度报警器\用1602LCD与DS18B20设计的温度报警器.DSN Doc. no.: Revision: Author: Created: 08/06/19 Modified: 09/03/11 *PROPERTIES,0 *MODELDEFS,0 *PARTLIST,18 C1,CAP,22PF,EID=2,PACKAGE=CAP10,PINSWAP="1,2" C2,CAP,22PF,EID=3,PACKAGE=CAP10,PINSWAP="1,2" C3,CAP-ELEC,10uF,EID=4,PACKAGE=ELEC-RAD10 D1,LED-YELLOW,高温闪 烁,BV=4V,EID=45,IMAX=10mA,ROFF=100k,RS=3,TLITMIN=0.1m,VF=2V

DS18b20温度传感器

最小的温度显示程序-c51 (2010-12-07 00:45:27) 转载 分类:51单片机 标签: 杂谈 #include #include sbit DQ=P2^0; bit presence; unsigned char templ,temph; char array[10]={0x7e,0x48,0x3d,0x6d,0x4b,0x67,0x73,0x4c,0x7f,0x4f}; void Delay(unsigned int num)//可定义延时 { while( --num ); } bit Init_DS18B20(void) { DQ = 1; //DQ复位 Delay(8); //稍做延时 DQ = 0; //单片机将DQ拉低 Delay(90); //精确延时大于 480us DQ = 1; //拉高总线 Delay(8); presence = DQ; //如果=0则初始化成功 =1则初始化失败 Delay(100); DQ = 1; return(presence); //返回信号,0=presence,1= no presence } unsigned int ReadOneChar(void) { unsigned char i = 0; unsigned char dat = 0;

for (i = 8; i > 0; i--) { DQ = 0; // 给脉冲信号 dat >>= 1; //位右移 DQ = 1; // 给脉冲信号等待传感器返回脉冲 if(DQ) dat |= 0x80; Delay(4); } return (dat); } void WriteOneChar(unsigned char dat) { unsigned char i = 0; for (i = 8; i > 0; i--) { DQ = 0; DQ = dat&0x01; Delay(5); DQ = 1; dat>>=1; } } void Read_Temperature(void) { Init_DS18B20(); WriteOneChar(0xcc); // 跳过读序号列号的操作 WriteOneChar(0x44); // 启动温度转换 Init_DS18B20(); WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0xBE); //读取温度寄存器 templ = ReadOneChar(); //温度低8位 temph = ReadOneChar(); //温度高8位 }

基于51单片机及DS18B20温度传感器的数字温度计程序(详细注释)

基于51单片机及DS18B20温度传感器的数字温度计程序(详细注释)

电路实物图如下图所示: C 语言程序如下所示: /******************************************************************** zicreate ----------------------------- Copyright (C) https://www.360docs.net/doc/5510902493.html, -------------------------- * 程序名; 基于DS18B20的测温系统 * 功 能: 实时测量温度,超过上下限报警,报警温度可手动调整。K1是用来 * 进入上下限调节模式的,当按一下K1进入上限调节模式,再按一下进入下限 * 调节模式。在正常模式下,按一下K2进入查看上限温度模式,显示1s 左右自动 * 退出;按一下K3进入查看下限温度模式,显示1s 左右自动退出;按一下K4消除 * 按键音,再按一下启动按键音。在调节上下限温度模式下,K2是实现加1功能, * K1是实现减1功能,K3是用来设定上下限温度正负的。 * 编程者:Jason * 编程时间:2009/10/2 *********************************************************************/ #include //将AT89X52.h 头文件包含到主程序 #include //将intrins.h 头文件包含到主程序(调用其中的_nop_()空操作函数延时) #define uint unsigned int //变量类型宏定义,用uint 表示无符号整形(16位) #define uchar unsigned char //变量类型宏定义,用uchar 表示无符号字符型(8位) uchar max=0x00,min=0x00; //max 是上限报警温度,min 是下限报警温度 bit s=0; //s 是调整上下限温度时温度闪烁的标志位,s=0不显示200ms ,s=1显示1s 左右 bit s1=0; //s1标志位用于上下限查看时的显示 void display1(uint z); //声明display1()函数 #include"ds18b20.h" //将ds18b20.h 头文件包含到主程序 #include"keyscan.h" //将keyscan.h 头文件包含到主程序 #include"display.h" //将display.h 头文件包含到主程序

STM32练习题2(关于IO,有答案)

一、填空题 1.当STM32的I/O端口配置为输入时,输出缓冲器被禁止,施密特触发输入被激活。根据输入配置(上拉,下拉或浮动)的不同,该引脚的弱上拉和下拉电阻被连接。出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器,对输入数据缓冲器的读访问可得到I/O状态。 2.STM32的所有端口都有外部中断能力。当使用外部中断线时,相应的引脚必须配置成输入模式。 3.STM32具有单独的位设置或位清除能力。这是通过_GPIOx BSRR____和GPIOx BRR 寄存器来实现的。 4.ST公司还提供了完善的通用IO接口库函数,其位于stm32f10x_gpio.c ,对应的头文件为stm32f10x_gpio.h。 5.为了优化不同引脚封装的外设数目,可以把一些复用功能重新映射到其他引脚上。这时,复用功能不再映射到它们原始分配的引脚上。在程序上,是通过设置复用重映射和调试I/O配置寄存器(AFIO MAPR) 来实现引脚的重新映射。 二、选择题 1.在APB2上的I/O脚的翻转速度为(A)。 A.18MHz B.50MHz C.36MHz D.72MHz 4.当输出模式位MODE[1:0]=“10”时,最大输出速度为(B)。 A.10MHz B.2MHz C.50MHz D.72MHz 三、简答题 1.简述不同复用功能的重映射。 答:为了优化不同引脚封装的外设数目,可以把一些复用功能重新映射到其他引脚上。这时,复用功能不再映射到它们原始分配的引脚上。在程序上,是通过设置复用重映射和调试I/O配置寄存器(AFIO MAPR) 来实现引脚的重新映射。 2.简述STM32的GPIO的一些主要特点(至少5个)。 答: 1.通用IO,可以作为输入、输出等功能。 2.单独的位设置和位清除 3.外部中断唤醒线 4.复用功能/重映射 5.GPIO锁定机制 四、编程题 编写一个初始化定时器的程序。 GPIO_InitTypedef GPIO_InitStructure; GPIO_InitStructure.GPIO_pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_pp; GPIO_InitStructure.GPIO_Speed=GPIO_Seep_50Mhz; GPIO_Init(GPIOC,&GPIO_InitStructure);

基于DS18B20的温度报警器设计说明

毕业设计论文 基于DS18B20的温度报警器设计 系电子信息工程系 专业电子信息工程技术康志凌

班级电子信息122 学号 1201043206 指导教师徐敏 N 职称讲师 设计时间 2014.10.08-2015.04.08

摘要 本设计以AT89C51单片机为核心,设计了一个温度测量报警系统,可以方便的实现温度采集和显示。它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工农业中的温度测量及报警。本设计由AT89C51单片机、DS18B20温度传感器和LED显示器组成,可以直观的显示测量的温度。本设计运行过程中,如果外界温度低于-20℃或高于70℃,系统将出发蜂鸣器,产生报警声音,且对应的LED同步闪烁。 关键词:AT89C51,DS18B20,传感器,温度报警器

目录 摘要 ........................................................................ I 目录 ....................................................................... II 第1章引言.. (1) 第2章方案设计 (2) 第3章 DS18B20简介 (3) 3.1 DS18B20性能指标 (3) 3.2 DS18B20的封装及部结构 (4) 3.3 DS18B20工作原理及应用 (4) 3.4 控制器对DS18B20操作流程 (5) 第4章硬件电路设计 (7) 4.1 AT89C51 (8) 4.2 晶振电路 (9) 4.3 复位电路 (9) 4.4 报警电路 (10) 4.5 74LS245 (10) 4.6 显示电路 (11) 第5章软件设计 (12) 5.1 主程序模块 (12) 5.2 程序说明 (12) 第6章仿真结果 (21) 参考文献 (23) 致 (24)

DS18B20温度传感器使用方法以及代码

第7章 DS18B20温度传感器 7.1 温度传感器概述 温度传感器是各种传感器中最常用的一种,早起使用的是模拟温 度传感器,如热敏电阻,随着环境温度的变化,它的阻值也发生线性变化,用处理器采集电阻两端的电压,然后根据某个公式就可以计算出当前环境温度。随着科技的进步,现代的温度传感器已经走向数字化,外形小,接口简单,广泛应用在生产实践的各个领域,为我们的生活提供便利。随着现代仪器的发展,微型化、集成化、数字化、正成为传感器发展的一个重要方向。美国DALLS半导体公司推出的数字化温度传感器DS18B20采用单总线协议,即单片机接口仅需占用一个 I/O端口,无需任何外部元件,直接将环境温度转化为数字信号,以数码方式串行输出,从而大大简化了传感器与微处理器的接口。 7.2 DS18B20温度传感器介绍 DS18B20是美国DALLAS^导体公司继DS1820之后最新推出的一种改进型智能温度传感器。与传统的热敏电阻相比,他能够直接读出被测温度并且可根据实际要求通过简单的编程实现9?12位的数字 值读数方式。可以分别在93.75 ms和750 ms内完成9位和12位的数字量,并且从DS18B20读出的信息或写入 DS18B20的信息仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线,总线本身也可以向所挂接的 DS18B20供电,而无需额外电源。因而使用

DS18B20可使系统结构更趋简单,可靠性更高。他在测温精度、转换时间、传输距离、分辨率等方面较 DS1820有了很大的改进,给用户带来了更方便的使用和更令人满意的效果。 1. DS18B20温度传感器的特性 ①独特的单线接口方式:DS18B20与微处理器连接时仅需要一条口 线即可实现微处理器与DS18B20勺双向通讯。 ②在使用中不需要任何外围元件。 ③可用数据线供电,电压范围:+3.0~ +5.5 V。 ④测温范围:-55 ~+125 C。固有测温分辨率为0.5 C。 ⑤通过编程可实现9~12位的数字读数方式。 ⑥用户可自设定非易失性的报警上下限值。 ⑦支持多点组网功能,多个 DS18B20可以并联在惟一的三线上,实现多点测温。 ⑧负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。 2. 引脚介绍 DS18B20有两种封装:三脚TO-92直插式(用的最多、最普遍的封装)和八脚SOIC贴片式。下图为实验板上直插式 DS18B20的原理图。 3. 工作原理 单片机需要怎样工作才能将DS18B2 0中的温度数据独取出来呢?F面将给出详细分析

基于ds18b20的数字温度计设计

目录 (一)设计内容及要求 (2) (二)系统的硬件选择及设计 (3) 2.1核心处理器的设计 (3) 1、AT89C51引脚图 (3) 2、AT89C51引脚功能介绍 (3) 2.2温度采集电路的设计 (5) 1、单线技术 (5) 2、DS18B20的简介 (6) 3、DS18B20内部结构 (8) 4、DS18B20测温原理 (11) 5、温度采集电路 (12) 2.3温度显示电路的设计 (13) 1、LED数码管的操作 (13) 2、温度显示电路 (13) (三)系统的软件设计 (15) 3.1概述 (15) 3.2 DS18B20的单线协议和命令 (15) (1)初始化 (15) (2)ROM操作命令 (15) (3)内存操作命令 (16) 3.3温度采集程序流程图的设计 (18) 3.4温度显示程序流程图的设计 (19) (四) 结论 (19) (五)汇编代码 (20) (六)参考文献 (27)

基于DS18B20的数字温度计设计 摘要: 在本设计中选用AT89C51型单片机作为主控制器件,采用DS18B20数字温度传感器作为测温元件,通过两位共阴极LED数码显示管并行传送数据,实现温度显示。本设计的内容主要分为两部分,一是对系统硬件部分的设计,包括温度采集电路和显示电路;二是对系统软件部分的设计,应用汇编语言实现温度的采集与显示。通过DS18B20直接读取被测温度值,送入单片机进行数据处理,之后进行输出显示,最终完成了数字温度计的总体设计。其系统构成简单,信号采集效果好,数据处理速度快,便于实际检测使用。 关键词:单片机AT89C51;温度传感器DS18B20;LED数码管;数字温度计 (一)设计内容及要求 本设计主要介绍了用单片机和数字温度传感器DS18B20相结合的方法来实现温度的采集,以单片机AT89C51芯片为核心,辅以温度传感器DS18B20和LED 数码管及必要的外围电路,构成了一个多功能单片机数字温度计。 本次设计的主要思路是利用51系列单片机,数字温度传感器DS18B20和LED 数码显示器,构成实现温度检测与显示的单片机控制系统,即数字温度计。通过对单片机编写相应的程序,达到能够实时检测周围温度的目的。 通过对本课题的设计能够熟悉数字温度计的工作原理及过程,了解各功能器件(单片机、DS18B20、LED)的基本原理与应用,掌握各部分电路的硬件连线与程序编写,最终完成对数字温度计的总体设计。其具体的要求如下: 1、根据设计要求,选用AT89C51单片机为核心器件; 2、温度检测器件采用DS18B20数字式温度传感器,利用单总线式连接方式与单片机的P2.2引脚相连; 3、显示电路采用两位LED数码管以串口并行输出方式动态显示。

ARM原理及应用复习题(附答案)

《ARM原理及应用》复习题 填空题 1.STM32F103是_32_位单片机,内核是ARM公司的___Cortex-M3___。 2.STM32F103最高工作频率___72MHz___。片内具有多种外设,它们分别是:_GPIO_、_USART_、_I2C_、_SPI_、_ADC_、_DAC_、_TIM_、_RTC_、_IWDG_、_WWDG_。 IWDG:独立看门狗 WWDG:窗口看门狗 3.STM32103的GPIO端口具有多种配置状态,输入有3种状态,它们分别是_模拟输入_、_浮空输入__和上拉/下拉输入;输出有4种状态,它们分别是_通用推挽输出_、_通用开漏输出_、_复用推挽输出_和_复用开漏输出_。 5.当STM32I/O端口配置为输入时,输出功能被_禁止_,施密特触发器被激活__。 6.STM32的所有端口都有外部中断能力。当使用外部中断线时,相应的引脚必须配置成 输入模式。 7.STM32具有单独的位设置或位清除能力。这是通过GPIOx->BSRR_和GPIOx->BRR寄存器来实现的。 8.STM32芯片内部集成的12位位ADC是一种逐次逼近(比较)型模拟数字转换器,具有18个通道,可测量16个外部和2个内部信号源。 9.STM32的NVIC管理着包括Cortex-M3核异常等中断,其和ARM处理器核的接口紧密相连,可以实现时延的中断处理,并有效地处理后到中断。 10.系统计时器(SysTick)提供了1个24位二进制递减计数器,具有灵活的控制机制11.STM32通用定时器TIM的16位计数器可以采用三种方式工作,分别为向上计数模式、向下计数模式和向上下计数模式。 12.STM32系列ARM Cortex-M3芯片支持三种复位形式,分别为上电复位、按键复位和备份复位。 简答题 1.什么是嵌入式系统?嵌入式系统一般由哪几部分构成?它与通用计算机有何区别? 答: 是一种嵌入受控器件内部,为特定应用而设计的专用计算机系统,具有“嵌入性”、“专用性”和“计算机系统”3个基本要素。//它一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成。//嵌入式系统通常执行的是带有特定要求的预先定义的任务,强调控制能力与控制的可靠性;而通用计算机则可以通过安装各种软件执行各种不同的任务,强调高速、海量的数值计算。 2.ARM Cortex-M3有何特点? 答: 采用哈佛结构的32位处理器内核,具有高性能、实时功能、数字信号处理、低功耗与低电压操作特性,同时还保持了集成度高和易于开发的特点。 3.简述Cortex-M3系统滴答定时器的功能和作用。 答:

DS18B20温度传感器巡回检测温度报警器设计

DS18B20温度传感器巡回检测温度报警器 设计 摘要:随着电子技术的发展,家用电器和办公设备的智能化、系统化已成为发展趋势,而这些高性能几乎都要通过单片机实现。同时,温度作为与我们生活息息相关的一个环境参数,对其的测量和研究也变得极为重要。故温度检测报警系统在现代生活、生产中得到了越来越广泛的应用。本论文介绍了采用温度传感器DS18B20作为温度采集器、AT89S51单片机为主控制器,外加显示模块以及报警电路实现该智能温度测量报警器的设计方法、工作原理、电路组成等。 关键词:DS18B20,单片机,温度控制,报警 1绪论 温度是与人们生活息息相关的环境参数,许多情况下都需要进行温度测量及报警,温度测量报警系统在现代日常生活、科研、工农业生产中已经得到了越来越广泛的应用。所以对温度的测量报警方法及设备的研究也变得极其重要。随着人们生活水平的不断提高以及应对各种复杂测量环境的需要,我们对温度测量报警器的要求也越来越高,利用单片机来实现这些控制无疑是人们追求的目标之一,它带给我们的方便是不可否定的。其中温度检测报警器就是一个典型的例子。要为现代人工作、科研、生活、提供更好的更方便的设施,就需要从单片机技术入手,向数字化,智能化控制方向发展。 本设计所介绍的温度报警器,可以设置上下限报警温度,当温度不在设置范围内时,可以报警。与传统的温度测量系统相比,本设计中的数字温度测量报警系统具有很多前者没有的优点,如测温范围广而且准确,采用LCD数字显示,读数方便等。 1.1温度报警器的研究意义 随着电子技术的发展,家用电器和办公设备的智能化、系统化已成为趋势,

而这些高性能几乎都要通过单片机实现。同时,温度作为与我们生活息息相关的一个环境参数,对其的测量和研究也变得极为重要。故温度检测报警系统在现代生活、生产中得到了越来越广泛的应用。 工业生产带动了人类社会的进步,同时也促进了各种新的传感器的发展。在工业生产中温度的准确测量是一个比较困难的事情。从最初的酒精、水银温度计到现在的数字化、集成化的温度计可见传感器的发展是飞快的。它的快速发展必将带来新一轮的工业化革命和社会发展的飞跃。 本设计所介绍的温度报警器可以设置上下限报警温度,当温度不在设定范围内时可以报警,主要用于对测温比较准确的场所,或科研实验室使用。它具有结构简单,不需外接元件,可由用户设置温度报警界限等特点,可广泛用于食品库、冷库、粮库等需要控制温度的地方。目前,该类产品已在温控系统中得到广泛的应用。所以设计意义较为深远。 1.2 温度报警器的现状及发展 温度是一种在生产、科研、生活中需要测量和控制的重要物理量,是国际单位制七个基本量之一。其测量控制一般采用各式各样形态的温度传感器。根据它们在讯号输出方式上的不同可以分为模拟温度传感器和数字温度传感器。单片机技术的出现则是为现代工业测控领域带来了一次新的技术革命,目前,单片机以其体积小、重量轻、抗干扰能力强、对环境要求不高、可靠性高、性价比高、开发较为容易等特点,在工业控制、数据采集、智能化仪器仪表、办公自动化等诸多领域得到了极为广泛的应用,并已走入我们的日常生活,现在,随处都可以看到单片机的踪影。目前温度报警器的发展已经比较成熟了,它能帮助我们实现想要的温度控制,解决身边的很多问题。 1.2.1 智能温度传感器 智能温度传感器(亦称数字温度传感器)是在20世纪90年代中期问世的。它是微电子技术、计算机技术和自动测试技术(ATE)的结晶。目前,国际上已开发出多种智能温度传感器系列产品。智能温度传感器内部都包含温度传感器、A/D转换器、信号处理器、存储器(或寄存器)和接口电路。有的产品还带多路选择器、中央控制器(CPU)、随机存取存储器(RAM)和只读存储器(ROM)。智能温度传感器的特点是能输出温度数据及相关的温度控制量,适配各种微控制器

DS18B20数字温度计的设计

单片机原理及应用 课程设计报告书 题目:DS18B20数字温度计的设计 姓名学号:张琪05200102 吕群武05200166 蔡凌志05200178 专业班级:电信1班 指导老师:余琼蓉 设计时间:2010年12月

成绩评定

一、课题介绍 本设计是一款简单实用的小型数字温度计,所采用的主要元件有传感器18B20,单片机AT89S52,,四位共阴极数码管一个,电容电阻若干。18B20支持“一线总线”接口,测量温度范围-55°C~+125°C 。在-10~+85°C 范围内,精度为±0.5°C 。18B20的精度较差为± 2°C 。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。 本次数字温度计的设计共分为五部分,主控制器,LED 显示部分,传感器部分,复位部分,时钟电路。主控制器即单片机部分,用于存储程序和控制电路;LED 显示部分是指四位共阳极数码管,用来显示温度;传感器部分,即温度传感器,用来采集温度,进行温度转换;复位部分,即复位电路。测量的总过程是,传感器采集到外部环境的温度,并进行转换后传到单片机,经过单片机处理判断后将温度传递到数码管显示。本设计能完成的温度测量范围是-55°C~+128°C ,由于能力有限,不能实现报警功能。 二、方案论证 方案一: 由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D 转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D 转换电路,感温电路比较麻烦。 方案设计框图如下: 方案二:考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。 从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。

温度传感器DS18B20工作原理

温度传感器: DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式;温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出;其工作电源既可在远端引入,也可采用寄生电源方式产生;多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。以上特点使DS18B20非常适用于远距离多点温度检测系统。 2 DS18B20的内部结构 DS18B20内部结构如图1所示,主要由4部分组成:64位ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的管脚排列如图2所示,DQ为数字信号输入/输出端;GND为电源地;VDD为外接供电电源输入端(在寄生电源接线方式时接地,见图4)。 ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码,每个DS18B20的64位序列号均不相同。64位ROM的排的循环冗余校验码(CRC=X8+X5+X4+1)。ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。 图1 DS18B20的内部结构

图2DS18B20的管脚排列 DS18B20中的温度传感器完成对温度的测量,用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FF6FH,-55℃的数字输出为FC90H。 温度值高字节 高低温报警触发器TH和TL、配置寄存器均由一个字节的EEPROM组成,使用一个存储器功能命令可对TH、TL或配置寄存器写入。其中配置寄存器的格式如下: R1、R0决定温度转换的精度位数:R1R0=“00”,9位精度,最大转换时间为93.75ms;R1R0=“01”,10位精度,最大转换时间为187.5ms;R1R0=“10”,11位精度,最大转换时间为375ms;R1R0=“11”,12位精度,最大转换时间为750ms;未编程时默认为12位精度。 高速暂存器是一个9字节的存储器。开始两个字节包含被测温度的数字量信息;第3、4、5字节分别是TH、TL、配置寄存器的临时拷贝,每一次上电复位时被刷新;第6、7、8字节未用,表现为全逻辑1;第9字节读出的是前面所有8个字节的CRC码,可用来保证通信正确。 3 DS18B20的工作时序 DS18B20的一线工作协议流程是:初始化→ROM操作指令→存储器操作指令→数据传输。其工作时序包括初始化时序、写时序和读时序,如图3(a)(b)(c)所示。

DS18B20数字温度计的设计与实现

DS18B20数字温度计的设计与实现 一、实验目的 1.了解DS18B20数字式温度传感器的工作原理。 2.利用DS18B20数字式温度传感器和微机实验平台实现数字温度计。 二、实验内容与要求 采用数字式温度传感器为检测器件,进行单点温度检测。用数码管直接显示温度值,微机系统作为数字温度计的控制系统。 1.基本要求: (1)检测的温度范围:0℃~100℃,检测分辨率 0.5℃。 (2)用4位数码管来显示温度值。 (3)超过警戒值(自己定义)要报警提示。 2.提高要求 (1)扩展温度范围。 (2)增加检测点的个数,实现多点温度检测。 三、设计报告要求 1.设计目的和内容 2.总体设计 3.硬件设计:原理图(接线图)及简要说明 4.软件设计框图及程序清单 5.设计结果和体会(包括遇到的问题及解决的方法) 四、数字温度传感器DS18B20 由DALLAS半导体公司生产的DS18B20型单线智能温度传感器,属于新一代适配微处理器的智能温度传感器,可广泛用于工业、民用、军事等领域的温度测量及控制仪器、测控系统和大型设备中。它具有体积小,接口方便,传输距离远等特点。 1.DS18B20性能特点 DS18B20的性能特点:①采用单总线专用技术,既可通过串行口线,也可通过其它I/O 口线与微机接口,无须经过其它变换电路,直接输出被测温度值(9位二进制数,含符号位),②测温范围为-55℃-+125℃,测量分辨率为0.0625℃,③内含64位经过激光修正的只读存

储器ROM ,④适配各种单片机或系统机,⑤用户可分别设定各路温度的上、下限,⑥内含寄生电源。 2. DS18B20内部结构 DS18B20内部结构主要由四部分组成:64位光刻ROM,温度传感器,非挥发的温度报警触发器TH 和TL,高速暂存器。64位光刻ROM 是出厂前被光刻好的,它可以看作是该DS18B20的地址序列号。64位ROM 结构图如图2所示。不同的器件地址序列号不同。 DS18B20的管脚排列如图1所示。 图1 DS18B20引脚分布图 图2 64位ROM 结构图 DS18B20高速暂存器共9个存储单元,如表所示: 序号 寄存器名称 作 用 序号 寄存器名称 作 用 0 温度低字节 以16位补码形式存放 4 配置寄存器 1 温度高字节 5、6、7 保留 2 TH/用户字节1 存放温度上限 8 CRC 3 HL/用户字节2 存放温度下限 以12位转化为例说明温度高低字节存放形式及计算:12位转化后得到的12位数据,存储在18B20的两个高低两个8位的RAM 中,二进制中的前面5位是符号位。如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625才能得到实际温度。 LSB MSB 8位检验CRC 48位序列号 8位工厂代码(10H )

DS18B20温度传感器工作原理及其应用电路图

DS18B20温度传感器工作原理及其应用电路图 时间:2012-02-16 14:16:04 来源:赛微电子网作者: 前言 温度与工农业生产密切相关,对温度的测量和控制是提高生产效率、保证产品质量以及保障生产安全和节约能源的保障。随着工业的不断发展,由于温度测量的普遍性,温度传感器的市场份额大大增加,居传感器首位。数字化温度传感器DS18B20是世界上第一片支持“一线总线”接口的温度传感器。现在,新一代的DS18B20温度传感器体积更小、更经济、更灵活。DS18B20温度传感器测量温度范围为-55℃~+125℃。在-10℃~+85℃范围内,精度为±0.5℃。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。基于DS18B20温度传感器的重要性,小编整理出DS18B20温度传感器工作原理及其应用电路图供大家参考。 一、DS18B20温度传感器工作原理(热电阻工作原理) DS18B20温度传感器工作原理框图如图所示: DS18B20温度传感器工作原理框图 图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在-55℃所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。 二、DS18B20温度传感器的应用电路 1.DS18B20温度传感器寄生电源供电方式电路图 寄生电源方式特点: (1)进行远距离测温时,无须本地电源。 (2)可以在没有常规电源的条件下读取ROM。 (3)电路更加简洁,仅用一根I/O口实现测温。 (4)只适应于单一温度传感器测温情况下使用,不适于采用电池供电系统中。

相关文档
最新文档