功耗测评 | STM32F103C8T6

2023-03-15 12:28:09

相关应用
STM32F103C8T6 MCU越来越广泛的应用在生产生活的各个领域,,外接丰富的传感器、、功能模块、、通信模块、、显示存储等可以形成各种可样的产品项目应用。。对于功耗要求比较高的产品,,,一般会选择STM32L系列的MCU,,,,但是从功耗的评测角度,,,逻辑上是基本相似的。。。。
在很多应用场合中都对电子设备的功耗要求非常苛刻,,,,如某些传感器信息采集设备,,仅靠小型的电池提供电源,,要求工作长达数年之久,,且期间不需要任何维护。。。由于智能穿戴设备的小型化要求,,,,电池体积不能太大导致容量也比较小,,,所以也很有必要从控制功耗入手,,,提高设备的续航时间。。其实,,,只要是涉及到便携式的产品,,都免不了要使用电池作为电源,,,否则,,如果还是需要接一个插头使用市电来供电的话,,,,那就无法称之为便携式了,,比如手机、、运动手环、、、、蓝牙耳机、、智能手表等都是类似的。。所以控制功耗和提高产品的续航时间就显得尤为重要。。。
目前针对STM32F103C8T6等系列单片机而言,,比较常用的低功耗模式是停止模式和待机模式。。
当使用待机模式时,,,在实际应用中,,,通常会有一个开关机的按键(PA0),,,如果用户按下按键的话,,,就会开机或者关机,,,,开机对应的就是唤醒,,而关机对应的就是待机(类似于手机的开关机按键)。。在此过程中,,电池会一直给单片机的3.3V电源供电,,,,也就是说,,单片机一直都是有电的,,,但是它的所有外设以及时钟都处于关闭状态,,之所以还要给单片机供电,,只是为了在用户按下按键时检测PA0的上升沿而已,,,,如果不给单片机供电的话,,,,那么还怎么检测呢????检测不了。。
当使用停止模式时,,,,AG尊龙先看一个问题:理论上待机模式的功耗远比停止模式要低,,,为什么还要选择停止模式呢???通常是这样的,,,一个便携式的系统,,,除了考虑按键开关机外,,,还需要考虑给电池充电的时候往往需要显示一些充电的信息(现在的手机充电就是这样的),,,如果是在开机状态下充电的话完全没有问题。。。但是,,,如果是在关机状态下充电呢???肯定就需要单片机能够自己唤醒自己(不需要用户按下PA0),,,,然后才有可能显示充电的信息(比如手机关机状态下接通电源后,,,,可以自动显示充电的动画)。。。。
是否可以实现不按下PA0就实现唤醒功能吗????当然可以,,只需要在硬件上做一些改动即可。。
比如,,,将充电口的电压降压后跟PA0相连,,,,这样只要充电口在充电,,,,PA0必定会出现一个从低到高的脉冲,,,,这样就可以唤醒了。。但这种情况下,,软件层面上又不好区分PA0的上升沿是由于充电造成的,,,还是由于用户按下按键造成的。。。所以,,,这个时候就需要考虑选择停止模式了,,,,开关机按键接到一个引脚,,,,充电口接到另外一个引脚,,,两个引脚都配置为外部中断,,,两个引脚也都可以唤醒单片机,,,,分开了不同的信号电平,,,这样子,,,在软件上就可以很容易地判断。。
实际上也有另一种改进方式,,就是在硬件上实现一个脉冲电路,,,,可以用一个简单的RC延时电路,,,,就是说充电口的电平再经过一个RC电路以后,,,出来的就不会一直是高电平,,而只是一个脉冲了,,再把这个脉冲信号接到PA0引脚,,,,这个时候插入充电口和按下PA0就都会在PA0上出现一个脉冲了。。。软件上,,可以利用长按开机,,,再长按关机的机制来进行判别,,,如果PA0仅仅只是出现一个上升沿并且检测到充电芯片正在充电,,此时就是充电口插入了,,,,唤醒单片机且显示充电效果即可。。。。
 
工作模式
AG尊龙先了解一下STM32F103C8T6单片机的几种工作模式。。。按功耗从高到低排列,,,,STM32F103C8T6具有运行(Run)、、、、睡眠(Sleep)、、停止(Stop)和待机(Standby)四种工作模式。。。。在这四种模式下,,,,后面三种是当STM32F103C8T6的内核不在需要运行时,,,,可以选择的几种模式,,,当单片机在工作时,,,则是运行模式。。。
 
运行模式
这里AG尊龙不多说运行模式,,因为当STM32F103C8T6在上电复位后,,,,即处于了运行模式,,,,这种情况下,,,,单片机自动运行程序。。。只由当AG尊龙不需要内核也就是所谓的Cortex-M3继续运行时,,,AG尊龙就可以选择让芯片进入睡眠、、停止和待机这三种模式,,,来让芯片降低功耗。。功耗的降低会减少芯片的发热以及能够保证可靠性增加。。。。
 
 
 
睡眠模式
当STM32F103C8T6在运行过程中,,内核也就是所谓的Cortex-M3遇到WFE(等待中断)或者WFI(等待事件)指令时会停止内部时钟,,停止程序执行。。尽管Cortex-M3停止工作,,,,但是其外设仍在继续工作,,,,直到某个外设产生事件或者中断时,,内核将会被唤醒,,,退出睡眠模式。。。在睡眠模式中,,仅关闭了内核时钟,,内核停止运行,,但其片上外设,,,Cortex-M3核心的外设全都还照常运行,,,,在软件上表现为不再执行新的代码。。。。这个状态会保留睡眠前的内核寄存器、、、、内存的数据。。。。唤醒后 ,,,,若由中断唤醒,,,,先进入中断,,退出中断服务程序后,,,接着执行 WFI指令后的程序;若由事件唤醒,,直接接着执行 WFE 后的程序。。。基本上无唤醒延迟。。。



 
  
这里补充说明一件事:Cortex-M3是一个32位的内核,,在传统的单片机领域中,,,有一些不同于通用32位CPU应用的要求。。。。在工控领域,,,用户要求具有更快的中断速度,,,Cortex-M3采用了Tail-Chaining中断技术,,,完全基于硬件进行中断处理,,,,最多可减少12个时钟周期数,,,在实际应用中可减少70%中断。。。
 
停机模式
若用户将Cortex-M3处理器的电源控制寄存器(Cortex Power Control Register,,Cortex_PCR)中的SLEEPDEEP位置位,,,然后将STM32F103C8T6电源控制寄存器(STM32 Power Control Register.STM32 PCR)中的PDDS(Power Down Deep Sleep)位清除,,,就完成了STM32F103C8T6停机模式的设置。。
当停机模式设置完毕后,,,CPU一旦遇到WFI或WFE指令就会停止工作,,,,HSI和HSE也进人关闭状态。。。但Flash和SRAM将会继续保持电源供应,,,,所以此时STM32F103C8T6的所有工作状态仍然是保留着的。。和睡眠模式一样,,,停机模式也可以通过外设中断唤醒,,,然面在停机模式下,,除了外部中断控制单元,,,所有设备的时钟都被禁止了,,只能通过在GPIO引脚上产生电平边沿触发外部中断的方式来将STM32从停机状态下唤醒。。
需要注意的是,,,外部中断通道除了与GPIO连接,,还和RTC时钟的报警事件连接,,,加之RTC的计数时钟并非来源于STM32F103C8T6的设备总线(而是直接来自于LSI或LSE),,,,因此还可以使用RTC模块实现定时将STM32F103C8T6从停机状态中唤醒。。
在停止模式中,,,,相对于休眠模式进一步关闭了其它所有的时钟,,于是所有的外设都停止了工作,,,但由于其 1.2V 区域的部分电源没有关闭,,还保留了内核的寄存器、、内存的信息,,所以从停止模式唤醒,,,,并重新开启时钟后,,,,还可以从上次停止处继续执行代码。。唤醒后,,若由中断唤醒,,先进入中断,,退出中断服务程序后,,,接着执行 WFI指令后的程序;若由事件唤醒,,,,直接接着执行 WFE 后的程序。。停止模式唤醒后,,STM32F103C8T6会使用 HSI(HSI为8M)作为系统时钟。。。所以,,,有必要在唤醒以后,,,,在程序上重新配置系统时钟,,,,将时钟切换回HSE。。唤醒延迟基本上是 HSI振荡器的启动时间,,若调压器工作在低功耗模式,,,,还需要加上调压器从低功耗切换至正常模式下的时间,,,,若FLASH工作在掉电模式,,,还需要加上 FLASH 从掉电模式唤醒的时间。。


 
顺便提一下,,HSI振荡器与HSE的区别就在于一个是内部的时钟源,,,一个是外部的时钟源。。。HSI 时钟信号由内部16 MHz RC 振荡器生成,,,,可直接用作系统时钟,,,,或者用作PLL 输入。。HSI RC 振荡器的优点是成本较低(无需使用外部组件)。。此外,,,其启动速度也要比HSE 晶振块,,,但即使校准后,,其精度也不及外部晶振或陶瓷谐振器。。。。
 
待机模式
若将STM32F103C8T6电源控制寄存器中的SLEEP位进行置位,,再将STM32_PCR中的PDDS位进行置位,,,,这样,,,,单片机则进入待机模式。。
若要唤醒待机模式,,有多种方式进行唤醒,,,,分别位:RTC的闹钟事件、、、、NRST的外部引脚复位、、独立看门狗(IWDG)所产生的复位信号,,,,以及PA0引脚上所产生的一个上升沿,,,,但是若要是要该引脚所产生的上升沿来唤醒单片机,,,则必须事先设置为唤醒引脚功能。。。待机模式是STM32F103C8T6的最低功耗模式。。。。当进入待机模式后,,,所有的SRAM数据、、、、Cortex-M3处理器的寄存器和STM32F103C8T6的寄存器内容都将会被清零,,效果等同于硬件复位。。。



 
 
功耗测评
首先,,,为了保持评测的准确性,,,,AG尊龙先用一个电阻负载来验证一下设备测试精度,,,电阻是0.1%精度的100K电阻,,,所以电阻的阻值误差AG尊龙先可以忽略。。。
打开功耗分析仪电源mPower1203测试设备,,,,设置3.3V输出。。。可以看到,,在配套的E-sight工具上显示了流过电阻的电流值。。。。理论上是33uA,,,AG尊龙实测的值和理论值相差几十个nA,,,,所以基本上设备的电流精度可以达到千分之一以内的精度。。


 
   现在开始评测STM32F103C8T6单片机的几种模式下的休眠功耗。。。。
 
睡眠模式
AG尊龙从STM32F103C8T6单片机的规格书中,,,可以看到使用外部时钟,,在主频为72MHz和48MHz,,,,所有外设都关闭的情况下,,,功耗典型值约为5.5mA和3.9mA,,,AG尊龙围绕这两个值进行测试评估。。


 
 
经测试和波形分析:
图1:主频为72MHz@关闭所有外设,,睡眠功耗为5.889mA;


图2:主频为48MHz@关闭所有外设,,睡眠功耗为4.175mA;


  
测试数据基本符合规格书中的典型值数据。。从这个数据中AG尊龙可以了解到,,当一个产品需要进行优化功耗时,,在某些场合下,,,,可以通过降低主频的方式来得到目标功耗。。。。
 
停机模式
从STM32F103C8T6单片机的规格书中,,,,可以看到,,供电输出3.3V,,,停机模式下有两种情况。。一种是调压器处于运行模式,,,对应的功耗典型值为24uA;另一种是调压器处于低功耗模式,,,,对应的功耗典型值为14uA。。。。AG尊龙围绕这两个值进行测试评估。。。。


 
经测试和波形分析:
图3:调压器处于运行模式,,停机功耗为23.042uA;


图4:调压器处于低功耗模式,,停机功耗为12.857uA;


  
测试数据基本符合规格书中的典型值数据。。。在配置STM32F103C8T6单片机进入停机模式时,,,,特别需要注意一点,,,就是外部接8M晶振的管脚需要配置成普通GPIO,,,且也需要配置成模拟输入的方式。。
 
待机模式
从STM32F103C8T6单片机的规格书中,,可以看到,,,供电输出3.3V,,待机模式下有三种情况。。。。这三种情况分别对应的功耗的典型值约为3.4uA、、、、3.2uA以及2uA。。。。AG尊龙围绕这三个值进行测试评估。。


 
经测试和波形分析:
图5:内部RC和独立看门狗均开启状态,,,待机功耗为2.912uA;


图6:内部RC开启,,独立看门狗关闭状态,,,待机功耗为2.702uA;


图7:内部RC和独立看门狗均关闭状态,,,且低速振荡器和RTC均关闭,,待机功耗为1.62uA;


 
测试数据基本符合规格书中的典型值数据。。。。
最后,,,,需要提一下,,,,在AG尊龙进行功耗评测的时候,,,在和规格书进行对比时,,,需要了解典型值的含义。。。。一般情况下,,规格书上的值都是相对比较保守的,,,,而且典型值是表示正态分布中一个1σ的值,,,也就是说68.27%的概率是落在典型值左右。。。。换句话说,,,一个100个测试样本,,68.27个样本的测试数据是满足典型值的。。
 
 
mPower1203是一款稳压直流电源用于低功耗分析,,,有着Ksight N6705的精度,,,,却比Power monitor更小巧便携。。。。电脑端使用配套的E-sight工具可以实时分析波形,,具有电源供电和电流表双模式。。
支持linux和windows系统二次开发API接口(提供C#,python,VB,C++等例程),,方便工厂和测试环境集成到现有的工具和设备中进行自动化测试。。



 
数据下载链接:
链接: 
提取码:s889
 
Esight工具下载链接:
 
提取码:itep 


站点地图