低功耗

74 views
Skip to first unread message

bernard

unread,
Jun 10, 2012, 8:28:37 AM6/10/12
to rt-thread用户组
这两天在折腾低功耗,真心不好做,在为3.8mA电流奋斗

一般芯片分好几种模式,例如:
mode 1: 运行模式
mode 2: 关core
mode 3: 关core及其他外设频率
mode 4: 改关的都关了,没其他可关了

mode 4相当于最省电了,底电流与芯片设计相关,关到OS都不能起作用
mode 3则好些,有个计数器可以跑,这样可以对OS进行些时间方面的补偿。

那么一般运用时,通常采用什么模式来运行?mode 4最省电,但也相当于把OS给关闭了。有做过的经验人说说吗?



Best Regards,
Bernard Xiong

xTao

unread,
Jun 10, 2012, 9:40:45 AM6/10/12
to rt-threa...@googlegroups.com
我做过MSP430的低功耗,原理应该是差不多的。
最低的一档,就像你说的mode4,什么都关了,除了中断,系统需要有一些中断事件激活。
稍高的一档,就是系统还有某个时钟活着,这样可以相当于有一个RTC,定时检查执行一些操作,但是是靠时钟中断来控制的,主程序实际是停止的。

我个人觉得,像电视摇控器这种应用,可以用最低的一档。
其它的应用应该用稍高的一档,保证系统有个时钟在运行,主程序可以停止工作(当然中断是用来激活主程序的,主程序运行完,就继续低功耗)。
我感觉低功耗,就是尽量降低系统的active时间,做到该运行时运行,不该运行时就睡着,同时能够维持系统RAM中的数据。

2012/6/10 bernard <bernar...@gmail.com>:

bernard

unread,
Jun 10, 2012, 11:25:55 AM6/10/12
to rt-threa...@googlegroups.com
谢谢xTao,
这样看起来,mode 4也确实会使用了,特别是一些对时间敏感性要求低的场合。只是这样会对OS tick造成混乱,如果对OS tick不怎么关心,倒是也可以使用。

王宇

unread,
Jun 10, 2012, 8:13:07 PM6/10/12
to rt-threa...@googlegroups.com
是做hart方面(4-20ma电流环)的吧

amsl

unread,
Jun 10, 2012, 8:14:07 PM6/10/12
to rt-thread-cnusers
曾经研究过使用DSP设计里氏硬度计。使用电子开关控制低功耗。平时不工作关闭电源,只让RTC在3V电池下工作。需要工作时触发下电子开关(手持设备,手工按下一个键),电子开关产生一个单稳态供电状态,DSP在这个周期内复位进入工作状态,并通过IO锁定电子开关进入全稳定状态。不知道这个方法对你有没有用。
 

 
 
发件人: bernard
发送时间: 2012-06-10 23:25
收件人: rt-thread-cnusers
主题: Re: 低功耗

bernard

unread,
Jun 10, 2012, 8:44:39 PM6/10/12
to rt-threa...@googlegroups.com

这个是完全关闭电源吧,这样上一次的状态就没有了,而且恢复时间也长。

因为手头的板子太一般了,底电流只能做到1.8mA,还到不了微安级别,打算重新弄个板子。efm32的分支倒是做了部分低功耗特性,不知道电流能够到多少。大家一般产品中应用电流在多少?



~~from android phone

amsl

unread,
Jun 10, 2012, 9:37:00 PM6/10/12
to rt-thread-cnusers
是的,搞得那个设备是使用干电池供电,平时要断电。你的应用要一直在1.8mA下工作,这个没有应用过。可不可每充电一段时间,再工作一会,检测到电量降低后再进入断电呢,就像手机的待机模式。似乎这么小的电流也不能持续工作啊。
 

 
 
发件人: bernard
发送时间: 2012-06-11 08:44
收件人: rt-thread-cnusers
主题: Re: 回复: Re: 低功耗

amsl

unread,
Jun 10, 2012, 10:00:39 PM6/10/12
to rt-thread-cnusers
像MSP这种芯片,低功耗可以做到微安级。其它芯片没有试过,以前用过AVR,手册上讲功耗很低,实测好像在5ma以上,记不清了。消耗电流的地方主要在IO口外围电路上,尽量不要用上拉电阻。这个需要看电路怎么设计的。
 

 
 
发件人: amsl
发送时间: 2012-06-11 09:37
收件人: rt-thread-cnusers
主题: 回复: Re: 低功耗

sernia.zhou

unread,
Jun 10, 2012, 10:08:28 PM6/10/12
to rt-thread-cnusers
我们的产品,有一款是用MSP430做的,待机的功耗在1uA以下,是用纽扣电池工作的。工作电流脉冲峰值是15mA左右。这个待机功耗是用的LPM3模式,利用内部的VLOCLK进行的定时唤醒。只不过这个不需要带系统,只是一个很简单的传感器而已。如果考虑到系统的tick,可以考虑用类似VLOCLK的这种专用的低功耗定时器来做定时唤醒用。
 
2012-06-11

sernia.zhou

发件人:amsl
发送时间:2012-06-11 10:02
主题:回复: 回复: 低功耗
收件人:"rt-thread-cnusers"<rt-threa...@googlegroups.com>
抄送:

amsl

unread,
Jun 10, 2012, 10:25:28 PM6/10/12
to rt-thread-cnusers
是的,推荐老大用MSP,做低功耗的一般都选它。还有你的应用是要一直工作呢,还是可以适当待机呢,两种模式功耗差很多。如果要一直工作,可以用降频代替待机。
 

 
 
发件人: sernia.zhou
发送时间: 2012-06-11 10:08
收件人: rt-thread-cnusers
主题: 回复: 低功耗

Lin Shao

unread,
Jun 10, 2012, 10:48:59 PM6/10/12
to rt-threa...@googlegroups.com
像功能手机一般都处于 mode4 模式; 只剩下 RTC 电压域的电路在工作;这种模式 ARM 停了,软件自然也是不运行的;
RTC 域的硬件定时器以及部分 GPIO 能够将系统从 mode4 模式唤醒,并切换到其它模式,然后 ARM 能够重新运行;

bernard

unread,
Jun 10, 2012, 10:54:48 PM6/10/12
to rt-threa...@googlegroups.com
1. ARM方面有efm32,这个推荐说功耗很低。另外fujitsu也有低功耗芯片,打算申请个样片来进行。
2. 是做低功耗RTOS框架补丁,而不是针对一款具体的产品(现在使用的是Fujitsu芯片)。

mode 4现在看下来,确实可以使用。虽然使用后,OS tick会不准,但功耗方面确实能够降下来。如果系统中有定时器工作,则需要使用mode 3。当OS tick不准的时候,则RTC缓冲功能不可用。

winfeng_hs

unread,
Jun 11, 2012, 2:46:21 AM6/11/12
to rt-threa...@googlegroups.com
低功耗方式:
1 降速运行,这个配合外设做起来比较复杂
2 待机,内存内容保持不变,CPU进入低功耗状态,外设停止,中断激活
3 睡眠,内存内容及现场数据存入硬盘,CPU进入低功耗状态,外设停止,终端激活,硬盘内容读入内存,继续运行

王宇

unread,
Jun 11, 2012, 4:06:45 AM6/11/12
to rt-threa...@googlegroups.com
arm-cm3推荐 ADuCM360/ADuCM361 ,24bit AD,12bit DA,ower Consumption
MCU Active Mode: Core consumes 290µA / MHz
Active Mode: 1.0mA (All peripherals active), core
operating at 500KHz

Power down mode: 4µA (WU Timer Active)
On-Chip Peripherals
UART, I2C and 2 x SPI Serial I/O
16-bit PWM Controller
19-Pin Multi-Function GPIO Port
2 General Purpose Timers
Wake-up Timer/Watchdog Timer
Multi-Channel DMA and Interrupt Controller

Hu Kyle

unread,
Jun 11, 2012, 6:08:04 AM6/11/12
to rt-threa...@googlegroups.com

OS Tick或许可以考虑用RTC Tick算出来补上?

bernard

unread,
Jun 11, 2012, 8:09:49 AM6/11/12
to rt-threa...@googlegroups.com
RTC tick粒度太粗了

Hu Kyle

unread,
Jun 11, 2012, 10:13:21 PM6/11/12
to rt-threa...@googlegroups.com
我的意思是说在halt前把RTC tick保存下来,唤醒时再读取RTC tick,然后根据RT_TICK_PER_SECOND算出漏掉的tick补上,这样虽然粒度大点,但是基本上可以保证软定时器不会漏掉。

Grissiom

unread,
Jun 11, 2012, 10:39:48 PM6/11/12
to rt-threa...@googlegroups.com
2012/6/12 Hu Kyle <kyle....@gmail.com>

我的意思是说在halt前把RTC tick保存下来,唤醒时再读取RTC tick,然后根据RT_TICK_PER_SECOND算出漏掉的tick补上,这样虽然粒度大点,但是基本上可以保证软定时器不会漏掉。


这样做最大误差是负一秒,而且貌似只会少,不会多,也就是有系统误差……

不过其实也应该看是怎么个用法了。如果要是中断驱动,而不是时钟驱动的应用,这个误差都无所谓……



--
Cheers,
Grissiom

bernard

unread,
Jun 11, 2012, 10:41:35 PM6/11/12
to rt-threa...@googlegroups.com
目前是打算做成这样:
有定时器存在的时候,进入mode 3模式;没有定时器存在时,进入mode 4模式。

这样就可以进入很低的功耗了。

Grissiom

unread,
Jun 11, 2012, 10:42:50 PM6/11/12
to rt-threa...@googlegroups.com
2012/6/12 bernard <bernar...@gmail.com>

目前是打算做成这样:
有定时器存在的时候,进入mode 3模式;没有定时器存在时,进入mode 4模式。

这样就可以进入很低的功耗了。


再加入 tickless 吧,这样在 mode3 里也能省点 ;)



--
Cheers,
Grissiom

Grissiom

unread,
Jun 11, 2012, 10:46:04 PM6/11/12
to rt-threa...@googlegroups.com
2012/6/12 Grissiom <chaos....@gmail.com>

2012/6/12 bernard <bernar...@gmail.com>
目前是打算做成这样:
有定时器存在的时候,进入mode 3模式;没有定时器存在时,进入mode 4模式。

这样就可以进入很低的功耗了。


再加入 tickless 吧,这样在 mode3 里也能省点 ;)

啊,不对…… 也就是说没有 systick 了?嘿嘿……



--
Cheers,
Grissiom

bernard

unread,
Jun 11, 2012, 10:56:48 PM6/11/12
to rt-threa...@googlegroups.com
tickless实际上意义不大,进低功耗模式哪来的tick啊

Grissiom

unread,
Jun 11, 2012, 10:58:35 PM6/11/12
to rt-threa...@googlegroups.com
2012/6/12 bernard <bernar...@gmail.com>
tickless实际上意义不大,进低功耗模式哪来的tick啊


嗯,那就明白了~



--
Cheers,
Grissiom

Lin Shao

unread,
Jun 11, 2012, 11:33:03 PM6/11/12
to rt-threa...@googlegroups.com
再继续问下,mode 3 的情况下 OS 还在跑吗? 还是只有硬件计数器在运行?

Grissiom

unread,
Jun 11, 2012, 11:44:33 PM6/11/12
to rt-threa...@googlegroups.com
2012/6/12 Lin Shao <qiuyi...@gmail.com>

再继续问下,mode 3 的情况下 OS 还在跑吗? 还是只有硬件计数器在运行?

 
以 stm32 为例:

The STM32F10xxx devices feature three low-power modes:
● Sleep mode (CPU clock off, all peripherals including Cortex-M3 core peripherals like
NVIC, SysTick, etc. are kept running)
● Stop mode (all clocks are stopped)
● Standby mode (1.8V domain powered-off)

mode 2 应该是 sleep  mode,mode 3 应该是 stop mode 吧,mode4 应该是 stop mode 吧…… 这是我的猜测,不知道熊大那里是怎么分的。

照这样来看,mode3里也都没有计数器了……



--
Cheers,
Grissiom

Hu Kyle

unread,
Jun 11, 2012, 11:53:22 PM6/11/12
to rt-threa...@googlegroups.com
Stop mode下LSI还跑着的吧。

bernard

unread,
Jun 12, 2012, 12:00:09 AM6/12/12
to rt-threa...@googlegroups.com
进低功耗OS都不跑了,然后由中断进行唤醒。mode 3相当于有个低功耗的计数器在走;mode 4则什么都不走,仅接受有限唤醒源进行唤醒。

STM32是3种状态,富士通是4种状态,NXP是5种状态。

在富士通上应该能够顺利进入到1.8mA电流的情况,如果还需要继续下降,则要考虑电路的情况了。 

周四会去shlug与小奕继续讨论一些细节性的问题

曹绪龙

unread,
Jun 14, 2012, 9:01:53 PM6/14/12
to rt-threa...@googlegroups.com
也可以参考linux内核下的NoTick模式,即按需设定时钟,唤醒后修订系统的墙上时钟和系统tick,这样进入休眠时可以根据实际情况选择进入休眠模式。

Grissiom

unread,
Jun 14, 2012, 11:33:00 PM6/14/12
to rt-threa...@googlegroups.com
2012/6/15 曹绪龙 <sss...@gmail.com>
也可以参考linux内核下的NoTick模式,即按需设定时钟,唤醒后修订系统的墙上时钟和系统tick,这样进入休眠时可以根据实际情况选择进入休眠模式。


这个就是 tickless。但是实际上在 mode3 里已经没有 tick 了。所以我觉得在对功耗要求极高的情况下应该是 interrupt driven 的模式而不是 tick driven 的模式了。也就是 thread_delay 是对功耗有害的。



--
Cheers,
Grissiom

bernard

unread,
Jun 14, 2012, 11:54:23 PM6/14/12
to rt-threa...@googlegroups.com
这样一套低功耗框架是能够自动处理是tick驱动还是中断驱动的。

昨晚和小奕再仔细讨论过了,基本上问题不太大了,会先行在MB9BF506芯片上实现出来,然后再使用EFM32低功耗的板子进行最终的低功耗测试。

Pan Xiaoku

unread,
Jun 15, 2012, 11:10:15 AM6/15/12
to rt-threa...@googlegroups.com
老大手里面有EFM32的STK了吧?

bernard

unread,
Jun 15, 2012, 11:42:40 AM6/15/12
to rt-threa...@googlegroups.com
EFM32 STK?这个是什么东西,我目前没有EFM32相关的资料,小奕那边有。

曹绪龙

unread,
Jun 19, 2012, 4:14:01 AM6/19/12
to rt-threa...@googlegroups.com
对于有些实际的应用系统确实需要周期性唤醒完成一定任务,周期性唤醒可以使用mcu自身的rtc也可以使用外部rtc,如果使用外部rtc则无论何时都可以进入最低功耗模式,使用tickless系统的好处是,当休眠时如果当前没有周期性的定时器任务则直接进入最低功耗模式。在实际工程中是以功耗和任务妥协到一个可以接受情况为最优。

在 2012年6月15日 上午11:33,Grissiom <chaos....@gmail.com>写道:

onelife

unread,
Jun 23, 2012, 12:49:57 AM6/23/12
to rt-threa...@googlegroups.com
EFM32 分支的低功耗部分俺以前和 Bernard 兄通过电邮讨论过,在那次讨论之后还没有更新的进展。以下是总结。

昨天俺在 EFM32 上简单尝试了一下: http://youtu.be/BmrRHs16mAI (新浪视频,俺传不上去。总失败,被墙了?

先简单介绍一下,EFM32 的 EMU(Energy Management Unit)。EFM32 有四个能量模式:
  • EM0:clock 全开
  • EM1:关闭 core clock,可被高速和低速外设中断唤醒
  • EM2:关闭 core 和高速外设 clock,可被低速外设中断唤醒
  • EM3:关闭 core 、高速和低速外设 clock,可被 pin interrupt 等少数中断唤醒
  • (以上模式, RAM 的内容均被保留)
  • EM4:只保留 backup RTC 的 clock,reset 唤醒
俺的小实验方法是这样:
俺增加了一个名为“EMU”的 thread 和三个 semaphores 对应EM2、3、4。EMU thread 比 idle thread 高一个优先级(当然,以后应该和 idle thread 合并);三个 semaphore 的初始值为一个足够大的数。
EMU thread 执行一个循环
  • 先检查 EM2,token 都在就检查 EM3,否则进入 EM1;
  • 若 EM3 的 token 都在就检查 EM4,否则进入 EM2;
  • 若 EM4 的 token 都进入 EM4,否则进入 EM3
每个 thread 和其他必要的地方,在初次执行时 take 三个 semaphore 各一个 token。不使用高速外设时 release EM2 token,不使用低速外设时 release EM3 token,?时 release EM4 token(还没考虑)。
然后,为了进入 EM2 俺把产生 system tick 中断的活交给了低速 timer,关闭了SysTick 中断。

下一步的考虑:
  • 俺觉得 rt_timer_list 不为空时,不可停止 system tick 中断(即进入 EM3)—— 会睡过头。如果这样,那么
    • rt_timer_list 为空时,可否停止 system tick?
    • 周期性的任务可否使用低速 timer 中断(可能需要一个排序的 list),以避免进入 rt_timer_list?
    • 非周期性的任务,若等待时间较长可否使用低速 timer 中断(可能需要一个排序的 list),以避免进入 rt_timer_list?
  • 若使用外部 RAM,在进入 EM2、3时,应启用自刷新(self-refresh)。若无此功能或想更,在 release token 之前,如必要应保存状态
  • 优化执行最频繁的 functions ,如 rt_interrupt_enter()、rt_interrupt_leave() 等
补充:到目前为止俺还没有进入 EM4 的需要,不知各位遇到类似的需要多不多。另外,俺也没有迫切的进入 EM3 的需要,因为俺的项目基本都要执行周期性的任务,各位呢?


Regards,
onelife


2012/6/19 曹绪龙 <sss...@gmail.com>
1E0.gif

bernard

unread,
Jun 23, 2012, 1:00:29 AM6/23/12
to rt-threa...@googlegroups.com
onelife, 
你那边需要的低功耗情况在多少uA?在EFM32下,EM4模式也会保留RTC的clock,那么至少有一个秒级别的定时器可以使用。最好的方式是能够有一个精度与OS Tick一致或更高精度的定时器可以使用。

因为EFM32出众的低功耗特性,我也打算着去弄一个来看看,以及是否能够应用到产品中。


Best Regards,
Bernard Xiong
1E0.gif

onelife

unread,
Jun 25, 2012, 5:58:35 AM6/25/12
to rt-threa...@googlegroups.com
下图是俺以前做的测试。用 Energy Micro 的软件做的,不是用安培表测的。结果是 MCU 本身的耗电情况。

Inline image 1

Inline image 2

RTC 的精度实在是不够用吧。


Regards,
onelife


2012/6/23 bernard <bernar...@gmail.com>
em1.png
em2.png
1E0.gif

enzhi chen

unread,
Jul 24, 2012, 5:42:33 AM7/24/12
to rt-threa...@googlegroups.com
为什么不用STM32L系列呢,这个不就是低功耗系列吗?我跑UCOSII的时候功耗只有10uA!

在 12-6-25,onelife<onelif...@gmail.com> 写道:
1E0.gif

bernard

unread,
Jul 24, 2012, 7:36:19 AM7/24/12
to rt-threa...@googlegroups.com
stm32l,听别人吐槽说,从低功耗升起来时间很长。
1E0.gif
Reply all
Reply to author
Forward
0 new messages