手把手教你学simulink(31.16)--双向DCDC电源场景示例:基于动态响应的simulink双向dcdc应用电动汽车实例
项目实例:基于Simulink的双向DC-DC变换器应用于电动汽车(EV),重点在于动态响应
1. 项目背景
电动汽车(EV)的车载充电器和能量管理系统是确保车辆高效运行的关键组件。双向DC-DC变换器不仅可以在充电时将电网电能转换为适合电池的直流电,还可以在制动能量回收或电力回馈时将电池的能量反向传输给其他系统或电网。为了实现这一功能,并确保系统的快速动态响应,通常需要引入PI控制器来精确控制电压和电流,同时优化系统的瞬态性能。
2. 项目目标
- 构建一个基于Simulink的双向DC-DC变换器模型,用于电动汽车的车载充电器和能量管理系统。
- 使用PI控制器优化充放电过程,确保系统的稳定性和高效性,特别关注系统的动态响应。
- 通过仿真分析系统的性能,包括电压、电流、能量转换效率以及动态响应特性。
3. 系统架构
该系统由以下几个主要部分组成:
- 电源侧:模拟电网或外部电源(如太阳能板)。
- 双向DC-DC变换器:实现能量的双向流动,既可以充电也可以放电。
- 电池模型:模拟车载电池的行为。
- PI控制器:用于控制变换器的输出电压和电流。
- PWM生成器:根据PI控制器的输出生成PWM信号,控制变换器的开关状态。
- 传感器:监测电池电压和电流,反馈给PI控制器。
- 负载:模拟电动汽车的其他用电设备(如电机驱动、照明等)。
- 制动能量回收系统:在制动过程中回收能量并存储到电池中。
4. 动态响应设计
为了确保系统的快速动态响应,我们需要特别关注以下几点:
- 控制器设计:选择合适的PI控制器参数,以实现快速的瞬态响应和良好的稳态性能。
- 负载变化:模拟突加负载或突卸负载的情况,测试系统的抗干扰能力。
- 输入电压变化:模拟电网电压波动或外部电源的变化,评估系统的适应性。
- 制动能量回收:模拟制动过程中能量的快速回收,确保系统能够迅速响应并稳定工作。
5. 详细步骤
5.1 创建新模型
首先,打开MATLAB并创建一个新的Simulink模型文件。
matlab
% 创建新的Simulink模型
model_name = 'ev_bidirectional_dc_dc_dynamic_response';
new_system(model_name);
5.2 添加必要的模块
从Simscape Electrical库中添加以下模块:
- DC Voltage Source:模拟电网或外部电源。
- Bidirectional DC-DC Converter:实现能量的双向流动。
- Battery Model:模拟车载电池的行为。
- Current Sensor 和 Voltage Sensor:监测电池的电流和电压。
- PI Controller:用于控制电压和电流。
- PWM Generator (2-Level):生成PWM信号控制变换器的开关状态。
- Scope:用于显示仿真结果。
- Motor Load:模拟电动汽车的电机负载。
- Brake Energy Recovery System:模拟制动能量回收系统。
- Step Input:用于模拟突加负载或突卸负载。
- Random Number Generator:用于模拟电网电压波动。
matlab
% 添加模块
add_block('simscapes/Simscape Electrical/Specialized Power Systems/Sources/DC Voltage Source', [model_name '/DC Voltage Source']);
add_block('simscapes/Simscape Electrical/Specialized Power Systems/Power Electronics/Bidirectional DC-DC Converter', [model_name '/Bidirectional DC-DC Converter']);
add_block('simscapes/Simscape Electrical/Electrical Elements/Battery', [model_name '/Battery']);
add_block('simscapes/Simscape Electrical/Specialized Power Systems/Measurements/Current Measurement', [model_name '/Current Sensor']);
add_block('simscapes/Simscape Electrical/Specialized Power Systems/Measurements/Voltage Measurement', [model_name '/Voltage Sensor']);
add_block('simulink/Continuous/PI Controller', [model_name '/PI_Voltage']); % 电压控制器
add_block('simulink/Continuous/PI Controller', [model_name '/PI_Current']); % 电流控制器
add_block('simscapes/Simscape Electrical/Specialized Power Systems/Control & Measurements/Pulse & Signal Generators/PWM Generator (2-Level)', [model_name '/PWM Generator']);
add_block('simulink/Sinks/Scope', [model_name '/Scope']);
add_block('simscapes/Simscape Electrical/Machines/AC Motors/Asynchronous Machine SI Units', [model_name '/Motor Load']); % 电机负载
add_block('simscapes/Simscape Electrical/Specialized Power Systems/Power Electronics/Boost Converter', [model_name '/Brake Energy Recovery System']); % 制动能量回收系统
add_block('simulink/Sources/Step', [model_name '/Step Input']); % 模拟突加负载
add_block('simulink/Sources/Random Number', [model_name '/Random Number Generator']); % 模拟电网电压波动
5.3 连接模块
将各个模块按顺序连接起来,形成完整的电路。特别注意,电流内环和电压外环的连接方式,以及制动能量回收系统的连接。
matlab
% 连接模块
add_line(model_name, 'DC Voltage Source/1', 'Bidirectional DC-DC Converter/1'); % 电源到变换器
add_line(model_name, 'Bidirectional DC-DC Converter/1', 'Battery/1'); % 变换器到电池
add_line(model_name, 'Battery/1', 'Bidirectional DC-DC Converter/2'); % 电池到变换器
add_line(model_name, 'Battery/1', 'Voltage Sensor/1'); % 电池电压监测
add_line(model_name, 'Battery/1', 'Current Sensor/1'); % 电池电流监测
add_line(model_name, 'Voltage Sensor/1', 'PI_Voltage/1'); % 电压反馈到电压控制器
add_line(model_name, 'Current Sensor/1', 'PI_Current/1'); % 电流反馈到电流控制器
add_line(model_name, 'PI_Voltage/1', 'PI_Current/Setpoint'); % 电压控制器输出作为电流控制器的参考
add_line(model_name, 'PI_Current/1', 'PWM Generator/DutyCycle'); % 电流控制器输出控制PWM占空比
add_line(model_name, 'PWM Generator/1', 'Bidirectional DC-DC Converter/3'); % PWM信号控制变换器
add_line(model_name, 'Battery/1', 'Motor Load/1'); % 电池到电机负载
add_line(model_name, 'Motor Load/1', 'Brake Energy Recovery System/1'); % 电机负载到制动能量回收系统
add_line(model_name, 'Brake Energy Recovery System/1', 'Bidirectional DC-DC Converter/2'); % 制动能量回收系统到变换器
add_line(model_name, 'Voltage Sensor/1', 'Scope/1'); % 显示电池电压
add_line(model_name, 'Current Sensor/1', 'Scope/2'); % 显示电池电流
add_line(model_name, 'Step Input/1', 'Motor Load/2'); % 突加负载
add_line(model_name, 'Random Number Generator/1', 'DC Voltage Source/Amplitude'); % 电网电压波动
5.4 配置模块参数
5.4.1 DC Voltage Source
设置电源的电压值,模拟电网或外部电源。这里使用随机数生成器模拟电网电压波动。
matlab
set_param([model_name '/DC Voltage Source'], 'Amplitude', '400 + RandomNumber'); % 电网电压波动
5.4.2 Bidirectional DC-DC Converter
配置双向DC-DC变换器的参数,确保其能够支持双向能量流动。这里使用默认参数即可。
matlab
set_param([model_name '/Bidirectional DC-DC Converter'], 'SwitchingFrequency', '100000'); % 开关频率为100kHz
5.4.3 Battery Model
配置电池模型的参数,包括初始电压、容量、内阻等。这里假设电池的初始电压为300V,容量为50Ah,内阻为0.1Ω。
matlab
set_param([model_name '/Battery'], 'InitialVoltage', '300'); % 初始电压为300V
set_param([model_name '/Battery'], 'Capacity', '50'); % 容量为50Ah
set_param([model_name '/Battery'], 'InternalResistance', '0.1'); % 内阻为0.1Ω
5.4.4 PI Controllers
配置两个PI控制器的参数。电压控制器用于调节电池电压,电流控制器用于调节电池电流。为了确保快速的动态响应,选择较大的比例增益(Kp)和适当的积分增益(Ki)。
- 电压控制器:Kp = 100,Ki = 1000
- 电流控制器:Kp = 200,Ki = 2000
matlab
set_param([model_name '/PI_Voltage'], 'P', '100'); % 电压控制器的比例增益
set_param([model_name '/PI_Voltage'], 'I', '1000'); % 电压控制器的积分增益
set_param([model_name '/PI_Current'], 'P', '200'); % 电流控制器的比例增益
set_param([model_name '/PI_Current'], 'I', '2000'); % 电流控制器的积分增益
5.4.5 PWM Generator
配置PWM生成器的参数,确保其能够生成合适的PWM信号。这里设置PWM频率为100kHz,初始占空比为0.5。
matlab
set_param([model_name '/PWM Generator'], 'Frequency', '100000'); % PWM频率为100kHz
set_param([model_name '/PWM Generator'], 'DutyCycle', '0.5'); % 初始占空比为0.5
5.4.6 Motor Load
配置电机负载的参数,模拟电动汽车的电机行为。这里假设电机的最大功率为100kW,额定转速为3000rpm。
matlab
set_param([model_name '/Motor Load'], 'NominalPower', '100e3'); % 最大功率为100kW
set_param([model_name '/Motor Load'], 'NominalSpeed', '3000'); % 额定转速为3000rpm
5.4.7 Brake Energy Recovery System
配置制动能量回收系统的参数,确保其能够在制动时将能量回馈给电池。这里使用Boost变换器作为制动能量回收系统的模型。
matlab
set_param([model_name '/Brake Energy Recovery System'], 'SwitchingFrequency', '100000'); % 开关频率为100kHz
5.4.8 Step Input
配置阶跃输入的参数,模拟突加负载或突卸负载。这里设置阶跃时间为0.01秒,阶跃幅度为100A。
matlab
set_param([model_name '/Step Input'], 'StartTime', '0.01'); % 阶跃时间为0.01秒
set_param([model_name '/Step Input'], 'FinalOutput', '100'); % 阶跃幅度为100A
5.4.9 Random Number Generator
配置随机数生成器的参数,模拟电网电压波动。这里设置均值为0,方差为10,以产生±10V的电压波动。
matlab
set_param([model_name '/Random Number Generator'], 'Mean', '0');
set_param([model_name '/Random Number Generator'], 'Variance', '10');
5.4.10 Scope
配置Scope的参数,确保能够清晰地显示电池电压、电流以及负载电流的变化。
matlab
set_param([model_name '/Scope'], 'NumInputs', '3'); % 三个输入通道
set_param([model_name '/Scope'], 'TimeRange', '0.01'); % 时间范围为0.01秒
5.5 设置仿真参数
设置仿真的停止时间和求解器类型。这里设置仿真时间为0.05秒,使用ode23tb求解器以获得更好的数值稳定性。
matlab
set_param(model_name, 'StopTime', '0.05'); % 仿真时间为0.05秒
set_param(model_name, 'Solver', 'ode23tb'); % 使用ode23tb求解器
5.6 运行仿真
运行仿真并查看结果。Simulink会自动执行仿真,并在Scope中显示电池电压、电流以及负载电流的变化。
matlab
% 运行仿真
sim(model_name);
% 打开Scope查看结果
open_system([model_name '/Scope']);
6. 分析动态响应
6.1 电池电压波形
观察电池电压的变化,确保其在充电过程中逐渐上升,在放电过程中逐渐下降。特别关注突加负载或突卸负载时的瞬态响应,PI控制器应能够使电池电压快速恢复稳定。
6.2 电池电流波形
观察电池电流的变化,确保其在充电时为正值,在放电时为负值。特别关注突加负载或突卸负载时的瞬态响应,电流控制器应能够快速响应负载变化,保持电流的稳定性。
6.3 负载电流波形
观察电机负载电流的变化,特别是在突加负载或突卸负载时的瞬态响应。系统应能够迅速调整负载电流,确保电机的正常运行。
6.4 纹波分析
检查电池电压和电流的纹波,确保其在可接受范围内。过大的纹波可能会影响电池的寿命和系统的稳定性。
6.5 电网电压波动影响
观察电网电压波动对系统的影响,确保系统能够在电网电压波动的情况下保持稳定的工作状态。PI控制器应能够有效抑制电压波动带来的干扰。
6.6 制动能量回收效果
观察制动能量回收系统的性能,确保在制动过程中能够有效地将能量回馈给电池。可以通过监测制动时的电流和电压
