尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

电动汽车续驶里程仿真实战:纵向动力学建模与能量流分析全流程

电动汽车续驶里程仿真实战:纵向动力学建模与能量流分析全流程 这两年帮人做电动汽车续驶里程仿真前前后后交付过好几个版本有拿来交毕设的有课程设计用的也有整车预研阶段用来快速估续航的。这个课题听起来挺大拆开其实就是一件事给定一个工况速度曲线把整车在每个时刻的受力、能耗、电池消耗算出来最后落到“满电能跑多少公里”这个数上。标题里“源码万字报告讲解”正是这类项目最标准的交付组合也是一套完整工作流的三个出口。所以这篇就按我实际交付项目的顺序来写从模型怎么搭、参数怎么标、工况怎么选到源码怎么组织、报告怎么展开、现场怎么讲最后把我在过程中踩过的坑列一遍。如果你想复现或者改造成自己的项目直接拿这篇当索引比自己从零啃整车理论来得快。1. 项目整体设计与思路拆解1.1 为什么选用纵向动力学加能量流的仿真路线第一次接这种项目的人容易犯一个毛病上来就想搭整车多体动力学模型恨不得把悬架、轮胎、转向全建出来。真没必要。续驶里程仿真的本质是里程积分问题它只关心“每一秒整车需要多少功率”和“电池还能放出多少能量”这两条主线之间没有任何底盘级的耦合关系。所以业界普遍采用纵向动力学加能量流的仿真路线通俗说就是把车当成一个质点沿行驶方向受力算出轮边需求功率再向上游推到电机电功率、电池放电功率最后按能量守恒积分出续航。这就像记流水账每一秒记一笔收入和支出月底看余额还剩多少。你不需要关心钱在钱包里怎么摆放只需要每笔账记对。整车主模型也一样真正决定续航精度的不是悬架刚度而是质量、风阻系数、滚阻系数、传动效率、电机效率MAP、电池可用能量这几个参数。把这几个参数弄准模型就成功了一半。反过来如果你上来就建了个九自由度整车模型光参数标定就能让你加班两周精度还不一定比纵向模型高。另外用纵向动力学模型还有一个隐性优势求解速度快。一秒步长跑完整段CLTC工况大概就是秒级调参、做工况对比、出灵敏度分析都很方便。而多体模型跑一次就要半天完全不适合做参数寻优。所以无论从项目周期还是验收效果看纵向动力学加能量流都是续驶里程仿真里最划算的方案。1.2 整车模型的分层结构与交付物组织整个仿真模型我习惯分成四层来搭这个分层也是源码目录和万字报告章节的原型。第一层是工况层负责输入车速-时间曲线第二层是整车动力学层把车速换算成轮边驱动力和阻力功率第三层是动力系统层包含电机转速转矩特性、效率MAP、传动比和传动效率第四层是电池层负责电压、电流、SOC和可用能量计算。这四层之间通过总线信号连接结构清晰排查问题的时候可以逐层断开检查不会满模型找变量。交付物组织也按这四层走源码分为工况处理脚本、整车参数文件、核心仿真模型、后处理脚本四个目录万字报告的结构就是摘要、模型原理、参数标定、工况分析、结果与误差讨论、结论六章。这样组织的好处是别人拿到交付包后能顺着目录读懂你的工作逻辑而不是面对一堆命名混乱的.mdl和.py文件发愁。说白了交付物不只是给老师或验收人看的更是给你自己留的“三个月后还能看懂”的工程档案。2. 核心建模与关键参数计算2.1 行驶阻力模型五种阻力的取舍续驶里程仿真里最核心的物理方程就是行驶阻力方程轮边需要的驱动力等于滚动阻力、空气阻力、坡度阻力、加速阻力之和。完整公式长这样F_drive m * g * f * cosθ m * g * sinθ 0.5 * ρ * Cd * A * v² δ * m * a其中m是整车质量g是重力加速度f是滚动阻力系数θ是坡度角ρ是空气密度Cd是风阻系数A是迎风面积v是车速δ是旋转质量换算系数a是加速度。这里每一项都能单独讲故事。举个例子我用一台典型A级纯电轿车做仿真整备质量1500kg迎风面积2.2平方米风阻系数0.28滚阻系数0.011旋转质量换算系数1.08。当车速稳定在120km/h时空气阻力大概是0.5乘以1.2乘以0.28乘以2.2再乘以车速平方算下来约410牛滚动阻力是1500乘以9.8再乘以0.011约162牛。这时候风阻是滚阻的2.5倍左右所以高速续航衰减特别明显就是因为风阻随车速平方增长。再算加速阻力如果车速从0加速到50km/h用了10秒平均加速度约1.39米每二次方秒瞬时加速阻力能到2230牛远超匀速时的滚动阻力和风阻。这也是为什么市区拥堵工况和高速巡航工况的百公里电耗差异巨大。建模的时候坡度项在平路城市工况可以直接置零但如果你要仿真山区或地库坡道工况坡度项就必须保留。我一般建议模型里保留完整五项通过参数置零来切换工况而不是删掉某项这样项目后续扩展不用返工。2.2 电机模型效率MAP怎么填才不虚续驶里程仿真里的电机不是控制模型不需要d-q轴方程它是一个效率查表组件。输入是转速和转矩输出是电功率。电机效率MAP从哪儿来一般有三个来源厂家提供的台架数据、论文里的典型MAP图、或者用Motor-CAD/MAXWELL这类工具仿真标定。课程设计和毕设项目最常用的是第二种从公开论文里提取一张典型永磁同步电机效率MAP再按自己车型的峰值功率和最高转速做缩放。这里有个特别容易翻车的细节不能把电机效率设成一个常数比如90%。我实测过低速大转矩起步阶段效率可能只有75%左右高速弱磁区效率也会掉到85%以下只有中速中等负载区间才能到92%以上。CLTC工况里低速蠕行和频繁启停占了很大比例如果全程用90%效率算出来的续航会偏高5%到8%答辩的时候被老师拿实测数据一问就露馅。所以推荐的做法是建一张二维查找表横轴是转速纵轴是转矩表格里填效率值。查表的时候用Simulink的n-D Lookup Table插值方法用线性插值外插用“clamp”防止超范围出现荒谬值。如果实在拿不到实测MAP至少要让效率随负载变化呈现“低负载低效率、中等负载高效率、过载效率下降”的趋势这个趋势比绝对精度更影响结果的可信度。2.3 电池模型SOC计算与可用能量电池层一般用Rint模型或者一阶RC模型就行千万别一上来就做电化学P2D模型那是做电芯设计的人干的事。Rint模型简单说就是理想电压源串联一个内阻端电压等于开路电压减去电流乘内阻。一阶RC模型在Rint基础上加了一个并联阻容网络用来模拟电池的极化效应对续航仿真来说精度已经足够而且计算量很小。SOC的计算是关键SOC(t) SOC(0) - (1 / Q_usable) * ∫ I(t) dtQ_usable是可用容量单位是安时电流单位是安培积分出来是安时。很多新手把电池容量写成功率的千瓦时或者把电流单位搞错成毫安导致SOC要么飞快归零要么长期不变。举个例子一块60度电的电池包名义容量按350伏平台算是171安时左右。为了保护电池实际可用窗口一般设为10%到95%也就是说可用容量大概145安时。仿真初始SOC设95%当SOC下降到10%时强制停车累计行驶里程就是续驶里程。这样处理比直接计算“总能量除以百公里电耗”多了一个动态过程能看出SOC随时间的变化曲线报告里也有东西可画。在使用电池模型时我习惯加一个限制当SOC低于10%时电机的最大可用功率要跟着降模拟实际车辆在低电量下的功率限制。不然仿真会在低电量时出现一脚大油门电流突然飙升、SOC瞬间跳变的假象看起来就不真实。3. 仿真实操与源码解读3.1 工况数据准备NEDC、CLTC、WLTC怎么选工况数据是续驶里程仿真的“剧本”选错了剧本结果自然对不上号。目前最常见的三种工况标准各有各的性格。NEDC是欧洲早期标准总共1180秒平均车速只有34公里每小时最高车速120公里每小时加减速都很温柔怠速比例也低。它的特点是“理想化”算出来的续驶里程一般偏乐观。WLTC比NEDC激进总时长1800秒平均车速约46.5公里每小时最高车速131公里每小时加减速段非常凌厉更贴近真实驾驶。CLTC是我国现行的轻型车测试工况总时长1800秒平均车速约28.96公里每小时怠速比例接近23%低速段占比高更适合评价城市用车场景。如果项目没有指定工况我建议毕设用CLTC理由是贴近国内公告数据、有据可查解释起来也方便。如果是课程设计想简化计算NEDC更友好因为时长短、工况段分明每段算能耗都很直观。想做激进对比就用WLTC。但无论选哪个一定要在报告里明确写清楚工况选择理由否则老师会追问“为什么不用XX工况”。这些工况数据网上都能找到csv格式的原始文件通常第一列是时间第二列是车速。下载后一定要先做一步检查把速度曲线画出来看末尾有没有掉数据、有没有负车速、有没有超过最高车速的尖刺。我接过一个项目工况文件里有一段车速从120km/h直接跳到-5km/h的记录仿真直接发散查了半天才发现是原始数据污染。3.2 仿真步长与求解器设置这一步很多教程都不讲但恰恰是实操里最容易出问题的地方。我推荐的默认配置是Simulink里选固定步长步长取1秒求解器用四阶龙格库塔ode4关闭过零检测。这样设定有三个理由。第一NEDC、CLTC、WLTC工况都是1秒采样一次你用连续变步长求解器反而会在工况插值上引入不必要的计算而且变步长在工况切换点容易触发“过零”误判导致仿真突然变得极慢。第二整车纵向动力学模型的时间常数远大于1秒续航仿真的积分对象是能量1秒精度完全够用。第三固定步长下结果可复现每个人跑出来都一样这对毕业设计和验收来说非常重要。唯一需要把步长调到0.1秒的情况是模型里嵌入了快速动态环节比如电池一阶RC模型的时间常数很小或者电机转矩响应带了时间常数环节。如果发现SOC曲线有锯齿状抖动就把步长改成0.1秒再跑一次对比结果差异。我实测下来正常乘用车参数下1秒和0.1秒的续航结果差异不超过1%不用过度追求小步长。3.3 源码组织与续航计算的主流程这套项目的源码我一般按两条线组织Simulink模型是一条线MATLAB脚本是另一条线。模型负责建模仿真脚本负责自动化批跑、后处理和画图。如果你不是Simulink出身只用脚本也能实现一套简化版续航仿真核心流程如下% 续驶里程仿真主流程数学等价版 v_kmh load(CLTC_velocity.csv); % 读工况第一列时间第二列车速(km/h) dt 1; % 工况采样间隔单位秒 v_ms v_kmh(:,2) / 3.6; % 车速转m/s % 逐秒递推 soc 0.95; % 初始SOC E_used 0; % 已消耗能量(kWh) distance 0; % 累计里程(km) soc_min 0.10; % SOC下限 for k 1:length(v_ms)-1 a (v_ms(k1) - v_ms(k)) / dt; F calc_drive_force(v_ms(k), a, vehicle_params); P_wheel F * v_ms(k) / 1000; % 轮边功率kW P_batt P_wheel / eta_drive / eta_motor_table(...); E_used E_used P_batt * dt / 3600; soc 0.95 - E_used / E_usable; distance distance v_ms(k) * dt / 1000; if soc soc_min break; end end注意这里有个关键点P_batt如果是负的代表制动能量回收回收功率不能全部打回电池要乘一个回收效率系数一般取0.6到0.8。很多初版代码在这里写错导致回收段SOC不降反升看起来电池在“永动机”。另外calc_drive_force里包含阻力公式要从工况文件里逐秒读取速度并计算加速度边界处第一秒的加速度要特殊处理否则会出现一个巨大的初始冲击力。这个脚本版的数学逻辑和Simulink模型完全等价非常适合用来验证模型的正确性。我通常先用脚本版跑通逻辑再搭Simulink正式版两边结果对不上时基本就是符号错误或参数单位问题排查效率很高。3.4 万字报告怎么组织这项交付里报告占了很大分量老师评阅时未必会仔细看你的代码但报告一定会逐章读。我的报告结构固定为六章每一章对应一个能被问到的“问题”。摘要章用一段话讲清楚做了什么、用什么方法、拿到什么结果。模型原理章讲清楚行驶阻力方程、电机MAP、电池模型重点是公式和参数。参数标定章把所有车型参数做成表格来源写清楚哪些来自公告、哪些来自假设不能糊弄。工况分析章对比所选工况的特征说明平均车速、怠速比例、峰谷功率分布。结果与误差章给出续航数值、百公里电耗、SOC曲线并和公告值对标把误差率算出来。结论章简短有力写三条就是高分。万字不是凑字数的万而是每章都要有图表支撑。我常跟朋友说报告里的三张灵魂图一定要做出来整车受力示意图、电机效率MAP云图、SOC随里程变化曲线。这三张图能撑起报告一半的视觉观感。剩下的数据表、工况曲线图、能耗堆积图每章至少配两张万字报告写起来就不费劲。4. 常见问题与排查技巧实录4.1 仿真发散与SOC跳变的排查流程仿着仿着突然发散或者SOC曲线莫名其妙跳变是这类项目里最劝退新手的现象。根据我自己的经验90%的发散都不是物理问题而是数值问题。排查顺序很关键我从底盘往上传先断开电池层只看电机功率输出再断开电机层只看轮边阻力最后把三层闭环接回来。每次断开后跑一次仿真看哪一层接入后开始发散问题就锁定在哪一层。SOC跳变最常见的原因是单位错配。我接到过一个翻车案例电池容量用的是安时但电流积分时用了小时算出来的SOC在第一步直接从0.9掉到0.2。另一个高频问题是用Wh和kWh混用能量积分基数差了一千倍续航自然对不上。还有一个隐蔽原因初版模型里SOC下限设成了0导致电池被“榨干”后电流继续反向积分SOC变成负数画出来的曲线直接穿到坐标轴下面。排查时我强烈建议做一个“中间量监视面板”把车速、轮边功率、电池电流、SOC四个信号同时拉出来看。业务上这四者应该严格联动车速高时功率高功率高时电流高电流对时间积分驱动SOC下降。如果出现车速已经降了但功率还在涨那就是查表或信号线接错了逐条检查总线标签就行。4.2 续航里程与公告值偏差过大的原因这是答辩场上最容易被问到的问题。如果你的仿线续航和官方NEDC或CLTC公告值差了超过15%不要急着调模型先检查三件事。第一整车参数是否按“测试状态”设置。公告续航的测试质量不是整备质量而是整备质量加一位驾驶员加部分载荷大概是整备质量加100到150公斤。很多人直接用整备质量跑质量少了续航自然偏大。第二车身附件负载是否为零。公告测试中空调关闭、暖风关闭但小灯、仪表、低压电器仍然有几百瓦的消耗强的低压电耗在0.3到0.5千瓦。这个在长工况里累计几十公里不可忽略。第三回收策略是否和实车一致。很多初版模型把制动回收系数设成0.9但实际乘用车在NEDC工况里回收能量占比也就20%左右设太高会导致续航明显虚高。如果上述都检查过误差还在那就用反推法标定拿官方百公里电耗数据反推整车平均阻力系数然后微调滚阻系数和风阻系数的乘积保证仿真平均电耗在官方值附近。这个方法不是造假而是让整车参数组合落在物理合理区间内毕竟单独拆开每个参数都有公差组合起来满足公告能耗才是最合理的标定目标。4.3 边界工况仿真不准的处理思路低温、高速、满载三个边界工况是定制化项目里最常被点名要加的。低温工况仿真不准根源在电池内阻增大和可用能量收缩以及空调制热功率消耗。我的处理方式是给电池模型加一个温度修正系数10摄氏度时内阻乘1.20摄氏度时乘1.5容量可用系数乘0.9同时把空调负载按恒功率1.5到2千瓦加到附件负载里。高速工况不准的根源在风阻。前面算过120km/h时风阻占主导Cd值每差0.01高速续航就能差出3%以上。所以做高速工况时风阻系数不能用城市工况的默认值要按实际车身造型微调比如带车顶行李架要加0.02运动外观套件可能减0.01。满载工况相对简单把质量直接加上去就行但要注意满载时滚阻系数也会略微上升因为轮胎变形增大可以按每增加100公斤滚阻系数增加0.001估算。边界工况做完之后我建议顺手做一张参数灵敏度表把质量、Cd、滚阻系数、电机效率、回收系数、空调功率各自上下浮动10%记录续航变化百分比。这张表放报告里非常有说服力既是误差分析也是后续优化的指向。老师看到这张表基本不会再在精度上为难你。5. 关于定制扩展与个人实操体会5.1 这套模型能往哪些方向扩展做完基础的续航仿真如果你发现项目还有余量或者验收方提出要加点差异化内容下面几个扩展方向都比较常见而且不会破坏原有模型框架。第一个方向是加空调与热管理模块在附件负载里做温度分层模型根据环境温度计算制冷或制热功率然后把它耦合进电池温度更新里形成“温度-电量-里程”闭环。第二个方向是细化制动能量回收策略把回收力矩写成一个随制动强度变化的查表比固定回收系数更接近实车。第三个方向是把单工况仿真扩展成多工况加权比如城市工况40%、高速工况40%、山路工况20%加权算综合续航这种做法在整车预研阶段很实用。第四个方向是参数自动寻优拿模型包上Isight或optiSLang做DoE分析看哪些参数对续航最敏感不过毕设项目不太建议碰容易把精力带偏。我个人的看法是扩展一定要建立在基础模型完全正确的前提下别在一套没验证过的模型上盖楼。否则扩展越多错误越隐蔽最后排查成本远超收益。5.2 给新手的几条实操建议如果你是从零开始做这个课题我给三条建议。第一先复现后创新。拿到任何参考源码第一步不是改而是原封不动跑通把输出的续航数值记下来再对着参考报告的图表逐项核对。跑通了再说改参数、换工况、加模块的事。第二所有参数集中放在一个参数文件里不要在模型里东写一个数西写一个数。这样改车型数据时只需改文件报告里的参数表也直接从文件导出不容易漏。第三多画图把每层的功率曲线、能量累计曲线都导出来。答辩时老师问任何一个中间量你都能从图里找到对应曲线这种“掌控感”比背说明书有效得多。最后再分享一个小技巧交付前把整个仿真从头到尾重跑一遍从清空工作区到输出结果曲线全程录屏。这一步能暴露很多隐蔽问题比如某个参数依赖上一次运行的残留变量、某个脚本里用了硬编码路径等。录屏文件不用发给别人自己留档就行但这个过程能帮你避免在验收现场突然跑出个错误弹窗的尴尬。做这套仿真的最大体会是模型不需要多复杂但你要能解释每一个误差来源。把阻力算清楚、把能量路径走通、把参数依据写明白这个项目就立住了。剩下的事无非是按需扩展、按场景调参数而已。
返回列表