4. 传感器选型与功耗分析:常用传感器的功耗特性与数字接口影响

好,咱们进入第四章。这一章我打算聊聊传感器选型,以及它跟功耗之间那些「剪不断理还乱」的关系。

做低功耗物联网设备,传感器往往是耗电大户。你想想看,MCU可以睡大觉,但传感器有时候得一直开着。选错了,整个项目的功耗就崩了。我见过太多人,MCU选了个超低功耗的,结果传感器功耗是MCU的几十倍,白忙活一场。

4.1 常用传感器的功耗特性

咱们先看看几种最常见的传感器,它们的功耗到底什么水平。

4.1.1 温湿度传感器

温湿度传感器,几乎是物联网项目的标配。我个人习惯用SHT30和HDC1080这两款。

  • SHT30:测量时电流约800μA,待机时只有0.2μA。单次测量大概7ms搞定。
  • HDC1080:测量电流约1.3μA(你没看错,比SHT30低很多),待机电流100nA。

这里有个坑。SHT30虽然测量电流大,但它测得快。如果你每秒只测一次,平均功耗其实不高。HDC1080虽然测量电流小,但转换时间稍长。嗯,具体选哪个,得看你采集频率。

我的经验: 如果采集间隔超过5秒,选HDC1080更划算。如果采集间隔在1秒以内,SHT30反而更省电。我在一个环境监测项目里就吃过这个亏,一开始选了SHT30,后来发现采集频率是10秒一次,果断换成了HDC1080,整机续航提升了15%。

4.1.2 加速度传感器

加速度传感器,低功耗场景下首选是ADXL345和LIS3DH。

  • ADXL345:测量模式电流约23μA,待机0.1μA。支持FIFO,这个功能很实用。
  • LIS3DH:测量模式电流约11μA,待机0.5μA。同样支持FIFO。

为什么我特别强调FIFO?说白了,就是让传感器自己存数据,MCU不用频繁醒来读。我曾经做一个运动检测项目,MCU每10ms读一次加速度数据,功耗高得吓人。后来启用了FIFO,让传感器攒够32个数据再通知MCU,功耗直接降了70%。

4.1.3 气压传感器

气压传感器,常用的有BMP280和LPS22HB。

  • BMP280:测量模式电流约2.6μA,待机0.1μA。精度不错,但启动时间有点长。
  • LPS22HB:测量模式电流约4μA,待机0.5μA。启动快,适合需要频繁测量的场景。

我记得有个气象站项目,客户要求每10秒上报一次气压。我一开始用了BMP280,结果发现每次启动都要等10ms才能读数,这10ms里电流高达1mA。后来换成LPS22HB,启动时间缩短到3ms,功耗优化了不少。

4.1.4 气体传感器

气体传感器,这个比较特殊。像CCS811这类VOC传感器,功耗普遍偏高。

  • CCS811:测量模式电流约30mA(你没看错,是毫安),待机0.5μA。
  • SGP30:测量模式电流约48mA,待机0.5μA。

气体传感器是真正的「电老虎」。我的建议是,能不连续测量就别连续测量。我曾经做过一个空气质量监测器,让CCS811每5分钟才测一次,平时直接断电(用MOS管控制VCC),这样平均功耗才降下来。

注意: 气体传感器通常需要预热时间。CCS811需要约20分钟预热才能输出稳定数据。如果你只是偶尔上电测一下,数据可能不准。这个坑我踩过,后来加了预热逻辑才解决。

4.2 数字接口(I2C/SPI)对功耗的影响

接口选I2C还是SPI,对功耗影响其实不小。很多人觉得无所谓,但实际差别挺大的。

4.2.1 I2C接口的功耗特性

I2C是两根线(SCL、SDA),通过上拉电阻拉到VCC。上拉电阻通常选4.7kΩ或10kΩ。

  • 优点:引脚少,接线简单。支持多设备挂载。
  • 缺点:上拉电阻会持续耗电。总线空闲时,两根线都是高电平,电流通过上拉电阻流到地?不对,是流到设备引脚。实际上,I2C总线空闲时功耗很小,但通信时每翻转一次,都会消耗能量。

我算过一笔账:在3.3V供电下,4.7kΩ上拉电阻,总线空闲时电流约0.7mA(两根线)。如果总线一直空闲,这个功耗其实可以忽略。但如果你频繁通信,每次SCL翻转都会产生动态功耗。

关键点: I2C的功耗主要来自通信过程中的动态功耗。通信频率越高,功耗越大。所以,能少通信就少通信,能用一次批量读取就别分多次。

4.2.2 SPI接口的功耗特性

SPI是四根线(MOSI、MISO、SCLK、CS),没有上拉电阻。

  • 优点:通信速度快,没有上拉电阻的静态功耗。适合高速、大数据量传输。
  • 缺点:引脚多,占空间。每个设备需要独立的CS引脚。

SPI在空闲时,所有线都是高电平或低电平(取决于配置),几乎没有静态功耗。通信时,SCLK翻转产生动态功耗,但因为SPI速度通常比I2C快,所以总能量消耗反而可能更低。

举个例子:读取一个20字节的数据块。I2C在400kHz下需要约500μs,功耗约2mA。SPI在10MHz下只需要约20μs,功耗约3mA。算下来,SPI消耗的总能量只有I2C的1/10左右。

我的建议: 如果传感器数据量小(比如温湿度,一次就几个字节),I2C就够用了。如果数据量大(比如加速度计连续输出、图像传感器),果断用SPI。我在一个运动手环项目里,加速度计用SPI接口,每次读取16个字节,比用I2C省了约30%的通信功耗。

4.3 传感器选型清单

好了,说了这么多,我整理一个选型清单,方便你对照着选。

传感器类型 推荐型号 测量电流 待机电流 接口 适用场景
温湿度 SHT30 800μA 0.2μA I2C 快速采集,1秒以内间隔
温湿度 HDC1080 1.3μA 100nA I2C 低功耗,5秒以上间隔
加速度 ADXL345 23μA 0.1μA I2C/SPI 运动检测,支持FIFO
加速度 LIS3DH 11μA 0.5μA I2C/SPI 超低功耗,支持FIFO
气压 BMP280 2.6μA 0.1μA I2C/SPI 高精度,启动慢
气压 LPS22HB 4μA 0.5μA I2C/SPI 快速启动,频繁测量
气体 CCS811 30mA 0.5μA I2C VOC检测,需预热
气体 SGP30 48mA 0.5μA I2C VOC+CO2检测,需预热

4.4 选型时的几个关键原则

最后,我总结几条选型原则,都是血泪教训换来的。

  1. 先看待机电流,再看测量电流。 因为大部分时间传感器都在待机。待机电流差一个数量级,整机续航就差很多。
  2. 能选数字接口就别选模拟接口。 模拟传感器需要ADC,ADC本身也耗电。而且模拟信号容易受干扰,后期调试很麻烦。
  3. 优先选带FIFO的传感器。 这个前面说过了,FIFO能大幅减少MCU的唤醒次数,是低功耗设计的利器。
  4. 注意启动时间。 有些传感器启动慢,启动期间电流很大。如果你频繁开关,启动功耗可能比测量功耗还高。
  5. 气体传感器要谨慎。 功耗高、预热时间长,不是所有场景都适合。能用其他方式替代(比如用MOS管控制供电),就别让它一直开着。
一句话总结: 传感器选型,不是选功耗最低的,而是选「在满足性能要求的前提下,系统总功耗最低」的。这个「系统总功耗」包括传感器自身功耗、通信功耗、MCU唤醒功耗,甚至包括电源转换效率。嗯,这个咱们后面章节再细聊。

好,这一章就到这里。下一章咱们聊聊电源管理芯片的选型,那又是一个大坑。到时候我讲讲怎么选DCDC和LDO,以及怎么避免「电源纹波把传感器搞死」这种尴尬事。