电量计 -- 77561电池建模和调参

电量计 – 77561电池建模和调参

合并电池建模数据到PRJ

77561的可配参数包括建模表都是cobra直接配置到flash,因此直接在现有prj上编辑参数:

(1)导入TableMaker输出的OCV_falcon.txt(X轴是电压的版本)和RC.txt表

image-20250331173554812

(2)导入电池规格参数

电量计两个通道分别采样单节电芯(85226)要按单节电芯算:如果规格书是电芯,则按单电芯电压配置PRJ,如果规格书是电池包,按电池包电压除2配置。

电量计采样如果是双节电芯一起采样(77561),按双节电压配置PRJ;

1.多串电芯的示例(85226双节独立采样):

image-20260410163901717

示例2:77561双节一起采样(一般用不上)

image-20250331193151566

2.多并电芯的示例:

image-20251023102148780

3.单串电芯直接按电池规格书和需求表excel配电压,EOD,cell number设置为1即可。

注意保护电压也要调整,Cell OV threshold >= 充电限制电压,如果设置低了ADC就不采集,SBS通信就读不出电压为0

image-20251023115325601

FW环境数据更新

(1) 初始化DFCC表

放电精度调参主要是调DFCC,其定义取决于客户需求要关注哪几个电流和温度,如下图是初始值,默认权重都是100%即保持当前soc不缩小或放大。

注意:DFCC_Y和DFCC_Z的值也要跟随调整,DFCC_X一般不动。

image-20251023103321369

sysim系统阻抗是电量计芯片和电芯之间的线阻,影响放大误差,如果默认值1毫欧和实际硬件有很大不匹配可能导致很大的放电误差。

需要测量电池包内,电芯到电量计芯片的阻抗,注意不是电池包到外部充放电线的阻抗,再配置代码参数sysim(单位0.1毫欧)

例如 cfg.sysim = 2*10; 表示系统阻抗2毫欧。

(2)更新RC建模表的XY个数

注意Firmware的RC table XY值也要调整为和RC建模表.txt 一致!仿真环境也必须一致,否则仿真曲线和实测曲线不重合!

image-20251103110429290

仿真环境数据更新

(1)更新建模表和参数

batsim代码里新增一个DATA_TYPE宏区分不同项目配置,根据OCV_falcon.txt和RC.txt表合并OCV,RC table和parameter,需要修改SOCLib的table.c/table.h/parameter.c

使用python脚本完成OCV和RC表数据自动替换,详见python tool注释;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
BatterySimerKit2.0_main> python auto_update_table.py
=== 自动化参数配置工具 ===
请输入 table.c 中待替换区域的 DATA_TYPE 值: 1029
请输入 table.c 文件的路径: C:\git-834\BatterySimerKit2.0_main\SOCLib77561\table\table.c
请输入 OCV.txt 文件的路径: C:\git-834\sd77561-AE\科立讯\TD-80\KLX TD80-2 TABLE\Output\OCV\FalconLY\OCV_KLX_195095_8230mAhr_4400mV_3000mV_V007_20260407_FalconLY.txt
请输入 RC.txt 文件的路径: C:\git-834\sd77561-AE\科立讯\TD-80\KLX TD80-2 TABLE\Output\RC\RC_KLX_195095_8230mAhr_4400mV_3000mV_V002_20260407.txt
正在解析 OCV.txt 文件...
已提取 OCV 数据: 65 个点
正在解析 RC.txt 文件...
已提取 RC 数据: x轴 80 个点, w轴 5 个点, v轴 5 个点, 容量表 25 行
正在提取 RC.txt 中的轴维度信息...
已提取轴维度信息: XAxis=80, YAxis=5, ZAxis=5
正在更新 table.c 文件...
文件已成功写入: C:\git-834\BatterySimerKit2.0_main\SOCLib77561\table\table.c
正在更新 table.h 文件...
警告: 已更新 table.h 的 DATA_TYPE == 1029, 但未修改内容
参数配置完成!

image-20250331203309863

image-20250331203328434

image-20250331203805982

image-20250403142611409

注意DFCC需要手动配置。从Firmware代码拷DFCC table和Y,Z个数到仿真代码。必须一致否则调参对不上而且问题隐蔽!

还有一些参数在仿真代码main.c直接定义的,如sysim,eod_ddv。

(2)FW 的lib_fg.c必须要同步到仿真的SOCLib77561\lib,如果两个lib_fg功能不一致,仿真和FW跑出的曲线不一致

仿真使用的到底是那个lib_fg .c和.h可以在vs环境查看

1.可用winmerge比较两者,如果只是dbg_print有差异,无需替换

2.如果有功能差异:将FW的lib/lib_fg.c和lib_fg.h复制到仿真工程的SOCLib77561\lib,在vs工程中移除之前的libfg.c和.h,再添加existing file libfg.c和.h。

移植FW lib到仿真工程可能有的问题:dbg_print编译报错,注释掉所有dbg_print。最后winmerge比较确认和FW一致性。参数定义不一致问题,以当前FW定义为准。

(3)Form.c的const int EOD_VOL = 3300;可能需要根据项目调整,影响GUI sim截止电压曲线

以上全部配置好后,编译SOCLib和Simer GUI

仿真软件调参DFCC

实测不同温度电流下的cobra放电数据(cycler-cobra .csv)

Bat simmer软件

先编译Lib和GUI,运行bat simmer,加载cobra采集数据csv。csv可能包含充电和放电过充,可手动设置Display只显示放电区域的x轴范围

image-20250402173244348

image-20250401105054688

已更新Bat simmer版本功能,GUI X轴自动显示放电过程

DFCC调参

调参是根据cyc-sim蓝绿曲线的最大值,找对应的SOC,再结合电流和温度,查表对应的DFCC值。

(1)DFCC调参基本思路:

cycle曲线是以cobra csv的电荷积分信息算出的真实电量信息,作为目标值;

simer曲线是以SOCLib中算法输出的rsoc电量信息,作为待调试值;

调参目标:放电阶段,simer曲线逼近cycle曲线,对应的cyc-sim误差全局小于3%。

cycle-cobra的误差反映的是调参以前的实测误差,在调参过程中用不到这个误差。调参以后可以再cobra实测确认误差应该和cyc-sim一致。

image-20250402172723008

(2)调参过程:

如果simmer > cycle,调低对应的DFCC区间值;反之则调高DFCC区间值。

以调整RSOC 10位置的误差为例:

由于DFCC表的电流是离散的几个值,可能当前测试的电流(1A)不在DFCC电流表中(0.6A, 1.5A),算法查DFCC表会依赖于临近电流插值,因此估计(0.6A, 1.5A)两个电流点的DFCC值会共同决定1A的DFCC值,可以同时把(0.6A, 1.5A)两个点调大,也可以只调1.5A, 0.6A不变,以调整结果为准。

image-20250402171530799

在调参后需要编译SOCLib更新DLL,Bat Sim界面程序不需要更新,可以直接VS F5运行查看效果(sln项目配置需要设置F5运行默认从Bat sim启动)。

image-20250402173650853

(3)DFCC表是有调整规律的:

低温的容量会调低,大电流的容量会调高,高温的容量会调高。

同一 Y, Z轴下的一行DFCC值不会反复跳变,一般是从40%递增到100%甚至超过100。

某个soc点位怎么调都缩写不了误差如何处理:

  1. 考虑调它前面的点位(曲线左侧soc更高的点位),因为前面的soc会累积影响到当前soc,当前误差最大可能是前面soc影响。

  2. 曲线要看转折点而不仅仅是最大误差点,看左侧趋势在哪个点位发生斜率改变,这个转折点就是要调的soc,而不是后面误差累计达到最大的点

(4)注意:Bat simer全局最大误差idx log是不准确的,调参应该以曲线鼠标显示的soc值为准

如下图说RSOC 30是误差最大点,实际误差很小;RSOC 8是误差最大点,要调的是这个点)

image-20250402170734028

(5)调参也应该参考cobra曲线和sim曲线,某处soc对应误差大,不一定是修改DFCC这个soc的值,而是修改这个soc前面或者后面的值,要根据sim曲线趋势判断误差发生在前面还是后面的soc。

如下图左侧是cobra原始DFCC,右侧是调参后的DFCC。

正常的调参,DFCC值应该是连续变化,如果有误差在当前soc改不动,例如当前soc偏低,但怎么调高也纠正不了,考虑原因是前面放电更高soc点位的DFCC值偏低。

调参切忌盯着一个soc点位调,错误把DFCC值改成跳变。

image-20250408163614933

(5)权重互补

因为DFCC表只是几个采样,实际电流情况会有插值。DFCC调参需要考虑权重互补,考虑相邻DFCC行的权重。

image-20250418103046531

(6) 使用cobra数据精确调参

遇到常温误差比较大的情况时,首先排查两个问题:1.看EOD电压附近+-50mV以内是否电量达到0,这是EOD参数基础功能要求。2.如果发现电池开始放电压降大,怀疑sysim问题,仿真代码可以修改sysim看看效果。

然后才是调DFCC:查看GGMEM0的fcc和facc比例,可以直接得出dfcc该如何调整。

image-20251028150421032

Bug fix记录

CADC补偿问题影响低温精度

77561有CADC TRIM功能,是利用ATE对不同批次芯片测试中发现某些批次电流误差较大时(良率问题),ATE将25度和60度下CADC电流误差纠正值写入flash,FW根据flash值按一定斜率推算低温-20度的电流补偿值。25度和60度的补偿是数字逻辑纠偏不需要FW参与。

如果CADC TRIM功能失效,会导致-20C精度测试的误差很大(达到20%),这时不管怎么调DFCC都很难纠正。因此低温下SOC精度问题尤其要注意CADC补偿是否正常。

CADC TRIM功能和DFCC调参的相关性:

image-20250411141816196

image-20250411141914294

低温大电流放电,cycle曲线异常

低温-20度用大电流0.5C 2.5A放电,工具读csv显示的cycle曲线异常,下降极快

image-20250416160203454

而同样环境,低温-20度小电流0.2C 1A放电,或者是低温-10度大电流0.5C 2.5A放电,cycle曲线都是正常。

问题原因:低温+大电流两个条件叠加,导致放电开始时初始电压就降到3.4V,而截止电压是3.3V。但工具解析cycle csv数据对放电终点有误判认为3.4V就是终点导致cycle曲线错误解析。

-20度 2.5A的放电数据cycle csv:

image-20250416161004330

解决办法:用rsoc = 0作为放电终点,只对小电流放电补充判断截止电压,避免大电流放电误判

image-20250416161023471

修复之后效果:

image-20250416161237987

电池一致性问题

一般电池建模和放电cobra测试使用同型号的电芯,但有时电芯一致性区别大,使用#1号电芯建模,使用#2电芯放电测试,怎么调参都达不到仿真效果,可能是一致性问题,即两个同型号电芯的实际容量和内阻等特性有大的差异,导致建模不匹配。

对这种问题,首先确认三个数据是否一致,排除软件引起:建模RCtable,Cobra测试FW的算法和RCtable,仿真环境FW的算法和RCtable,应该完全一致。

image-20250514193017205

问题特性是:

  1. 仿真可以调得很好,但cobra测试误差很大(相同的FW和建模数据,cobra测试曲线和仿真曲线不能保持一致),如下图

  2. 查看cobra csv log无异常,温度(内部外部温度区别不大),电流值(originCurrent和CADC校准后的Bat current),电量(放电的 电流*时间 积分 = ccmAh电量)等关键数据都没问题。

image-20250514193136189

使用当前电芯做一次建模,和已有的RCtable的建模结果比较,如果soc误差大即确认建模不匹配,如下图:

微信图片_20250514194341

然后用已有RCtable的那块建模电芯再复测,如果仿真曲线和cobra曲线能匹配,就确认了是一致性问题。