从深度睡眠模式中醒来

电器工程 微控制器 avr msp430 低电量
2022-01-30 19:20:30

大多数微控制器(例如 AVR、MSP430、PIC 等)支持多种不同的睡眠模式。“最深”睡眠模式是一种声称功耗最低的模式(例如“断电”、“关机”),但所有时钟系统通常都在这些模式下停止,在我看来,“从它们中唤醒”是通过外部刺激(例如引脚更改中断、芯片复位)。我错过了什么吗?是否有非常低功耗的方法可以为 MCU 生成周期性唤醒信号?

假设我的目标是尽量减少功耗(即尽可能长时间地深度睡眠,尽可能短暂地保持清醒),同时定期醒来执行功能,实现这种行为的常见方法是什么?为了进一步简化问题,假设我的函数是无状态的(我不必记住过去的任何事情来执行它)。

我在 MSP430 上使用 WDT 取得了一些成功,以获得这种效果。我只是让我的主要例程成为我的函数,最后一行使看门狗定时器在一段时间后到期并进入 LPM4.5 或任何所谓的“深度睡眠”模式。最终结果是功能被执行,MCU 休眠,WDT 到期,芯片复位,令人作呕。似乎有效,只是想知道是否有一种“更好”、“更优雅”或“更节能”的方式来获得这种行为?

我还没有在 AVR 上尝试过这种方法,但我认为 AVR 中的 WDT 比 MSP430 更“耗电”,因此它对低功耗工作的吸引力可能较小。也许没有一种“通用”的低功耗方法,您必须使用给定产品线提供的工具?我知道新的 picoPower 系列有很多超棒的功能,比如事件系统和睡眠行走,如果你可以让你的应用程序适应那个结构,在某些情况下几乎不需要 CPU 唤醒......

好吧,我的游荡已经够多了,让我们来看看你们要说的话:)

编辑 说明技术的具体示例也很酷!

4个回答

大多数微控制器支持带有某种预分频器和定时器中断的低功耗 32.768 kHz 手表晶体振荡器。设置预分频器,使定时器计数缓慢,中断发生在您想要的时间段。

如果确切的时序不重要,一些微控制器还具有内置的低功耗 RC 定时器。

任何低功耗微控制器的数据表都会列出运行 32.768 振荡器(仅此而已)的电源。它非常接近于零。您可以进行数学运算,看看这是否可以接受,并将其与看门狗消耗的电流进行比较。

好的,例如在 msp430f2013 上,让我们看看数据表中的功率。

0.5 μA 几乎为零,尽管它是真正关闭模式的五倍。

有关更多详细信息,我们可以查看数据表内部。
从 LPM4(一切关闭)到 LPM3(运行振荡器)是 0.5 μA 和 1 μA 之间的差异。

假设电池是容量为 225 mAh 的 CR2032。那么 LPM4 中的待机时间约为 50 年,而 LPM3 中的待机时间约为 25 年。25 年对于许多应用来说已经足够长了,因为导通电流(在测量本身期间)占主导地位。

替代文字

一些部件具有用于唤醒的低功耗振荡器(几微安),并且一些 PIC 还具有允许引脚上非常缓慢上升的电压唤醒的硬件 - 这可以来自在睡眠之前设置的外部电容器以充电所需的唤醒时间。

带有 RTC 的 PIC 可以将 RTC 设置为警报状态,因此它将在给定时间使用外部 32.768kHz 晶振唤醒 MCU。它们在 RTC+睡眠模式下消耗约 450nA IIRC,但在 RTC 关闭时仅为 20nA。

AVR 看门狗定时器并不像您想象的那么糟糕。根据 ATTiny13A 数据表,掉电模式 @3V 下的电流消耗为 2μA(未启用 WDT)和 4μA。当然,它是 2 倍以上,但电流本身足够小,可以运行大约 6.2 年,这与电池自行退化所需的时间大致相同(来源:最佳使用日期)。

此外,几乎你在μC周围连接的任何其他东西都会吸引更多。事实上,设计这种低功耗电路最棘手的部分是在休眠期间关闭原理图其余部分的所有电流。

唤醒延迟也可以很好地配置,从 ~12ms 到 8s,如果内存服务的话。如果使用短中断程序,实际频率不会产生任何明显差异:我打开 ADC,对 1K 电位器进行采样,从结果中计算一些东西,然后重新进入睡眠状态,总体消耗没有明显变化(用一个大电容器进行平滑,以补偿我的万用表的迟缓)。

请注意,WDT 不是准确的计时工具,因此您可能需要连接外部 RTC。那些只能消耗纳安,所以它应该是一个很好的配对。事实上,如果有问题的 RTC 可以生成常规脉冲,您可以将其用作唤醒源,而不是 WDT,但会消耗一个引脚。