系统工程 - 记录一次调试USB设备低功耗应用的过程
文章目录
需求
最近在同客户做机械键盘的产品设计,我们SE系统工程团队为客户设计了一套使用灵动MM32F0160微控制器的机械键盘原型电路板,用于评估原型方案。随着同客户不断沟通,客户进一步细化了需求,这次对低功耗特别提了要求:根据USB规范约定,当电脑处于待机状态时,USB设备从USB线缆上获取的电流不能超过2.5mA,这个2.5mA不仅仅是MCU的工作电流,而是整个USB设备电路板的工作电流!
此前在设计键盘原型方案的时候,并未考虑低功耗的问题,电脑在待机状态下,实测键盘的功耗超过100mA。现在看来,这显然是不符合客户需求和USB规范的,因此,需要从系统层面上考虑,充分降低USB设备的功耗。
最后,经过一顿调试,使得键盘在低功耗的待机模式下耗电约0.8mA,正常工作时约16mA。如图x所示。

功耗测量方法
欲要调试低功耗,先要搭建测量低功耗的环境。本案中,将一根USB线缆的VBUS信号线从中间截断并串联电流表,以检测VBUS上的电流值。如图x所示。


分析功耗来源
分析USB电路板的功耗来源:
- MCU自身功耗
- 电路板其它电路功耗,例如板子上87颗WS2812B彩灯和LED指示灯
- 板子漏电或者短路???
另外,还有LDO和为适配WS2812B电平转换而引入的NMOS管。按理说LDO功耗极低,NMOS所有的引脚都是高电平的情况下,也不会产生漏电流。
LED功耗
MCU的功耗可通过软件控制,每颗WS2812B中都包含了一个灯控IC,它也是会产生功耗的,但不至于那么高(???)。
键盘参考方案中有87颗WS2812B用来产生灯效,如果焊接时间过长,则可能被损毁造成短路,而一旦器件短路,上电后很难查出是哪颗WS2812B短路,给维修造成了极大的麻烦。为解决这个问题,电路设计工程师在设计PCB的时候,曾在键盘的侧边加入了 6个0欧电阻,对应按键的的6排,让供电电流通过0欧电阻流入WS2812B。当出现短路时,可以拆除对应排的0欧电阻,以快速排查短路的WS2812B。
- 拆除六颗0欧电阻前,功耗达到了惊人的115mA。
- 逐步拆除六颗0欧电阻后,功耗降至18mA。
WS2812B的待机功耗确实不小。
除了WS2812B,电源指示灯的功耗很难被注意到。电源指示灯的串联电阻为2K欧,如果LED的正向压降为2V,在5V供电的情况下,至少有1mA的电流从电源指示灯流过,对于总功耗不能超过2.5mA的USB设备而言,1mA也是一笔巨大的支出,需要节省掉。
其余指示灯LED可由程序控制,在熄灭时不消耗额外的电流。
后续设计键盘上的背光彩灯时,可以再加入一个PMOS管,可由软件控制是否对背光灯电路供电。当进入休眠状态时,关断对背光电路的供电。
MCU功耗
去掉那六颗给WS2812B灯带供电的0欧电阻和电源指示灯后,剩下的十几毫安电流看起来就是MCU自身的功耗了。正常情况下,MCU消耗十几毫安的电流是正常的,但现在需要进一步降低功耗,以满足客户需求。
相当于正常运行的工作模式MCU带有多种低功耗模式,适合用于USB的低功耗方案是STOP模式(休眠CPU内核和部分外设,但可以通过中断原地唤醒),理论功耗能够低于0.5mA。
但 USB 设备有几个情况需要考虑:
- Host能让Device进入低功耗状态
- Host能让Device从低功耗状态恢复到工作状态
- Device能让Host从Suspend恢复到工作状态
如果只需要让PC主机Host唤醒Device恢复到工作状态,PC主机通过USB发送Resume中断信号,从机设备捕获到就能恢复工作状态。但Device需要能唤醒Host从Suspend恢复过来,就要求矩阵按键不能停止扫描,随时检测用户是否按下按键,判断是否退出低功耗模式,此时可选择使用降低主频的方法实现低功耗模式。
在继续调试的过程中发现,保持低速的扫描,键盘反应比较慢,体验不好。客户建议使用中断方式捕获按键输入触发唤醒。此时,将每一个列引脚都配置为推挽输出拉低电平,把每个行引脚配置为上拉输入,6个行引脚意味着6个外部中断,如此,当任意按键被按下时,总会有一个行引脚编变成低电平,触发外部中断,退出低功耗模式,唤醒计算机。Bingo。
总结下来有两种方法:
- 降低主频,适用于在低功耗运行模式时,仍需与外部电路进行有限交互的场景
- STOP模式,适用于不需要与外设进行有交互信但需要保留现场的场景,可通过引脚(指定的外部通信)触发唤醒。
板子漏电
板子漏电仍是一个值得思考的方向:
- 键盘上面的元器件全部都是手焊的,这就意味着会有一些焊锡或者其它脏东西在偷偷地漏电。
- 键盘的 PCB 尺寸还是相当大的,拿起,放下,也可能会造成板材变形,铺铜断裂或短路等情况。
- PCB 被尖锐物品划伤,或者 PCB 设计时就有问题……
当然,经过检查,板子的质量问题是没有的,用洗板水和酒精擦拭后,功耗也几乎没有变化。
所以,幸好没出问题。
软件改善功耗
从上文分析来看,WS2812B灯带和电源指示灯产生比较大电流消耗,当当前的参考方案中,暂行移除,以减少不必要的功耗。然后,重点就转移到软件上对唤醒机制的实现。
调整tinyusb协议栈源码
本案中使用的TinyUSB协议栈提供了一个tud_suspend_cb()回调函数,当电脑待机时候,会向USB设备发送待机信

文章讲述了在系统工程中针对USB机械键盘的低功耗优化过程,包括功耗测量、MCU功耗分析、LED和WS2812B彩灯的电流消耗、STOP模式和中断唤醒机制的实现,以及如何处理电脑与键盘的双向唤醒问题。通过软件和硬件的调整,最终将键盘待机电流降至0.8mA,满足了USB规范和客户需求。
最低0.47元/天 解锁文章
82

被折叠的 条评论
为什么被折叠?



