DFCC动态FCC自适应补偿算法(二):参数调校与仿真验证系统

1. 为什么需要仿真调参?

1.1 实验室调参的痛点

传统 DFCC 参数调校面临的问题:

  • 耗时长:完整的温度×电流×SOC 三维测试需要数周
  • 成本高:需要恒温箱、充放电设备、工程师值守
  • 难以覆盖边界条件:极端温度、极端电流的组合难以测试
  • 迭代周期长:每次参数修改后需要重新测试

1.2 仿真调参的思路

基于一次完整的放电循环测试数据,通过仿真软件模拟 DFCC 参数更新,观察电量精度是否达标,从而快速迭代参数配置


2. 仿真系统架构

2.1 系统组成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
┌─────────────────────────────────────────────────────────────────┐
│ BatterySimer (C# 上位机) │
│ 充放电数据回放 + 算法仿真 │
└────────────────────────────────┬────────────────────────────────┘
│ CSV/串口

┌─────────────────────────────────────────────────────────────────┐
│ SOCLib77561 (C 固件库) │
│ lib_fg.c - 完整电量算法实现 │
│ DFCC 三维查表 + 平滑更新 │
└────────────────────────────────┬────────────────────────────────┘


┌─────────────────────────────────────────────────────────────────┐
│ 仿真结果输出 │
│ SOC 精度曲线、DFCC 更新轨迹、误差统计 │
└─────────────────────────────────────────────────────────────────┘

2.2 项目结构

模块 路径 说明
BatterySimer BatterySimerKit2.0/BatterySimer/ C# 仿真上位机
SOCLib BatterySimerKit2.0/SOCLib77561/ C 固件库
Table BatterySimerKit2.0/SOCLib77561/table/ DFCC/RC/OCV 表格
lib_fg.c SOCLib77561/lib/ 核心电量算法

3. 循环仪测试数据

3.1 测试数据格式

仿真依赖一次完整的放电循环测试数据,典型格式:

1
2
3
4
5
6
7
8
时间(s),电压(mV),电流(mA),温度(0.1°C),容量(mAh),SOC(%)
0,4200,0,250,0,100
1,4180,-500,251,0.5,99.98
2,4150,-500,252,1.0,99.95
...
3600,3650,-3000,250,3500,30
...
7200,3400,-100,245,4850,5

3.2 测试条件

为构建完整的 DFCC 三维表,需要在不同条件下测试:

维度 测试条件
温度 -10°C, 0°C, 25°C, 40°C
电流 0.5C, 1C, 2C, 3C
SOC 100%→0% 全程放电

3.3 数据预处理

仿真前需要对原始数据进行预处理:

  1. 数据清洗:去除异常点、噪声滤波
  2. 对齐处理:时间戳对齐、采样率统一
  3. 特征提取:提取 OCV 曲线、放电曲线、末端特性

4. DFCC 参数配置

4.1 关键参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// main.c - 参数配置
FG_LIB_PARAM_T fglib_param = {
100, // soh 更新滤波速率
100, // 充电FCC更新速率
100, // 放电DSGOffset更新速率
100, // 放电 DFCC 更新速率 (单位100)
150, // 自动开启DFCC的温度阈值 (单位0.1°C)
1000, // 自动开启DFCC的电流阈值 (单位mA)
50, // DFCC更新的最小步进值
60, // DFCC更新的最大SOC阈值 (单位%)
50, // DFCC更新的最小SOC放电量 (单位mAh)
20, // DFCC更新的最大温度变化 (单位°C)
10, // DFCC更新的最小温度 (单位°C)
25, // DFCC更新的最大温度变化 (单位°C)
10, // SOH更新计数阈值
100, // 充电阶段DFCC单次补偿最大范围 (单位mAh)
300, // 放电阶段DSGOffset单次补偿最大范围 (单位%)
500 // 放电阶段DFCC单次补偿最大范围 (单位100)
};

4.2 启用开关

1
2
3
4
5
6
7
8
9
10
LIB_ENABLE_CFG_TYPE_T fglib_enable_cfg = {
1, // SOH计算模式: 1=传统, 2=新方法
0, // 动态充电DFCC调节使能
0, // 动态充电FCC赋值
0, // 放电自学习参数更新使能
0, // 放电Offset初始化使能
0, // 动态放电DFCC自动调整使能
1, // 动态放电DFCC开启使能
0 // (保留)
};

5. 仿真执行流程

5.1 数据回放

BatterySimer 上位机按时间顺序回放循环仪测试数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 仿真主循环
for (each_data_point) {
// 1. 输入当前时刻的测量值
fg_input_voltage(current_mv);
fg_input_current(current_ma);
fg_input_temperature(current_temp_0_1deg);

// 2. 调用固件库更新算法
fg_update(); // 包含 DFCC 更新逻辑

// 3. 获取当前 SOC 估算值
int soc = fg_get_soc();

// 4. 与真实 SOC 对比,记录误差
real_soc = lookup_real_soc(time);
error = soc - real_soc;

// 5. 输出调试信息
if (debug_enabled) {
print_status(time, voltage, current, temp, soc, error);
}
}

5.2 DFCC 更新轨迹记录

仿真过程中记录 DFCC 的变化轨迹:

1
2
3
4
5
Time=3600s: DFCC=2850mAh (初始值)
Time=4000s: DFCC=2900mAh (+50, 温度从25°C→20°C触发更新)
Time=5000s: DFCC=2950mAh (+50, SOC变化触发更新)
Time=6000s: DFCC=3000mAh (+50, 平滑收敛)
...

5.3 精度评估

仿真结束后,计算整体精度:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 精度统计
float max_error = 0;
float avg_error = 0;
int error_count = 0;

for (each_data_point) {
error = abs(simulated_soc - real_soc);
max_error = max(max_error, error);
avg_error += error;
error_count++;
}

avg_error /= error_count;

printf("=== 仿真结果 ===\n");
printf("最大误差: %.2f%%\n", max_error);
printf("平均误差: %.2f%%\n", avg_error);
printf("误差<3%%的比例: %.1f%%\n", pass_rate);

6. 参数迭代优化

6.1 调参流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
┌─────────────────┐
│ 设定初始参数 │
└────────┬────────┘


┌─────────────────┐
│ 运行仿真 │
└────────┬────────┘


┌─────────────────┐
│ 检查精度指标 │
└────────┬────────┘

┌────┴────┐
│ 达标? │
└────┬────┘
是 │ 否
│ │
▼ │
┌─────────────────┐ │
│ 输出最终参数 │◄─┘
└─────────────────┘

6.2 关键调参变量

参数 影响 调参建议
dfcc_ratio DFCC 更新速度 值越大收敛越快,但可能震荡
dfcc_update_maxsoc SOC 变化阈值 越大触发越少,更稳定
dfcc_update_thmrange 温度变化阈值 越大触发越少
dfcc_maxrange 单次最大变化 防止跳变,但影响收敛速度

6.3 dfcc_ratio 详解

1
signed int dfcc_ratio = 15;  // 0-100, 值越大越快接近查表结果
  • 值大 (如 50):快速收敛,但可能在边界附近震荡
  • 值小 (如 5):缓慢稳定,但初始阶段误差大
  • 值 -1:关闭 DFCC 功能

7. 仿真验证实例

7.1 测试场景

假设测试数据:

  • 电芯:道格ZN139,5000mAh×6=30000mAh
  • 放电电流:1C (3000mA)
  • 温度:25°C → 5°C (模拟使用中温度下降)

7.2 仿真结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
=== DFCC 仿真结果 ===
测试条件: 1C放电, 25°C→5°C

时间(s) 电压(mV) 电流(mA) 温度(°C) SOC_真 SOC_仿 误差(%)
0 4200 3000 25.0 100.0 100.0 0.0
1800 3750 3000 20.0 60.0 60.2 +0.2
3600 3550 3000 15.0 35.0 35.4 +0.4
5400 3400 3000 8.0 15.0 15.3 +0.3
7200 3200 500 5.0 5.0 5.1 +0.1

=== 精度统计 ===
最大误差: 0.4%
平均误差: 0.2%
精度 < 3%: 100% ✓

7.3 DFCC 更新轨迹

1
2
3
4
5
时间    DFCC(mAh)   触发原因
0 29500 初始值
1800 29750 温度变化>20°C
3600 30000 SOC变化>60%
4200 30000 已达上限,稳定

8. 小结

仿真调参系统的价值:

  1. 加速迭代:无需反复做实验,快速验证参数
  2. 覆盖边界:极端条件通过仿真覆盖
  3. 量化评估:精度指标客观可量化
  4. 可复现:相同数据可重复仿真

结合实验室少量验证 + 大量仿真,可实现 DFCC 参数的高效调校


系列目录
01. DFCC算法原理与电池阻抗追踪
02. DFCC参数调校与仿真验证系统(本文)
03. 库仑计SOC算法工程实现