STM32bms动力电池管理系统仿真 Battery Simulink电池平衡控制策略模型 动力电池管理系统仿真 BMS + Battery Simulink 控制策略模型, 动力电池物理模型,需求说明文档。 BMS算法模型包含状态切换模型、SOC估计模型(提供算法说明文档)、电池平衡模型、功率限制模型等,动力电池物理模型包含两种结构的电池模型。 通过上述模型可以实现动力电池系统的闭环仿真测试,亦可根据自身需求进行算法的更新并进行测试验证。

最近在折腾动力电池管理系统仿真,发现Simulink真是个宝藏工具箱。今天咱们就聊聊怎么用STM32 BMS模型配合电池物理模型玩转电池平衡控制,手把手带你看懂那些藏在算法里的"小心机"。

先看电池物理模型这块,工程狗们最熟悉的双结构模型其实就是RC等效电路(图1)。不过别被公式吓到,用Simulink搭起来比写代码省事多了:

% 二阶RC电池模型参数
R0 = 0.0025;    % 欧姆
R1 = 0.0012;    % 欧姆
C1 = 12000;     % F
R2 = 0.0008;    % 欧姆 
C2 = 48000;     % F

s = tf('s');
Z = R0 + R1/(1+R1*C1*s) + R2/(1+R2*C2*s);

这模型妙在既能反映瞬态响应,又能捕捉弛豫效应。实际仿真时记得把温度系数打包成Lookup Table,不然循环充放电曲线会跑飞。

重点说说BMS里的SOC估计算法。搞过无人机的都知道安时积分法有多坑,所以咱们模型里用的是改进型EKF(扩展卡尔曼滤波)。核心代码也就二十行:

// EKF预测步骤
void SOC_Predict(float current, float dt) {
    // 状态方程: SOC(k+1) = SOC(k) - (η*I*Δt)/Q
    soc_priori = soc_posterior - (coulomb_eff * current * dt)/nominal_capacity;
    
    // 协方差预测
    P_priori = A * P_posterior * A_T + Q_kalman;
}

// 更新步骤
void SOC_Update(float voltage) {
    // 观测方程计算
    float OCV = getOCV(soc_priori);
    float V_est = OCV - I*R0;
    
    // 卡尔曼增益
    K = P_priori * C_T / (C * P_priori * C_T + R_kalman);
    
    soc_posterior = soc_priori + K*(voltage - V_est);
    P_posterior = (1 - K*C) * P_priori;
}

注意那个coulomb_eff库伦效率系数,实战中这玩意和温度强相关,建议做成二维查表。还有OCV-SOC曲线,千万别用厂家给的理想曲线,实测数据才是王道。

STM32bms动力电池管理系统仿真 Battery Simulink电池平衡控制策略模型 动力电池管理系统仿真 BMS + Battery Simulink 控制策略模型, 动力电池物理模型,需求说明文档。 BMS算法模型包含状态切换模型、SOC估计模型(提供算法说明文档)、电池平衡模型、功率限制模型等,动力电池物理模型包含两种结构的电池模型。 通过上述模型可以实现动力电池系统的闭环仿真测试,亦可根据自身需求进行算法的更新并进行测试验证。

电池平衡策略算是BMS里的重头戏,我们的主动均衡模型用了动态阈值法。Simulink里用Stateflow实现状态机比写代码直观十倍:

function balance_control = BalanceLogic(cell_voltages)
    avg_volt = mean(cell_voltages);
    delta_threshold = 0.03; % 30mV
    
    balance_control = zeros(size(cell_voltages));
    for i = 1:length(cell_voltages)
        if (cell_voltages(i) - avg_volt) > delta_threshold
            balance_control(i) = 1; % 开启放电
        elseif (avg_volt - cell_voltages(i)) > delta_threshold*0.8
            balance_control(i) = -1; % 被动均衡
        end
    end
end

这里有个骚操作——当单体电压比平均高30mV时开启主动均衡,但反向差值达到24mV就触发被动均衡。实测证明这种非对称阈值能有效防止均衡电路频繁开关。

功率限制模型更是个隐藏BOSS,特别是低温下的降额策略。建议用指数曲线模拟温度影响:

float derate_factor = 1.0 - exp(-0.1*(temp_current - temp_min));
float max_dischg_current = nominal_current * (1.0 - derate_factor);

记得在模型里加个低通滤波器,否则电流指令会抖成帕金森。仿真时拿NEDC工况循环蹂躏模型,能看到SOC曲线像心电图一样跳——这时候别慌,多半是电流采样噪声没处理好。

最后说个踩坑经验:用Simulink的Battery模块做闭环测试时,一定要把BMS的采样周期和电池模型的计算步长对齐。曾经因为一个10ms的时间差,导致SOC估计误差飙到5%,排查了三天才发现是时序不同步的问题。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐