造成52832休眠时功耗偏高的原因之一

本文介绍了一次解决52832设备休眠状态下功耗偏高问题的经历。通过调整加速计QMA7981的中断输出配置,避免了与52832 IO口之间的电势差,显著降低了休眠电流从200微安降至9微安。

造成52832休眠时功耗偏高的原因之一

在我公司项目中, 一次测试设备时发现, 设备进入休眠状态时的电流任然有200微安。 这超出了我们的预期, 我们接受的电流应该是几十微安或者更低一些。设备的主芯片时52832, 由俩个外设, 一个3轴加速计QMA7981, 和一个磁力计QMC7983。 先开始认为可能是某一个传感器没有进入待机模式, 但仔细检查设置后发现,它们的设置是真确的。 

查了很久, 发现问题出在加速计的中断输出和52832连接的IO口。 这个中断是用来唤醒设备的, 中断模式是: 有中断时IO口输出为高, 否则为低。 在52832 的中断唤醒里, 设置的口是上拉,高有效: 

    nrf_gpio_cfg_sense_input(PIN_IN_ACC, NRF_GPIO_PIN_PULLUP, NRF_GPIO_PIN_SENSE_HIGH);  

这会造成在休眠时, 该IO口和加速计有电势差, 所以会有漏电流。 那么如何修改呢, 将QMA7981的中断配置为中断时输出为低, 否则输出为高。 这样在休眠时就不会有电势差, 也就不会有漏电流了。  修改后测试, 休眠电流降为9微安。效果很明显。

### STM32 IO 拉高引起功耗增加的原因分析 当STM32的IO被配置为拉高状态,电流会通过内部或外部电阻流向电源轨,从而增加了系统的静态功耗。对于STM32L15X系列,在最大频率下运行MCU功耗可达6.8mA[^1]。 ### 解决方案 #### 优化GPIO配置 为了减少由IO引起的额外功耗,可以考虑以下几种方法: - **降低工作电压**:适当调整VDD供电电压至最低可稳定工作的水平,这能有效减小漏电造成的损耗。 - **合理设置上下拉电阻**:仅在必要情况下启用上/下拉功能,并选用较大阻值的外部电阻来替代默认的小型内置组件,这样可以在不影响逻辑判断的前提下显著削减待机电流消耗。 - **关闭未使用的端口**:确保所有不参与当前应用操作的I/O均处于输入模式且无任何驱动负载连接其上,防止不必要的信号干扰引入附加能量损失。 - **采用推挽输出而非开漏结构**:虽然某些场景下开漏更适合特定接口需求,但从节能角度出发,除非有特殊理由应优先选择前者作为常态设定选项之一。 ```c // 设置 GPIOA 的第0脚为浮空输入 (Input Floating) GPIO_InitTypeDef GPIO_InitStruct = {0}; __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; // 不使用上下拉 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); ``` #### 调整系统钟树与序参数 除了针对具体管脚属性做出改进之外,还应当审视整体架构设计层面是否存在进一步挖掘潜力的空间。比如重新评估并精简现有程序流程中的延环节、尽可能利用硬件定器代替软件轮询机制完成周期性任务调度等措施都有助于间接缓解因频繁切换高低电平而带来的瞬态冲击影响。 另外值得注意的是,即便是在休眠状态下也需谨慎处理唤醒源的选择及其关联路径上的资源占用情况,以免造成隐性的电力浪费现象发生。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值