电流15uA续航1年?CH32V003低功耗应用尝试

在几周前,我尝试了用 CH32V003 这颗几毛钱的 MCU 来驱动电子墨水屏(文章见 《7毛钱的 MCU CH32V003 驱动 1.54 寸电子墨水屏》),主要是为了想试试低功耗应用的开发。

之前一直玩的 ESP32,总体来说功耗还是比较大,在查了 CH32V003 的手册之后,看到它的待机模式电流可以到小于 10uA,就准备试试看。

PS. 这篇主要是从一个新手的角度去了解了一下低功耗应用开发,以及记录在功耗优化中踩的坑,如有不足或差错,还请指点。

应用设计功能目标

之前已经完成了墨水屏的驱动,大概设计了一些这个设备的功能目标:

  • 每 10 分钟更新一次屏幕,显示与标记时间的间隔
  • 如果没有按住功能键,唤醒时只更新屏幕
  • 续航可以到达半年以上

另外这里用了 RTC 芯片作为时钟,查了数据手册,功耗 0.1uA 以内,就不用额外考虑了 🙈。

最近一直在用的 MCU 是 CH32V003,比较熟悉,主控还是选它了。

CH32V003 的低功耗模式

CH32V003 官网:https://www.wch.cn/products/CH32V003.html

根据 CH32V003 的数据手册,它提供了两种低功耗模式:

  • 睡眠模式
  • 待机模式

这里因为应用本身在大部分时间里,MCU 都不需要工作,也不需要刷新屏幕,为了达到最长续航时间,就选用待机模式了。

ch32v003-low-power-dev-2

待机模式电流

在数据手册里可以看到,3.3V 供电的情况下,开启 LSI 待机模式下只有 9.1uA 的电流。

ch32v003-low-power-dev-3

续航预估

为了让墨水屏上的时间能及时更新,这里设置为 10 分钟刷新一次,刷新一次时间全部时间大概 3s,期间平均消耗电流为 5mA,并且待机期间,整体电流可以降到 10uA 的话,那么如果使用一块 400mA 的锂电池,可以大概计算一下理论续航可以到多久。

计算公式:

ch32v003-low-power-dev-4

代入数值:

ch32v003-low-power-dev-5

在这种工况下,理论续航超过一年了,已经超过我的预期了 🙈。

当然这些是在没有锂电池的自放电,以及实际工况是否如此理想的情况下计算得出的,实际续航应该是没办法到这么长的。

自动唤醒 AutoWakUp

在官方例程的 PWR/Standby_Mode 示例中,演示了通过 AWU 事件来唤醒 MCU,来继续执行代码:

ch32v003-low-power-dev-6

但是我没太弄明白这里时间怎么计算的,幸好 AI 给了我答案 😂,在询问了 DeepSeek 之后,给了计算方法,以及如何实现更长的待机时间。

ch32v003-low-power-dev-7

功耗优化之路

作为一个新手,PCB 原理图设计一开始也只能保障一下整体跑通,至于低功耗哪里有坑是完全不知道的,只能一步一步调试发现了。

在开始验证板进行测试的时候发现,即使已经进入休眠模式,墨水屏也进入休眠模式,电流还是有 280uA,就开始了漫漫排查路。

IPD vs. Floating

在官方例程中,Standby_Mode 会将所有 GPIO 设置为输入下拉模式(IPD)。

ch32v003-low-power-dev-8

这理论上应该没有问题,但是不知道为什么,在我把 GPIO Mode 改成 GPIO_Mode_IN_FLOATING 后,整体功耗从 280uA 降到了 180uA,可能是因为 I2C 上拉以及墨水屏驱动板哪里还存在电流回路,导致了额外的消耗。

I2C 上拉电源

在一开始,I2C 上拉电阻也是直接连接到了电源输入上,这应该就导致了上面 Input Pull down 改成 Input Floating 之后所得到的功耗优化。

ch32v003-low-power-dev-9

后面为了避免可能存在的 I2C 上拉损耗,我也给它加上了 PMOS 控制电源 🙈。

E-ink 休眠 vs. PMOS 关断

电子墨水屏控制器本身是有休眠模式的,但是在使用过程中,发现即使休眠了还是会存在功耗比较大的情况,在没办法确定是驱动电路的问题,还是控制器本身的问题的情况下,决定直接简单粗暴的解决,在墨水屏的供电前加上 PMOS 控制,电子墨水屏刷新完直接断电。

ch32v003-low-power-dev-10

这样操作之后,整体功耗从 180uA 降到了 80uA。

去掉 LDO

经过一番优化之后,发现电流还是有 80uA,这个时候将目光放到了 LDO 上,我也上网搜到了一篇文章介绍 LDO 参数在实际使用过程中可能存在的理解偏差。

电子工程师手记:超低功耗LDO选择指南https://haipeng.me/2020/08/27/ultra-low-iq-ldo-guide/

根据静态电流的定义,Iq是指没有任何负载(No Load)的情况下的接地电流消耗。所以对实际的应用而言,Iq有时就成为了一个会“骗人”的参数,因为在实际电路应用中,几乎不会出现“完全没有任何负载”的情况下。

这就简单了,CH32V003 本身是支持最大 5.5V 供电,完全可以直接从电池供电,但是因为电子墨水屏最大支持 3.7V,还是需要想办法降个压,这个时候想到了通用二极管。压降 0.5V,直接串联到电池和供电中间,刚刚好。

ch32v003-low-power-dev-11

再测试一下功耗,就差不多从 80uA 降到了 28uA,但是这个数值一直在波动,可能跟万用表的精度以及 MCU 工作状态相关。

最终功耗测试

在修改完以上所有问题之后,最终打了块板子测试 3.3V 供电时电流,基本上可以稳定在 10 几 uA 了,下面是测试的时候,待机时电流消耗差不多 17uA。

ch32v003-low-power-dev-12

不过这个只是瞬时电流,不能完全体现出在持续工作过程中的电流消耗,需要买个功耗分析仪才能准确测试出功耗表现和计算续航。

但是从结果上来说,我已经满意了,就算续航不到一年,总该够半年吧 🙈。

锂电池放电曲线的坑

在开始测试的时候,发现锂电池电压掉得很快,3 天左右就从 4.140V 降到 4.060V,如果按线性降到 3.7V 来算,这续航只有一个月了 😂。

不过幸好后面在降到 4.038V 时,3 天了也只降到 4.034V,这样一算,可能续航还是有一点保障的。

也许该去买个功耗分析仪来测量出准确数据了。

一点点体会

生活中常见的设备可能都是几 W 几十 W 的功耗,根本不会在意那一点点 uA 级别的电流消耗,但是在低功耗的世界里,一点点漏洞可能就会把续航干趴下,还是得正经产品的开发保持敬畏。

参考资料

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>