纯电动汽车两档ATM变速箱simulink模型,纯电动汽车simulink模型,纯电动汽车变速箱模型
纯电动汽车两档ATM变速箱simulink模型,纯电动汽车simulink模型,纯电动汽车变速箱模型
模型可实现两档AMT换挡策略和换挡过程仿真t65
这是一张 MATLAB/Simulink 的模型图,通常用于电动汽车的动力系统仿真。
这个模型主要包含三个核心部分:
NEDC 循环 (驾驶工况):作为输入信号。
整车模型:计算阻力、加速度等。
驱动/制动系统:根据需求计算电机转矩。
方案一:纯 MATLAB 代码实现(数值计算版)
如果你不想用 Simulink 画图,可以直接用 MATLAB 脚本跑通这个逻辑。
%% 1. 初始化参数
clear; clc; close all;
% — 车辆参数 —
m = 1500; % 整车质量 (kg)
g = 9.8; % 重力加速度
f = 0.015; % 滚动阻力系数
C_d = 0.3; % 风阻系数
A = 2.5; % 迎风面积 (m^2)
rho = 1.29; % 空气密度
r_wheel = 0.3; % 车轮半径 (m)
eta = 0.9; % 传动效率
% — 仿真时间设置 —
dt = 1; % 步长 1秒
total_time = 1200; % 仿真总时长 (NEDC大约1180秒)
t = 0:dt:total_time;
% — 2. 生成 NEDC 驾驶循环 (简化版示意) —
% 实际应用中通常从 Excel 或 .mat 文件导入标准 NEDC 速度序列
% 这里用一个简单的梯形波模拟 NEDC 的加速-匀速-减速过程
v_target = zeros(size(t));
for i = 1:length(t)
time = t(i);
if time 0
% 驱动模式
T_motor = F_traction * r_wheel / eta;
else
% 制动/回馈模式
T_motor = F_traction * r_wheel * eta;
end
% --- 更新状态 ---
v_current = v_target(i); % 假设理想跟随
distance = distance + v_current * dt / 3.6; % 速度km/h转m/s积分
% --- 记录 ---
log_v(i) = v_current;
log_torque(i) = T_motor;
log_distance(i) = distance;
end
%% 4. 绘图结果
figure(‘Color’,‘w’);
% 图1:速度跟随
subplot(2,1,1);
plot(t, v_target, ‘b–’, ‘LineWidth’, 1.5); hold on;
plot(t, log_v, ‘r-’, ‘LineWidth’, 1);
legend(‘目标速度 (NEDC)’, ‘实际速度’);
xlabel(‘时间 (s)’); ylabel(‘速度 (km/h)’);
title(‘NEDC 工况速度跟随’); grid on;
% 图2:电机转矩需求
subplot(2,1,2);
plot(t, log_torque, ‘k’);
xlabel(‘时间 (s)’); ylabel(‘转矩 (Nm)’);
title(‘电机需求转矩 (驱动/制动系统输出)’); grid on;
方案二:Simulink 模块搭建指南
输入端 (NEDC循环)
使用 From Workspace 模块或 Inport 模块。
数据源:导入包含时间 t 和速度 v 的结构体。
驾驶员模型 (Driver System)
图片右侧的 Driver_System 通常是一个 PID 控制器。
输入:目标速度 vs 实际速度的误差。
输出:油门踏板开度 (0-100%) 或 制动踏板开度。
模块:PID Controller。
驱动/制动系统 (Drive/Brake System)
这是图片中间的大方块。
逻辑:根据踏板开度查表或计算。
公式:T_{motor} = f(Pedal) times T_{max}。
模块:Lookup Table (查表模块) 或 MATLAB Function 模块编写转矩计算逻辑。
电机系统 (Motor System)
图片左侧中间。
输入:电机转矩指令。
输出:实际输出转矩 (通常带有一阶惯性环节延迟)。
模块:Transfer Fcn (传递函数,例如 frac{1}{0.1s+1})。
整车系统 (Vehicle System)
图片最左侧的 To Workspace 上方。
输入:电机转矩 -> 转换为轮上驱动力。
计算:F_{net} = F_{drive} - F_{resistance}。
积分:a to v to s (加速度积分得速度,速度积分得位移)。
模块:两个串联的 Integrator (积分模块)。
总结
这张图的核心在于逆向车辆动力学计算:
给定速度曲线 (NEDC)。
计算为了维持这个速度,车辆需要多少力。
根据力计算电机需要输出多少转矩。


这个模型主要包含三个核心部分:
Driver/Brake System(驾驶员/制动系统):根据目标速度和当前速度计算需要的总转矩。
Control Strategy(控制策略):分配前后轴转矩(图中蓝色框)。
Vehicle(车辆动力学模型):根据受力计算车辆的实际速度和加速度。
核心模块代码实现
Driver/Brake System(驾驶员模型)代码
这是图中左上角或中间部分的核心逻辑。它的作用是一个 PI 控制器,模拟驾驶员踩油门或刹车的行为。
在 Simulink 中拖入一个 MATLAB Function 模块,命名为 Driver_Model,然后粘贴以下代码:
function [Trq_Demand, Brake_Sig] = fcn(Vel_Target, Vel_Actual)
%#codegen
% 初始化变量
persistent Integrator;
if isempty(Integrator)
Integrator = 0;
end
% PI控制器参数 (需要根据车辆模型调整)
Kp = 2000; % 比例增益
Ki = 50; % 积分增益
dt = 0.01; % 仿真步长
% 计算速度误差
Error = Vel_Target - Vel_Actual;
% 积分项 (简单的欧拉积分)
Integrator = Integrator + Error * dt;
% 积分限幅,防止积分饱和
if Integrator > 1000
Integrator = 1000;
elseif Integrator 0
Trq_Demand = Trq_Total;
Brake_Sig = 0; % 不制动
else
Trq_Demand = 0;
Brake_Sig = -Trq_Total; % 输出制动压力或转矩
end
Vehicle Dynamics(车辆动力学)代码
这是图中右下角 Vehicle 模块的内部逻辑。它根据物理公式计算车辆运动。
公式原理:
a = frac{F_{text{驱动力}} - F_{text{阻力}}}{m}
v = int a , dt
在 Simulink 的 MATLAB Function 模块中(命名为 Vehicle_Dynamics),代码如下:
function [Vel_Out, Acc_Out] = fcn(Trq_Drive, Brake_Trq, Gear, Slope)
%#codegen
% — 车辆参数 —
m = 1500; % 质量 (kg)
r_wheel = 0.3; % 轮胎半径 (m)
f_roll = 0.015; % 滚动阻力系数
C_d = 0.35; % 风阻系数
A = 2.4; % 迎风面积 (m^2)
rho = 1.225; % 空气密度
g = 9.8; % 重力加速度
% 初始化状态
persistent v_current;
if isempty(v_current)
v_current = 0;
end
% — 1. 计算驱动力 —
% 假设 Trq_Drive 是轮端总转矩
F_drive = (Trq_Drive - Brake_Trq) / r_wheel;
% — 2. 计算阻力 —
% 滚动阻力
F_roll = m * g * f_roll * cos(Slope);
% 空气阻力 (注意速度方向)
F_air = 0.5 * rho * C_d * A * v_current^2;
if v_current < 0, F_air = -F_air; end % 阻力方向与速度相反
% 坡度阻力
F_slope = m * g * sin(Slope);
% 总阻力
F_resistance = F_roll + F_air + F_slope;
% — 3. 计算加速度 —
F_net = F_drive - F_resistance;
a_current = F_net / m;
% — 4. 积分得到速度 —
% 注意:这里仅作演示,实际Simulink中通常用 Integrator 模块而不是代码积分
% 如果要在代码里积分,需要传入 dt
% v_current = v_current + a_current * dt;
% 输出
Vel_Out = v_current; % 实际应输出积分后的值
Acc_Out = a_current;
转矩分配策略(蓝色框)
图中中间那个蓝色框看起来像是一个转矩分配模块,根据车速或电池状态决定前后电机怎么出力。
function [Trq_Front, Trq_Rear] = fcn(Trq_Total_Demand, Vel)
%#codegen
% 简单策略:
% 低速时主要由后驱负责(或者是前驱,视车型而定)
% 高速或急加速时四轮驱动
if Vel < 10 % 起步阶段
Trq_Front = Trq_Total_Demand * 0.1; % 少量分配给前轴
Trq_Rear = Trq_Total_Demand * 0.9; % 主要靠后轴
else
% 高速均分
Trq_Front = Trq_Total_Demand * 0.5;
Trq_Rear = Trq_Total_Demand * 0.5;
end
如何在 Simulink 中搭建
输入端:使用 From Workspace 模块导入 NEDC 数据(包含时间 time 和速度 signals.values)。
Driver 模块:使用 PID Controller 模块或者上面的 MATLAB Function。
车辆模型:使用 Integrator 模块对加速度积分得到速度。
Scope:连接示波器观察 Velocity 和 Torque 曲线。
总结
打开 MATLAB,输入 simulink 启动。
新建一个 Blank Model。
按照上述逻辑,将 MATLAB Function 模块拖进去,填入我提供的代码。
使用 Gain(增益)、Sum(求和)、Integrator(积分)模块连接起来。


AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)