24d混动控制器,双电机两挡DHT混合动力汽车仿真模型,基于规则的能量管理策略模型demo,可以实现发动机启停换挡模拟 模型说明:模型仅用于个人学习使用,并不是实车工程模型,但也足够详细,不是别人那种盗版模型或者参数不全的模型,模型可以输入WLTC, CLTC等不同工况,可以实现稳态能量管理,电池SOC平衡,也可设置范围。 可实现发动机启停和换挡过程的简单模拟,用PID调速,可以自己改成其他算法。 模型采用Simulink/Stateflow搭建,模型只适用于这个双电机两挡P2+P3电机的混联式混合动力模型,在设置合适参数时能完美运行,考虑到不同车型需求,请根据自己的需要变跟模型参数或结构 提供基本的使用说明。 模型是纯simulink搭建,修改自由度高,可以接各种能量管理策略需求,包括ECMS,模型预测,极小值,动态规划等。

我最近折腾的这个双电机两挡DHT混动模型挺有意思的。模型用Simulink搭得特别干净,模块命名一看就是老司机的手笔。P2电机负责发电和驱动,P3电机直连驱动轴,两挡变速箱的换挡逻辑藏在Stateflow里,把油门开度和车速作为触发条件。咱们直接看段核心的状态迁移代码:

state GearShift
    when(speed>60 && throttle<0.3) from Gear1 to Gear2
    when(speed<50 || throttle>0.7) from Gear2 to Gear1
end

这状态机看着简单粗暴,实际调试时得注意换挡过程中的扭矩协调。模型自带的PID调速模块在EngineStart子系统中,这里有个特别实用的设计——发动机启动时会给ISG电机发扭矩补偿信号:

if (Engine_Start_Flag)
    ISG_Torque = PID(Delta_Speed) + 15*randn; //加了个噪声模拟真实扰动
    Fuel_Inject = lookup_table(Engine_Speed);
endif

噪声注入这个细节对学习控制策略挺有帮助,毕竟真实场景哪有那么理想。想换控制算法的话,直接把PID模块替换成自己的算法就行,模型里的信号接口都是标准化的。

电池SOC平衡策略藏在EnergyManagement模块里,默认规则策略的逻辑大概是这样:

if SOC < 0.3
    Engine_On = 1;
    Charge_Mode = 1;
elif Vehicle_Speed > 80
    Engine_On = 1;
else
    Engine_On = (Motor_Power > 25); //25kW阈值
endif

这个门限值参数在脚本文件Parameters.m里集中配置,改起来很方便。有次我把充电阈值从0.3改成0.25,结果发动机频繁启停,这时候就得去查扭矩分配逻辑是不是没配合好。

24d混动控制器,双电机两挡DHT混合动力汽车仿真模型,基于规则的能量管理策略模型demo,可以实现发动机启停换挡模拟 模型说明:模型仅用于个人学习使用,并不是实车工程模型,但也足够详细,不是别人那种盗版模型或者参数不全的模型,模型可以输入WLTC, CLTC等不同工况,可以实现稳态能量管理,电池SOC平衡,也可设置范围。 可实现发动机启停和换挡过程的简单模拟,用PID调速,可以自己改成其他算法。 模型采用Simulink/Stateflow搭建,模型只适用于这个双电机两挡P2+P3电机的混联式混合动力模型,在设置合适参数时能完美运行,考虑到不同车型需求,请根据自己的需要变跟模型参数或结构 提供基本的使用说明。 模型是纯simulink搭建,修改自由度高,可以接各种能量管理策略需求,包括ECMS,模型预测,极小值,动态规划等。

模型支持WLTC工况这事特别实用,加载工况数据记得勾选‘Interpolate’选项。有次仿真报错发现是工况文件的时间步长不匹配,用这个函数处理下就搞定:

resampled_cycle = resample(raw_data, 0.1); //重采样到0.1秒间隔

想接入自己的能量管理策略时,重点注意这几个信号接口:BatterySOC、DriverDemand、VehicleSpeed。最近在试ECMS策略,直接把策略生成器输出接到TorqueDistribution模块就行,记得关掉原来的规则策略使能开关。

模型的发动机模型虽然没精确到缸内压力,但万有特性曲线做得很细。有个小技巧:在Engine_Map.mat里替换自己的油耗MAP时,注意转速和扭矩的边界点要和原模型定义的范围一致,不然插值会出问题。

换挡过程的离合器控制逻辑在Transmission子模块里,这段代码建议重点研究:

during Gear1_to_Gear2:
    Offgoing_Clutch = linspace(1,0,0.2); //0.2秒脱开
    Oncoming_Clutch = linspace(0,1,0.3); //0.3秒结合
    Torque_Phase = (time_in_state > 0.1); //扭矩阶段标志

仿真时把这个过程拉长到1秒,能明显看到转速波动,这时候PID参数就得重新整定了。总的来说这模型当学习平台足够用了,想深入的话每个子模块都能拆开魔改,比那些黑盒模型强太多。

Logo

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

更多推荐