功耗控制的概念调整
功耗控制之硬件调整
在硬件体系中可以有以下优化手段:
- 优化电路设计
- 优化电源供电效率(减少用于发热的能源)
- 调节单片机时钟频率(频率越高功耗越高)
- 选择单片机或者外围的工作电压(供电电压影响运行功耗,供电越大耗电越大)
- 管理单片机片上资源
- 自定义电源管理方案
- 管理模拟或者数字外设
- 配置I/O端口模式
- 单片机处理器选型
片上外设 影响运行功耗,针对具体的应用,编程人员往往只需要启用单片机的部分片上资源,而非全部启用,即便是全部启用了,也存在分时运行的情况。对比分析数据发现A/D转换和T/C资源都是"耗电大户",片上外设消耗的电流就不能忽视,对此类资源的合理控制就显得非常必要。
功耗控制之软件优化
- 编译优化(编译器)
- 软件实现(软件逻辑优化)
- 快速短时(频率提高,处理指令的时间就减少了,一个合适的平衡点能降低功耗)
- 优化轮询
- 减少运算量(运算时是和Flash/RAM打交道,运行电流会上去)
- 中断处理
- 波特率优化
- 停机模式
- 等待模式
- AD采样速度
- 其它
在运行模式,为了即能满足系统性能又能降低功耗,选择合适的系统时钟源是很重要的。耗电量HSE>LSE>HSI>LSI,所以选择合适的时钟源能降功耗
代码执行位置影响运行功耗。代码从RAM中执行时的电源电流在其它条件参数一致的情况下比代码从Flash中执行时的电源电流要小,说明RAM存取速度快,执行效率高。
fCPU 是由 fMASTER 分频而来,可降低fCPU的时钟频率,虽然这会降低CPU的速度,但同时可降低CPU的功耗。其它外设(由fMASTER提供时钟)不会受此设置影响。
STM8单片机在低功耗上的优势
- STM8单片机支持宽泛的供电电压,如STM8S207/208系列单片机为例,其供电电压支持2.95V至5.5V,其中就包含常见的3.3V和5.0V的供电电压标准,选取3.3V电压供电时功耗与5.0V相比会有所下降
- STM8单片机具备灵活的模拟性能,有各种不同的输入输出模式,每种模式的电气特性皆不相同,针对具体的需求,用户可以配置特定的GPIO模式以实现功能,对于闲置未启用的GPIO也可以配置相应的端口模式以降低功耗。
- STM8单片机支持多种电源管理方式,STM8单片机可以配置为运行模式、等待模式、活跃停机模式、停机模式等(耗电量从大到小),灵活多变的运行模式为单片机功耗调整提供了支持
- STM8单片机拥有多样的时钟源和外设时钟门控功能,各种时钟源的运行参数均不相同,功耗参数自然也不一致,时钟源的多样性就能尽量满足用户的功耗需求(HSE耗电比HSI多)。外设时钟门控功能可以管理片上数字资源和时钟的连接,从而控制外设资源电流消耗。
为什么S系列能够使用低功耗模式了,ST还要推出L系列?
答:L系列有"超低漏电流",漏电流指的是晶元的静态电流,能到零点几个微安。
STM8低功耗运行模式
STM8单片机拥有出色的电源管理模式,可配置单片机运行状态如下:
- 等待模式(Wait)
- 活跃停机模式(Active-Halt):可配置为慢速或快速唤醒
- 停机模式(Halt):可配置为慢速或快速唤醒
用户可合理选择以上三种模式中的一种,在最低功耗、最快唤醒速度和可使用的唤醒源之间获得最佳平衡点 程序(IAR)上模式的切换(以下为STM8单片机专用中断指令):
#define wfi() __wait_for_interrupt()
#define halt() __halt()
#define halt() __halt()
用相同的指令halt() 的时候,怎么区分是活跃停机还是停机模式?答:如果在执行这条指令之前,开启了AWU这个功能,那么就是切换到活跃停机模式;否则就是停机模式。
自动唤醒AWU结构及配置
问题:
- AWU单元的具体结构是什么样子?
- 各种分频参数和时钟选择是什么样的操作顺序?
- 什么时候会触发AWU的中断?
AWU结构
- CKAWUSEL=CK+AWU+SEL(select),AWU时钟选择
- 默认情况下,由于CKAWUSEL位为0,所以选择的是LSI作为AWU的时钟
- fLS != fLSI,而是经过前面选择后得到128KHz的时钟
- 通过HSE分频得到的128KHz可能比较精确,但是LSI有12.5%的误差,不一定是准确的,所以fLS右边有个分支,合上开关后,引入到定时器里,测得周期,判断是不是128KHz,如果不是,会对频率进行一定的修正。(不过一般不会去修正)
- 这里由于使AWU_CSR中的"AWUEN"位为1了,所以后面执行HALT指令时,单片机会进入活跃停机状态
AWU结构树涉及到的三大寄存器如下:
- AWU_CSR:控制/状态寄存器,判断fLS的精度
- AWU_APR:异步预分频寄存器
- AWU_TBR:时基选择寄存器
控制/状态寄存器(AWU_CSR)
异步预分频寄存器(AWU_APR)
APR分频参数表
时基选择寄存器(AWU_TBR)
AWU唤醒时间计算参考
例题: 用C程序的配置如下: 算出来48这个值还要去查APR分频参数表,查到对应的值为2E,官方开发手册直接赋值算出来的数的做法是错的。
AWU_APR=0x2E;
AWU_TBR=0x05;
AWU_CRS |= 0x10;
halt();
|