MCU低功耗设计(三)产品
关键词:
低功耗设计, 无线通信产品, LoRa长距离, Contiki系统, 能耗实时跟踪
引言:
能耗对电池供电的产品来说是一个重大问题。一旦电能耗尽设备将“罢工”。在《MCU低功耗设计(一)理论》中,我们介绍了节能的原理;在《MCU低功耗设计(二)实践》中,实測了STM8L151C8的低功耗值。
本文介绍无线通信产品的低功耗设计,首先实測MCU与射频芯片I/O设置的功耗,然后測试射频芯片不同模式下功耗,其次使用Contiki系统的energest模块实时跟踪能耗值,最后总结低功耗设计和展望无线组网中低功耗特征。Let’sgo!
一、 无线通信产品简单介绍
iWL881A无线通信模块是“长沙市锐米通信科技有限公司(www.rimelink.com)”的LoRa长距离低功耗产品(例如以下图),它内嵌高效强大的物联网操作系统Contiki,支持星型/树型/MESH网络。与公司的集中器和云server组成“端管云”系统。典型应用场景为:居民抄表(水/电/气)、路灯控制、工厂採集、安全报警等。
该款微功耗无线通信产品应用场景基本由电池供电,因此低功耗设计成了首个“主战场”。
MCU选用了ST公司超低功耗处理器STM8L151C8。射频芯片(RF)使用Semtech公司SX1278,该芯片基于LoRa扩频通信原理,在同等条件下能够取得比FSK调制近4倍的距离。
关于LoRa通信原理。请參考作者的博文《LoRa无线通信设计(一)原理》。
MCU与RF通过SPI总线连接,此外另一些控制引脚,SX1278硬件原理图例如以下:RF通过DIO0~5引脚给MCU发通知信号,NSS / SCK/ MISO / MOSI是SPI总线,NRRST是MCU复位RF的引脚。
二、 静态低功耗
1. MCU引脚配置
真正做产品的低功耗,第一件事情是正确配置I/O引脚,单个I/O口的耗能达到mA级。换句话说,假设不小心漏掉或错配置一个I/O引脚。那么它将无情地“吞噬”你苦心经营MCU低功耗模式而得到的成绩。
MCU的I/O引脚大致分成4类:未连接、接3.3V、IC输入MCU输出、IC输出MCU输入。接下来,我们进行一系列实验。看看这4类引脚该怎样配置。
:接3.3V的I/O口。须要设置成Output,
high level个上接3.3V的I/O引脚实验结果例如以下:
push-pull: 0.4 uA
open-drain:29.3 uA
结论:对于接3.3V的I/O,节能模式下须要设置成 Output, push-pull, highlevel。
种模式,各能耗数据例如以下:
Input, floating: 536 uA
Input, pull-up: 0.4 uA
Output, open-drain, low level: 0.4 uA
Output, open-drain, high-impedance level: 530 uA
Output, push-pull, low level: 0.4 uA
Output, push-pull, high level: 0.4 uA
结论:悬空I/O引脚能够设置为:(1)Input, pull-up; (2)Output, push-pull, high(low) level。
种模式,能耗例如以下:
Input, floating: 489 uA
Input, pull-up: 482 uA
Output, open-drain, low level: 660 uA
Output, open-drain, high-impedance level: 494 uA
Output, push-pull, low level: 661 uA
Output, push-pull, high level: 574 uA
结论: 外部IC为输入的引脚,节能模式下须要设置成:Input, pull-up。
种模式,能耗例如以下:
Input, floating: 430 uA
Input, pull-up: 574 uA
结论: 外部IC为输出的引脚。节能模式下须要设置成:Input, floating。
MCU引脚配置基本原则总结例如以下:
图例 |
特性 |
节能配置模式 |
|
IC输出。MCU输入:输入,浮动 |
Input floating, no external interrupt |
|
IC输入,MCU输出:输入,上拉 |
Input pull-up, no external interrupt |
|
3.3V引脚:输出,上拉,高电平 |
Output push-pull, high level, 2MHz |
|
未接引脚:输出,上拉。低电平 |
Output push-pull, low level。2MHz |
实际开发中。我们能够先用Excel表列举出MCU引脚的配置需求,针对上述4种类型。借鉴“地铁线路”颜色(英国人的发明)标识。如:
No. |
I/O |
名称 |
低功耗配置 |
作用 |
14 |
PE0 |
LORA_RXTX |
Input floating, no external interrupt |
RF输出:指示RF当前是接收或发送状态 |
15 |
PE1 |
NC |
Output push-pull, low level, 2MHz |
|
16 |
PE2 |
LORA_RXE |
Input pull-up, no external interrupt |
RF接收:RXE=1。TXE=0 |
17 |
PE3 |
UART2_RX |
Output push-pull, low level, 2MHz |
没有使用 |
18 |
PE4 |
UART2_TX |
Output push-pull, low level, 2MHz |
|
19 |
PE5 |
NC |
Output push-pull, low level, 2MHz |
|
20 |
PD0 |
LED1 |
Output push-pull, high level, 2MHz |
外接3.3V。设置push-pull高电平节能 |
2. RF工作模式
对于无线通信产品,贪婪地“吞噬”电能是射频模块(RF)。我们先看看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的整机功耗例如以下呢?我们继续看实验数据:
: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。
:MCU配置全部I/O引脚为低功耗模式,通过SPI总线设置RF进入Standby模式,MCU关闭SPI时钟和恢复SPI总线引脚到低功耗模式,进入Halt。
结果:整机功耗=1.493 mA。
这个1.493 mA的功耗。就是RF在Standby模式下的功耗。由于此时MCU功耗仅0.4 uA。差点儿能够忽略了。
:MCU配置全部I/O引脚为低功耗模式,通过SPI总线设置RF进入Receive模式(该模式能够长久保持),MCU关闭SPI时钟和恢复SPI总线引脚到低功耗模式,进入Halt。
结果:整机功耗=15.97 mA。
当RF处于Receive侦听模式下功耗大到近16 mA,这个数据远大于MCU全速执行的功耗(约5 mA)。
: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秒内能唤醒,即每4秒须要一次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的“心跳”时钟)。
四、 组网低功耗
无线产品在组网的执行中。往往会有冲突重传、睡眠唤醒、路由转发等多种通信模式。这里能耗的跟踪将更具挑战性,请继续关注“长沙市锐米通信科技有限公司”的LoRa组网系列博文。
相关文章:
《MCU低功耗设计(一)理论》
《MCU低功耗设计(二)实践》
欢迎增加“LoRaWAN论坛”http://lora.timeddd.com/forum.php
MCU低功耗设计(三)产品的更多相关文章
- (数字IC)低功耗设计入门(一)
低功耗设计这个专题整理了好久,有一个月了,有图有证据: 然而最近一直有些烦心事.郁闷事,拖延了一下,虽然现在还是有点烦,但是还是先发表了吧.下面我们就来聊聊低功耗设计吧,由于文章比较长,因此我就不一次 ...
- (数字IC)低功耗设计入门(一)——低功耗设计目的与功耗的类型
低功耗设计这个专题整理了好久,有一个月了,有图有证据: 然而最近一直有些烦心事.郁闷事,拖延了一下,虽然现在还是有点烦,但是还是先发表了吧.下面我们就来聊聊低功耗设计吧,由于文章比较长,因此我就不一次 ...
- SAP Marketing Cloud功能简述(三) 营销活动内容设计和产品推荐
Grace的前两篇文章: SAP Marketing Cloud功能简述(一) : Contacts和Profiles SAP Marketing Cloud功能简述(二) : Target Grou ...
- (数字IC)低功耗设计入门(三)——系统与架构级
前面讲解了使用EDA工具(主要是power compiler)进行功耗分析的流程,这里我们将介绍在数字IC中进行低功耗设计的方法,同时也结合EDA工具(主要是Design Compiler)如何实现. ...
- (数字IC)低功耗设计入门(二)——功耗的分析
前面学习了进行低功耗的目的个功耗的构成,今天就来分享一下功耗的分析.由于是面向数字IC前端设计的学习,所以这里的功耗分析是基于DC中的power compiler工具:更精确的功耗分析可以采用PT,关 ...
- (数字IC)低功耗设计入门(四)——RTL级低功耗设计
二.RTL级低功耗设计 前面介绍了系统级的低功耗设计,换句话说就是在系统级降低功耗可以考虑的方面.系统级的低功耗设计,主要是由系统级设计.具有丰富经验的人员实现,虽然还轮不到我们设计,我们了解一下还是 ...
- (数字IC)低功耗设计入门(五)——RTL级低功耗设计(续)
二.RTL级低功耗设计(续) 前面一篇博文我记录了操作数隔离等低功耗设计,这里就主要介绍一下使用门控时钟进行低功耗设计. (4)门控时钟 门控时钟在我的第一篇博客中有简单的描述,这里就进行比较详细的描 ...
- (数字IC)低功耗设计入门(六)——门级电路低功耗设计优化
三.门级电路低功耗设计优化 (1)门级电路的功耗优化综述 门级电路的功耗优化(Gate Level Power Optimization,简称GLPO)是从已经映射的门级网表开始,对设计进行功耗的优化 ...
- (数字IC)低功耗设计入门(八)——物理级低功耗设计&to be continued?
前面学习了从系统级到门级的低功耗设计,现在简单地了解了一下物理级设计.由于物理级的低功耗设计与后端有关了,这里就不详细学习了.这里主要是学习了一些基本原则,在物理级,进行低功耗设计的基本原则是: ...
随机推荐
- OpenGL坐标系之间的转换 http://blog.csdn.net/sac761/article/details/52179585
1. OpenGL 渲染管线 OpenGL渲染管线分为两大部分,模型观测变换(ModelView Transformation)和投影变换(Projection Transformation).做个比 ...
- 判断点击第几个按钮JS代码的三种方法
方法一:使用下标实现<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...
- 有关bash,我希望我能知晓的十件事
简介 我之前的一篇文章比我预想的更受欢迎,因此我想再写一篇文章来介绍一些不太知名的bash功能 正如之前所言,由于我觉得bash是一种要经常使用(且需理解)的技术,所以我在研究bash时写了一本书.虽 ...
- 【转载】appium自动化环境搭建
1.java开发环境JDK 2.android SDK(platform/platform tools/tools/build tools) 3.python下载安装(pip) 4.appium下载安 ...
- 【Redis】三、Redis安装及简单示例
(四)Redis安装及使用 Redis的安装比较简单,仍然和大多数的Apache开源软件一样,只需要下载,解压,配置环境变量即可.具体安装过程参考:菜鸟教程Redis安装. 安装完成后,通过r ...
- 2019西安多校联训 Day4
T1 大水题!!难度简单,显然的贪心策略即可,but... 思路:首先我们按与i点作战后活下来的士兵排序,然后 若当前剩余兵力足够直接减掉战斗死亡人数,如果不够就加 够再打它,但是!我们在考完试观察测 ...
- try catch影响Spring事务吗?
对于这个问题有两种情况: 1.catch只打印异常,不抛出异常 try { 数据库做添加订单表; /; 数据库减少库存; }catch (Exception e){ e.printStackTrace ...
- 搭建私有docker仓库
安装docker yum install docker 启动docker systemctl start docker 拉取registry镜像 docker pull registry 创建仓库配置 ...
- Python学习第二阶段Day2(json/pickle)、 shelve、xml、PyYAML、configparser、hashlib模块
1.json/pickle 略. 2.shelve模块 import shelve # shelve 以key value的形式序列化,value为对象 class Foo(object): de ...
- python3.x Day1 用户登录程序练习
训练1: 模拟登陆: 1. 用户输入帐号密码进行登陆 2. 用户信息保存在文件内 3. 用户密码输入错误三次后锁定用户 login2.py: #!/usr/bin/env python # -*- c ...