battery_monitor
是一个用于监测电池电量和电压的模块,基于 ESP-IDF 的 ADC(模数转换器)功能。该模块通过测量电池电压,计算出电池的剩余电量百分比,并提供了相应的 API 接口。
支持功能:
- 电压测量: 通过 ADC 测量电池电压。
- 电量计算: 根据电压值计算电池的剩余电量百分比。
- 校准功能: 提供校准功能,用于补偿 ADC 和电池电压的测量误差。
- 电池电压分压电路,将电池电压分压到 ADC 输入引脚。
修改battery_monitor.h中的 ADC_OFFSET
和 VOL_OFFSET
参数,以补偿 ADC 和电池电压的测量误差。
具体计算步骤如下:
ADC_OFFSET
用于补偿 ADC 原始值的偏差。
-
测量实际输入电压: 使用精确的万用表测量分压电路输出到 ADC 输入引脚的实际电压,记为
V_actual
。 -
读取 ADC 输出电压: 运行
git_adc_voltage()
代码读取 ADC 转换的电压值,记为V_adc_raw
。 -
计算偏移: [ \text{ADC_OFFSET} = V_{\text{actual}} - V_{\text{adc_raw}} ]
采样多组数据,取平均值,以降低噪声影响。
VOL_OFFSET
用于校正计算出的电池电压偏差。
-
测量电池电压: 使用万用表直接测量电池端子的实际电压,记为 ( V_{\text{battery_actual}} )。
-
计算推导电压: 使用
battery_monitor_get_voltage()
测量电池电压,记为 ( V_{\text{battery_calculated}} )。 -
计算校正偏移: [ \text{VOL_OFFSET} = V_{\text{battery_actual}} - V_{\text{battery_calculated}} ]
在多个不同电压水平(例如电池电量高、中、低)下测量并校正,以确保偏移在整个范围内有效。
#include "battery_monitor.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
#define TAG "Main"
void app_main()
{
// 初始化电池监测模块
battery_monitor_init();
while (1) {
float voltage = battery_monitor_get_voltage();
float percentage = battery_monitor_get_percentage();
ESP_LOGI(TAG, "Battery Voltage: %.2f V", voltage);
ESP_LOGI(TAG, "Battery Percentage: %.2f%%", percentage);
vTaskDelay(pdMS_TO_TICKS(1000)); // 每秒打印一次
}
}
- ESP-IDF >= 5.3.1
本项目采用 MIT 许可证。更多信息请参阅 LICENSE 文件。
欢迎任何形式的贡献,包括但不限于代码改进、文档更新、问题反馈等。请通过 GitHub 提交 Pull Request 或 Issue。
- 宁子希 (1589326497@qq.com)
- 1.0.0 初始版本