ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

纯电动汽车纵向动力学建模与Simulink仿真实践指南

纯电动汽车纵向动力学建模与Simulink仿真实践指南 简介这份PDF文献聚焦基于Matlab/Simulink的纯电动汽车纵向动力学建模面向新能源汽车研发工程师、车辆工程专业学生及从事电控系统匹配的研究人员。内容以小型纯电动乘用车为平台围绕驾驶员、电池、电动机、传动系和整车动力学五部分展开建模并给出电池开路电压-内阻模型、电动机转矩-转速模型等关键方程及Simulink实现思路可用于动力性、经济性仿真分析与能量管理策略开发参考。资源为1个PDF文件约2.38MB内容紧凑、公式与框图清晰适合作为汽车技术类参考文献和课题指导材料。已有389人学习是快速理解电动汽车纵向动力学模型搭建路径的实用资料。1. 纯电动汽车纵向动力学建模先看清功率流再搭Simulink模型纯电动汽车整车仿真里有个容易被新入行者忽视的前提整车上层的动力性与经济性计算几乎不需要关心电动机内部的矢量控制或三相交流特性。所谓纵向动力学模型本质上是把电池、电机、传动系、车轮这条功率传递链按功率流串起来每个子系统的输入输出乘积恰好等于该环节的功率。该模型基于小型纯电动乘用车平台由驾驶员模型、电池模型、电动机模型、传动系模型和整车动力学模型五个子系统组成Simulink仿真框架跑出了NEDC工况的轮端转矩与能耗曲线并验证了0-100km/h加速时间为11.4s。对做电控策略开发、电池与电机选型匹配、整车能量管理的人来说这套建模思路是理解整车功率耦合关系最直接的切入点也适合作为Simulink仿真的入门整车项目来复现。这套建模思想还可把电机替换为发动机直接复用于混合动力与传统燃油车的纵向动力学研究。2. 电池模型与电动机模型从开路电压-内阻到效率MAP查表2.1 电池等效电路与SOC积分电池模型在纵向动力学仿真里不需要做电化学细节常见做法是采用开路电压-内阻Rint等效模型。电池端电压表达式可写为u_bat u_ocbat(SOC) - r_ocbat(SOC) * i_bat其中u_ocbat是开路电压r_ocbat是内阻i_bat是电池电流。需要注意开路电压与内阻都不是常数而是SOC的函数。电池在充满电时SOC为1完全放电时为0SOC的积分计算公式为SOC SOC0 - ∫i_bat dt / (3600 * Q_maxbat)这里SOC0是初始荷电状态Q_maxbat是电池最大存储电量。放到Simulink里实现时左侧用一个增益模块配合积分器累加电量得到实时SOC再把SOC作为输入分别接到两个一维Lookup Table查表模块上输出对应SOC下的开路电压与内阻最后按公式做减法和乘法得到端电压。Lookup Table属于离散数据插值模块与基于物理公式建模不同它完全依赖实验测得的OCV-SOC曲线与内阻-SOC曲线数据。模型右下角还有对端电压与电流乘积的积分运算作用是近似累计电池电能消耗这一路信号在后处理阶段用来核算百公里电耗。下面是初始化电池查表参数的典型Matlab脚本写法% 电池模型参数初始化模型PreLoadFcn或独立脚本 Q_maxbat 120 * 3600; % 最大电量 As等效120Ah电池包 SOC0 0.9; % 初始SOCNEDC仿真一般从90%起步 % SOC断点数组Lookup Table的Breakpoints SOC_pts 0:0.1:1; % OCV-SOC数据典型三元锂近似曲线单位V u_oc_pts [3.2 3.4 3.55 3.65 3.72 3.78 3.82 3.86 3.92 4.0 4.15]; % 内阻-SOC数据单位Ohm r_int_pts [0.38 0.3 0.24 0.19 0.16 0.14 0.13 0.13 0.14 0.15 0.2];这里把SOC断点定义成从0到1步长0.1的11个点实际建模时应把实验曲线插值到同样的SOC网格上。u_oc_pts的数组顺序必须与SOC_pts一一对应否则查表结果会出现错位。Lookup Table默认使用线性插值输入SOC落在两个断点之间时自动插值输出不需要额外处理。如果内阻同时随SOC和温度变化就改用二维Lookup Table把温度作为第二维断点。2.2 电动机系统的功率流简化电动机模型把电机与逆变器作为一个整体来建立输入输出共五个量目标转矩、传动系转速、电池电压作为输入电动机电流、电动机转矩作为输出。因为电机响应速度远快于整车速度响应可以忽略电机瞬时动态过程近似认为输出转矩等于目标转矩。这个简化是纵向动力学模型的要点——上层系统不关心电流环怎么调节只要转矩指令被跟踪、功率消耗算得准就行。电动机电流的计算需要借助效率MAP脉谱图i_mot T_mot * n_mot / (η_mot(T_mot, n_mot) * 9.55 * u_mot) 驱动工况Tn0 i_mot T_mot * n_mot * η_mot(T_mot, n_mot) / (9.55 * u_mot) 发电工况Tn0两个式子效率的定义互为倒数。机械功率为正时电机工作在电动模式电流计算用除法把效率损耗放大机械功率为负时电机发电电池侧电流方向反转效率放在分子上。系数9.55来自转速单位r/min与rad/s的换算。这里的效率是电机与逆变器的总效率因为逆变器效率很高数值上与电机本体效率接近。Simulink实现时效率MAP用二维Lookup Table最直观第一维断点是转速第二维断点是转矩查表输出对应工作点的效率。注意查表效率要在分母上做除法别把驱动与发电两种模式的公式接反这是最常出错的点。注意效率MAP的驱动/发电查表路径不同发电模式下效率值放在分子上接反后电池电流方向会完全错误能量回馈曲线直接变成正值能耗。表格电动机模型信号列表信号名方向物理含义单位T_mot_ref输入驾驶员/策略目标转矩Nmn_mot输入电机转速传动系反馈r/minu_mot输入电池端电压Vi_mot输出电机控制器直流母线电流AT_mot输出电机实际输出转矩Nm2.3 查表数据的组织与矩阵运算技巧效率MAP在Matlab里按二维矩阵存储第一维对应转速断点向量第二维对应转矩断点向量矩阵元素是效率值。初始化示例如下% 效率MAP初始化转速、转矩网格 n_mot_pts 0:1000:8000; % 转速断点 r/min T_mot_pts -200:40:200; % 转矩断点 Nm [N_mesh, T_mesh] meshgrid(n_mot_pts, T_mot_pts); % 用实测或外特性数据填充eff_map矩阵此处为占位示例 eff_map 0.85 * ones(size(N_mesh)); eff_map(T_mesh 0) 0.85 * 0.92; % 发电效率略低于驱动效率meshgrid生成的矩阵维度为length(T_mot_pts)行、length(n_mot_pts)列二维Lookup Table要求断点按从小到大排列矩阵列方向对应转速断点行方向对应转矩断点。这个维度关系在Simulink里容易搞反我的经验是先画一个小矩阵手动验证一次查表结果再铺全量数据。Simulink支持向量化参数一次性修改整条曲线数据没必要为几组标定值单独建多个常量模块用Matlab脚本统一管理查表数据参数扫描时会方便很多。3. 传动系与整车动力学模型减速比、阻力闭环与Simulink信号搭建3.1 无变速器传动结构与主减速器建模小型纯电动汽车普遍不配多挡变速器原因是交流电机调速范围宽且高效区覆盖广。文中选用的平台采用双级主减速器固定速比结构传动比6.058传动效率0.96。传动系模型要做的事就是把电机输出的转速转矩通过固定速比转换到车轮端同时把机械损失折算进去T_whl T_mot * r_gear * η_trans 驱动工况 T_whl T_mot * r_gear / η_trans 拖曳/发电工况驱动工况下机械损失使车轮转矩小于理想值所以乘效率发电工况下电机被车轮反拖效率的作用反过来要做除法。这与电池充放电效率的处理逻辑同源。Simulink实现比较直接输入端接电机转矩和n_mot符号判断输出端接整车动力学模型的车轮驱动转矩。传动系内部不需要积分环节属于纯代数运算要注意信号的数据类型必须一致避免出现double与int混用导致精度损失。3.2 整车阻力与加速度积分闭环整车动力学模型是五个子系统中计算回路最长的一个。文中限定在平直道路行驶不考虑坡道阻力只算风阻与滚动阻力。计算逻辑是驱动转矩与制动力总和除以轮胎半径得到整车驱动力再减去风阻与滚阻得到合力用牛顿第二定律Fma求出加速度对加速度一次积分得到车速二次积分得到行驶距离。车速又反过来通过风阻公式影响合力构成闭环。滚动阻力只与滚动阻力系数f有关忽略路面变化时为常数项风阻是车速的二次方关系计算路径需要车速信号做平方运算后乘以0.5CdA*ρ。整个闭环如果处理不当Simulink很容易报代数环错误常见做法是在积分环节前加一个Unit Delay模块切碎直通回路或者在求解器配置里选择自动处理代数环。Gain模块分别承担了1/r转矩转驱动力、1/m力转加速度、1/1000距离转km、3.6m/s转km/h等换算。整车动力学模型参数初始化脚本片段如下% 整车参数示例值按实际平台替换 m_veh 1450; % 整车质量 kg r_tire 0.29; % 轮胎滚动半径 m f_roll 0.012; % 滚动阻力系数平直路面 rho_air 1.293; % 空气密度 kg/m^3 Cd 0.32; % 风阻系数 A_front 2.0; % 迎风面积 m^2表格车速相关阻力分量说明阻力项表达式依赖项Simulink实现滚动阻力mgf质量、滚阻系数常数加法项风阻0.5ρCdAv^2车速、风阻面积Math Function平方后乘积m_veh与r_tire直接决定加速度和车速的量级改动这两个参数就能快速复用同一套模型去评估不同整备质量或轮胎规格的影响这正是纵向动力学模型用于前期匹配选型的价值所在。风阻项里的车速必须用仿真输出的瞬时速度不能用工况的平均速度否则加速段的瞬态误差会被平均掉。提示Simulink求解时若弹出代数环报错先在闭环积分器前加Unit Delay模块切碎直通回路后重新试算。3.3 子系统封装与信号命名规范五个子系统按Subsystem组织在实际搭建中比较常见子系统之间通过端口连接。我一般会打开信号线命名功能让语义清晰的信号名比如T_whl、v_veh_kmh自动成为日志信号这样后续在仿真数据检查器里查看波形时有可读性。把电池的电压、电流、SOC三条线打包成Bus总线也是好习惯被电机模型和驾驶员模型同时引用时子系统端口数量能明显减少。如果模型规模变大建议把五个子系统拆成独立Simulink模型文件用模型引用Model Reference的方式组装。和全部塞进一个顶层模型相比模型引用的好处是支持增量编译——只改电池模型时不会重新编译整车模型对后续参数扫描或硬件在环测试很有帮助。配置好固定步长求解器后这套结构可以直接配合代码生成工具输出C代码为快速原型验证留好接口。Simulink的矩阵运算能力在这一步也有体现参数批量扫描时可以用数组同时存多组整车参数一次仿真遍历整个设计空间。4. 驾驶员模型与PID踏板控制前向仿真的核心回路4.1 前向仿真与后向仿真的本质区别纵向动力学仿真分为前向仿真与后向仿真两大流派区别就在有没有驾驶员模型。后向仿真从需求车速倒推动力需求不考虑驾驶员实际操作适合稳态能耗计算。前向仿真加入驾驶员模型后目标车速与实际车速的差值通过控制器转化为加速踏板和制动踏板开度再传递给动力系统更接近真实驾驶行为。文中采用的是前向仿真架构因为动力总成匹配与能量管理策略开发最终要回答“实际踩踏板后车怎么动”这个问题。驾驶员模型本质上是行驶工况源加一个PID调节器输出量模拟踏板位置。控制规律用比例积分实现r* kp_drv * (v*_veh - v_veh) ki_drv * ∫(v*_veh - v_veh)dtr_acc min(max(r*, 0), 1) r_brk min(max(-r*, 0), 1)r_acc与r_brk分别对应加速踏板和制动踏板开度取值范围0到1两个踏板互斥。r*为正时加速踏板有值为负时制动踏板有值通过min/max做限幅可以保证两个踏板不会同时踩下。这个策略在Simulink里用Saturation模块配合两支信号分支实现或者直接用两个饱和模块分别取上下限。4.2 踏板开度到转矩指令的映射得到踏板开度后需要映射到转矩指令。文中对加速工况的简化是线性关系T*_mot r_acc * T_max(n_mot)T_max(n_mot)是当前转速下电机最大驱动转矩也就是电机外特性曲线在对应转速的峰值。这个简化意味着踏板开度线性等比例地分配最大可用转矩虽然不是最优标定但在能量管理策略研究阶段足够使用。制动工况涉及机电制动力分配问题机械制动与电动再生制动同时存在文中引入制动能量回收比例r_regen来简化分配T*_mot r_brk * r_regen * T_brkmax % 电机再生制动转矩 T_mechbrk r_brk * (1 - r_regen) * T_brkmax % 机械制动转矩T_brkmax是最大制动转矩r_regen是能量回收比例整车标定时通常取0.3到0.6之间。再生制动转矩需要与电机当前转速下的外特性比较防止请求超过电机能力。这个保护逻辑在Simulink里用饱和限幅或查表模块都能实现但不能省——低速段电机制动能力快速衰减若不限制车辆低速制动时会出现转矩请求无法满足的偏差。% 驾驶员模型与控制参数 kp_drv 0.8; % 车速误差比例增益 ki_drv 0.05; % 车速误差积分增益 r_regen 0.5; % 制动能量回收比例 T_brkmax 2800; % 最大制动转矩 Nm包含机械与电动比例增益决定踏板对车速误差的响应速度太大会导致车速振荡太小则工况切换处车速长时间跟不上目标。积分增益用来消除稳态残差但过大的积分项在急加减速时会造成超调。实际整定先把ki置零调kp等车速不振荡了再加积分项这是工程上常用的两步法。4.3 制动请求与多源转矩请求的仲裁踏板位置信号读入控制策略后需要区分加速与制动两条路径。文中把踏板位置直接作为信号导入动力系统模型同时监督控制器需要制动踏板位置信号决定动力系统产生动力的大小。实际工程中容易踩的坑是转矩指令直接由驾驶员模型给出没有经过转矩管理器仲裁在能量管理策略与驱动防滑控制介入时会出现多个转矩请求源冲突。在Simulink里组织这类多源转矩需求建议把驾驶员模型输出的踏板开度作为基础请求在策略层加一个转矩仲裁模块把制动优先、功率限制、驱动防滑这些安全相关限制统一收口。转矩指令从驾驶员模型直接连到电机模型的做法只适合开环验证往实车控制策略迁移时必须预留仲裁接口。r_regen如果要做动态调整可以用二维Lookup Table把它和车速、SOC关联起来低速或高SOC时回收比例自动收敛到0避免电池过充和制动感不一致。如果控制算法超出PID能力范围也可以把策略写成S-Function自定义模块在Simulink里保留手写C代码或Matlab代码的灵活性。表格驾驶员模型与策略衔接的信号流信号来源去向作用v*_veh驾驶工况模块PID计算目标车速v_veh整车动力学反馈PID计算实际车速r_accPID输出转矩映射驱动请求r_brkPID输出制动分配再生/机械制动请求T*_mot转矩映射电机模型驱动或再生转矩这套信号流说明一个问题驾驶员模型虽然是前向仿真的入口但真正决定仿真精度的往往是它后面的转矩映射与保护逻辑。把复杂的制动分配压成固定比例在仿真精度可接受的前提下大幅降低模型复杂度这种取舍在早期策略验证阶段是合理的。5. 仿真验证与调参复现0-100km/h加速与NEDC能耗5.1 加速性能仿真与结果核对在油门踏板开度100%条件下做0-100km/h加速仿真结果为加速时间11.4s最大轮端转矩793.5Nm最大轮端功率42.64kW。复现时我一般会在驾驶员模型里单独做一个加速工况源目标车速设一个很大的值PID输出饱和到1等效为全油门。判断仿真是否正常先看轮端转矩和电机功率两条曲线是否落在外特性包线内再看车速曲线是否振荡或出现台阶。11.4s这个结果对小型纯电动车来说偏慢改善途径是提升电机外特性、换用峰值转矩更大的电机。实际做动力性匹配时可以扫描电机峰值转矩参数把0-100km/h加速时间与峰值转矩做成散点图目标直接落在图上选点。5.2 NEDC工况能耗与回馈能量的验证技巧NEDC工况下要重点看能量流是否守恒电池放出的电能量等于轮端机械能加各环节损耗。Simulink里用积分模块累计功率信号把电池总能耗曲线与轮端驱动能量对比差值部分是电机与传动系损耗这个值应始终为正。如果出现轮端耗能大于电池放电能量的情况大概率是效率MAP查表方向反了或者驱动与发电效率公式用混了。文中给出的轮端驱动能量1.57kWh、回馈能量0.4788kWh回馈量约为驱动量的30%这个比例可以作为判断模型量级是否合理的参照——回馈比例过高通常意味着制动分配过于激进实车标定一般会保守很多。5.3 仿真排错与模型工程化多子系统功率耦合模型最常见的故障就是代数环和查表越界。代数环处理办法是先加Unit Delay试算若波形出现小幅相位滞后且不影响均值就维持若波形发散检查是否增益过大导致闭环不稳定。查表越界要看Lookup Table断点范围是否覆盖仿真工作区间尤其是转矩负区间的数据越界时模块会线性外推结果通常离谱。仿真跑顺之后可以开启Simulink外部模式把模型部署到目标机上边仿真边在线调kp、ki参数效率比每步都停下来改参重启高得多。模型要交给团队复用的话把电池查表数据、电机MAP、整车参数全部提到模型工作区初始化脚本中配合静态代码检查确认数据维度一致性。这一套流程走完后仿真数据与台架或实车数据对比时的口径就清楚了。后续扩展联合仿真场景时这套纵向动力学模型可以作为车辆侧被控对象与Carsim对接也可以直接用来做策略侧的Simulink快速原型开发建模边界稍作调整即可复用。本文还有配套的精品资源点击获取
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进