【超低功耗系列二】低功耗设计应用考虑

2023-03-03  

在这篇文章里我们来分享一下如果一个项目有低功耗的需求,那在这个项目中如何去做芯片的选型、与MCU相关的低功耗系统设计考虑(硬件考虑和软件考虑及系统考虑),也就是从项目的角度出发如何做低功耗设计的考虑因素。

整体来说,按照你的应用需求会先选择一颗芯片,现在假设我们选好了芯片,基于应用需求,需要做低功耗设计,降低功耗是需要软件和硬件协同工作才能解决的。

从芯片选型开始说,有一些设计大家可能沿用原先项目中使用过的低功耗芯片,在此基础上做低功耗设计,不断从软件和硬件角度来降低功耗,最终看能不能达到我们的需求,如果达不到,再换其他的芯片,还有一些情况,我们可能要完全从头去选一个MCU芯片,一般这时候还是要看项目需求,要求做到的工作,再加上休眠这样的一个时间要求做到多低的功耗,也就是要求电池的使用寿命时间有多长,依据这个标准去做选择。

选择芯片会考虑到的因素有:

首先需要拿到芯片的数据参考手册,看到它在不同功耗时的数值,做一个简单的估计。对STM32来说,会有一个power consumption calculate这样一个软件,其实就是一个简单的数学建模模型,然后把芯片工作的模式变得模式化,也就是把它变成一个循环,比如工作多长时间,紧接着让哪些外设进入休眠的状态,休眠的时候让哪些外设去工作,什么条件唤醒,要把这些变为程序化的过程,把这个过程输到数学建模的模型中,这样就可以帮我们算出power consumption calculat的值,算出来之后我们就可以很明显的得到一个数值,也就是说我们使用这样一个电池去给应用供电大概可以使用多久,可以看到功耗是不是能够满足应用需求。

从工艺的角度来说,一般芯片的工艺越先进,动态功耗会越低,但是静态的漏电流会相对高一些。

低功耗芯片与不是低功耗的芯片,两者最大的区别是专门为低功耗设计的芯片它的低功耗模式一定会比没有为低功耗设计的芯片模式多很多种,它会考虑到各种可能性的低功耗组合,在这种组合下用更多的组合模式来达到更低的功耗。

MCU相关的系统设计

在系统设计的时候,我们先要搞清楚MCU芯片是怎么设计进去的,可以查阅数据手册,找出可以被唤醒的最大的休眠模式,按照数据手册的要求写一个测试工程,像STM32的话,还会有很多的例程,CubeMX里带的固件库里有低功耗的各个使用例程,那么去实现一个纯粹什么都不做的休眠状态,然后关闭所有能够关闭的功能,这样就获得了一个很极限的低功耗,也可以称之为最小系统,也是最小功耗的最小系统,这个时候要做的就是根据硬件工程师提供的I/O设置状态来配置I/O状态获得人为的最低的功耗。

如何减少I/O的漏电流

一般来说,如果I/O口是由固定电平的,把它配置为模拟的、输入的形式,这时候功耗是最低的,它内部的触发器一定要关掉,我们需要有一个正确的I/O口的状态,然后把代码加入到目标电路板里测量功耗,如果电路板上无法优化的一些固有功耗,比如某些固定的消耗电流的一些电阻功耗,消除之后仍然没有达到数据手册上所说的对应的休眠状态下的最大值,这个时候可能就要从硬件状态上找原因,这件事情是值得花时间好好研究一下的。

如何唤醒MCU

在这个过程里,我们要确认系统的脉搏,就是要总体来审查应用的工作方式,找到系统时钟最大的节拍,然后根据这个需求来确认芯片所需要使用的唤醒源。

除此之外,还要研究应用的需求,明白系统工作的模式,比如拿采样模式来说,需要先采样,然后进入低功耗休息状态,再采样,再进入低功耗休息状态,所以整个系统是类似于像一个状态机一样,以采样事件作为驱动来工作的,采样不仅是提供信息,也提供系统的脉搏,这类系统在采样的同时可能还会涉及串口要进行通信等问题,因为信息的本源是采样,所以还是要采样的周期本身决定信息的有效性,要明确系统对唤醒源和唤醒模式的需求,以便确定系统最基础的休眠方式。进一步来说,比如基础的休眠方式和所应用的场景需求确定了,就可以给出这个系统设计的一个初步评估结果,从而达到是否能够确定是这个芯片、确定适用系统设计的结果。

所以我们总结下来,要关注MCU是怎样进入休眠状态的以及怎样从休眠状态被唤醒的,这样来考虑系统的优化,使系统能用最小的功耗提供最大的性能,还能满足所需要的唤醒时间。

从另一个角度说,刚才的方式就是包含低功耗应用中两个不同的阶段,一个是process阶段,在规定的时间间隔,不管是RTC还是外部的事件、GPIO中断等等,需要处理一些传感器收集过来的数据或者是无线传过来的数据;还有一个是inactive阶段,这个时候系统是属于真正的低功耗状态,会等待各种唤醒源或者是中断来把它唤醒。低功耗设计就是要考虑这两个阶段,考虑的各种因素就是要从这两个阶段来进行考虑,在process阶段,要求在给定的时间内能够执行一定数量的指令,所以有时候也不是说process阶段频率越慢越好,要考虑性价比,在inactive阶段,要保持最少的内容,比如数据要在SRAM里面保持,还要有一定的唤醒能力。两个阶段之间的转换要支持不同的约束条件,睡眠到运行的转换要求在转换时具有快速的唤醒时间,而且风驰电流是最小的,这样能够使用外部的电池来供电;从运行到睡眠的时候其实是不太关心转换时间的,但是需要关心的是要转换到最能够节约功耗的一个睡眠模式。

所以综合起来考虑,关键是要考虑四个参数:


一个叫平均功耗,一般会以微瓦的数量级来计量大小,它就能决定用的电池的大小以及所预期的应用是不是能够用这个MCU;


还有风驰电流,这个参数一般是以微安的数量级来计量大小,它决定了可以使用电池的类型以及需要添加到板上的外部元件的数量和尺寸。


在process阶段的处理性能也很重要,它和CPU的频率以及CPU工作在什么样的状态成正比;


最后一个参数是反应时间,它是唤醒的信号源激活和第一条指令执行之间的时间。

上面提到了如何选MCU芯片以及如何知道MCU是如何进入低功耗、如何去唤醒的,除了这些MCU低功耗的一些特性之外,还要考虑MCU的一些其他特性,像STM32的超低功耗系列里面这样几个特性,比如SMPS,也就是外接的开关电源,这也是能保证动态功耗被极大降低的一个办法;还有一个叫BAM,就是批处理的一个模式;另一个是STM32具有自己的知识产权的FLASH ART加速器。

SMPS

SMPS是通过外部的DCDC转换器生成内核的逻辑电压源,用来显著提高运行模式的效率

BAM

BAM是批处理的一个模式,它使用在睡眠模式或者低功耗睡眠模式或者低功耗运行模式,相当于是给MCU做了一个小的协处理器,不需要耗费CPU的资源,也不需要每次采集完数据都要CPU去处理

FLASH ART加速器

大家知道从半导体工艺制程上来说,FLASH的工艺就决定了它的速度不会很快,基本上就到20多MHz,但是一般MCU内核可以跑到80、90甚至100、200MHz,这个时候从FLASH中做代码执行就有一个瓶颈——时间不匹配,正常情况我们都是加等待周期,随着FLASH的频率越高,要加的等待周期就越大,所以ST就加入了一个新东西,叫FLASH ART加速器。

加速器实现的功能就是让我们从FLASH代码里面做执行的时候不需要等待,这是因为它加了cache。

从低功耗的角度来说,从SRAM里运行和从FLASH里运行功耗更低的是从SRAM里运行。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。