首页
/ XPowersLib库中AXP2101低电量警告功能实现详解

XPowersLib库中AXP2101低电量警告功能实现详解

2025-06-04 18:20:00作者:羿妍玫Ivan

概述

本文将深入解析基于XPowersLib库的AXP2101电源管理芯片低电量警告功能的实现方法。AXP2101是一款功能强大的电源管理芯片,广泛应用于各种嵌入式系统和物联网设备中,能够提供完善的电源管理解决方案。

硬件准备与初始化

硬件连接

在使用AXP2101芯片前,需要正确连接硬件:

  • SDA引脚连接到微控制器的I2C数据线(默认为21)
  • SCL引脚连接到微控制器的I2C时钟线(默认为22)
  • IRQ引脚连接到中断输入引脚(默认为35)

初始化设置

bool result = power.begin(Wire, AXP2101_SLAVE_ADDRESS, i2c_sda, i2c_scl);
if (result == false) {
    Serial.println("power is not online..."); 
    while (1)delay(50);
}

初始化成功后,我们可以设置VBUS输入电压和电流限制:

power.setVbusVoltageLimit(XPOWERS_AXP2101_VBUS_VOL_LIM_4V36);
power.setVbusCurrentLimit(XPOWERS_AXP2101_VBUS_CUR_LIM_1500MA);

电源输出配置

AXP2101提供了多种电源输出通道,包括:

  • 5个DC-DC转换器(DC1-DC5)
  • 4个ALDO(模拟LDO)
  • 2个BLDO(数字LDO)
  • 1个CPUSLDO(CPU专用LDO)
  • 2个DLDO(动态LDO)

我们可以通过以下方式获取各通道状态:

Serial.printf("DC1  : %s   Voltage:%u mV \n", power.isEnableDC1() ? "+" : "-", power.getDC1Voltage());
// 其他通道类似...

电压监测功能

AXP2101内置了多种电压监测功能,需要手动启用:

power.enableBattDetection();
power.enableVbusVoltageMeasure();
power.enableBattVoltageMeasure();
power.enableSystemVoltageMeasure();
power.enableTemperatureMeasure();

低电量警告功能实现

警告阈值设置

AXP2101提供了两级低电量警告:

  1. 警告级别2(Level2):较高电量警告
  2. 警告级别1(Level1):极低电量警告(可能导致关机)
// 设置低电量警告阈值(5%-20%)
power.setLowBatWarnThreshold(5); 

// 设置低电量关机阈值(0%-15%)
power.setLowBatShutdownThreshold(1);

实际测试得到的电压与百分比对应关系:

  • 20% ≈ 3.7V
  • 15% ≈ 3.6V
  • 10% ≈ 3.55V
  • 5% ≈ 3.5V
  • 1% ≈ 3.4V

中断配置

为了接收低电量警告,需要配置中断:

// 禁用所有中断
power.disableIRQ(XPOWERS_AXP2101_ALL_IRQ);
// 清除中断状态
power.clearIrqStatus();
// 启用所需中断
power.enableIRQ(
    XPOWERS_AXP2101_BAT_INSERT_IRQ    | XPOWERS_AXP2101_BAT_REMOVE_IRQ      |
    XPOWERS_AXP2101_VBUS_INSERT_IRQ   | XPOWERS_AXP2101_VBUS_REMOVE_IRQ     |
    XPOWERS_AXP2101_PKEY_SHORT_IRQ    | XPOWERS_AXP2101_PKEY_LONG_IRQ       |
    XPOWERS_AXP2101_BAT_CHG_DONE_IRQ  | XPOWERS_AXP2101_BAT_CHG_START_IRQ   |
    XPOWERS_AXP2101_WARNING_LEVEL1_IRQ | XPOWERS_AXP2101_WARNING_LEVEL2_IRQ
);

主循环处理

在主循环中,我们需要定期读取电压信息并处理中断:

void loop() {
    if (millis() > interval) {
        interval = millis() + 3000;
        // 读取并打印电压信息
        Serial.print("getBattVoltage:"); Serial.print(power.getBattVoltage()); Serial.println("mV");
        // 其他电压读取...
        
        if (power.isBatteryConnect()) {
            Serial.print("getBatteryPercent:"); Serial.print(power.getBatteryPercent()); Serial.println("%");
        }
    }

    if (pmu_flag) {
        pmu_flag = false;
        uint32_t status = power.getIrqStatus();
        
        // 处理低电量警告中断
        if (power.isDropWarningLevel2Irq()) {
            Serial.println("The voltage percentage has reached the low voltage warning threshold!!!");
        }
        
        // 处理极低电量关机中断
        if (power.isDropWarningLevel1Irq()) {
            int i = 4;
            while (i--) {
                Serial.printf("The voltage percentage has reached the low voltage shutdown threshold and will shut down in %d seconds.\n", i);
                delay(1000);
            }
            power.shutdown(); // 执行关机
        }
        
        // 清除中断状态
        power.clearIrqStatus();
    }
    delay(10);
}

注意事项

  1. 电池百分比校准:首次使用时,电池百分比可能不准确,PMU会在充放电循环后自动学习电池曲线并校准百分比。

  2. 电压稳定时间:当使用稳压源测试时,降低电压后百分比不会立即变化,需要一定时间才会缓慢下降。

  3. 安全警告:在运行示例前,请确认PMU的外部负载电压设置,错误的设置可能损坏外部负载。

  4. 中断处理:确保正确配置了中断引脚,并设置了合适的上拉电阻。

总结

通过XPowersLib库,我们可以方便地实现AXP2101的低电量警告功能。合理设置警告阈值和关机阈值,可以有效保护电池和设备安全。本文详细介绍了从硬件初始化到功能实现的完整流程,开发者可以根据实际需求调整参数,实现更符合应用场景的电源管理方案。

登录后查看全文
热门项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
24
6
docsdocs
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
271
2.55 K
flutter_flutterflutter_flutter
暂无简介
Dart
560
125
fountainfountain
一个用于服务器应用开发的综合工具库。 - 零配置文件 - 环境变量和命令行参数配置 - 约定优于配置 - 深刻利用仓颉语言特性 - 只需要开发动态链接库,fboot负责加载、初始化并运行。
Cangjie
152
12
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
9
1
cangjie_runtimecangjie_runtime
仓颉编程语言运行时与标准库。
Cangjie
128
104
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
357
1.84 K
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
1.02 K
434
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.03 K
606
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
731
70