2022年基于DSB温传感器的设计.docx

上传人:C****o 文档编号:12908591 上传时间:2022-04-26 格式:DOCX 页数:16 大小:250.27KB
返回 下载 相关 举报
2022年基于DSB温传感器的设计.docx_第1页
第1页 / 共16页
2022年基于DSB温传感器的设计.docx_第2页
第2页 / 共16页
点击查看更多>>
资源描述

《2022年基于DSB温传感器的设计.docx》由会员分享,可在线阅读,更多相关《2022年基于DSB温传感器的设计.docx(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精品学习资源 点名,引言之 基于 DS18B20 温度传感器的设计欢迎下载精品学习资源Dallas公司的数字化温度传感器DS1820是世界上第一片支持一线总线 接口的温度传感器;一线总线特殊而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念;其测量温度范畴为-55 C+125C ,在 -10 +85C 范畴内 , 精度为 0.5 C ;现场温度直接以 一线总线 的数字方式传输,大大提高了系统的抗干扰性;适合于恶劣环境的现场温度测量,如:环境掌握、设备或过程掌握、测温类消费电子产品等;DS18B20可以程序设定 9 12 位的辨论率,精度为 0.5 C;可选更小的封装方式

2、,更宽的电压适用范畴;辨论率设定,及用 户设定的报警温度储备在EEPROM中,掉电后依旧储存;DS18B20的性能是新一代产品中最好的!性能价格 比也特别杰出!省略了储备用户定义报警温度、辨论率参数的EEPROM ,精度降低为 2C,适用于对性能要求不 高,成本掌握严格的应用,是经济型产品; 新课讲授4.1 基于 DS18B20温度传感器的设计表4.1 1 DS18B20技术资料1. DS18B20的新性能(1) 可用数据线供电,电压范畴:3.0-5.5V ;2 测温范畴: -55 - +125 ,在 -10 - +85 时精度为 0.5;3 可编程的辨论率为 912 位,对应的可辨论温度分别

3、为0.5 、 0.25 、 0.125 和 0.0625 ;(4) 12 位辨论率时最多在750ms 内把温度值转换为数字;(5) 负压特性:电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;2. DS18B20的形状和内部结构DS18B20内部结构主要由四部分组成:64 位光刻 ROM 、温度传感器、非挥发的温度报警触发器TH 和 TL 、配置寄存器; DS18B20的管脚排列如下 :图 4-1-1 DS18B20形状图引脚定义:(1) DQ 为数字信号输入 /输出端;(2) GND 为电源地;(3) VDD为外接供电电源输入端(在寄生电源接线方式时接地);内部结构:欢迎下载精品学习资

4、源图 4-1-2 DS18B20内部结构图DS18B20有 4 个主要的数据部件:( 1)光刻 ROM 中的 64 位序列号是出厂前被光刻好的,它可以看作是该DS18B20 的地址序列码; 64 位光刻 ROM 的排列是:开头8 位( 28H)是产品类型标号,接着的48 位是该 DS18B20 自身的序列号,最终8 位是前面 56 位的循环冗余校验码( CRC=X8+X5+X4+1);光刻 ROM 的作用是使每一个 DS18B20 都各不相同,这样就可以实现一根总线上挂接多个 DS18B20 的目的;( 2) DS18B20中的温度传感器可完成对温度的测量,以12 位转化为例:用 16 位符号

5、扩展的二进制补码读数形式供应,以 0.0625 /LSB 形式表达,其中S 为符号位;表 1 DS18B20温度值格式表这是 12 位转化后得到的 12 位数据,储备在 18B20 的两个 8 比特的 RAM 中,二进制中的前面 5 位是符号位,假如测得的温度大于 0,这 5 位为 0,只要将测到的数值乘于 0.0625 即可得到实际温度;假如温度小于 0 ,这 5 位为 1 ,测到的数值需要取反加 1 再乘于 0.0625 即可得到实际温度;例如+125 的数字输出为07D0H , +25.0625 的数字输出为0191H ,-25.0625 的数字输出为FF6FH , -55 的数字输出为

6、 FC90H ;( 3)DS18B20温度传感器的储备器DS18B20 温度传感器的内部储备器包括一个高速暂存 RAM 和一个非易失性的可电擦除的 EEPRAM, 后者存放高温度和低温度触发器 TH 、TL 和结构寄存器;( 4)配置寄存器该字节各位的意义如下:低五位始终都是 1 , TM 是测试模式位,用于设置DS18B20 在工作模式仍是在测试模式;在DS18B20 出厂时该位被设置为 0,用户不要去改动;R1 和 R0 用来设置辨论率,如下表所示:(DS18B20出厂时被设置为 12 位)表 2 配置寄存器结构TMR1R011111表 3 温度值辨论率设置表欢迎下载精品学习资源R1R0辨

7、论率温度最大转换时间009 位93.75ms0110位187.5ms1011位375ms1112位750ms3. 高速暂存储备器高速暂存储备器由 9 个字节组成,其安排如表5 所示;当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存储备器的第0 和第 1 个字节;单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如表 1 所示;对应的温度运算:当符号位S=0 时,直接将二进制位转换为十进制;当S=1 时,先将补码变为原码,再运算十进制值;表 2 是对应的一部分温度值;第九个字节是冗余检验字节;表 4 DS18B20暂存寄存器分布寄存器内容字节地址温度值低位0

8、温度值高位1高温限值 TH2低温限值 TL3配置寄存器4保留5保留6保留7CRC 检验8依据 DS18B20 的通讯协议,主机掌握DS18B20完成温度转换必需经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位胜利后发送一条ROM 指令,最终发送 RAM 指令,这样才能对 DS18B20 进行预定的操作;复位要求主CPU 将数据线下拉500 微秒,然后释放, DS18B20收到信号后等待 16 60 微秒左右,后发出 60 240 微秒的存在低脉冲,主 CPU 收到此信号表示复位胜利;表 5 ROM 指令表指 令商定代码功 能读 ROM33H读 DS1820ROM中的编码(即64

9、位地址)发出此命令之后,接着发出64 位 ROM 编码,拜访单总线欢迎下载精品学习资源符合 ROM55H搜寻 ROM0F0H跳过 ROM0CCH告警搜寻命令0ECH上与该编码相对应的DS1820使之作出响应,为下一步对该 DS1820 的读写作预备;用于确定挂接在同一总线上DS1820的个数和识别64 位ROM 地址;为操作各器件作好预备;忽视 64 位 ROM 地址,直接向DS1820发温度变换命令;适用于单片工作;执行后只有温度超过设定值上限或下限的片子才做出响应;欢迎下载精品学习资源表 6 RAM 指令表指 令商定代码功 能启动 DS1820进行温度转换,转换时最长为500ms (典型欢

10、迎下载精品学习资源温度变换44H为 200ms );结果存入内部 9 字节 RAM 中;欢迎下载精品学习资源读暂存器0BEH内部 RAM 中 9 字节的内容发出向内部RAM 的 3 、4 字节写上、下限温度数据命令,写暂存器4EH紧跟该命令之后,是传送两字节的数据;复制暂存器48H将 RAM 中第 3 、4 字节的内容复制到 EEPROM 中;重调 EEPROM0B8H将 EEPROM 中内容复原到 RAM 中的第 3、4 字节;欢迎下载精品学习资源读供电方式0B4H读 DS1820的供电模式;寄生供电时DS1820 发送“0,”外接电源供电 DS1820 发送“1;”欢迎下载精品学习资源5.

11、 DS1820 使用中留意事项DS1820 虽然具有测温系统简洁、测温精度高、连接便利、占用口线少等优点,但在实际应用中也应留意以下几方面的问题:(1) 较小的硬件开销需要相对复杂的软件进行补偿,由于DS1820 与微处理器间采纳串行数据传送,因此,在对DS1820 进行读写编程时,必需严格的保证读写时序,否就将无法读取测温结果;在使用PL/M 、C 等高级语言进行系统程序设计时,对 DS1820 操作部分最好采纳汇编语言实现;(2) 在 DS1820 的有关资料中均未提及单总线上所挂DS1820 数量问题,简洁使人误认为可以挂任意多个DS1820 ,在实际应用中并非如此;当单总线上所挂DS1

12、820 超过 8 个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时要加以留意;(3) 连接 DS1820 的总线电缆是有长度限制的;试验中,当采纳一般信号电缆传输长度超过50m 时,读取的测温数据将发生错误;当将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达150m ,当采纳每 M 绞合次数更多的双绞线带屏蔽电缆时,正常通讯距离进一步加长;这种情形主要是由总线分布电容使信号波形产生畸变造成的;因此,在用DS1820 进行长距离测温系统设计时要充分考虑总线分布电容和阻抗匹配问题;(4) 在 DS1820 测温程序设计中,向 DS1820 发出温度转换命令后,程序总要等待D

13、S1820的返回信号,一旦某个DS1820 接触不好或断线,当程序读该DS1820 时,将没有返回信号,程序进入死循环;这一点在进行DS1820 硬件连接和软件设计时也要赐予肯定的重视;测温电缆线建议采纳屏蔽4 芯双绞线,其中一对线接地线与信号线,另一组接VCC 和地线,屏蔽层在源端单点接地;4.1 2 系统硬件设计硬件结构比较简洁,详细连接如图4-1-3 所示:欢迎下载精品学习资源图 4-1-3 硬件系统结构4.1.3 软件系统设计DSl8B20 必需严格依据单总线通信协议,以保证数据的完整性;该协议定义了几种时隙类型:初始化、应答、写 1、写 0、读 1、读 0;除了应答时隙全部这些时隙都

14、是有主机发出;总线上所传输的全部命令和数据都是字节的低位在前;(1) 初始化时隙复位时隙和应答时隙;在初始化过程中,主机发送复位脉冲 最短为 480 s 的低电平信号 接着,释放总线并进入接收状态;当总线被释放后上拉电阻将总线拉高;DSl8B20在检测到总线的上升沿之后等待 15-60us 接着发出应答脉冲 低电平连续 60-240 s ;(2) 读和写时隙在写时隙期间,主机向 DS18B20写入数据;而在读时隙期间,主机读入来自DS18B20的数据;在每一个时隙,总线只能传输一位数据;存在两种写时隙,即写 1 和写 0;主机在写 1 时隙向 DS18B20写入规律 1;而在写 0 时隙向 D

15、S18B20写入规律 0;全部写时隙至少需要60S,而且两次写 l 时隙之间至少需要l S 的复原时间;两种写时隙均以主机拉低总线开头;产生写 1 时隙:主机拉低总线后,必需在15uS 内释放总线;然后由上拉电阻将总线拉至高电平;产生写 0 时隙:主机拉低总线后,必需在整个时隙期间保持低电平 至少 60S);在写时隙开头后的 1 5 60 S 期间, DSl8B20采样总线的状态;假如总线为高电,就规律 1 被写入 DSl8B20;假如总线为低电平,就 0 规律被写入 DSl8B20;读时隙: DSl8B20 只能在主机发出读时隙时才能向主机传送数据;所以主机在发出读数据命令后,必需立刻产生读

16、时隙,以便DSl8B20 能够传送数据;全部读时隙至少60s,且在两次独立的读时隙之间至少需要1 S 的复原时间;欢迎下载精品学习资源每次读时隙由主机发起,拉低总线至少1S;在主机发起读时隙之后, DSl8B20 开头在总线上传送 1 或 0;如 DS18B20发送 1,就保持总线为高电平;如发送O,就拉低总线;当传送 0 时, DSl8B20 在该时隙终止时释放总线,再由上拉电阻将总线拉回闲暇高电平状态;DS18B20发出的数据在读时隙下降沿起始后的1 5uS 内有效,因此主机必需在读时隙开头后的 15S 内释放总线,并且采样总线状态;其程序流程图如下图所示;图 4-1-3 DS18B20程

17、序流程所以在软件设计方面,我们主要是读取温度函数和温度显示函数的编写;1 、读取温度函数欢迎下载精品学习资源图 4-1-4 读温度子程序流程图图 4-1-5 温度转换子程序流程图void Read_TemperatureifInit_DS18B20=1 /DS18B20故障DS18B20_IS_OK=0;欢迎下载精品学习资源elseWriteOneByte0xcc;/ 跳过读取 DS18B20的系列号WriteOneByte0x44;/启动温度转换Init_DS18B20;WriteOneByte0xcc;/ 跳过读取 DS18B20的系列号WriteOneByte0xbe;/ 读取温度寄存器

18、Temp_Value0 = ReadOneByte;/ 温度低 8 位Temp_Value1 = ReadOneByte; / 温度高 8 位DS18B20_IS_OK=1;欢迎下载精品学习资源上述代码中,未读取DS18B20的系列号;2 、温度显示函数void Display_Temperatureuchar i ;/ 延时值和负数标志uchar t = 150, ng = 0;/ 高 5 位全为 1 (0XF8 )就为负数,为负数时取反加1 ,并设置负数标识ifTemp_Value1&0xf8=0xf8Temp_Value1 = Temp_Value1;Temp_Value0 = Temp

19、_Value0+1;ifTemp_Value0=0x00Temp_Value1+;欢迎下载精品学习资源/负数标识置 1ng = 1 ;/ 查表得到温度小数部分Display_Digit0 = df_TableTemp_Value0&0x0f;/ 猎取温度整数部分(高字节中的低3 位和低字节中高4 位,无符号)CurrentT = Temp_Value0&0xf04 | Temp_Value1&0x074;/ 将整数部分分解为 3 位待显示的显示数字Display_Digit3 = CurrentT/100;Display_Digit2 = CurrentT%100/10;Display_Dig

20、it1 = CurrentT%10;/ 刷新 LCD 显示缓冲Current_Temp_Display_Buffer11 = Display_Digit0 + 0;Current_Temp_Display_Buffer10 = .;Current_Temp_Display_Buffer9 = Display_Digit1 + 0;Current_Temp_Display_Buffer8 = Display_Digit2 + 0;Current_Temp_Display_Buffer7 = Display_Digit3 + 0;/ 高位为零时不显示ifDisplay_Digit3 = 0Curr

21、ent_Temp_Display_Buffer7 = ;ifDisplay_Digit2 = 0&Display_Digit3=0 Current_Temp_Display_Buffer8 = ;/ 负数符号显示在恰当的位置欢迎下载精品学习资源ifngifCurrent_Temp_Display_Buffer8 = Current_Temp_Display_Buffer8 = -;else ifCurrent_Temp_Display_Buffer7 = Current_Temp_Display_Buffer7 = -;欢迎下载精品学习资源elseCurrent_Temp_Display_Bu

22、ffer6 = -;欢迎下载精品学习资源/ 在第一行显示标题Set_LCD_POS0x00;fori=0 ;i16 ;i+Write_LCD_DataTemp_Disp_Titlei;/ 在其次行显示当前温度Set_LCD_POS0x40;fori=0 ;i16 ;i+Write_LCD_DataCurrent_Temp_Display_Bufferi;欢迎下载精品学习资源/ 显示温度符号Set_LCD_POS0x4D;Write_LCD_Data0x00;Set_LCD_POS0x4E;Write_LCD_DataC; 课堂小结这节课我们主要介绍了温度传感器DS18B20的工作特点,掌握指令

23、以及应用方法;着重分析了读取温度函数的设计和温度显示函数的编写;为我们学习其他温度传感器打下了肯定的基础; 完整程序代码#include #include #define uint unsigned int#define uchar unsigned char#define delayNOP _nop_;_nop_ ;_nop_ ;_nop_ ; sbit DQ = P33 ;sbit LCD_RS = P20;sbit LCD_RW = P21;sbit LCD_EN = P22;uchar code Temp_Disp_Title=CurrentTempzxb;uchar Current_

24、Temp_Display_Buffer= Temp = ;/ 温度字符uchar code Temperature_Char8 = 0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00;/温度小数位对比表uchar code df_Table=0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9;uchar CurrentT = 0;/当前读取的温度整数部分uchar Temp_Value=0x00,0x00;/ 从 DS18B20读取的温度值uchar Display_Digit=0,0,0,0; / 待显示的各温度数位bit DS18B20_IS_OK

25、= 1; / 传感器正常标志void DelayXusuint xuchar i ;whilex-fori=0 ;i200 ;i+ ;bit LCD_Busy_Checkbit result ;LCD_RS = 0 ;LCD_RW = 1 ;LCD_EN = 1 ;delayNOP ;result = bitP0&0x80;LCD_EN=0 ;欢迎下载精品学习资源return result ;void Write_LCD_Commanduchar cmdwhileLCD_Busy_Check;LCD_RS = 0 ;LCD_RW = 0 ;LCD_EN = 0 ;_nop_ ;_nop_ ;P

26、0 = cmd ;delayNOP ;LCD_EN = 1 ;delayNOP ;LCD_EN = 0 ;void Write_LCD_Datauchar datwhileLCD_Busy_Check;LCD_RS = 1 ;LCD_RW = 0 ;LCD_EN = 0 ;P0 = dat ;delayNOP ;LCD_EN = 1 ;delayNOP ;LCD_EN = 0 ;void LCD_InitialiseWrite_LCD_Command0x01;DelayXus5;Write_LCD_Command0x38;DelayXus5;Write_LCD_Command0x0c;Dela

27、yXus5;Write_LCD_Command0x06;DelayXus5;void Set_LCD_POSuchar posWrite_LCD_Commandpos|0x80;void Delayuint xwhile-x ;uchar Init_DS18B20/初始化欢迎下载精品学习资源uchar status ;DQ = 1 ;Delay8 ;DQ = 0 ;Delay90 ;DQ = 1 ;Delay8 ;status=DQ ;Delay100 ;DQ = 1 ;return status ;uchar ReadOneByte/读一个字节uchar i,dat=0 ;DQ = 1 ;_

28、nop_ ;fori=0 ;i= 1 ;DQ = 1 ;_nop_ ;_nop_ ;ifDQdat |= 0X80 ;Delay30 ;DQ = 1 ;return dat ;void WriteOneByteuchar dat /写一个字节uchar i ;fori=0 ;i= 1 ;void Read_Temperature/读取温度欢迎下载精品学习资源ifInit_DS18B20=1 /DS18B20故障DS18B20_IS_OK=0;欢迎下载精品学习资源elseWriteOneByte0xcc;/ 跳过读取 DS18B20的系列号WriteOneByte0x44;/启动温度转换Init

29、_DS18B20;WriteOneByte0xcc;/ 跳过读取 DS18B20的系列号WriteOneByte0xbe;/ 读取温度寄存器Temp_Value0 = ReadOneByte;/ 温度低 8 位Temp_Value1 = ReadOneByte; / 温度高 8 位DS18B20_IS_OK=1;欢迎下载精品学习资源void Display_Temperature/在 LCD 上显示当前温度uchar i ;/延时值和负数标志 uchar t = 150, ng = 0;/高 5 位全为 1 (0XF8 )就为负数,为负数时取反加1 ,并设置负数标识ifTemp_Value1&

30、0xf8=0xf8Temp_Value1 = Temp_Value1;Temp_Value0 = Temp_Value0+1;ifTemp_Value0=0x00Temp_Value1+;ng = 1 ; / 负数标识置 1/查表得到温度小数部分Display_Digit0 = df_TableTemp_Value0&0x0f;/猎取温度整数部分(高字节中的低3 位和低字节中高4 位,无符号)CurrentT = Temp_Value0&0xf04 | Temp_Value1&0x074;/将整数部分分解为 3 位待显示的显示数字Display_Digit3 = CurrentT/100;Di

31、splay_Digit2 = CurrentT%100/10;Display_Digit1 = CurrentT%10;/刷新 LCD 显示缓冲Current_Temp_Display_Buffer11 = Display_Digit0 + 0;Current_Temp_Display_Buffer10 = .;Current_Temp_Display_Buffer9 = Display_Digit1 + 0;Current_Temp_Display_Buffer8 = Display_Digit2 + 0;Current_Temp_Display_Buffer7 = Display_Digi

32、t3 + 0;/高位为零时不显示ifDisplay_Digit3 = 0欢迎下载精品学习资源Current_Temp_Display_Buffer7 = ;ifDisplay_Digit2 = 0&Display_Digit3=0 Current_Temp_Display_Buffer8 = ;/ 负数符号显示在恰当的位置欢迎下载精品学习资源ifngifCurrent_Temp_Display_Buffer8 = Current_Temp_Display_Buffer8 = -;else ifCurrent_Temp_Display_Buffer7 = Current_Temp_Display

33、_Buffer7 = -;欢迎下载精品学习资源elseCurrent_Temp_Display_Buffer6 = -;欢迎下载精品学习资源/在第一行显示标题Set_LCD_POS0x00;fori=0 ;i16 ;i+Write_LCD_DataTemp_Disp_Titlei;/在其次行显示当前温度Set_LCD_POS0x40;fori=0 ;i16 ;i+Write_LCD_DataCurrent_Temp_Display_Bufferi;/显示温度符号Set_LCD_POS0x4D;Write_LCD_Data0x00;Set_LCD_POS0x4E;Write_LCD_DataC;void mainLCD_Initialise;Read_Temperature;Delay50000 ;Delay50000 ;while1Read_Temperature;ifDS18B20_IS_OKDisplay_Temperature;DelayXus100;欢迎下载精品学习资源欢迎下载

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁