做纯电动车的整车仿真MATLAB Simulink是我用过最顺手的工具没有之一。这个项目从零搭一套完整的纯电动汽车模型包含驾驶员模型、电机模型、电池模型、整车动力学模型再跑典型工况算续航和动力性整个过程踩了不少坑也积累了不少可以复制的方法。这篇文章就把模型搭建的完整思路、关键参数怎么定、仿真结果怎么分析、常见问题怎么排查一次说清楚。这套东西适合谁看正在做课程设计或毕业设计的学生、刚接触电动车仿真的工程师还有想从零搭建整车模型做前期选型和方案对比的同事。不需要你有多深的Simulink基础只要会基本操作按下面的思路走就能搭出一个可以用的纯电动车整车模型。我尽量把每一步的逻辑讲透而不只是给你一堆模块截图。1. 整车仿真模型的设计思路前向仿真架构与模块规划1.1 前向仿真与后向仿真怎么选很多人一上来就纠结仿真架构其实这个选择很简单。电动车整车仿真有两种主流架构前向仿真和后向仿真。后向仿真假设车辆先满足工况需求从车轮端反推电机和电池需要提供多少功率完全忽略驾驶员操作适合做早期的能量消耗估算速度快但没法反映实际驾驶感受和动态响应。前向仿真则从驾驶员模型开始驾驶员根据目标车速和实际车速的偏差踩加速踏板或制动踏板然后经过电机、传动系、整车动力学模型回到车速形成闭环。这种方式更接近真实车辆的工作方式能有效模拟加速、制动、换挡电动车没有变速箱但单速减速器也有类似逻辑、能量回收等动态过程。这个项目选的就是前向仿真。原因是题目要分析整车性能包括加速时间、爬坡能力、能量回收效率这些指标都依赖动态响应后向仿真算不准。前向模型每0.01秒甚至更小步长都在做闭环计算驾驶员模型的输出直接驱动电机扭矩整个链路与实际车辆一一对应后面做控制策略的时候也能直接往里面加逻辑扩展性更好。前向仿真带来一个实际问题驾驶员模型必须存在。没有驾驶员模型整个闭环就建立不起来。这也是题目里特别提到驾驶员模块的原因。它相当于一个PID控制器但被控对象不是温度也不是流量而是车速。1.2 整车模型的分层架构拿到一个整车仿真任务我习惯先把模型分成四层从外到内依次是工况层、策略层、部件层、物理层。工况层定义车辆要跑什么循环比如CLTC、NEDC、WLTC或者是自定义的加速、爬坡、匀速工况。策略层就是驾驶员模型和整车控制策略决定扭矩请求、制动分配、能量回收逻辑。部件层是电机、电池、减速器等核心部件按实际物理特性建模。物理层是车辆本身的纵向动力学方程把电机输出的力转化成车速。这四层不是并列关系而是严格的单向驱动关系工况层给出目标车速策略层计算驾驶需求部件层执行输出物理层反馈实际车速再回到策略层闭环。把这个架构想清楚后面搭模型的时候模块边界就非常清晰每个子系统的输入输出也明确了查问题也容易定位。实际上我搭模型的时候还会在四层之外加一个数据记录层用To Workspace或者Scope把关键信号全程记录下来比如SOC、车速、电机扭矩、电机转速、电池电流、电压、功耗等。这个记录层对后面的性能分析至关重要没有数据模型跑完等于白跑。1.3 模块规划与数据流搭建模型前建议先画一张模块框图明确每个模块的输入输出接口和数据流方向。不需要画得太细但电源流和信号流必须分开画。电源流方向电池→逆变器→电机→减速器→车轮→整车阻力。信号流方向工况目标车速→驾驶员模型→扭矩指令→电机模型→实际扭矩→整车模型→实际车速反馈给驾驶员模型。还有一个反馈回路在能量回收时起作用制动时整车动能通过车轮反拖电机发电将电能回馈给电池电池SOC上升。模块之间的接口尽量用Simulink的Bus对象或者结构体来传递。我一开始用散线连接模型一复杂就乱了线交叉多到没法看。后来改成Bus分组电池包输出电压电流放一组、电机扭矩转速放一组、驾驶员指令放一组模型清爽了很多排查问题也快。2. 核心模块拆解驾驶员、电机、电池、整车负载2.1 驾驶员模型油门和制动踏板怎么算驾驶员模型是整个仿真的起点。它的任务是根据目标车速和实际车速的偏差计算加速踏板开度和制动踏板开度。我用的是一种带PID思想的纵向驾驶员模型但不是直接用一个PID控制器了事。实际做法是当车速偏差为正目标车速大于实际车速时输出加速踏板开度范围为0到1。当车速偏差为负实际车速大于目标车速时输出制动踏板开度范围为0到1。实际逻辑里还会区分是机械制动还是能量回收这在仿真里可以简化。驾驶员模型的核心是比例积分控制器比例项P负责快速响应当前速度差积分项I负责消除稳态误差。实际调试中发现纯P控制会有稳态车速误差尤其在爬坡工况下坡道阻力持续存在比例项老是留一个固定的速度差加上积分项后稳态误差能压到很小。微分项D通常不用因为车速信号噪声大微分放大噪声容易让踏板抖。一个典型的驾驶员模型参数是这样的P增益取2到3I增益取0.3到0.5输出限制在0到1之间加速踏板和制动踏板分开处理。这里有个关键细节加速踏板开度到扭矩的映射不是线性的。真实车辆有踏板map表不同转速下相同踏板开度对应的扭矩不一样建模时可以用查表模块实现也可以先简化成线性映射然后逐步细化。驾驶员模型还要加一个重要的限制逻辑电池SOC过低时即使驾驶员踩加速踏板整车也要限制功率输出这个在整车控制策略里做但驾驶员模型层面的输出上限也要跟着变。2.2 电机模型外特性、效率Map与响应延迟电机是整个模型的动力源也是仿真里最容易过度建模的地方。很多人一上来就搭永磁同步电机的dq轴方程把电流环、转速环全部建完精度是上去了但仿真速度惨不忍睹而且参数难标定稍微一不注意仿真就发散。整车级仿真里的电机模型精度需求是一个仿真步长内能输出正确的稳态扭矩、转速和效率不是用来做电机本体设计的。所以我选用了准静态电机模型加一阶惯性延迟的组合效果不错。准静态模型有三张核心表外特性扭矩表不同转速下的峰值驱动扭矩和峰值发电扭矩单位Nm。连续扭矩表不同转速下可持续输出的扭矩通常比峰值扭矩低尤其在低速高扭矩区域受散热限制连续扭矩只有峰值的50%到70%。效率Map表不同转速和扭矩组合下的电机效率单位是百分比用于电功率计算。建模时根据当前转速查外特性表得到峰值扭矩再和驾驶员请求扭矩取小值得到实际扭矩指令。然后经过一个一阶惯性环节模拟电机扭矩响应的延迟时间常数一般取0.01到0.05秒。惯性的作用是让扭矩变化不突变不然整车模型在起步时会因为扭矩阶跃产生剧烈的加速度冲击仿真更容易报错。电机效率的计算要注意查表方法。Simulink的2D Lookup Table做效率Map有个坑表格数据必须是单调递增的网格但实测电机效率数据在低扭矩区域往往有交叉。处理办法是把扭矩轴定义成等间距网格效率值用插值工具重新生成保证网格单调。电机模型的功率输出方程也简单电功率机械功率除以效率电动模式机械功率扭矩乘以转速除以9550单位是kW。这个单位换算容易漏一旦漏掉电池和电机的功率对不上SOC掉电速度明显不对。2.3 动力电池模型一阶RC等效电路够不够用电池模型的选择直接决定仿真复杂度。整车级仿真里最常见的电池模型有三种理想电压源模型、静态内阻模型、一阶RC等效电路模型。我建议至少用一阶RC模型多花不了多少时间但精度提升非常明显。理想电压源就是开路电压电池满电10V没电还是10V完全不准只能用来调试控制逻辑。静态内阻模型是开路电压减去电流乘以内阻算出来的SOC曲线有一定规律但忽略电池的动态响应脉冲工况下误差大。一阶RC模型在开路电压后面串一个RC并联支路电容和电阻模拟电池的极化过程和动态电压响应适合放电电流剧烈变化的工况。一阶RC模型的参数包括开路电压OCV随SOC变化的曲线、欧姆内阻R0、极化内阻R1、极化电容C1。这里有个实操技巧OCV曲线必须根据真实电芯数据拟合不要自己瞎编。不同SOC下的OCV变化形状会直接影响SOC估算的精度尤其是在SOC低于20%时曲线斜率变小电压变化对SOC变化不敏感模型误差容易被放大。电池模型的发热和温度特性在纯性能仿真阶段可以先不建。如果后面做冬季续航或者热管理策略再把温度作为变量引入容量随温度变化的修正系数。整车仿真最怕的就是模型全面铺开热量、磨损、老化全建出来仿真10分钟跑完一个工况要等到第二天反而没人愿意用。电池SOC的计算用的是安时积分法SOC等于初始SOC减去累计电量除以总容量累计电量的单位要统一安培秒和安培小时之间容易搞混。Simulink里积分模块用秒做基本单位电池容量如果给的是安时要先乘以3600转成安培秒这个细节错了SOC标定的续航会完全对不上。电池电流的计算是另一个容易出问题的地方。电流等于电池功率除以电池电压但电池功率又取决于电流这就形成了代数环。解决办法是在软件里做延迟或者用上一个仿真步长的电压计算当前电流。实际处理时我用一个Memory模块给电压一个一拍延迟基本不影响精度但能把代数环破掉。2.4 传动与整车纵向动力学模型传动系统在纯电动车上比传统燃油车简单很多没有多挡位变速箱一般就是一个固定速比的减速器加主减速器。建模时用一个增益模块把速比乘上去就行电机转速等于车轮转速乘以总速比。传动效率取0.92到0.96它会影响整车效率但对建模难度影响不大。整车纵向动力学模型是物理层的核心直接用牛顿第二定律。车辆的驱动力来自电机扭矩经过减速器传到驱动轮的力阻力包括滚动阻力、空气阻力、坡道阻力和加速阻力。方程如下驱动力电机扭矩乘以总速比乘以传动效率除以车轮有效半径减去滚动阻力整车质量乘以重力加速度乘以滚动阻力系数减去空气阻力0.5乘以空气密度乘以风阻系数乘以迎风面积乘以车速平方减去坡道阻力整车质量乘以重力加速度乘以坡道正弦值等于整车质量乘以加速度。这个方程看似简单但有几个细节容易坑人。第一旋转质量换算系数问题传动轴、车轮、电机转子都有转动惯量这部分的等效质量不能忽略。加速性能仿真时如果忽略旋转质量仿真出来的加速时间会比实际短5%到10%。第二空气阻力和车速的平方成正比高速工况下它的占比会迅速上来的做最高车速仿真时必须考虑到这个非线性。整车模型里用一个积分器把加速度积分成速度再积分成位移。车速信号要经过滤波再反馈给驾驶员模型否则积分器输出的数值噪声会让踏板信号抖动。我习惯加一个一阶低通滤波器时间常数取0.05秒左右既能滤掉高频噪声又不会引入明显的滞后。3. 整车参数估算与标定从指标反推部件参数3.1 从加速时间反推电机峰值功率模型搭好之后就要填参数。这部分是所有初学者最喜欢抄参数表的地方但我建议反过来从设计指标反推部件参数这样做不仅理解更深参数之间的一致性也更好。假设整车的核心指标是百公里加速时间不多于8秒最高车速160公里每小时最大爬坡度不低于30%。百公里加速8秒平均加速度大约是3.47米每秒方。考虑实际加速过程中随着车速升高加速度会衰减峰值加速度在低速段可以达到5到6米每秒方。驱动功率至少要能满足最高车速140公里每小时时的阻力功率再加上加速余量。估算方法是用整车的阻力功率加上加速功率加速功率等于质量乘以加速度乘以速度。取整车质量1500公斤在80公里每小时时如果还要保持2米每秒方的加速度加速功率大概是66千瓦阻力功率约15千瓦左右总功率需求约80千瓦。所以电机峰值功率选120千瓦留出足够余量。这是粗略估算真正精确的功率匹配要在模型里跑加速工况实际试凑。我的经验是先按估算选一版峰值功率跑一遍0到100公里每小时加速看实际情况如果加速时间偏长优先提高低速扭矩而不是直接加峰值功率。很多时候加速时间不够瓶颈在低速扭矩上因为起步阶段扭矩不够导致加速度上不去峰值功率再高也没有用。3.2 电量与续航的匹配电池电量取决于续航目标。假设目标续航NEDC工况下300公里百公里电耗按目标值15千瓦时每百公里来估算这样总能量需求是45千瓦时。考虑电池放电深度不允许SOC放到0%实际可用电量按90%算电池总容量要50千瓦时。下面把工况的功率需求算一下才能确认这个电量够不够。NEDC工况平均车速约34公里每小时在市郊和高速段车速较高驱动平均功率大概在8到10千瓦。300公里要跑约9个小时不少NEDC循环时间累加驱动能量需要80千瓦时左右不对这里面有个矛盾我再重新算一下。实际上纯电动车低频工况下的电耗确实跟平均功率强相关。我取驱动平均功率10千瓦跑300公里耗时为300除以34约8.8小时驱动能量约88千瓦时这远远超过45千瓦时那45千瓦时的电池根本跑不到300公里。问题出在哪问题出在NEDC是工况循环叠加的怠速时间长平均驱动功率远低于10千瓦。用均方根功率或按循环能量算更准确。一个更合理的估算方法是根据经验A级纯电轿车在NEDC下百公里电耗约13到15千瓦时300公里需要39到45千瓦时的可用电量。但城市工况下平均功率也不是10千瓦典型NEDC单循环距离约11公里时间约19分20秒平均功率折算下来约5到7千瓦所以上面按10千瓦平均功率算出来的结果是偏大的。这里不展开按矿脉算循环负载了。直接采用经验法更可靠百公里电耗参考值乘续航里程得总能量再除以放电深度得电池容量。这就是工程上做匹配的常用方法而且要留10%以上的设计余量。动力电池建模时有几个重要参数额定电压取320V容量根据总能量和电压反推50千瓦时除以320V也就是156安时。写成模型参数时注意Simulink里SOC积分用的是安时所以电池容量写成156安时而不是直接写千瓦时。3.3 工况循环与仿真控制参数设置模型跑仿真工况选择很关键。国内现在主流的认证工况是CLTC它比NEDC更贴近实际驾驶低速段比例更高频繁加减速和怠速工况多对能量回收策略的考验更大。整车模型里做一个工况模块读入外部CSV文件里的时间-车速序列。这个序列可以用标准CLTC数据也可以用自己采集的路谱数据。读进来之后用一阶保持或者线性插值生成连续目标车速和驾驶员模型里的实际车速做比较。仿真参数设置方面我建议固定步长求解器步长取0.01秒或者0.02秒不要用变步长。原因有两点第一固定步长和实际控制器运行频率一致便于后续把控制策略移植到实车嵌入式平台。第二固定步长仿真结果可复现不会因为求解器自动调整步长导致结果出现细微差异。求解器用ode4四阶龙格库塔它精度足够稳定性好是整车仿真最常用的选择。变步长仿真用默认的ode45也行但步长跨度过大时电机模型的代数约束可能出现不稳定还是固定步长省心。4. 性能仿真与分析续航、加速、爬坡与能量回收4.1 典型工况下的续航仿真模型搭好之后第一个要跑的就是CLTC续航仿真。仿真开始时电池SOC设为100%跑循环工况一直到SOC降到设定放电截止值我经验上取SOC等于10%为截止点对应放电深度90%。CLTC工况一个循环时长1800秒如果SOC在多个循环中下降仿真时长需要足够长。计算时长有个小技巧先按平均SOC下降率估算循环数然后给出总仿真时间。假设一个循环SOC下降约2%那么从100%降到10%需要约45个循环总共22.5小时仿真时间。在固定步长0.01秒情况下22.5小时实际时间仿真对应的仿真步数是810万步Simulink跑下来要几分钟到十几分钟完全可以接受。仿真结果里看几个关键指标总行驶里程、平均电耗千瓦时每百公里、SOC下降曲线、电池包的峰值电流和峰值功率。CLTC跑完我那次仿真的结果是续航约312公里比目标300公里略高一点百公里电耗约14.4千瓦时。这个数据合理说明电池容量和整车效率标定基本一致。续航分析要重点看SOC曲线的形状。如果SOC曲线在高速段掉得明显快、在低速段回升的痕迹很浅说明能量回收策略没有起到太大作用回收效率可能偏低这就是下一步优化的空间。4.2 百公里加速仿真驱动防滑与扭矩限制的影响百公里加速时间是整车动力性的硬指标。仿真方法很简单给一个目标车速超高的工况比如0到160公里每小时的直线加速工况驾驶员模型会全油门加速整车模型会一直加速到无法继续增速为止。从结果曲线看一般能观察到三个阶段的特征。起步阶段电机输出峰值扭矩但受到轮胎附着力的限制如果扭矩大且没有防滑控制驱动轮会打滑实际加速度反而下降车速爬升迟缓。中段加速阶段车速上升后电机进入恒功率区扭矩开始回落但加速度维持在一定水平。高速阶段空气阻力随车速平方快速增长加速度逐渐趋于零车速逼近最高车速。实战中我做过一个对比实验同样的整车参数带驱动防滑限制和不带限制百公里加速时间分别是7.6秒和8.3秒。防滑反而更快原因是限制扭矩避免了驱动轮打滑保证了地面的有效附着力利用率。这个结果说明在扭矩足够大的电动车模型中驱动防滑控制不能省否则加速仿真会被打滑拖慢结果失真。加速性能分析还要注意一个点电机峰值功率和峰值扭矩的配比。一般电动车电机扭矩从零转速即可输出峰值但随着转速升高受功率限制扭矩按反比例下降。峰值扭矩决定起步加速度峰值功率决定高速加速能力。优化加速时间时低速段瓶颈在扭矩高速段瓶颈在功率要分开调整。4.3 能量回收与制动过程分析电动车和燃油车最大的区别之一就是制动能量回收。仿真中制动时驾驶员模型输出制动踏板开度整车控制策略将制动力分成两部分一部分由电机反拖发电产生另一部分由机械制动系统承担。能量回收逻辑我采用的是查表法给定制动踏板开度和车速查表得到能量回收扭矩分配系数。低速时回收效率低机械制动占比高中高速时回收效率高电机回收占主体。回收扭矩同时受电池充电功率限制和电机发电外特性限制取两者较小值。分析能量回收效果时我会统计整个工况循环内电池SOC的变化。对比开与关两种模式的SOC差值可以算出回收对SOC的贡献。CLTC工况下配置了能量回收后SOC回升幅度约3%到5%对应续驶里程多出约10到15公里。这个量级符合行业内的常见数据说明模型标定没有问题。能量回收分析里有个细节经常被忽略制动回收跟ABS和稳定性控制的关系。在低附着路面或紧急制动情况下为了保证制动安全通常要减小能量回收的占比避免因电机反拖导致车轮抱死。在整车仿真模型里如果没加ABS模型高速紧急制动时直接把全部制动力交给电机仿真结果会显示急减速但车轮可能已经抱死这不真实。所以我的做法是在制动控制策略里加一个按车速和制动强度的限幅函数模拟实车的安全逻辑。4.4 爬坡工况校核爬坡能力是整车动力性另一个硬指标一般用最大爬坡度表示比如30%对应的坡角约16.7度。爬坡工况仿真设置不复杂给一个恒定的目标车速比如10公里每小时坡道设置为30%跑稳态仿真观察车速能否稳定在目标值附近、电机扭矩是否达到外特性限值、电池输出功率是否过大。如果电机扭矩在稳态时已经触碰外特性上限说明爬坡能力不够需要加大低速扭矩或总速比。这里有一个矛盾需要平衡爬坡度指标和最高车速指标对总速比的需求是相反的。总速比加大低速扭矩放大爬坡能力提升但最高车速会降低总速比减小高速性能好但爬坡弱。合理做法是优先满足最高车速指标确定电机最高转速和总速比的上限再校核爬坡度如果爬坡不够就提高电机峰值扭矩而不调整速比或者适当放宽最高转速上限。仿真校核时我还发现一个实战问题爬坡工况下电池电压跌落严重。电机大扭矩输出时电池电流可能到300安培以上内阻压降可达30伏电池端电压从满电的360伏跌到330伏这时候电机功率受到限制实际爬坡扭矩比理想电机的峰值扭矩低。所以爬坡校核一定要把电池压降模型算进去不然会高估爬坡能力。5. 常见问题与调试经验5.1 代数环问题搭建模型后第一次运行最常见的报错是代数环问题。Simulink提示存在代数环警告可能运行缓慢或结果不准确。代数环的产生有两个典型位置一个是电池模块电流计算依赖电压电压计算依赖电流另一个是驾驶员模型和整车模型之间有直接的前馈路径时扭矩请求和车速之间形成了瞬时依赖。我的处理办法是电池电流计算时加一个Memory模块用上一时刻的端电压计算当前时刻的电流。这个方法古老但有效造成的延迟只有一个仿真步长对精度影响可以忽略。驾驶员模型输出端加一个延迟单元或者低通滤波器打破瞬时反馈路径。在模型配置里勾选Minimize algebraic loop选项试试但这个选项只对某些特定结构有效不如手动加延迟靠谱。5.2 仿真跑出NaN或者Inf模型运行到某个时刻后突然输出NaN这是整车仿真最常见的问题之一。原因通常有三个查表越界、除数为零、积分器发散。查表越界比如电机转速跑到表格定义范围之外Lookup Table模块默认外插会给一个离谱值输出扭矩变超大然后速度飞掉。解决方法是把表格的边界值设置成饱和值越界就输出边界值或者用饱和模块提前限幅。除数为零典型是计算滑移率时除以车速车速为零时就出问题。加一个很小的常数在分母上比如除以车速加0.001这种方法叫正则化可以消除奇点。积分器发散多半是反馈回路增益过大或者步长过大。先试减小固定步长比如从0.01秒改到0.005秒看是否稳定。如果变小步长能解决说明模型本身是稳定的但求解步长选得太大。5.3 初值问题导致的起步故障仿真一开始就崩溃往往不是模型错误而是初值设置不合理。典型情况是电机初始转速设成0但驾驶员模型在第一个仿真步就请求大扭矩扭矩冲击导致加速度跳变过大积分器发散。工业界的做法是先做稳态初始化把车速、转速、SOC都设为合理初值比如SOC设为95%车速初值设为工况第一个记录点的值或略高于0避免在零速下还启动大扭矩请求。另外在驾驶员模型的输出端加一个斜坡限制让踏板开度从一个较小的值开始逐步增加能有效避免起步冲击。5.4 如何验证模型可信度模型搭完不是结束必须经过验证才敢拿结果说话。整车仿真模型的验证有两条路线一条是纵向验证对比实车或参考车型的数据一条是横向验证和已有的仿真工具比如商用的整车性能仿真软件结果对比。我没有实车实验条件用的是参考车型的公开测试数据百公里加速时间、最高车速、综合工况续航电耗。仿真结果和参考数据做对比误差在5%以内就可以接受。5%到10%的误差要分析原因可能是电池容量标定、效率Map表精度、风阻系数的取值这些因素造成的。另一个验证手段是做工况敏感度分析刻意改小风阻系数、增加整车质量、调低电机效率看模型的响应趋势是否符合物理规律。比如质量增加10%加速时间和公里电耗都应该上升如果趋势反了说明某个环节的参数方向定义反了这种低级错误在模型调试中很容易出现。最后再分享一个建模习惯整车仿真模型是个大工程如果一开始就埋头拖模块做到后面大概率会乱。我个人走过的弯路是用Excel先把所有参数汇总成一张参数表Simulink里的参数全部用变量名代替Simulink模型用参数回调读取Excel或者m文件里的值。这样调整一版参数之后模型不用动重新跑一遍就行。另外模型文档化可以做得很轻量每个子系统里加一个说明框标注清楚输入输出、单位、参数来源过一个月再看模型就完全不需要重新梳理。仿真结果一定要导出数据做后处理。我用的是Simulink的Signal Logging加MATLAB脚本批量画图把所有成本曲线和功率曲线放在同一张图里对比。这样做的好处是模型迭代时所有结果可以统一对比一眼就能看出某个参数改动带来的差异。这套工作流让整个项目从模型搭建到最终报告输出都保持在一个可控的节奏里。
阅读完成 · 觉得有帮助?