MCU低功耗设计(三)产品
F),我们先看看SX1278官方宣称的能耗值:
序号 | 1 | 2 | 3 | 4 | |||
模式 | Sleep | Standby | Receive | Transmit | |||
20dBm | 17dBm | 13dBm | 7dBm | ||||
能耗 | 0.2 uA | 1.6 mA | 12 mA | 120 mA | 87 mA | 29 mA | 20 mA |
实际产品中,MCU+RF的整机功耗如下呢?我们继续看实验数据:
实验5:MCU配置所有I/O引脚为低功耗模式,通过SPI总线设置RF进入Sleep模式,MCU关闭SPI时钟和恢复SPI总线引脚到低功耗模式,进入Halt。
结果:整机功耗=0.6 uA。
在《MCU低功耗设计(二)实践》中,我们知道MCU进入Halt模式,功耗为0.4 uA;再加上RF在Sleep模式下的0.2 uA,一共0.6 uA。
实验6:MCU配置所有I/O引脚为低功耗模式,通过SPI总线设置RF进入Standby模式,MCU关闭SPI时钟和恢复SPI总线引脚到低功耗模式,进入Halt。
结果:整机功耗=1.493 mA。
这个1.493 mA的功耗,就是RF在Standby模式下的功耗,因为此时MCU功耗仅0.4 uA,几乎可以忽略了。
实验7:MCU配置所有I/O引脚为低功耗模式,通过SPI总线设置RF进入Receive模式(该模式可以长久保持),MCU关闭SPI时钟和恢复SPI总线引脚到低功耗模式,进入Halt。
结果:整机功耗=15.97 mA。
当RF处于Receive侦听模式下功耗大到近16 mA,这个数据远大于MCU全速运行的功耗(约5 mA)。
实验8:MCU配置所有I/O引脚为低功耗模式,通过SPI总线设置RF进入Transmit模式,MCU执行WFI(Waitfor Interrupt)指令节能,当发送结束后MCU唤醒,循环发送数据帧。分别测试发送功率为:+20dBm on PA_BOOST和+7dBm on RFO_LF下的功耗值:
结果:+20dBm on PA_BOOST=123mA, +7dBm on RFO_LF =11mA
发射功率大的惊人吧,尤其是开启功放和调整到最大功率+20dBm时,电流达到123 mA。
三、 动态低功耗
法国SigFox和俄罗斯的一些公司经常标称抄表无线产品用2节普通AA电池可以工作10年,开始听到觉得人家要么吹牛,要么技术太高了让国人自惭形秽。人家是如何实现的呢?我们一起来看看。
从上面的实验得知,当无线产品处于Sleep模式下功耗仅0.6uA,Receive模式下功耗16mA,TX模式下功耗100mA(超长距离)。任何一种无线通信节能技术的核心是尽可能地Sleep,这样将带来极低的整机平均功耗。
看一个实例,在大多数能耗表计的无线抄读要求:大约15分钟发送一次数据帧,约100ms;4秒内能唤醒,即每400秒需要一次5ms的接收侦听;其他时间都处于Sleep休眠。以15分钟(900秒)为单位,能耗如下:
发送:100ms * 100mA= 10mA.s
接收:(900 / 4) *5ms * 16mA = 18mA.s
休眠:898s * 0.6uA= 0.54mA.s
平均功耗:(10mA.s +18mA.s + 0.54mA.s) / 900s = 0.0317mA
设2节AA电池总电能为3000mAH,能功耗的时间为:3000mAH / 0.0317mA = 94637H=10.8年。
从上述实例可以看出,要尽可能地延长无线通信产品的寿命需要以下设计原则:
l尽可能地Sleep,且Sleep下功耗尽可能地低;
l减少侦听的时间;
l提高通信成功率,尽可能地避免冲突重传。
实现上述设计,需要优秀的网络协议栈,特别是RDC(Radio Duty Cycle)层算法要合理;而协议栈和软件运行的基础是操作系统,印证了智能产品设计“三分硬件,七分软件”的规律。
iWL881A选用了功耗强大的物联网操作系统Contiki和Rime无线通信协议栈,产品的动态功耗使用Contiki的energest模块来跟踪。
Contiki系统为方便跟踪节能设计了energest模块,它能跟踪组件运行时间。它的数据结构如下图所示,energest_total_time记录组件总运行时间,energest_current_time记录组件开启时刻,energest_current_mode记录组件当前是否开启,时间的单位为rtimer_clock_t。
energest数据结构
当一个组件开启时调用ENERGEST_ON(),当该组件关闭时调用ENERGEST_OFF()。这2个动作的时序逻辑如下图所示。
energest时序逻辑
当用户需要统计组件运行时间,首先调用energest_flush()函数,它将所有组件的运行时间结算到当前时刻;然后调用energest_type_time()函数,取出对应组件的运行时间;最后可以根据组件的功率换算成消耗电能。
iWL881A使用Contiki的energest模块可以实时打印能耗跟踪信息:
CPU=5977ms, RF_TX=179ms,RF_RX=1512ms, IRQ count=30303
CPU=6023ms, RF_TX=181ms,RF_RX=1507ms, IRQ count=30304
CPU=5984ms, RF_TX=180ms,RF_RX=1497ms, IRQ count=30303
上述时间是300秒内的统计值,它说明:CPU大约6000 / 1000 / 300 * 100%=2%占空比,RF的发射大约180 / 1000 / 300 * 100%=0.06%的占空比,RF的接收大约1500 / 1000 / 300 * 100%=0.5%的占空比,中断次数约30300 / 300=101次(测试系统包含100Hz的“心跳”时钟)。
四、 组网低功耗
无线产品在
MCU低功耗设 相关文章:
- MCU低功耗设计(一)理论(11-11)
- MCU低功耗设计(二)实践(11-11)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)