Advertisement

手把手教你学simulink实例--基于Simulink的电动汽车电池管理系统(BMS)设计与仿真

阅读量:

目录

基于Simulink的电动汽车电池管理系统(BMS)设计与仿真

1. 背景介绍

1.1 项目背景

1.2 系统描述

1.3 应用场景

2. 系统架构设计

2.1 系统框图

3. Simulink仿真模型步骤

3.1 创建Simulink模型

3.2 添加模块

3.2.1 电池组模块

3.2.2 传感器模块

3.2.3 控制模块

3.2.4 输出显示模块

3.3 连接模块

3.4 设置仿真参数

4. 示例代码片段

5. 结束语


基于Simulink的电动汽车电池管理系统(BMS)设计与仿真


1. 背景介绍

1.1 项目背景

伴随着电动汽车的广泛应用

本项目的目标在于利用MATLAB/Simulink平台来规划并详细设计一个完整且功能完善的电动汽车电池管理系统模型。随后将对该系统进行仿真实验以验证其功能与性能。项目的最终目标在于保证该系统能够在不同工作状态下高效运行同时保持系统的安全性进而提升整个电池组的使用寿命。

1.2 系统描述

电动汽车电池管理系统(BMS)主要由以下部分组成:

  • 电池系统组件:由多组电芯串联或并联构成。
    • 感知系统:监测车辆运行状态的关键参数包括电压值、电流强度以及温度数据。
    • 调节与优化系统:完成SOC估算与SOH评估任务,并实施均衡电流分配及故障防护策略。
    • 信息传输部分:与车辆整体控制系统进行数据交互连接。

目标是通过建模与仿真,优化BMS的功能设计,提升电动汽车的整体性能。

1.3 应用场景

  • SOC估算 :持续监测电池充放电状态。
    • SOH评估 :通过电压、电流等参数分析判断电池实际储能情况。
    • 均衡控制 :实现单体电池电压均衡性管理。
    • 热管理 :优化散热设计以确保安全运行。
    • 故障诊断与保护 :快速识别异常状况并实施有效防护。

2. 系统架构设计

2.1 系统框图

整个系统可以分为以下几个模块:

  1. 动态特性仿真模块:用于复制电池组的行为特征。
  2. 传感器组件:负责收集电池电压值及其变化趋势等关键参数信息。
  3. 智能控制单元:具备精确估算SOC的能力,并支持SOH评估以及均衡调节功能。
  4. 输出显示界面主要展示各种状态参数信息(包括SOC指标等)。

系统框图如下所示:

复制代码

深色版本

复制代码
 电池组 → [传感器模块] → [控制模块] → 输出显示

    
 ↓                       ↑
    
 反馈信号           控制指令

3. Simulink仿真模型步骤

3.1 创建Simulink模型

  1. 打开MATLAB并新建一个Simulink模型文件。
  2. 定义模型名称为EV_BMS.
复制代码

matlab

深色版本

复制代码
 modelName = 'EV_BMS';

    
 new_system(modelName);
    
 open_system(modelName);

3.2 添加模块

3.2.1 电池组模块

定义电池组的动力学模型,采用等效电路模型(Thevenin模型)描述其行为。

复制代码

matlab

深色版本

复制代码
 add_block('simulink/User-Defined Functions/Matlab Function', [modelName '/Battery_Pack']);

    
 set_param([modelName '/Battery_Pack'], 'Mask', 'on');
    
 set_param([modelName '/Battery_Pack'], 'MaskDisplay', 'Battery Pack');
    
  
    
 % 在Matlab Function中定义电池组模型
    
 function [V_batt, SOC, SOH] = fcn(I_batt, V_oc, R0, R1, C1, SOC0, SOH0)
    
     % 参数定义
    
     dt = 0.1; % 时间步长 (s)
    
     
    
     % 动力学方程
    
     dSOC_dt = -I_batt / Capacity;
    
     dSOH_dt = -DegradationRate * abs(I_batt);
    
     dV_R1_dt = (I_batt - V_R1 / R1) / C1;
    
     
    
     % 更新状态变量
    
     SOC = SOC0 + dSOC_dt * dt;
    
     SOH = SOH0 + dSOH_dt * dt;
    
     V_R1 = V_R1 + dV_R1_dt * dt;
    
     
    
     % 计算电池电压
    
     V_batt = V_oc - I_batt * R0 - V_R1;
    
 end

3.2.2 传感器模块

添加“Current Source”和“Voltage Measurement”模块模拟电流和电压测量。

复制代码

matlab

深色版本

复制代码
 add_block('simulink/Sources/Current Source', [modelName '/Current_Sensor']);

    
 add_block('simulink/Sinks/Voltage Measurement', [modelName '/Voltage_Sensor']);

3.2.3 控制模块

实现SOC估算、SOH评估和均衡控制功能。

复制代码

matlab

深色版本

复制代码
 add_block('simulink/User-Defined Functions/Matlab Function', [modelName '/BMS_Controller']);

    
 set_param([modelName '/BMS_Controller'], 'Mask', 'on');
    
 set_param([modelName '/BMS_Controller'], 'MaskDisplay', 'BMS Controller');
    
  
    
 % 在Matlab Function中定义控制器逻辑
    
 function [ControlSignal, SOC_est, SOH_est] = fcn(V_batt, I_batt, Temp)
    
     % 参数定义
    
     K_soc = 0.98; K_soh = 0.95;
    
     
    
     % SOC估算
    
     SOC_est = K_soc * (V_batt / NominalVoltage);
    
     
    
     % SOH评估
    
     SOH_est = K_soh * exp(-Temp / 100);
    
     
    
     % 均衡控制
    
     if abs(V_batt - V_target) > Threshold
    
     ControlSignal = 1; % 启动均衡
    
     else
    
     ControlSignal = 0; % 关闭均衡
    
     end
    
 end

3.2.4 输出显示模块

添加一个“Scope”模块用于显示电池状态变量(如SOC、SOH、电压、电流、温度)。

复制代码

matlab

深色版本

复制代码
    add_block('simulink/Sinks/Scope', [modelName '/Output_Scope']);

添加一个“To Workspace”模块将输出数据保存到MATLAB工作区。

复制代码

matlab

深色版本

复制代码
 add_block('simulink/Sinks/To Workspace', [modelName '/Data_Logger']);

    
 set_param([modelName '/Data_Logger'], 'VariableName', 'outputData');
    
 set_param([modelName '/Data_Logger'], 'SaveFormat', 'Array');

3.3 连接模块

将各个模块按照系统框图连接起来。

复制代码

matlab

深色版本

复制代码
 % 连接电流源到电池组模块

    
 add_line(modelName, '/Current_Sensor/1', '/Battery_Pack/1', 'autorouting', 'on');
    
  
    
 % 连接电池组模块到电压传感器
    
 add_line(modelName, '/Battery_Pack/1', '/Voltage_Sensor/1', 'autorouting', 'on');
    
  
    
 % 连接传感器数据到控制器模块
    
 add_line(modelName, '/Voltage_Sensor/1', '/BMS_Controller/1', 'autorouting', 'on');
    
 add_line(modelName, '/Current_Sensor/1', '/BMS_Controller/2', 'autorouting', 'on');
    
  
    
 % 连接控制器输出到显示模块
    
 add_line(modelName, '/BMS_Controller/1', '/Output_Scope/1', 'autorouting', 'on');
    
 add_line(modelName, '/BMS_Controller/1', '/Data_Logger/1', 'autorouting', 'on');

3.4 设置仿真参数

设置仿真时间为60秒。

复制代码

matlab

深色版本

复制代码
 set_param(modelName, 'StopTime', '60'); % 设置仿真时间为60秒

    
 save_system(modelName); % 保存模型

4. 示例代码片段

以下是一个全面的利用Simulink实现电动汽车电池管理系统(BMS)整个系统的设计师流程。

复制代码

matlab

深色版本

复制代码
 % Step 1: Define model name and create a new system

    
 modelName = 'EV_BMS';
    
 new_system(modelName);
    
 open_system(modelName);
    
  
    
 % Step 2: Add Battery Pack Model
    
 add_block('simulink/User-Defined Functions/Matlab Function', [modelName '/Battery_Pack']);
    
 set_param([modelName '/Battery_Pack'], 'Mask', 'on');
    
 set_param([modelName '/Battery_Pack'], 'MaskDisplay', 'Battery Pack');
    
  
    
 % 在Matlab Function中定义电池组模型
    
 function [V_batt, SOC, SOH] = fcn(I_batt, V_oc, R0, R1, C1, SOC0, SOH0)
    
     dt = 0.1;
    
     dSOC_dt = -I_batt / Capacity;
    
     dSOH_dt = -DegradationRate * abs(I_batt);
    
     dV_R1_dt = (I_batt - V_R1 / R1) / C1;
    
     SOC = SOC0 + dSOC_dt * dt;
    
     SOH = SOH0 + dSOH_dt * dt;
    
     V_R1 = V_R1 + dV_R1_dt * dt;
    
     V_batt = V_oc - I_batt * R0 - V_R1;
    
 end
    
  
    
 % Step 3: Add Sensors
    
 add_block('simulink/Sources/Current Source', [modelName '/Current_Sensor']);
    
 add_block('simulink/Sinks/Voltage Measurement', [modelName '/Voltage_Sensor']);
    
  
    
 % Step 4: Add BMS Controller
    
 add_block('simulink/User-Defined Functions/Matlab Function', [modelName '/BMS_Controller']);
    
 set_param([modelName '/BMS_Controller'], 'Mask', 'on');
    
 set_param([modelName '/BMS_Controller'], 'MaskDisplay', 'BMS Controller');
    
  
    
 % 在Matlab Function中定义控制器逻辑
    
 function [ControlSignal, SOC_est, SOH_est] = fcn(V_batt, I_batt, Temp)
    
     K_soc = 0.98; K_soh = 0.95;
    
     SOC_est = K_soc * (V_batt / NominalVoltage);
    
     SOH_est = K_soh * exp(-Temp / 100);
    
     if abs(V_batt - V_target) > Threshold
    
     ControlSignal = 1;
    
     else
    
     ControlSignal = 0;
    
     end
    
 end
    
  
    
 % Step 5: Add Output Scope
    
 add_block('simulink/Sinks/Scope', [modelName '/Output_Scope']);
    
  
    
 % Step 6: Add Data Logger
    
 add_block('simulink/Sinks/To Workspace', [modelName '/Data_Logger']);
    
 set_param([modelName '/Data_Logger'], 'VariableName', 'outputData');
    
 set_param([modelName '/Data_Logger'], 'SaveFormat', 'Array');
    
  
    
 % Step 7: Connect Blocks
    
 add_line(modelName, '/Current_Sensor/1', '/Battery_Pack/1', 'autorouting', 'on');
    
 add_line(modelName, '/Battery_Pack/1', '/Voltage_Sensor/1', 'autorouting', 'on');
    
 add_line(modelName, '/Voltage_Sensor/1', '/BMS_Controller/1', 'autorouting', 'on');
    
 add_line(modelName, '/Current_Sensor/1', '/BMS_Controller/2', 'autorouting', 'on');
    
 add_line(modelName, '/BMS_Controller/1', '/Output_Scope/1', 'autorouting', 'on');
    
 add_line(modelName, '/BMS_Controller/1', '/Data_Logger/1', 'autorouting', 'on');
    
  
    
 % Step 8: Set Simulation Parameters
    
 set_param(modelName, 'StopTime', '60');
    
 save_system(modelName);

5. 结束语

本项目文档中,我们对电动汽车电池管理系统(BMS)的设计过程进行了全面阐述,并经过仿真测试验证了其实现的功能与性能。该示例旨在帮助读者更好地理解并灵活运用相关技术,在实际应用中如需进一步优化或拓展功能,则可以根据具体的应用需求进行相应的调整和完善。

全部评论 (0)

还没有任何评论哟~