文章目录
在几周前,我尝试了用 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 都不需要工作,也不需要刷新屏幕,为了达到最长续航时间,就选用待机模式了。
待机模式电流
在数据手册里可以看到,3.3V 供电的情况下,开启 LSI 待机模式下只有 9.1uA 的电流。
续航预估
为了让墨水屏上的时间能及时更新,这里设置为 10 分钟刷新一次,刷新一次时间全部时间大概 3s,期间平均消耗电流为 5mA,并且待机期间,整体电流可以降到 10uA 的话,那么如果使用一块 400mA 的锂电池,可以大概计算一下理论续航可以到多久。
计算公式:
代入数值:
在这种工况下,理论续航超过一年了,已经超过我的预期了 🙈。
当然这些是在没有锂电池的自放电,以及实际工况是否如此理想的情况下计算得出的,实际续航应该是没办法到这么长的。
自动唤醒 AutoWakUp
在官方例程的 PWR/Standby_Mode 示例中,演示了通过 AWU 事件来唤醒 MCU,来继续执行代码:
但是我没太弄明白这里时间怎么计算的,幸好 AI 给了我答案 😂,在询问了 DeepSeek 之后,给了计算方法,以及如何实现更长的待机时间。
功耗优化之路
作为一个新手,PCB 原理图设计一开始也只能保障一下整体跑通,至于低功耗哪里有坑是完全不知道的,只能一步一步调试发现了。
在开始验证板进行测试的时候发现,即使已经进入休眠模式,墨水屏也进入休眠模式,电流还是有 280uA,就开始了漫漫排查路。
IPD vs. Floating
在官方例程中,Standby_Mode 会将所有 GPIO 设置为输入下拉模式(IPD)。
这理论上应该没有问题,但是不知道为什么,在我把 GPIO Mode 改成 GPIO_Mode_IN_FLOATING
后,整体功耗从 280uA 降到了 180uA,可能是因为 I2C 上拉以及墨水屏驱动板哪里还存在电流回路,导致了额外的消耗。
I2C 上拉电源
在一开始,I2C 上拉电阻也是直接连接到了电源输入上,这应该就导致了上面 Input Pull down
改成 Input Floating
之后所得到的功耗优化。
后面为了避免可能存在的 I2C 上拉损耗,我也给它加上了 PMOS 控制电源 🙈。
E-ink 休眠 vs. PMOS 关断
电子墨水屏控制器本身是有休眠模式的,但是在使用过程中,发现即使休眠了还是会存在功耗比较大的情况,在没办法确定是驱动电路的问题,还是控制器本身的问题的情况下,决定直接简单粗暴的解决,在墨水屏的供电前加上 PMOS 控制,电子墨水屏刷新完直接断电。
这样操作之后,整体功耗从 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,直接串联到电池和供电中间,刚刚好。
再测试一下功耗,就差不多从 80uA 降到了 28uA,但是这个数值一直在波动,可能跟万用表的精度以及 MCU 工作状态相关。
最终功耗测试
在修改完以上所有问题之后,最终打了块板子测试 3.3V 供电时电流,基本上可以稳定在 10 几 uA 了,下面是测试的时候,待机时电流消耗差不多 17uA。
不过这个只是瞬时电流,不能完全体现出在持续工作过程中的电流消耗,需要买个功耗分析仪才能准确测试出功耗表现和计算续航。
但是从结果上来说,我已经满意了,就算续航不到一年,总该够半年吧 🙈。
锂电池放电曲线的坑
在开始测试的时候,发现锂电池电压掉得很快,3 天左右就从 4.140V 降到 4.060V,如果按线性降到 3.7V 来算,这续航只有一个月了 😂。
不过幸好后面在降到 4.038V 时,3 天了也只降到 4.034V,这样一算,可能续航还是有一点保障的。
也许该去买个功耗分析仪来测量出准确数据了。
一点点体会
生活中常见的设备可能都是几 W 几十 W 的功耗,根本不会在意那一点点 uA 级别的电流消耗,但是在低功耗的世界里,一点点漏洞可能就会把续航干趴下,还是得正经产品的开发保持敬畏。
0 条评论。