纯电动汽车建模(EvReferenceApplication)探究与说明

最近参与了一个动力电池健康状态估计的项目,由于实验前期需要对电动汽车行驶过程中电池充放电情况进行建模仿真,团队最终决定使用matlab中的现有模型加以魔改,优点是有现成的方案作为参考,不用从头开始对整车模型建模,对于我们不了解也不关心的参数,可以直接采用模型中的默认值,免去了许多不必要的工作量,但仍无法避免需要对模型的整体架构、子模块用途以及参数有足够的了解。以下即为本团队对于该模型的探究与说明。
模型为MathWorks® Simulink示例模型,使用版本为matlab2021b。该模型基于Powertrain Blockset、Simscape搭建。官网地址https://ww2.mathworks.cn/help/autoblks/ug/electric-vehicle-reference-application.html。
模型的总体概述如下:
本模型是纯电动汽车纵向动力学模型,即不包含转向信息;车体部分采用三自由度纵向动力学模型,单电机且无专门的动态相应模块。
通过输入预先规定的工况数据(Drive Cycle),驾驶员模型(Longitudinal Driver)将其转换为油门、刹车踏板信息,送入整车控制器(Controllers)转换为电机扭矩需求、电池充放电情况等,结合车辆物理结构建模(Passenger Car)最终输出为所需的电机、电池行驶仿真数据,从而评估车辆的能量利用效率、结构合理性等。
以下为各个部分的简单说明介绍。
一、 驾驶工况(驾驶循环资源Drive Cycle Source)
即车速与时间的对应关系,一般可以直接采用标准工况数据或MathWorks提供的公开数据,如电动汽车的标准续航里程测试NEDC(新欧洲驾驶周期)、CLTC(中国轻型汽车行驶工况)等。
“NEDC测试分别由城市驾驶工况和市郊驾驶工况所组成,单次测试时长为1180秒,包括4个市区循环(780秒)和1个市郊循环(400秒)。其中测试的市区循环最大车速50km/h、平均车速19km/h;市郊循环最大车速120km/h,平均车速62km/h。但该测试标准年代比较久远,为测试出更贴近用户实际的可续航里程,考虑到细节工况,我国工信部下达制定新的工况续航标准的需求,2019年10月25日,专门为中国国情研发的《中国汽车行驶工况》正式发布,这一工况标准简称CATC,而CLTC是其中的一部分。基于国内41座城市、3832辆车型样本,累计实验里程3278万公里,以及20亿条GIS交通低频大数据,得出的更加贴合国内道路法规及驾驶习惯的标准工况。
CLTC测试里程为14.48km,包括低速、中速和高速3种工况,分别对应消费者日常驾车时的城市、郊区和高速路段的工况。CLTC测试时长1800秒,其中低速工况674秒、中速工况693秒、高速工况433秒。速度上高速工况最高时速为114km/h,平均车度28.96km/h。
CLTC的频繁加减速,符合国内实际走走停停的情况。而更加频繁加减速的工况,对于具有动能回收且效率更高的电动汽车来说,非常有利于提升续航。对于纯电动汽车而言,采用CLTC后,将比NEDC的续航里程更高。”

驾驶循环资源数据也可以自定义导入,格式可以为.mat,.xls,.xlsx,.txt。
二、 驾驶员模型(Longitudinal Driver)
驾驶员模型可以根据反馈的实际车速信息跟随目标车速(即工况中的实时车速信息),给出刹车/油门信号,可采用不同控制类型。
本模型中包含了两个可选的驾驶员模型,分别为开环模型和闭环模型,默认使用闭环模型。
“控制类型选择:Control type, cntrlType:Predictive/Scheduled PI/PI。默认为Predictive”
开环模型可以自定义油门踏板、制动踏板信息。
三、 整车控制器(Controllers)
包含两个核心模块:Powertrain Control Module (PCM)、Battery Management System (BMS),即动力总程模块以及电池管理系统模块。动力总程模块即电机控制器及各算法模块,如将输入信号如踏板信息转化为电机扭矩需求、电池充放电管理、能量回收管理等。
Powertrain Control Module (PCM)
PCM包括:将油门信号转化为扭矩需求模块(Accel Pedal to Traction Wheel Torque Request)、制动踏板转成制动扭矩模块(Brake Pedal to Total Braking Pressure Request)、能量管理模块(Series Regen Braking)、电池充放电管理模块(Motor Torque Arbitration and Power Management)等。
油门信号转化为扭矩需求模块:将所有电机最大扭矩(查表MaxMotTrqVsSpd)乘以加速踏板数值(百分比数值)。
制动踏板转成制动扭矩模块:将最大制动扭矩乘踏板数值。
能量管理模块:能量回收、电池充放电功率/电流限制以保证实际扭矩需求最大值。
具体解释为:制动扭矩BrkPrsReq与电机提供最大扭矩MotSpd作比较(min)。超出部分由制动盘BrkCmd提供扭矩,未超出部分传递给电机MotTrqCmdRegen用于发电。
电池充放电管理模块:电机输出功率Mech to Elec Power Estimate,电池充放电功率限制BattPwrDischrgLmt,如果不满足上下限,根据上下限反算电机提供的最大扭矩MotSpd;Torque Limit根据电机外特性曲线MaxMotTrqVsSpd决定当前电机转速下能提供的最大扭矩。
*该模块使用reference model,使相对独立;由于控制器模型需要生成代码写入电动汽车eco中,故需要使用定步长fixed-step;
Battery Management System (BMS)
BMS是电池管理系统的一部分,主要用于监控、保护、限制和报告电池包的测量结果。保护及限制部分并非我们研究的重点,如有需要可以参考这个视频https://www.bilibili.com/video/BV1aB4y1w7nj。
State_Machine子模块定义了BMS的主要运行状态,使用stateflow工具箱创建。
SOC_Estimation子模块主要用于精准估算电池的SOC,是我们研究的重点。需要特别说明的是,除此之外在车辆物理模型(Passenger Car)中的电池包模型(Lithium Ion Battery Pack)同样具备计算SOC的功能,但并未被使用,故如果需要调整模型SOC相关参数,需要在BMS模块中修改。你可以在后面的参数说明部分看到我们团队在处理该问题时的方案。模块中包含三种不同的计算方法用于计算电池SOC,分别为:库仑计数、无迹和拓展卡尔曼滤波器,可以根据需要自行选择。
Balancing_Logic子模块主要用于平衡电池包中各电池的充放电状态,否则具有最高/最低SOC的电芯将限制可充入/放出电池组的电荷量,从而导致系统利用率不足。
四、 车辆模型(Passenger Car)
车辆物理模型,包括Electric Plant以及Drivetrain。
Electric Plant中的电池模块Lithium Ion Battery Pack,即根据查表法建立的简单电池包模型,根据厂商提供的不同温度放电曲线(ocv-soc曲线、电池内阻曲线),对电流对时间积分得出soc状态(没有被使用);恒流放电,不考虑动态响应(阻抗 伴随 电荷转移/扩散 快速/慢速相应混合)。
Electric Plant中的电机模块Motor由数据驱动的map图模型MotGenEvMapped基于电机外特性扭矩功率查表曲线,数据来自稳定工况,没有体现动态相应(震荡);更精确的模型MotGenEvDynamic对电池电机容量选型整车能量分配进行测验开发,基于物理原理(详细解释);扭矩输入MotTrqCmd转速输入MotSpd,扭矩输出MotTrq。
Drivetrain即机械模块,电机扭矩输出依次连接到旋转轴,转动惯量阻尼模块,再传到主减速器Differential and Compliance,可改前、后、全轮驱动模式,主减速器模块Differential使用blockset中自带的主减速器(参数需要设计);车轮和刹车部分Wheels and Brakes;车体部分Vehicle纵向动力学车体模型Vehicle Body 3 DOF Longitudinal。
参数修改说明:
由于团队后续实验要求输出步长固定且尽可能大的仿真数据,故需要将模型由原本的变步长求解改为定步长求解,并根据需要修改部分关键参数,可供参考。
首先需要修改模型电池包参数,在EvReferenceApplication/Passenger Car/Electric Plant/Powertrain Blockset/Battery (BattEv)/ Lithium Ion Battery Pack中修改电池单元的额定容量、并联串联电池单元数。其中BattChargeMax即为电池单元额定容量,而BattCapInit则为仿真开始时的初始电池单元容量,但令人费解的是,修改这两个参数并不能改变电池的初始SOC,若需要修改,需要在BMS中调整BattSocInit参数。另外串联电池单元数Ns同样不能简单的在此处更改,需要同时修改BMS以及模型其他位置的参数。Em、 RInt即为ocv-soc曲线和电池内阻曲线,需要修改为自己电池对应的数据以便求解过程中查表模拟,否则仿真出的结果将无效。BMS中对应需要调整的参数包括Np_Module、Ns_Module、NumModules,另外本模型仿真过程中温度恒定,如需修改,则需要调整BattTempInit及环境(Environment)中的参数。需要说明的是,这些参数主要影响仿真结果中的电池SOC情况,对电机输出功率(即电池充放电功率)几乎不造成影响。
我们采用的工况数据为CLTC-P标准工况,修改时注意单位km/h或m/s。
为实现定步长求解,需要对模型及各子模块进行调整,具体解决方案如下:
直接将模型求解器修改为定步长,编译出错,报错原因可能为子模型不是定步长。尝试将子模型修改为定步长。
EvReferenceApplication/Passenger Car/Drivetrain (DrivetrainEv)单独设置为定步长。EV36 – 副本\VDD\Plant\DrivetrainEv.slx
EvReferenceApplication/Passenger Car/Electric Plant/Powertrain Blockset/Battery (BattEv) 单独设置为定步长。EV36 – 副本\EV\Plant\BattEv.slx
EvReferenceApplication/Passenger Car/Electric Plant/Powertrain Blockset/Motor/MotGenEvMapped (MotGenEvMapped) 单独设置为定步长。EV36 – 副本\EV\Plant\ MotGenEvMapped.slx
编译出错,报错原因为步长设定值无效,不是子模型设定步长的整倍数。减小步长。
编译出错,报错原因可能为子模型未勾选“将每个离散速率视为单独任务”。尝试勾选。
EvReferenceApplication/Controllers/Powertrain Control Module (PCM)/Battery Management System (BMS) (BMS_Software)勾选 将每个离散速率视为单独任务。
EvReferenceApplication/Controllers/Powertrain Control Module (PCM)/Battery Management System (BMS) (BMS_Software)/BMS_Out (BMS_Out) 勾选 将每个离散速率视为单独任务。
编译通过。
运行出错,报错原因为轮胎及刹车模型中内部积分器Integrator在某时刻输入值不是一个有限值(at time 0.1 is not finite)。出现此问题说明该步长下,模型已出现不稳定的情况(即模型震荡发散,步长过大导致模型趋于离散,在高增益的子系统部分模型不稳定),尝试减小步长。
运行通过。
继续降低步长至0.001,需要同步修改以下子模型的步长。
EvReferenceApplication/Passenger Car/Electric Plant/Powertrain Blockset/Motor/MotGenEvMapped
EvReferenceApplication/Passenger Car/Electric Plant/Powertrain Blockset/Battery
EvReferenceApplication/Controllers/Powertrain Control Module (PCM)
修改以上子模型,运行通过。
另外,若将步长调整为大于等于0.001s,需要使用隐式求解器,且逐渐降低外插阶数以避免模型发散问题。若将步长调整为大于0.1s,需要额外调整BMS中的参数采样时间间隔,较为麻烦,且由于驾驶员模型中规定工况采样时间最低为0.5s,为保证不报错需要使模型总步长能将0.5整除,如0.1、0.125、0.25。
最后,为确保仿真结果精度,我们尝试以变步长得到的数据为基准,将电池充放电功率积分以得到电池能量变化曲线,对比后发现定步长求解时步长不大于0.05s求解精度较高,误差低于1%;0.1s时误差达到6.56%;0.125s时误差高达184.72%,已不可用。解决方案为对0.001s的仿真结果数据重采样,但该方法并不严谨,仅供参考。
由于B站专栏格式限制,部分内容或代码可能存在格式异常。原文内容请前往leosisland.top/article1