基于MATLAB_SIMULINK_SIMSCAPE建模的用于组件尺寸的电动和混合动力飞机模型
基于MATLAB/SIMULINK/SIMSCAPE建模的用于组件尺寸的电动和混合动力飞机模型第一步主脚本 (AircraftSizingMain.m)在 MATLAB 中运行此脚本它将定义参数并启动仿真。matlab编辑1%% Aircraft Component Sizing Simulation Script2% 适用于电动 (AE) 和混合动力 (Hybrid) 飞机概念设计3clear; clc; close all;45%% 1. 飞机总体参数 (可修改以进行尺寸迭代)6Aircraft struct();7Aircraft.MTOW 1200; % 最大起飞重量 (kg)8Aircraft.WingArea 14.5; % 机翼面积 (m^2)9Aircraft.CD0 0.025; % 零升阻力系数10Aircraft.AR 12.0; % 展弦比11Aircraft.e 0.85; % 奥斯瓦尔德效率因子12Aircraft.PropEff 0.82; % 螺旋桨效率 (恒定假设也可做成查表)1314%% 2. 推进系统配置 (选择 ‘Electric’ 或 ‘Hybrid’)15Config.Type ‘Electric’; % 选项: ‘Electric’, ‘Hybrid’1617if strcmp(Config.Type, ‘Electric’)18 % — 纯电动配置 —19 Config.BatCapacity 60; % kWh20 Config.BatVoltage 400; % V21 Config.MotorMaxPower 150;% kW22 Config.MotorEff 0.94; % 电机峰值效率23 Config.FuelMass 0; % kg24 Config.GeneratorPower 0; % kW2526elseif strcmp(Config.Type, ‘Hybrid’)27 % — 串联混合动力配置 —28 Config.BatCapacity 20; % kWh (较小用于缓冲)29 Config.BatVoltage 400; % V30 Config.MotorMaxPower 150;% kW31 Config.MotorEff 0.94;32 Config.FuelMass 80; % kg (汽油)33 Config.GeneratorPower 80;% kW (增程器额定功率)34 Config.ICE_SFC 0.35; % kg/kWh (内燃机燃油消耗率)35end3637%% 3. 任务剖面定义 (Mission Profile)38% 时间(s), 高度(m), 空速(m/s)39% 阶段: 起飞 - 爬升 - 巡航 - 下降 - 降落40TimeVec [0, 300, 900, 3600, 4200, 4500]‘;41AltVec [0, 500, 1500, 1500, 500, 0]’;42VelVec [0, 40, 60, 65, 50, 35]‘;4344% 插值生成每秒数据45t_sim (0:1:4500)’;46h_ref interp1(TimeVec, AltVec, t_sim, ‘linear’);47v_ref interp1(TimeVec, VelVec, t_sim, ‘linear’);4849%% 4. 初始状态50SOC_init 1.0; % 初始电量 100%51Fuel_init Config.FuelMass;5253%% 5. 运行 Simulink 模型54% 假设模型文件名为 ‘AircraftSizingModel.slx’55% 将变量传入工作区供 Simulink 使用56assignin(‘base’, ‘Aircraft’, Aircraft);57assignin(‘base’, ‘Config’, Config);58assignin(‘base’, ‘t_sim’, t_sim);59assignin(‘base’, ‘h_ref’, h_ref);60assignin(‘base’, ‘v_ref’, v_ref);61assignin(‘base’, ‘SOC_init’, SOC_init);62assignin(‘base’, ‘Fuel_init’, Fuel_init);6364model_name ‘AircraftSizingModel’;65if ~exist([model_name ‘.slx’], ‘file’)66 warning(‘模型文件未找到请手动创建 Simulink 模型 (见下方指南)。此处仅演示数据准备。’);67 % 为了演示这里不调用 sim()实际使用时取消下行注释68 % sim_out sim(model_name);69else70 disp(‘开始仿真…’);71 sim_out sim(model_name);7273 % 后处理绘图74 figure;75 subplot(3,1,1); plot(t_sim, h_ref, ‘b’, t_sim, sim_out.logsout.get(‘Altitude’).Values.Time, sim_out.logsout.get(‘Altitude’).Values.Data, ‘r–’);76 legend(‘参考高度’, ‘仿真高度’); ylabel(‘高度 (m)’); grid on;7778 subplot(3,1,2); plot(t_sim, v_ref, ‘b’, t_sim, sim_out.logsout.get(‘Velocity’).Values.Time, sim_out.logsout.get(‘Velocity’).Values.Data, ‘r–’);79 legend(‘参考速度’, ‘仿真速度’); ylabel(‘速度 (m/s)’); grid on;8081 subplot(3,1,3);82 if strcmp(Config.Type, ‘Electric’)83 plot(t_sim, sim_out.logsout.get(‘SOC’).Values.Time, sim_out.logsout.get(‘SOC’).Values.Data);84 ylabel(‘电池 SOC’);85 else86 yyaxis left; plot(t_sim, sim_out.logsout.get(‘SOC’).Values.Time, sim_out.logsout.get(‘SOC’).Values.Data); ylabel(‘SOC’);87 yyaxis right; plot(t_sim, sim_out.logsout.get(‘FuelMass’).Values.Time, sim_out.logsout.get(‘FuelMass’).Values.Data); ylabel(‘燃油质量 (kg)’);88 end89 xlabel(‘时间 (s)’); grid on;90 disp(‘仿真完成。检查图表以评估组件尺寸是否满足任务需求。’);91end第二步Simulink 模型搭建与核心代码块请在 Simulink 中新建模型 AircraftSizingModel.slx并按照以下结构搭建。你需要使用 MATLAB Function 模块来实现具体的物理方程。模型结构图 (逻辑流)任务剖面 (From Workspace) -- 飞行控制器 (PID) -- 所需推力计算 -- 能量管理系统 (EMS) -- 推进系统 (电机/发动机/电池) -- 飞机动力学 (6DOF 或 简化点质量) -- 状态输出 (To Workspace)关键模块代码 (复制到 MATLAB Function 模块中)A. 空气动力学与所需推力 (Aerodynamics Thrust Req)输入: V (速度), h (高度), Weight (当前重量), Accel_req (所需加速度)输出: Thrust_req (所需推力), Drag (阻力), Lift (升力)matlab编辑1function [Thrust_req, Drag, Lift] AeroDynamics(V, h, Weight, Accel_req, params)2%#codegen3% 参数解包4S params.WingArea;5CD0 params.CD0;6AR params.AR;7e params.e;8rho_0 1.225; % 海平面空气密度910% 简单大气模型 (指数模型)11rho rho_0 * exp(-h / 8500);1213% 升力系数 (假设平飞或小幅爬升L ≈ W)14% 更精确的做法是解 L Wcos(gamma)这里简化为 LW 用于尺寸估算15if V 1, V 1; end % 防止除零16CL (2 * Weight) / (rho * V^2 * S);1718% 阻力系数 (抛物线极曲线)19K 1 / (pi * AR * e);20CD CD0 K * CL^2;2122% 计算力23Drag 0.5 * rho * V^2 * S * CD;24Lift 0.5 * rho * V^2 * S * CL;2526% 牛顿第二定律: T - D ma Wsin(gamma)27% 简化假设小角度爬升sin(gamma) ≈ (dh/dt)/V28% 这里我们直接利用输入的 Accel_req 代表 (a gsin(gamma)) 的总等效加速度需求29Mass Weight / 9.81;30Thrust_req Drag Mass * Accel_req;3132% 限制推力不能为负 (不考虑反推)33if Thrust_req 0, Thrust_req 0; end34endB. 能量管理系统与推进链 (EMS Propulsion Chain)这是混合动力的核心。根据配置计算电池电流、燃油消耗。输入: Thrust_req, V, SOC, FuelMass, Config, Aircraft输出: Thrust_avail, dSOC_dt, dFuel_dt, MotorPower, GenPowermatlab编辑1function [Thrust_avail, dSOC_dt, dFuel_dt, P_motor, P_gen] PropulsionSystem(Thrust_req, V, SOC, FuelMass, Config, Aircraft)2%#codegen34P_mech_req Thrust_req * V / Aircraft.PropEff; % 轴功率需求 (W)5P_mech_req min(P_mech_req, Config.MotorMaxPower * 1000); % 限制最大功率67P_elec_load 0; % 电网负载8P_gen_out 0; % 发电机输出9fuel_flow 0; % 燃油流量 (kg/s)1011if strcmp(Config.Type, ‘Electric’)12 % — 纯电动模式 —13 P_elec_load P_mech_req / Config.MotorEff;14 P_gen_out 0;1516 % 电池模型 (简单内阻模型可在此添加)17 % P V * I I P / V18 I_bat P_elec_load / Config.BatVoltage;1920 % dSOC/dt -I / Capacity(Ah)21 Cap_Ah (Config.BatCapacity * 1000) / Config.BatVoltage;22 dSOC_dt -I_bat / (Cap_Ah * 3600); % 转换为每小时单位再归一化2324 % 限制 SOC 变化率 (防止过放简单截断)25 if SOC 0.05 dSOC_dt 026 dSOC_dt 0;27 P_elec_load 0; % 电量耗尽推力丧失28 end2930 P_motor P_mech_req;31 Thrust_avail (P_motor * Config.MotorEff * Aircraft.PropEff) / max(V, 1);3233elseif strcmp(Config.Type, ‘Hybrid’)34 % — 串联混合动力策略 (恒温器式 Thermostat 或 功率跟随) —35 % 策略如果需求功率 发电机额定功率电池放电补充否则发电机供电并给电池充电(可选)3637 P_gen_max Config.GeneratorPower * 1000;3839 if P_mech_req P_gen_max40 % 高功率需求 (如爬升): 发电机满负荷 电池补充41 P_gen_out P_gen_max;42 P_elec_from_bat P_mech_req / Config.MotorEff - P_gen_out;4344 % 计算燃油消耗 (发电机输出 / 效率 / 热值)45 % 简化SFC (kg/kWh) - kg/s P(kW) * SFC / 360046 fuel_flow (P_gen_out/1000) * Config.ICE_SFC / 3600;4748 else49 % 低功率需求 (巡航): 仅由发电机供电多余功率可充电 (此处简化为不充电仅维持)50 P_gen_out P_mech_req / Config.MotorEff; % 考虑电机效率前的电功率51 % 增加一点发电机效率损耗假设 0.952 P_gen_mech_in P_gen_out / 0.9;53 fuel_flow (P_gen_mech_in/1000) * Config.ICE_SFC / 3600;5455 P_elec_from_bat 0;5657 % 简单的充电逻辑如果 SOC 0.3 且功率有富余可以充电此处省略以保持代码简洁58 end5960 % 电池动态61 if P_elec_from_bat 062 I_bat P_elec_from_bat / Config.BatVoltage;63 Cap_Ah (Config.BatCapacity * 1000) / Config.BatVoltage;64 dSOC_dt -I_bat / (Cap_Ah * 3600);65 else66 dSOC_dt 0; % 暂不模拟充电67 end6869 if FuelMass 0.570 fuel_flow 0; P_gen_out 0; % 燃油耗尽71 end7273 P_motor P_mech_req;74 Thrust_avail (P_motor * Config.MotorEff * Aircraft.PropEff) / max(V, 1);75end7677% 输出保护78if isnan(dSOC_dt), dSOC_dt 0; end79if isnan(fuel_flow), fuel_flow 0; end80dFuel_dt -fuel_flow;81endC. 飞机动力学 (简化点质量模型 Point Mass Dynamics)输入: Thrust, Drag, Weight, Gamma_cmd (来自控制器)输出: V_dot, h_dot, New_Weightmatlab编辑1function [V_dot, h_dot, W_dot] FlightDynamics(Thrust, Drag, Weight, Gamma, V)2%#codegen3g 9.81;4Mass Weight / g;56% 避免除以零7if Mass 10, Mass 10; end8if V 0.1, V 0.1; end910% 纵向动力学方程11% F_x T - D - W*sin(gamma) m * dV/dt12V_dot (Thrust - Drag - Weight * sin(Gamma)) / Mass;1314% F_z (垂直速度)15h_dot V * sin(Gamma);1617% 重量变化 (燃油消耗)18% 电池重量变化通常在尺寸设计中视为常数或分段此处仅处理燃油19W_dot 0; % 电池重量不变燃油在上一级处理或直接在这里减20% 注意如果在 Propulsion 模块计算了 dFuel_dt这里可以直接用21% 为了模块化建议重量变化在顶层积分这里只输出加速度22end第三步Simulink 连线指南Clock 模块提供当前时间 t。From Workspace 模块 (x3)分别读取 t_sim, h_ref (作为高度指令), v_ref (作为速度指令)。PID Controller 模块 (x2)速度环输入 (v_ref - V_actual)输出 Accel_req (加速度需求)。高度环 (可选用于自动爬升)输入 (h_ref - h_actual)输出 Gamma_cmd (爬升角指令)。简化版可直接根据任务剖面预设 Gamma。MATLAB Function (AeroDynamics)输入V, h, Weight, Accel_req, Struct: params (使用 Bus Creator 将 Aircraft 结构体打包)。输出Thrust_req。MATLAB Function (PropulsionSystem)输入Thrust_req, V, SOC, FuelMass, Struct: Config, Struct: Aircraft。输出Thrust_avail, dSOC_dt, dFuel_dt。注意确保 Thrust_avail 反馈给动力学模块。Integrator 模块 (x3)SOC: 输入 dSOC_dt, 初值 SOC_init。FuelMass: 输入 dFuel_dt, 初值 Fuel_init。Weight: 输入 dFuel_dt * 9.81 (燃油重力变化), 初值 MTOW * 9.81。Velocity: 输入 V_dot (来自动力学模块), 初值 0。Altitude: 输入 h_dot, 初值 0。MATLAB Function (FlightDynamics)连接推力、阻力、重量计算 V_dot 和 h_dot。To Workspace 模块记录 Velocity, Altitude, SOC, FuelMass 以便主脚本绘图。格式选择 Structure with Time。第四步如何使用此模型进行组件尺寸设计定义设计空间在主脚本中不要只给单一值而是使用循环。matlab编辑1battery_sizes [40, 60, 80]; % kWh2motor_powers [100, 150, 200]; % kW34results [];56for bat battery_sizes7 for mot motor_powers8 Config.BatCapacity bat;9 Config.MotorMaxPower mot;1011 % 更新工作区变量12 assignin(‘base’, ‘Config’, Config);1314 % 运行仿真15 sim_out sim(‘AircraftSizingModel’);1617 % 提取结果最终 SOC, 是否完成任务 (高度/速度跟踪误差), 剩余燃油18 final_SOC sim_out.logsout.get(‘SOC’).Values.Data(end);19 mission_success (final_SOC 0.1); % 假设剩余10%算成功2021 results [results; bat, mot, final_SOC, mission_success];22 end23end
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2425330.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!