返回列表 发新帖我要提问本帖赏金: 10.00元(功能说明)

TMP100温度传感器

[复制链接]
3101|3
 楼主| laocuo1142 发表于 2021-1-22 10:33 | 显示全部楼层 |阅读模式
本帖最后由 laocuo1142 于 2021-1-22 11:32 编辑

#申请原创#   @21小跑堂 @21小跑堂 @21小跑堂
TMP100温度传感器最近一个新项目,板子尺寸有限,对传感器功耗要求也高,之前用的插件是RW1820温度传感器,位置不够了,就换成立TMP100贴片式的SOT23-6封装,完整的料号是TMP100AQDBVRQ1TI出品的。看了一下资料精度±1,实际测试差不多2的样子,不过一般测温项目够用了。
详细参数:
供电电压:2.7V~5V
接口类型:I2C
分辨率:9 bit to 12 bit
工作温度:-40~125
工作电流:150uA
操作频率:100 KHz /400KHz/3.4MHz

你如果需要低功耗的话,直接初始化为9bit,关断模式。关断模式就是采集转换一次温度数据之后,传感器自动进入cut down模式。
uint8 TMP100_init(void)
{
    I2CStart();                             //启动I2C总线


          I2CWriteByte(slaveaddr);                //发送从器件地址 90 写寄存器
          if(I2CWaitACK()==0)                                 //从地址无响应
          {
                  return 0;
          }                  
          I2CWriteByte(0x01);                            //发送配置寄存器地址0x01
          if(I2CWaitACK()==0)                                 //从地址无响应
          {
                  return 0;
          }
          I2CWriteByte(0x01);                                //写配置寄存器0x81????  0x01  设置为关断模式 读9bit
          if(I2CWaitACK()==0)                                 //从地址无响应
          {
                  return 0;
          }      
          I2CStop();
    return 1;
}
然后每次读就转换一次,这样功耗是非常低的。
uint8 Read_TMP100(void)
{
        volatile uint8 tempH,tempL;
    uint8 i=0;
    uint8 Tmp[2];
     /*--设置温度探头寄存器--*/
        I2CStart();                             //启动I2C总线


          I2CWriteByte(slaveaddr);                //发送从器件地址 90 写寄存器
          if(I2CWaitACK()==0)                                 //从地址无响应
          {
                  return 0;
          }                  
          I2CWriteByte(0x01);                            //发送配置寄存器地址0x01
          if(I2CWaitACK()==0)                                 //从地址无响应
          {
                  return 0;
          }
          I2CWriteByte(0x81);                                //写配置寄存器0x81????  0x81  设置为读9bit
          if(I2CWaitACK()==0)                                 //从地址无响应
          {
                  return 0;
          }      
          I2CStop();


  /*--开始读取数据操作--*/
          I2CStart();                             //启动I2C总线        
          //I2CWriteByte(slaveaddr+1);              //发送从器件地址
    I2CWriteByte(slaveaddr);                  //发送从器件地址
          if(I2CWaitACK()==0)                                 //从地址无响应
          {
                  return 0;
          }
    I2CWriteByte(0x00);                      //读取温度寄存器
          if(I2CWaitACK()==0)                                 //从地址无响应
          {
                  return 0;
          }
                        
///**********************等待转换完毕**************************/         
        DelayMCU_ms(40);
         
/***********************读取温度***************************/
    I2CStart();
   
    I2CWriteByte(slaveaddr+1);                      //读取温度寄存器
          if(I2CWaitACK()==0)                                 //从地址无响应
          {
                  return 0;
          }
          tempH = I2CReadByte();                                //读取温度高字节        
          I2CSendAck();


          tempL = I2CReadByte();                                //读取低字节        
          I2CSendNoAck();         
   
          I2CStop();
//    RealTemp = (int16)(((uint16)tempH<<8)+tempL);
    RealTemp = (int16)(((uint16)tempH<<3)+((tempL>>7)*4));
          return 1;
}
9bit采集的话,主要就是0.5为一个采集间隔,按着这个传感器的精度,其实也差不多了。
待机功耗确实非常低,官方标称的0.1uA,确实是的,不需要另外加电源控制了。

温度寄存器和温度计算方法。
对应的计算公式:
温度值= 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产品越来越多了,温度是一个常规的参数,这个传感器也是一个好选择。
在电路上,只需要在通讯线上接上拉电阻就行了,如下图:


  


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

打赏榜单

21小跑堂 打赏了 10.00 元 2021-01-22
理由:恭喜通过原创文章审核!请多多加油哦!

海洋无限 发表于 2021-1-24 19:21 | 显示全部楼层
溜溜溜,谢谢分享
nemo11 发表于 2021-4-14 20:55 | 显示全部楼层
您好。请问可以将iic程序发一下吗?如果方便的话主控芯片可以告知分享学习的话,就更好了,感激
 楼主| laocuo1142 发表于 2021-4-15 08:17 | 显示全部楼层
nemo11 发表于 2021-4-14 20:55
您好。请问可以将iic程序发一下吗?如果方便的话主控芯片可以告知分享学习的话,就更好了,感激 ...

这个是项目用的,IIC的例程到处都是呀
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1296

主题

6239

帖子

15

粉丝
快速回复 在线客服 返回列表 返回顶部