电量计 – 77561电池建模和调参
合并电池建模数据到PRJ
77561的可配参数包括建模表都是cobra直接配置到flash,因此直接在现有prj上编辑参数:
(1)导入TableMaker输出的OCV_falcon.txt(X轴是电压的版本)和RC.txt表

(2)导入电池规格参数
电量计采样是双节电芯才按双节电压处理;如果是电量计两个通道分别采样单节电芯要按单节电芯算,电池包的电压参数要除2。
多串电芯的示例(双节采样):

多并电芯的示例:

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

FW环境数据更新
(1) 初始化DFCC表
放电精度调参主要是调DFCC,其定义取决于客户需求要关注哪几个电流和温度,如下图是初始值,默认权重都是100%即保持当前soc不缩小或放大。
注意:DFCC_Y和DFCC_Z的值也要跟随调整,DFCC_X一般不动。

sysim系统阻抗是电量计芯片和电芯之间的线阻,影响放大误差,如果默认值1毫欧和实际硬件有很大不匹配可能导致很大的放电误差。
需要测量电池包内,电芯到电量计芯片的阻抗,注意不是电池包到外部充放电线的阻抗,再配置代码参数sysim(单位0.1毫欧)
例如 cfg.sysim = 2*10; 表示系统阻抗2毫欧。
(2)更新RC建模表的XY个数
注意Firmware的RC table XY值也要调整为和建模表一致!仿真环境也必须一致,否则仿真曲线和实测曲线不重合!

仿真环境数据更新
(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注释;




注意DFCC需要手动配置。从Firmware代码拷DFCC table和Y,Z个数到仿真代码。必须一致否则调参对不上而且问题隐蔽!
还有一些参数在仿真代码main.c直接定义的,如sysim,eod_ddv。
(2)FW 的lib_fg.c需要同步到仿真的SOCLib77561\lib,仿真使用的到底是那个lib_fg .c和.h可以在vs环境查看,将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定义为准。
以上全部配置好后,编译SOCLib和Simer GUI
仿真软件调参DFCC
实测不同温度电流下的cobra放电数据(cycler-cobra .csv)
Bat simmer软件
先编译Lib和GUI,运行bat simmer,加载cobra采集数据csv。csv可能包含充电和放电过充,可手动设置Display只显示放电区域的x轴范围


已更新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一致。

(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不变,以调整结果为准。

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

(3)DFCC表是有调整规律的:
低温的容量会调低,大电流的容量会调高,高温的容量会调高。
同一 Y, Z轴下的一行DFCC值不会反复跳变,一般是从40%递增到100%甚至超过100。
某个soc点位怎么调都缩写不了误差如何处理:
考虑调它前面的点位(曲线左侧soc更高的点位),因为前面的soc会累积影响到当前soc,当前误差最大可能是前面soc影响。
曲线要看转折点而不仅仅是最大误差点,看左侧趋势在哪个点位发生斜率改变,这个转折点就是要调的soc,而不是后面误差累计达到最大的点
(4)注意:Bat simer全局最大误差idx log是不准确的,调参应该以曲线鼠标显示的soc值为准
如下图说RSOC 30是误差最大点,实际误差很小;RSOC 8是误差最大点,要调的是这个点)

(5)调参也应该参考cobra曲线和sim曲线,某处soc对应误差大,不一定是修改DFCC这个soc的值,而是修改这个soc前面或者后面的值,要根据sim曲线趋势判断误差发生在前面还是后面的soc。
如下图左侧是cobra原始DFCC,右侧是调参后的DFCC。
正常的调参,DFCC值应该是连续变化,如果有误差在当前soc改不动,例如当前soc偏低,但怎么调高也纠正不了,考虑原因是前面放电更高soc点位的DFCC值偏低。
调参切忌盯着一个soc点位调,错误把DFCC值改成跳变。

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

(6) 使用cobra数据精确调参
遇到常温误差比较大的情况时,首先排查两个问题:1.看EOD电压附近+-50mV以内是否电量达到0,这是EOD参数基础功能要求。2.如果发现电池开始放电压降大,怀疑sysim问题,仿真代码可以修改sysim看看效果。
然后才是调DFCC:查看GGMEM0的fcc和facc比例,可以直接得出dfcc该如何调整。

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调参的相关性:


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

而同样环境,低温-20度小电流0.2C 1A放电,或者是低温-10度大电流0.5C 2.5A放电,cycle曲线都是正常。
问题原因:低温+大电流两个条件叠加,导致放电开始时初始电压就降到3.4V,而截止电压是3.3V。但工具解析cycle csv数据对放电终点有误判认为3.4V就是终点导致cycle曲线错误解析。
-20度 2.5A的放电数据cycle csv:

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

修复之后效果:

电池一致性问题
一般电池建模和放电cobra测试使用同型号的电芯,但有时电芯一致性区别大,使用#1号电芯建模,使用#2电芯放电测试,怎么调参都达不到仿真效果,可能是一致性问题,即两个同型号电芯的实际容量和内阻等特性有大的差异,导致建模不匹配。
对这种问题,首先确认三个数据是否一致,排除软件引起:建模RCtable,Cobra测试FW的算法和RCtable,仿真环境FW的算法和RCtable,应该完全一致。

问题特性是:
仿真可以调得很好,但cobra测试误差很大(相同的FW和建模数据,cobra测试曲线和仿真曲线不能保持一致),如下图
查看cobra csv log无异常,温度(内部外部温度区别不大),电流值(originCurrent和CADC校准后的Bat current),电量(放电的 电流*时间 积分 = ccmAh电量)等关键数据都没问题。

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

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