Simulink锂离子电池2阶等效电路模型(含0、25、45度HPPC数据与BJDST、US0...
Simulink锂离子电池2阶等效电路模型带0、25、45度HPPC数据参数辨识后可使用BJDST、US06、UDDS、FUDS四种工况进行精度验证这个二阶等效电路模型折腾了我三天才跑通现在回头看其实参数辨识的坑都藏在温度补偿里。模型结构倒是简单一个Rint串联两个RC网络SOC-OCV曲线用三阶多项式拟合。但真正要命的是HPPC数据在不同温度下的参数漂移——25度的数据调参后拿到0度工况直接崩给你看。先看怎么在Simulink里搭这个结构。电池端电压计算公式别手写直接用Simscape的Electrical Library搭物理模型更靠谱% 二阶模型参数初始化 R0 0.0025; R1 0.0012; C1 4800; R2 0.0008; C2 25000; soc_ocv [3.0, 3.4, 3.7, 4.0, 4.2]; % 对应0%~100% SOC这里注意RC时间常数别超过HPPC脉冲间隔否则参数辨识会出鬼影。实测当τR*C30秒时US06工况下的电压抖动误差能飙到5%。Simulink锂离子电池2阶等效电路模型带0、25、45度HPPC数据参数辨识后可使用BJDST、US06、UDDS、FUDS四种工况进行精度验证温度补偿这块得用查表法硬怼。举个暴力但有效的参数插值代码% 三温度点参数矩阵 temp_params [0 0.0030 0.0015 5000 0.0010 30000; 25 0.0025 0.0012 4800 0.0008 25000; 45 0.0022 0.0010 4500 0.0006 20000]; function [R0,R1,C1,R2,C2] get_params(temp) % 温度线性插值 idx find(temp_params(:,1) temp); if isempty(idx) k 1; elseif idx(end) size(temp_params,1) k size(temp_params,1); else x (temp - temp_params(idx(end),1))/(temp_params(idx(end)1,1)-temp_params(idx(end),1)); k [idx(end), idx(end)1]; end % 参数插值计算... end别信什么高阶插值实测线性插值在-10~50度范围内误差2%关键是别让参数出现负值。工况验证时记得给电流信号加个0.1秒的惯性环节不然Simulink solver分分钟炸给你看。特别是FUDS这种变态工况电流变化率能到200A/s% 导入UDDS工况数据预处理 load(UDDS_Profile.mat); current timeseries(Current_Data, Time_Data); voltage_ref timeseries(Voltage_Data, Time_Data); % 惯性滤波 [num, den] tf([1], [0.1 1]); current_filtered lsim(num, den, current.Data, current.Time);最后说个血泪教训BJDST工况验证前一定要检查SOC初始值有次忘了重置初始SOC4.2V的OCV直接怼到3.7V的实际电压仿真曲线直接表演高空跳水。建议加个强制初始化模块% SOC初始化强制归位 if abs(initial_soc - real_soc) 0.1 error(SOC初始误差超过10%建议检查HPPC数据分段); end现在这套模型在45度下的US06验证能跑到97.3%的拟合度算是能交差了。但总感觉RC网络阶数不够下次试试三阶加滞回效应不过那又是另一个深坑了...