设计嵌入式系统以延长电池寿命已成为许多团队的重要设计考虑因素。优化电池寿命有助于降低现场维护成本,并确保客户无需持续不断地更换电池或充电即可获得良好的产品体验。
开发团队常会使用一些标准技巧来帮助延长电池寿命。例如,将处理器设置为低功耗模式、关闭未使用的外设等。然而,我发现开发团队往往会忽略另一些标准技巧。
在今天的文章中,我们将探讨几种低功耗设计技巧,这些技巧经常被我们忽视,但却能带来很大的不同。
作为软件开发人员和团队,我们常会为使用免费和开源工具而沾沾自喜。但在大多数情况下,一分钱一分货。虽然GCC是一个很棒的工具,但它并非适用于所有情况。其中一种情况就是低功耗、电池供电的设备。
我最近做了一些性能测试,用于比较GCC和IAR的EWARM编译器之间的代码执行情况。在相同的处理器上以相同的设置编译相同的代码,测试代码的性能提高了20-30%。虽然因为操作不同结果会有差异,但这些数字是惊人的。
这意味着什么?这意味着使用商业编译器,执行相同代码的速度可能会快很多,这意味着您可以更快地返回睡眠模式。处于睡眠模式的时间越长意味着电流消耗越少,电池续航时间就越长!
使用商业编译器是一件唾手可得的事,并可能取得一些成果,您不仅可以利用它来获得更好的代码性能,而且还可以节省电池寿命。
注意:结果会根据您优化代码的程度而有所不同。但是,既然有工具可以帮你优化代码,为什么还要浪费时间呢?
使用低功耗模式的一个问题是,如果您使用RTOS(实时操作系统),内核的tick将定期唤醒系统。tick设置为一毫秒的情况并不罕见。如果你想让设备睡眠一分钟再唤醒,会发生什么呢?在那一分钟内,您会比您希望的唤醒次数多6000次,进而浪费宝贵的电池寿命。
许多RTOS中的一个直接解决方案是使用tickless模式。该模式的原理是,当系统进入睡眠状态时,它会调整低功耗计时器,让RTOS的tick不会每毫秒发生一次。相反,它可能在几分钟、几小时甚至一天内都不会出现!
可以想象,这样可以让系统保持睡眠状态,防止系统唤醒并运行大量不必要的CPU周期。使用的电流更少,相当于电池寿命更长。
注意:启用tickless模式的方法以及作为开发人员可能需要做的工作因不同的RTOS而异。
多年来,微控制器一直没有缓存。它们是资源有限的设备,与功能更丰富的同类产品相比相对简单。但如今的情况并非如此。如果您查看ST、NXP和许多其他公司的微控制器,就会发现高性能组件都具有内部高速缓存。如果您正在进行低功耗设计,就可以利用缓存来降低能耗。
缓存有多种机制可以帮助您减少电流消耗。其中大部分都与高速缓存的主要功能有关:更快地访问常用数据或指令,从而减少CPU访问速度较慢的主内存所花费的时间。
例如,您可以使用高速缓存来优化内存访问模式。在具有可预测内存访问模式的应用中,高速缓存可以大大优化能源使用。通过有效地预取和缓存所需的数据和指令,微控制器可最大限度地减少对主内存的高能耗访问。
与其他板载内存相比,高速缓存提供更低的延迟和更高的访问速度。因此,访问内存所花费的时间更少,这使得CPU的空闲周期更少。更快的访问还意味着CPU可以更快地完成任务,从而减少CPU总体活动时间。所有这些都有助于降低处理器的整体能耗,从而延长电池寿命。
当开发人员和团队在研究低功耗设计时,往往会直接采用睡眠模式、时钟门控和其他技术来降低能耗。虽然这些都是很棒的技巧,但他们有时会忽略一些简单的技巧,而这些技巧也是唾手可得的。我们在这篇文章中介绍了几种方法,您可以使用它们来帮助延长设备的电池寿命或降低设备的能耗。
归根结底,低功耗设计需要考虑很多因素。您当然可以无限期地进行能量优化,但优化过程中通常会出现“拐点”,这会导致电池寿命的收益减少。请始终掌握您的技巧是如何延长电池寿命的;当你碰到瓶颈时,就该停止优化了!
(原文刊登于EDN姊妹网站Embedded,参考链接:3 techniques to improve low-power design,由Ricardo Xie编译。)