基于DS18B20的多点测温方案详解

1、ds18b20多点测温方案概述ds18b20 单线数字温度传感器,多个 ds18b20 可以并联在惟一的单线上,实现多点测温。具体方案主要是以下步骤:
写一个获取ds18b20的64位序列号的keil工程,获取需要连接的ds18b20器件的序列号。uint8_t rom[8];void read_rom(void){ uint8_t index; ds18b20_init(); ds18b20_write_byte(0x33); for (index = 0;index < 8;index++) { rom[index] = ds18b20_read_byte(); }}将获取到的ds18b20器件的序列号通过数组保存起来,再新建一个获取多点温度的keil工程,发送匹配64位序列号,获取温度即可。uint8_t rom1[8]={0x28,0x0b,0xac,0x79,0x97,0x16,0x03,0x39};uint8_t rom2[8]={0x28,0xf2,0x80,0x79,0x97,0x15,0x03,0x51};uint8_t rom3[8]={0x28,0xff,0x64,0x79,0x97,0x16,0x03,0x8b};uint8_t rom4[8]={0x28,0x6f,0x31,0x79,0x97,0x15,0x03,0x28};uint8_t rom5[8]={0x28,0x1c,0x5c,0x79,0x97,0x15,0x03,0x14};uint8_t rom6[8]={0x28,0xed,0xd8,0x79,0x97,0x16,0x03,0xd0};uint8_t rom7[8]={0x28,0x94,0xb0,0x79,0x97,0x15,0x03,0xa4};uint8_t rom8[8]={0x28,0xae,0xd5,0x79,0x97,0x16,0x03,0x10};uint8_t rom9[8]={0x28,0xc0,0xc2,0x79,0x97,0x16,0x03,0xed};void ds18b20_matrom(unsigned char a) { unsigned char j; //用于循环 ds18b20_init(); ds18b20_write_byte(0x55); //发送匹配rom命令 if(a==1) { for(j=0;j< 8;j++) { ds18b20_write_byte(rom1[j]);//发送18b20的序列号,先发送低字节 } } if(a==2) { for(j=0;j< 8;j++) { ds18b20_write_byte(rom2[j]);//发送18b20的序列号,先发送低字节 } } if(a==3) { for(j=0;j< 8;j++) { ds18b20_write_byte(rom3[j]);//发送18b20的序列号,先发送低字节 } } if(a==4) { for(j=0;j< 8;j++) { ds18b20_write_byte(rom4[j]);//发送18b20的序列号,先发送低字节 } } if(a==5) { for(j=0;j< 8;j++) { ds18b20_write_byte(rom5[j]);//发送18b20的序列号,先发送低字节 } } if(a==6) { for(j=0;j< 8;j++) { ds18b20_write_byte(rom6[j]);//发送18b20的序列号,先发送低字节 } } if(a==7) { for(j=0;j< 8;j++) { ds18b20_write_byte(rom7[j]);//发送18b20的序列号,先发送低字节 } } if(a==8) { for(j=0;j< 8;j++) { ds18b20_write_byte(rom8[j]);//发送18b20的序列号,先发送低字节 } } if(a==9) { for(j=0;j< 8;j++) { ds18b20_write_byte(rom9[j]);//发送18b20的序列号,先发送低字节 } }}int16_t read_temp(uint8_t rom) //启动温度转换,读取温度{ u8 tl=0,th=0; if(ds18b20_init()) return 0x7fff; ds18b20_write_byte(0xcc); ds18b20_write_byte(0x44);//启动ds18b20进行温度转换 ds18b20_matrom(rom);//匹配ram,适用多个点的情况 ds18b20_write_byte(0xbe);//读ds18b20内部ram中9字节的温度数据 tl=ds18b20_read_byte();//读低8位 th=ds18b20_read_byte();//读高8位 return (th< <8)+tl;}float get_ntemp(uint8_t rom){ float temp=0; temp = read_temp(rom); temp = temp*0.0625; return temp;}2、ds18b20简介2.1、ds18b20特点采用单总线的接口方式测量温度范围宽,测量精度高 ds18b20 的测量范围为 -55 ℃ + 125 ℃ ; 在 -10 +85°c范围内,精度为 ± 0.5°c 。供电方式灵活 ds18b20可以通过内部寄生电路从数据线上获取电源。因此,当数据线上的时序满足一定的要求时,可以不接外部电源,从而使系统结构更趋简单,可靠性更高。测量参数可配置 ds18b20 的测量分辨率可通过程序设定 9~12 位。负压特性电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。掉电保护功能 ds18b20 内部含有 eeprom,在系统掉电以后,它仍可保存分辨率及报警温度的设定值。ds18b20具有体积更小、适用电压更宽、更经济、可选更小的封装方式,更宽的电压适用范围,适合于构建自己的经济的测温系统,因此也就被设计者们所青睐。2.2、总线挂接多个ds18b20的具体原因ds18b20主要由4部分组成:
64 位rom温度传感器非挥发的温度报警触发器th和tl配置寄存器rom中的64位序列号是出厂前被光刻好的,它可以看作是该ds18b20的地址序列码,每个ds18b20的64位序列号均不相同。64位rom的排的循环冗余校验码(crc=x^8+x^5+x^4+1)。
rom
rom的作用是使每一个ds18b20都各不相同,这样就可以实现一根总线上挂接多个ds18b20的目的。
2.3、多个ds18b20的供电方式在ds18b20温度转换期间通过寄生电源供电
寄生电源供电
用外部电源对ds18b20供电
外部电源供电
3、ds18b20工作时序详解主要以下四个方面:
初始化时序写时序读时序获取温度详细解析如下。
3.1、初始化时序
初始化时序
主机首先发出一个480-960微秒的低电平脉冲,然后释放总线变为高电平,并在随后的480微秒时间内对总线进行检测,如果有低电平出现说明总线上有器件已做出应答。若无低电平出现一直都是高电平说明总线上无器件应答。
uint8_t ds18b20_init(void){ uint8_t ack=1; ds18b20_dq_out(); dq_l(); delay_us(500); dq_h(); delay_us(60); ds18b20_dq_in(); ack=dq_read(); delay_us(180); dq_h(); return ack;}做为从器件的ds18b20在一上电后就一直在检测总线上是否有480-960微秒的低电平出现,如果有,在总线转为高电平后等待15-60微秒后将总线电平拉低60-240微秒做出响应存在脉冲,告诉主机本器件已做好准备。若没有检测到就一直在检测等待。
3.2、读/写时序
读写时序
写周期最少为60微秒,最长不超过120微秒。写周期一开始做为主机先把总线拉低1微秒表示写周期开始。随后若主机想写0,则继续拉低电平最少60微秒直至写周期结束,然后释放总线为高电平。若主机想写1,在一开始拉低总线电平1微秒后就释放总线为高电平,一直到写周期结束。而做为从机的ds18b20则在检测到总线被拉底后等待15微秒然后从15us到45us开始对总线采样,在采样期内总线为高电平则为1,若采样期内总线为低电平则为0。
static void ds18b20_write_byte(uint8_t byte){ uint8_t i; ds18b20_dq_out(); for(i=0 ; i>1; }}对于读数据操作时序也分为读0时序和读1时序两个过程。读时隙是从主机把单总线拉低之后,在1微秒之后就得释放单总线为高电平,以让ds18b20把数据传输到单总线上。ds18b20在检测到总线被拉低1微秒后,便开始送出数据,若是要送出0就把总线拉为低电平直到读周期结束。若要送出1则释放总线为高电平。主机在一开始拉低总线1微秒后释放总线,然后在包括前面的拉低总线电平1微秒在内的15微秒时间内完成对总线进行采样检测,采样期内总线为低电平则确认为0。采样期内总线为高电平则确认为1。完成一个读时序过程,至少需要60us才能完成
static uint8_t ds18b20_read_byte(){ uint8_t i; uint8_t byte; //byte为要接收到的数据 for(i=0 ; i >= 1; if(dq_read()) byte |= 0x80; delay_us(50); } return byte;}

“2020年陕西智能传感器与物联网应用暨智能制造发展论坛”西安高新区举办
如何避免合约市场中的各种骗局
WaveSurfer 3054示波器介绍
韩国5G用户或已超过900万
TI推出TMS320C6748 DSP与OMAP-L138 DSP+ARM处理器
基于DS18B20的多点测温方案详解
MOEMS封装是什么?有哪些要求?
新能源汽车是共享出行最好的方式
浅谈同轴空间合成技术
自动驾驶传感器竞争格局解析
带有集成操纵杆和按钮的光学编码器
Ansys Mechanical软件:创建了一个使用有限元分析(FEA)进⾏结构分析的集成平台
智能家居 就是以科技简化生活
为什么源极跟随器可以产生有源电感的效果呢?
一句话帮你理解 typedef 的用法
LED驱动芯片AP2403 三功能降压恒流驱动器工作原理
新冠疫情影响 三星大规模生产5纳米EUV芯片计划被打乱
nova8系列来袭,升级EMUI 11体验同款功能
交流电桥的平衡条件是什么?
聚势共赢 英飞凌携手虹软共绘3D TOF产业新图景