资讯详情

TMP100温度传感器

在最近的一个新项目中,板材尺寸有限,传感器功耗要求高。以前使用的插件是RW如果1820温度传感器位置不够,则更换TMP100贴片式的SOT23-6包装,完整的料号为TMP100AQDBVRQ1,TI制作的。看数据的准确性。±1℃,实际测试几乎是2℃然而,一般的温度测量项目就足够了。详细参数:供电电压:2.7V~5V接口类型:I2C分辨率:9 bit to 12 bit工作温度:-40℃~125℃工作电流:150uA

操作频率:100 KHz /400KHz/3.4MHz

[size=14.0000pt]如果需要低功耗,可以直接初始化为9bit,关闭模式。关闭模式是传感器在收集和转换温度数据后自动进入cut down模式。[size=13.3333px]uint8 TMP100_init(void)[size=13.3333px]{ [size=13.3333px] I2CStart(); //启动I2C总线[size=13.3333px][size=13.3333px] I2CWriteByte(slaveaddr); //从设备地址发送 90 写寄存器[size=13.3333px] if(I2CWaitACK()==0) //地址无响应[size=13.3333px] { [size=13.3333px] return 0;[size=13.3333px] } [size=13.3333px] I2CWriteByte(0x01); //发送配置寄存器地址x01[size=13.3333px] if(I2CWaitACK()==0) //地址无响应[size=13.3333px] { [size=13.3333px] return 0;[size=13.3333px] }[size=13.3333px] I2CWriteByte(0x01); //写配置寄存器0x81?????0x01设置为关闭模式 读9bit[size=13.3333px] if(I2CWaitACK()==0) //地址无响应[size=13.3333px] { [size=13.3333px] return 0;[size=13.3333px] } [size=13.3333px] I2CStop();[size=13.3333px] return 1;[size=13.3333px]} 然后每次读一次,功耗很低。[size=13.3333px]uint8 Read_TMP100(void)[size=13.3333px]{ [size=13.3333px] volatile uint8 tempH,tempL;[size=13.3333px] uint8 i=0;[size=13.3333px] uint8 Tmp[2];[size=13.3333px] /*--设置温度探头寄存器--*/[size=13.3333px] I2CStart(); //启动I2C总线[size=13.3333px][size=13.3333px] I2CWriteByte(slaveaddr); //从设备地址发送 90 写寄存器[size=13.3333px] if(I2CWaitACK()==0) //地址无响应[size=13.3333px] { [size=13.3333px] return 0;[size=13.3333px] } [size=13.3333px] &bsp;      I2CWriteByte(0x01);                            //发送配置寄存器地址0x01[size=13.3333px]          if(I2CWaitACK()==0)                                 //从地址无响应[size=13.3333px]          { [size=13.3333px]                  return 0;[size=13.3333px]          }[size=13.3333px]          I2CWriteByte(0x81);                                //写配置寄存器0x81????  0x81  设置为读9bit[size=13.3333px]          if(I2CWaitACK()==0)                                 //从地址无响应[size=13.3333px]          { [size=13.3333px]                  return 0;[size=13.3333px]          }      [size=13.3333px]          I2CStop();[size=13.3333px][size=13.3333px]  /*--开始读取数据操作--*/[size=13.3333px]          I2CStart();                             //启动I2C总线        [size=13.3333px]          //I2CWriteByte(slaveaddr+1);              //发送从器件地址[size=13.3333px]    I2CWriteByte(slaveaddr);                  //发送从器件地址[size=13.3333px]          if(I2CWaitACK()==0)                                 //从地址无响应[size=13.3333px]          { [size=13.3333px]                  return 0;[size=13.3333px]          }[size=13.3333px]    I2CWriteByte(0x00);                      //读取温度寄存器[size=13.3333px]          if(I2CWaitACK()==0)                                 //从地址无响应[size=13.3333px]          { [size=13.3333px]                  return 0;[size=13.3333px]          }[size=13.3333px]                        [size=13.3333px]///**********************等待转换完毕**************************/         [size=13.3333px]        DelayMCU_ms(40);[size=13.3333px]         [size=13.3333px]/***********************读取温度***************************/[size=13.3333px]    I2CStart();[size=13.3333px]   [size=13.3333px]    I2CWriteByte(slaveaddr+1);                      //读取温度寄存器[size=13.3333px]          if(I2CWaitACK()==0)                                 //从地址无响应[size=13.3333px]          { [size=13.3333px]                  return 0;[size=13.3333px]          }[size=13.3333px]          tempH = I2CReadByte();                                //读取温度高字节        [size=13.3333px]          I2CSendAck();[size=13.3333px][size=13.3333px]          tempL = I2CReadByte();                                //读取低字节        [size=13.3333px]          I2CSendNoAck();         [size=13.3333px]   [size=13.3333px]          I2CStop();[size=13.3333px]//    RealTemp = (int16)(((uint16)tempH<<8)+tempL);[size=13.3333px]    RealTemp = (int16)(((uint16)tempH<<3)+((tempL>>7)*4));[size=13.3333px]          return 1;[size=13.3333px]} 9bit采集的话,主要就是0.5℃为一个采集间隔,按着这个传感器的精度,其实也差不多了。  [size=18.6667px]待机功耗确实非常低,官方标称的0.1uA,确实是的,不需要另外加电源控制了。 [size=10.5000pt] [size=10.5000pt]

温度寄存器和温度计算方法。

对应的计算公式:

温度值= T11×27 + T10×26 +T9×25 +T8×24+T7×23+T6×22+T5×21+

T4×20+T3×2-1+T2×2-2+T1×2-3+T0×2-4

选择12 Bits 位精度时,有效位为T11~T0,最低位从T0开始,故分辨率为0.0625℃

选择11 Bits 位精度时,有效位为T11~T1,最低位从T1开始,故分辨率为0.125℃

选择10 Bits 位精度时,有效位为T11~T2,最低位从T2开始,故分辨率为0. 25℃

选择9 Bits 位精度时,有效位为T11~T3,最低位从T3开始,故分辨率为0.5℃

我这个项目使用的是9位数据,这样的转换时间是最短的。

实际测试我都是延时40ms,去采集12bit的温度,也是可以正常采集的。

IIC的程序我就暂时不贴了,如果有需要可以留言。现在流行IOT产品越来越多了,温度是一个常规的参数,这个传感器也是一个好选择。

在电路上,只需要在通讯线上接上拉电阻就行了,如下图:

--------------------- 作者:laocuo1142 链接:https://bbs.21ic.com/icview-3067126-1-1.html 来源:21ic.com 此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

标签: px3981传感器pt类型传感器电阻温度传感器精度

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台