mmm530531 发表于 2025-10-19 20:25:11

基于FireBeetle ESP32 C5 的电量检测

一. 概述
1.1 测试目的
本报告旨在评估ESP32-C5开发板电量检测功能,此次新出的扩展板自带锂电池接口,验证其在实际应用中的性能和可靠性。(由于本人没有适配扩展板接口的锂电池,只能适用锂电池加上充放电模块测试)

二.测试环境
​主控板: ESP32-C5开发板
​电池: 3.7V 300mA锂电池
​开发环境: Arduino IDE 2.0


三. 硬件配置分析
扩展板锂电池接口特性
根据扩展板设计文档,锂电池接口具备以下特性:

支持3.7V锂电池直接接入
集成充放电保护电路
电压检测分压比:2:1(实测确认)
检测引脚:GPIO33(ADC1_CH9)

硬件连接图:


四.代码编写


#include <Wire.h> // 包含Wire库用于I2C通信

// 配置参数
const int BATTERY_PIN = 33;       // 检测引脚
const float MAX_VOLTAGE = 4.2;    // 锂电池满电电压
const float MIN_VOLTAGE = 3.0;    // 锂电池最低电压
const float VOLTAGE_DIVIDER_RATIO = 2.0; // 分压电阻比例 (R1+R2)/R2
const int ADC_SAMPLES = 16;       // ADC采样次数

void setup() {
Serial.begin(115200);
Wire.begin(); // 初始化I2C总线

// 配置ADC
analogReadResolution(12); // 设置12位ADC分辨率
analogSetAttenuation(ADC_11db); // 设置11dB衰减 (0-3.9V范围)
}

float read_battery_voltage() {
int raw = 0;
for (int i = 0; i < ADC_SAMPLES; i++) {
    raw += analogRead(BATTERY_PIN);
    delay(1);
}
raw /= ADC_SAMPLES; // 计算平均值

// 将ADC值转换为电压 (12位ADC,参考电压3.3V)
float voltage = (raw * 3.3) / 4095.0; // 单位V
return voltage * VOLTAGE_DIVIDER_RATIO; // 计算实际电池电压
}

int calculate_percentage(float voltage) {
// 电压超出范围处理
if (voltage >= MAX_VOLTAGE) return 100;
if (voltage <= MIN_VOLTAGE) return 0;

// 使用非线性曲线计算电量百分比(更准确)
// 锂电池放电曲线不是线性的
float percentage = 0;
if (voltage > 3.9) {
    percentage = 100 - (4.2 - voltage) * 60;
} else if (voltage > 3.7) {
    percentage = 60 - (3.9 - voltage) * 100;
} else if (voltage > 3.5) {
    percentage = 40 - (3.7 - voltage) * 100;
} else {
    percentage = 10 - (3.5 - voltage) * 20;
}

// 确保百分比在0-100范围内
return constrain(percentage, 0, 100);
}

void loop() {
float voltage = read_battery_voltage();
int percentage = calculate_percentage(voltage);

// 使用Wire库发送数据(可选)
Wire.beginTransmission(0x08); // 假设I2C地址为0x08
Wire.write((byte*)&percentage, sizeof(percentage));
Wire.endTransmission();

// 串口输出
Serial.print("电池电压: ");
Serial.print(voltage, 2);
Serial.print("V, 电量: ");
Serial.print(percentage);
Serial.println("%");

delay(2000); // 每2秒检测一次
}串口数据输出:


五. 问题与改进建议
发现的问题:
扩展板分压电阻精度为5%,影响检测精度
ADC参考电压随温度有轻微漂移
电量估算算法在3.7V平台区不够精确

改进建议:
使用1%精度的分压电阻
增加温度补偿算法
实现基于库仑计法的精确电量计算
添加电池老化补偿
六. 结论
ESP32-C5扩展板的锂电池电量检测功能整体表现良好,能够满足大多数物联网设备的电池监控需求。硬件设计合理,软件接口简单易用。通过本次测试验证,该方案具有以下优势:

​高可靠性: 测试期间无故障发生
​良好的精度: 满足日常应用需求
​低功耗: 适合电池供电设备
​易用性: 接口简单,便于二次开发

页: [1]
查看完整版本: 基于FireBeetle ESP32 C5 的电量检测