当前位置:首页 > 单片机课程设计(数字电压表,数字温度计,计时器设计)
表2.2 DS18B20温度与测得值对应表 温度/℃ +125 +85 +25..625 +10.125 +0.5 0 -0.5 -10.125 -25..625 -55
DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较。若T>TH或T>TL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令作出响应。因此,可用多只DS18B20同时测量温度并进行报警搜索。
在64位ROM的最高有效字节中存储有循环冗余检验码(CRC)。主机根据ROM的前56位来计算CRC值,并和存入 DS18B20的CRC值作比较,以判断主机收到的ROM根据是否正确。
DS18B20的测温原理如图2.8所示。图中低温度系数晶振的振荡频率受温度的影响很小,用于生产固定频率的脉冲信号送给减法计数器1;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数,进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的一个基数分别置入减法计数器1、温度寄存器中,减法计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置值将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值就是所测温度值。图2.8中的斜率累加器用于补偿和修正测温过程中的非线性,
图2.8 DS18B20测温原理图
7
二进制表示 0000 0111 1101 0000 0000 0101 0101 0000 0000 0001 1001 0001 0000 0000 1010 0010 0000 0000 0000 1000 0000 0000 0000 0000 1111 1111 1111 1000 1111 1111 0101 1110 1111 1110 0110 1111 1111 1100 1001 0000 十六进制表示 07D0H 0550H 0191H 00A2H 0008H 0000H FFF8H FF5EH FE6FH FC90H 其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直到温度寄存器值达到被测温度值。
另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对错误!链接无效。的各种操作必须按协议进行.操作协议为:初始化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据.
2.3.4 DS18B20与单片机的接口电路
DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源.另一种是寄生电源供电方式,如图2.9所示.单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管
来完成对总线的上拉。 图2.9 DS18B20采用寄生电源供电图
当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的 上拉, 上拉开启时间最大为10μs.采用寄生电源供电方式时VDD和GND端均接地,由于单线制只有一根线,因此发送接口必须是三 态的。
2.4 系统程序的设计
系统程序主要包括主程序、读出温度子程序、温度转换命令子程序、计算温度子程序、显示数据刷新子程序等等。
2.4.1 主程序
主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量温度值,温度测量每1s进行一次。其程序流程图见图2.10。
2.4.2 读出温度子程序
读出温度子程序的主要功 能是读出RAM中的9字节, 在读出时需进行CRC校验, 校验有错时不进行温度数据 的改写。其程序流程图见图 2.11。
图2.10 温度计主程序流程图 图2.11 读出温度子程序流程图
8
2.4.3温度转换命令子程序
温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换完成。温度转换命令子程序流程图见图2.12。
2.4.4计算温度子程序
计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行 温度值正负的判定,其程序流程图见图2.13。
2.4.5 显示数据刷新子程序
显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位。程序流程图如图2.14所示。
图2.12 温度转换命令子程序
2.4.6 DS18B20的各个ROM命令
1. Read ROM [33H]
各个命令允许总线控制器读到DS18B20的8位系列编码、惟一的序列号和8位CRC码。只有在总线上存在单只DS18B20 的时候才能使用这个命令。如果总线上有不止一个从机,当所
有从机试图同时传送信号时就会发生数据冲突(漏极开路连在一起形成相“与”的效果)。
2. [55H]
这个是匹配ROM命令,后跟64位ROM序列,让总线控制器在多点总线上定位一只待定的DS18B20。只有和64位ROM序列完全匹配的DS18B20才能响应随后的存储器操作。所有和64位ROM序列不匹配的从机都将等待复位脉冲。这条命令在总线上有单个或多
个器件时都可以使用。 图2.13 计算温度子程序流程 图2.14 显示数据刷新子程序流程
Match
ROM
9
3. Skip ROM [0CCH]
这条命令允许总线控制器不用提供64位ROM编码就使用存储器操作命令,在单点总线情况下,可以节省时间。如果总线上不止一个从机,在Skip ROM命令之后跟着发一条读命令,由于多个从机同时传送信号。总线上就会发生数据冲突(漏极开路下拉效果想8当于相“与”)。
4. Search ROM [0F0H]
当一个系统初次启动时,总线控制器可能并不知道单线总线上有多少器件或它们的64位ROM编码。搜索ROM命令允许总线控制器用排除法识别总线上的所有从机的64位编码。
5.Alarm Search [0ECH]
这条命令的流程和Search ROM相同。然而,只有在最近一次测温后遇到符合报警条件的情况,DS18B20才会响应这条命令。报警条件定义为温度高于TH或低于TL。只要DS18B20不掉电,报警状态将一直保持,直到再一次测得的温度值达不到报警条件。
6. Write Scratchpad [4EH]
这个命令向DS18B20的暂存器TH和TL中写入数据。可以在任何时刻发出复位命令来中止写入。 7. Read Scratchpad [0BEH]
这个命令读取暂存器的内容。读取将从第1个字节开始,一直进行下去,直到第9(CRC)字节读完。如果不想读完所有字节,控制器可以在任何时间发出复位命令来中止读取。
8. Copy Scratchpad [48H]
这个命令把暂存器的内容拷贝到DS18B20的E2ROM存储器里,即把温度报警触发字节存入非易失性存储器里。如果总线控制器在这条命令之后跟着发出读时间隙,而DS18B20又忙于把暂存器拷贝到E2存储器,DS18B20就会输出一个0,如果拷贝结束的话,DS18B20则输出1。如果使用寄生电源,总线控制器必须在这条命令发出后立即启动强上拉并最少保持10ms。
9. Convert T [44H]
这条命令启动一次温度转换而无需其它数据。温度转换命令被执行,而后DS18B20保持等待状态。如果总线控制器在这条命令之后跟着发出时间隙,而DS18B20又忙于做时间转换的话,DS18B20将在总线上输出0,若温度转换完成,则输出1。如果使用寄生电源,总线控制器必须在发出这条命令之后立即启动强上拉,并保持500ms以上的时间。
10. Recall E2 [0B8H]
这条命令把报警触发器里的值拷贝回暂存器,这种拷贝操作在DS18B20上电时自动执行,这样器件一上电暂存器里马上就存在有效的数据了。若在这条命令发出之后发出读数据隙,器件会输出温度转换忙的标识:0为忙,1为完成。
11. Read Power Supply [0B4H]
若把这条命令发给DS18B20后发出读时间隙,器件会返回它的电源模式:0为寄生电源,1为外部电源。
2.4.7 温度数据的计算处理方法
从DS18B20读取出的二进制值必须先转换成十进制值,才能用于字符的显示。因为DS18B20的转换精度为9~12位可选的,为了提高精度采用12位。在采用12位转换精度时,温度寄存器里的值是以0.0625为步进的,即温度值为温度寄存器里的二进制乘以0.0625,就是实际的十进制温度值。通过观察表2.2可以发现一个十进制值和二进制值之间有很明显的关系,就是把二进制的高字节的
10
共分享92篇相关文档