最近一个新项目,板子尺寸有限,对传感器功耗要求也高,之前用的插件是RW1820温度传感器,位置不够了,就换成立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);                            //发送配置寄存器地址0x01
[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]          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所有,任何人未经允许禁止转载。

TMP100温度传感器相关推荐

  1. ADT7410 ±0.5℃精度温度传感器

    ■ 前言 ADT7410是一款基于SOIC封装的高精度数字温度传感器.它内部具有带隙温度参考源以及13位ADC,可以提高0.0625摄氏度的温度精度.这个温度分辨率还可以改变成16位(0.0075℃) ...

  2. 温度传感器有源电子标签设计浅析

    射频识别RFID(Radio Frequency Identification)技术是近年来开始兴起并逐渐走向成熟的一种自动识别技术.该技术以非接触式.存储容量大.识别速度快.距离远.可多卡识别等优点 ...

  3. 32读取ltc的温度值_Arduino基础入门篇29—模拟温度传感器LM35

    温度传感器就是利用物质随温度变化特性的规律,把温度转换成可输出信号的传感器,是普遍应用的传感器之一.本篇介绍模拟温度传感器-LM35. 1. LM35介绍 LM35是很常用的温度传感器元件,电路连接非 ...

  4. arduino水温度传感器数字显示_【雕爷学编程】Arduino动手做(5)---热敏温度传感器模块...

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准备逐 ...

  5. Ardino基础教程 13_温度传感器

    实验十三:温度传感器 LM35 温度传感器实验 LM35 是很常用且易用的温度传感器元件,在元器件的应用上也只需要一个LM35元件,只利用一个模拟接口就可以,难点在于算法上的将读取的模拟值转换为实际的 ...

  6. ds18b20温度传感器 lcd C语言,C程序控制18B20测温及LCD显示源码打包

    源代码中包括三个实验的源程序:18B20+1602LCD温度实验,18B20测温1602LCD显示,18b20测温数码管显示实验. 18b20测温数码管显示实验DS18B20的读写程序,数据脚P3.3 ...

  7. pt1000温度对照表_温度传感器的常用检测方法

    带M连接器的HX-RS系列可以直接连接仪表检测 温度传感器的类型很多,每种类型都有不同的检测方法. 比如说常见的温度传感器铂电阻PT100或者PT1000,最简单的办法可以用万用表测出阻值,参照阻值温 ...

  8. STM32F4 HAL库开发 -- 温度传感器(DS18B20)

    参看:<嵌入式-STM32开发指南>第三部分 外设篇 - 第2章 温度传感器DS18B20 这篇文章讲的非常详细了. 一.简介 1.概述 DS18B20 是 DALLAS 最新单线数字温度 ...

  9. 型热电偶阻值温度对照表_如何选用温度传感器

    温度传感器对于环境温度的测量非常准确,广泛应用于农业.工业.车间.库房等场所.对于温度传感器的种类非常多,不同的感温元件不同的型号,可以从厂家产品手册中获知(北京中瑞能仪表),下面将温度传感器的类型简 ...

最新文章

  1. 五分钟看懂抓包神技:DPDK
  2. PHP 端口号 是否 被占用 以及 解决方法
  3. MySQL 常用SQL优化
  4. linux下自定义dubbo的shell脚本
  5. 微服务架构之「 访问安全 」
  6. VGGNet原理和实现
  7. dom vue 加载完 执行_前端面试题Vue
  8. python中tkinter模块_使用Python中的tkinter模块作图的方法
  9. 《Go程序设计语言》- 第1章:入门
  10. 数据权限设计研究-行数据权限
  11. Mac 修改 hosts 命令,以及使其立马生效
  12. AI改变现代商业的25种方式
  13. Numpy中take的用法
  14. 微信小程序开发|宿主环境详解
  15. 手机浏览器能上网微信无法连接服务器,苹果手机微信可以上网浏览器不能
  16. python上传钉钉媒体文件_python 上传钉钉图片
  17. php正则判断数字和英文,PHP正则匹配中英文、数字及下划线的方法【用户名验证】...
  18. APP支付支付签名验证失败
  19. cad绘制正八边形_CAD怎么画正八边形 看完你学会了么
  20. 新款「超大杯」iPhone遭爆料!不止大镜头,还有1TB储存,但却不能叫iPhone13

热门文章

  1. leetcode题解(五)
  2. Jenkins基础:Jenkinsfile使用实例:14:使用docker.image进行容器部署
  3. ubuntu20.04连不上网怎么办?
  4. uva 1366 - Martian Mining(dp)
  5. FITC-RCA I,RCA120;荧光素标记蓖麻凝集素I(RCA I,RCA120)
  6. 从人脸识别到行人重识别,下一个风口
  7. python 播放本地音乐_实战项目—python实现本地音乐播放器
  8. urldecode二次解析
  9. IDEA书签,备份使用,全分支共享
  10. 白话机器学习的数学学习笔记(-)