目录
- 引言
- 系统
- 硬件
- 软件
- 无线组网协议
- 无源物联网
引言
低功耗的意义自然不用多说,就像你有10块钱,你总想用它来买更多的辣条,而且辣条还要好吃,低功耗系统的实现意味着能用一样的电量,一样的资源,实现更多的功能,或者系统寿命更长,更持久,通俗点就是加量不加价。
在物联网(IoT)领域,低功耗系统的实现至关重要,因为随着IoT节点的指数级增加,IoT设备注定要更多地分布在边缘处,在靠近用户的边缘端,注定是一个资源有限的(resource-constrained)环境,这时低功耗的运用对整个系统的性能就至关重要,甚至不考虑低功耗,这个系统就运行不起来。
个人觉得对于嵌入式低功耗IoT设计的一般思路可以包括:系统、硬件、软件、协议四个部分。最后简单介绍一下前沿的无源物联网系统(从环境收集能量的无电池物联网设备)。
系统
- 根据应用,软硬件协同设计,比如应用是智能温度监测,那么可以从系统层面缩减软件和硬件,只留测温度相关的代码和外设。其实下面硬件软件有些部分也都要从系统层面思考,互相补充。
硬件
- 器件:
- 选低功耗且符合系统需求的MCU,比如esp32c3就比esp32-wroom要低不少的功耗,也能满足一般的物联网需求
- 选低功耗且符合系统需求的器件,电容电阻的型号和参数也有些讲究
- RTL级设计:
- 并行:可降低某一区域的频率
- 关键路径缩短
- 采用格雷码编码
- 操作数隔离:就是某通路没用时将其输入固定为某个值,则避免了翻转功耗
- 静态功耗:主要是漏电流在搞事情
- 多阈值工艺:逻辑单元阈值越低,速度越快,但漏电流也越大,所以在非关键路径可以选择用高阈值逻辑单元以降低漏电流
- 门控方法:在外设空闲时,直接利用门控信号给它断掉!这是最干净高效的做法
- 动态功耗:也分翻转功耗和短路功耗, 分别指信号由0至1引起的功耗和MOS管导通后的功耗
- 多电压域:一个系统中分多个电压域,如某个域是2v供电,某个域是1.5v供电
- 门控时钟:在系统的一个部分空闲时,利用门控信号关了它的时钟!这种系统肯定是异步,更灵活,但少了同步的很多好处,是个tradeoff。在硬件层,时钟是最耗能的,对时钟树进行合理的调整,能大大降低功耗
- 动态电压和动态频率调节:这是个很系统且复杂的调节方法,根据需求,将电压和频率都降到刚好能实现SOC功能的最低要求
软件
- 算法优化:这个不多谈,选用时间和空间复杂度综合较低的算法,还有尽量少用子函数,尽量都写在一起
- 利用好睡眠!!!几乎每个MCU都会有正常、睡眠、深度睡眠三个模式,深度睡眠时系统的电流可达到10uA以下。 低功耗编程最常用的一招就是间歇!就是让系统运行一会后进入睡眠,然后一会再唤醒,依次循环。对于很多的物联网应用,不需要让系统24小时都工作,比如智能温度监测,5秒上传一次数据就好了,不用每100ms就上传一次,这样我们就可以让MCU上传一次温度值后,进入睡眠,5s后,唤醒,依次循环。这是低功耗编程最高效的一招
- MCU主频降低!,MCU的工作频率越高功耗就越大,尽可能将其将为最低
- 对于一些空闲的外设,进入睡眠后,要先控制门控信号将其关掉!(比如ADC、DMA和各种传感器),不然漏电流造成的静态功耗有时会很大
- I/O口的设置,没走线的拉低,有走线的具体问题具体分析(如共阳的LED,输入如果拉低,那即使进入睡眠,也在消耗能量,这时应拉高),但不可浮空!
- 系统各个子功能的实现尽量分开,不要并行同时运行,不然会导致电流叠加,功耗很大。
无线组网协议
其实协议我们也没什么话语权,只能看哪个协议低功耗且传播距离符合需求,就可以选用。对于嵌入式DIY玩家,推荐BLE。若是工业物联网,则会根据功耗、传播距离、允许接入节点、接入速度、成本和时延等等综合选择ZigBee、LoRa、NB-IoT。
- BLE
- ZigBee
- LoRa
- NB-IoT
无源物联网
将低功耗运用到极致,就是无源物联网系统,很前沿的技术,完全白嫖环境微能量,不用电池就能为低功耗物联网设备供电,完成多样的物联网应用,甚至嵌入AI(TinyML)。
如今基于能量收集技术的物联网系统,大多采用太阳能、无线电能(RF)、动能、温差这四个source供能。太阳能和温差是直流,RF和动能是交流。一般的无源物联网系统包括能量采集器、输入电路(整流、boost)、能量管理电路(低输入电压、欠压锁定)、稳压电路、低功耗SOC 五个部分。能量收集技术的进步和低功耗系统的进步共同实现了这一充满前景的技术。