图4-1 DS18B20两种封装
GND:芯片的输入电源的负极 DQ:它是信号的输入输出脚
VDD:芯片的输入电源的正极 NC:这是空引脚
4、DS18B20与单片机硬件连接
我们在前面也描述过温度传感器的特性,它具有单总线的特点,它的单总线技术是采用了单条信号线,既可传输时钟,又可传输数据,而且数据传输是双向的。与单片机与外设之间进行串行传输的串行总线I2C、SPI和SCI总线相比,它的线路更加简单,硬件少了很多外围器件,成本相对低了很多,总线扩展和维护方便。
17
图4-2 DS18B20与微处理器典型连接电路
从上图可以看得出,微控制器可以是单片机,从机可以是单总线器件,它们之间的数据传输是通过一条信号线。当只有一个从机设备时,系统可按单节点系统操作;当有多个从机设备时,系统则按多节点系统操作。设备(主机或从机)通过一个漏极开路或三态端口连至该数据线,以允许设备在不发送数据时能够释放总线,而让其他设备使用总线。单总线通常要求外接一个约为5K的上拉电阻。本毕业设计单片机只是与一个DS18B20通信,如果要控制多个DS18B20进行温度采集,只要将所有DS18B20的I/O口全部接到一起就可以了。具体操作时,可以通过读取每个DS18B20内部芯片的序列号来识别。
5、工作原理
我们要向利用单片机要读取出DS18B20的温度值数据,那么首先得要知道如何去控制DS18B20的指令,下面就简述这些指令。
(1)33H:读ROM,读取DS18B20温度传感器ROM中的编码(64位地址) (2)55H:匹配ROM。发出此命令之后,接着发出64位ROM编码,访问单总线上与该编码相对应的DS18B20并使之做出响应,为下一步对该DS18B20的读/写作准备。 (3)F0H:搜索ROM。用于确定挂接在同一总线上DS18B20的个数,识别64位ROM地址,为操作各器件做好准备。
(4)CCH:跳过ROM。忽略64位ROM地址,直接向DS18B20发温度转换命令,使用与一个从机工作。
(5)ECH:告警搜索命令。执行后只有温度超过设定值上限或下限的,芯片才做
18
出响应。
ROM的作用就可以分别出不同的DS18B20,这样在一条总线上挂接多个DS18B20,单片机也可以轻易分别出来。当主机需要对众多在线DS18B20中的某一个进行操作时,主机应先逐个与DS18B20挂接,读出其序列号。然后再将所有的DS18B20挂接到总线上,单片机发出匹配ROM命令,紧接着主机提供的64位序列号之后的操作就是针对该DS18B20。
本毕业设计只对一个DS18B20进行操作,所以就不需要读取ROM编码和匹配了,直接跳过ROM命令,就可以进行温度转换和读取。其操作如下:
(1)44H--温度转换。启动DS18B20进行温度转换,结果存入9字节的RAM中。 (2)BEH--读暂存器。读内部RAM中9字节的温度数据。
(3)4EH--写暂存器。发出向内部RAM的第2,3字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节数据。其他指令在这里就不做详细介绍。
DS18B20在出厂时都是默认配置为12位的,其中最高位为符号位,也就是温度值共11位,单片机在读数据时,一次会读两字节共16位,读完后将低11位的二进制数转化为十进制数后再乘以0.0625便为所测的实际温度值。另外,还需要判断温度的正负。前5个字符为符号位,这5位同时变化,我们只需要判断11位就可以了。前5位为1时,读取的温度为负值,且测到的数值需要取反加1再乘以0.0625才得到实际温度值。前5位为0时,读取温度位为正值,只需要将数值乘0.0625即可。
6、工作时序图
(1)初始化(时序图见图4-3)
图4-3初始化时序图
19
① 首先将数据线置高电平1。
② 然后进行延时(尽可能短,没有严格要求)。 ③ 然后把数据线拉倒低电平0。
④ 再延时750μs(时间可以在480μs~960μs中选) ⑤ 再将数据线拉高到电平1。
⑥ 延时等待。如果初始化成功则在15~60μs内产生一个由DS18B20返回的低电平0。这个可以确定它的存在。
⑦ 假设是单片机的CPU读到数据线上的低电平后,还要进行延时,那么时间从发出高电平算起不能少于480μs。
⑧ 最后将数据线再次拉到低电平后结束。 (2)DS18B20写数据(时序图见4-4)
图4-4 DS18B20写时序图
① 首先将数据线先置低电平0。 ② 然后延时确定的时间为15μs。 ③ 再按从低位到高位的顺序来发送数据。 ④ 其中延时时间为45μs。 ⑤ 再把数据线拉倒高电平1。
⑥ 然后再重复前面五步,直到发送完整一个字节。 ⑦ 最后将数据线拉高到1。 (3)DS18B20读数据(时序图见4-5)
20
图4-5 DS18B20读时序图
① 首先将数据线拉高到1。 ② 然后延时2μs。 ③ 再将数据线拉低到0.
④ 然后延时5μs。(时间大于1μs) ⑤ 再将数据线拉高到1. ⑥ 延时4μs。
⑦ 通过读数据线的状态得到下一个状态位,而且再进行数据处理。 ⑧ 延时30μs。
⑨ 重复以上所有步骤,直到读取完一个字节 4.3显示模块
在显示模块中,温度的显示采用三个共阴数单位码管显示。现在简单介绍下共阴数码管的原理:共阴数码管的内部就是8个发光二极管的阴极连接在一起,而8个阳极是相互独立的。对于共阴数码管来说,通常设计电路都是阴极接地。当我们要显示什么数时,只要按照共阴数码管编码表,对单片机相应的I/O口赋值就可以显示相应的数字。
21