ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Carsim与Simulink联合仿真实现自动变速器档位控制策略详解

Carsim与Simulink联合仿真实现自动变速器档位控制策略详解 1. 这套联合仿真到底解决什么问题做车辆动力学控制的人多半都跟Carsim和Simulink打过交道。Carsim的车辆模型精度在业内是公认的轮胎、悬架、转向、制动这些子系统都做得非常细跑出来的车辆动态响应很贴近实车。但它的短板也很明显——控制策略部分并不是它的强项你想写一套自动换挡逻辑、或者做个驾驶员意图识别再决定档位在Carsim自带的界面里做会特别别扭。Simulink恰好补上了这块短板。它的控制逻辑搭建效率高能可视化调试还能无缝衔接后续的代码生成、硬件在环测试。所以Carsim Simulink联合仿真就成了车辆控制领域非常常见的组合我这些年做VCU控制策略、自动变速器换挡策略几乎每个项目都在用这套流程。那档位控制是什么场景简单说你有一个车辆模型它在跑特定工况比如加速、减速、爬坡你需要通过控制策略自动决定当前应该挂几挡然后把档位指令传给车辆模型。Carsim里本身有内置的换挡逻辑也能外接档位信号但我们做控制策略开发的人往往需要自己定义换挡规律——比如根据油门开度和车速查表换挡或者用状态机实现更复杂的换挡时序。这时候就必须把档位控制逻辑放到Simulink里做Carsim只负责提供车辆状态、接收档位指令。这篇文章我就把我实际搭建这套系统时的完整思路、关键细节、踩过的坑都写出来按从环境配置到策略实现的顺序展开。无论你是刚开始接触联合仿真的学生还是已经在做VCU策略开发的工程师这套流程都可以直接参考。2. 联合仿真环境搭建接口配置是第一个拦路虎2.1 Carsim版本与Simulink版本匹配很多人第一步就卡在版本兼容性上。Carsim和Simulink的版本匹配没有官方的一一对应表但实际经验是Carsim 2016到2019这几个版本搭配MATLAB R2017b到R2020a最稳。太新的MATLAB版本反而可能出问题因为Carsim的Simulink接口是基于较老的S-Function格式做的MATLAB更新后某些API调整可能导致编译报错。我自己的主力环境是Carsim 2019.1 MATLAB R2020b实测下来稳定。如果你用的是Carsim 8.x老版本配MATLAB R2016a反而更简单因为那时候的接口机制更单纯。总之建议在装环境前先查一下你那个Carsim版本对应的Matlab兼容性说明不要盲目追新。2.2 Carsim模型的Simulink导出步骤Carsim导出Simulink模型的流程是这样的首先在Carsim主界面里选好你要用的车辆模型和工况Procedure然后点击界面上的“Send to Simulink”按钮。这时候Carsim会把车辆模型封装成一个S-Function模块并自动生成一个Simulink模型文件通常是.mdl或.slx格式。关键点来了Carsim生成的这个模型里默认包含了很多输入输出端口。输入端口包括方向盘转角、制动主缸压力、发动机节气门、以及各个车轮的制动压力等输出端口更多包括车速、纵向加速度、发动机转速、各车轮转速、油门踏板位置等几十个信号。如果你只需要做档位控制没必要在模型里全部保留但初学时建议先保留默认配置跑通一次再根据需求精简。生成的模型文件里还会有一个Run控件一个绿色的按钮这个控件的作用是让Carsim的求解器跟Simulink的求解器进行时间同步。没有它仿真可能跑不起来或者结果不对。所以在联合仿真调试时不要把这个控件删掉。2.3 联合仿真的基本配置清单在Simulink里打开Carsim生成的模型后还需要做几项配置求解器类型选择固定步长Fixed-step推荐选ode4RK4步长根据你仿真的精度要求设我常用0.001秒也就是1kHz。仿真时间由Carsim里的Procedure设定决定但Simulink里的仿真停止时间要设一个够大的值或者设成和Carsim工况一致否则Simulink会提前停掉。模型里Carsim的S-Function模块可能需要指定工作目录这个目录里要有Carsim的运行文件通常是simfile.sim路径不能有中文否则Carsim运行时找不到文件会报错。说到路径这是个非常容易踩的坑。Carsim本身对路径要求就比较苛刻只要路径里有中文或者特殊字符S-Function编译或者运行经常报错。所以建议把整个工程放在一个纯英文路径下比如D:\Projects\GearControl\别放在桌面上或者带中文的文件夹里。3. 档位信号的读取与写入联合仿真的数据通路3.1 Carsim输出信号里跟档位相关的都是什么做档位控制你首先得知道Carsim能给你什么信号。Carsim的车辆模型输出端口里跟传动系统相关的信号主要有这几种发动机转速Engine RPM通常单位是rpm变速器输出轴转速Transmission output shaft speed单位也是rpm当前档位Current gear这个信号有意思Carsim内部有变速器模型所以它会计算当前的档位变矩器状态相关信号如果是AT车型会有变矩器锁止状态、涡轮转速等车速Vehicle speed单位km/h或者m/s都有这里要注意的是Carsim输出的档位信号是Carsim内部变速器模型根据它的内置换挡逻辑算出来的。如果你要做自己的换挡策略这个内置信号就不能直接用要么忽略它要么把它作为参考对比。3.2 档位指令怎么给进去Carsim接收档位指令的输入端口叫IMP_GEAR_N或者类似的名称具体名字取决于Carsim版本和车辆模型配置。这个输入信号是一个整数代表目标档位0代表空挡N1-6代表前进挡1挡到6挡-1代表倒挡R给这个端口接一个阶跃信号或者从你的控制逻辑里输出一个整数信号即可。但这里有个细节Carsim接收到的档位指令是“请求档位”它内部还有一个换挡执行的过程。也就是说你Simulink里给出目标档位1Carsim不会瞬间就变成1挡它会按照内部的换挡执行动力学来切换。这个过程对仿真精度来说是有意义的因为它模拟了液压执行机构的延迟和惯性。3.3 用Simulink的信号读取模块快速验证信号通路刚开始做联合仿真的新手经常会遇到“信号通路还没验证就开始写控制逻辑”的错误结果仿真跑出来数据不对搞不清楚是控制逻辑的问题、还是信号没接对的问题。我建议的第一步永远是先搭一个最小系统验证信号通路。具体做法是在Simulink里添加一个Scope把Carsim输出的发动机转速、车速、当前档位这几个信号接进去然后跑一个简单的加速工况看看信号变化是否符合物理规律。同时给档位输入端口接一个Constant模块比如设成3看看车速响应是否按3挡的特性来。如果这一步验证通过说明联合仿真接口是通的后面可以放心写控制逻辑。还可以利用Simulink里的Bus Selector或者Data Store Memory来更灵活地读取信号。Carsim输出通常是以一个Bus的形式打包的用Bus Selector可以很方便地从中挑选你需要的信号比直接连一根线过去要干净得多。4. 档位控制策略设计与Simulink模型实现4.1 换挡规律的确定双参数换挡是主流自动变速器的换挡策略在量产车上会综合考虑油门、车速、坡度、载荷、驾驶模式等很多因素。但在做控制策略开发初版时最经典、也最容易被验证的是双参数换挡规律——即以油门开度和车速为输入确定换挡点。这个规律的核心思想是车速低的时候用低挡位保证驱动力车速高了升挡让发动机转速保持在经济区间。当油门开度大时换挡点往高车速方向移动也就是“延迟升挡”让发动机多在动力区间工作油门开度小时换挡点提前偏向经济性。双参数换挡通常用一张二维查表Lookup Table来存储。横轴是车速纵轴是油门开度表格里存的是升挡车速或者降挡车速。注意升挡和降挡一般是两张表因为换挡过程需要避免频繁换挡——升挡点比降挡点车速略高形成迟滞区。4.2 基于Stateflow的换挡状态机实现换挡逻辑用Stateflow来做是最直观的因为它天然适合描述状态之间的切换条件。一个基本的自动变速器换挡状态机长这样把每个档位设为一个状态1挡、2挡、3挡、4挡…状态之间的迁移条件是升挡条件和降挡条件的组合。这里要注意的是迁移条件里通常要写“上一状态保持时间”之类的约束避免瞬态抖动导致频繁换挡。Stateflow里可以用after(n, tick)或者temporalCount来实现在某个状态停留一定时间后才允许切换。我自己常用的做法是在Stateflow的迁移条件里同时判断当前档位、目标档位、车速、油门开度再加上一个最小换挡间隔的计时判断。这样能有效避免在换挡临界点附近来回切换的“换挡循环”问题。4.3 基于查表和逻辑判断的替代方案如果你对Stateflow不熟悉也可以用纯Simulink模块搭建换挡逻辑用Lookup Table查出升挡车速和降挡车速然后用比较器和RS触发器或Memory模块实现状态保持。虽然代码没有Stateflow那么清晰但胜在简单直接也方便别人查看逻辑。具体做法是用Lookup Table1根据当前油门开度查升挡车速阈值用Lookup Table2查降挡车速阈值车速大于升挡阈值就请求升挡小于降挡阈值就请求降挡把升挡请求、降挡请求、当前档位一起送到一个判断模块计算目标档位还有一点经验换挡逻辑中最好加一个档位变化率限制器也就是说不能让档位在1、2、3之间瞬间跳变。实际车辆里换挡是有顺序的你不可能从1挡直接跳到6挡所以目标档位应该限制为只能在当前档位±1的范围内变化。5. 完整实操案例加速工况下的自动换挡控制5.1 工况设置与仿真参数为了让整套控制逻辑跑起来有意义我搭了一个很基础的验证工况车辆从静止开始油门踏板以固定速率踩到底模拟全油门加速跑20秒。车辆模型用Carsim里自带的B级掀背车Hatchback搭载6速自动变速器。Carsim里的Procedure设置要点起始车速设为0 km/h油门控制方式选“Constant accelerator pedal input”或者用驾驶员模型里带油门斜坡变化的工况制动踏板始终为0路面用平整的柏油路坡度0%仿真时长20秒输出频率设高一点比如100Hz方便后期看曲线细节5.2 Simulink模型结构搭建Simulink模型我按模块化方式搭方便以后复用输入处理模块用Bus Selector把车速、发动机转速、油门开度、当前档位从Carsim输出Bus里挑出来控制逻辑模块核心换挡策略输出目标档位请求档位处理模块把目标档位请求做限幅、变化率限制后转换为Carsim需要的档位输入信号数据记录模块把关键信号存到工作空间方便后处理分析5.3 关键参数的确定过程换挡点的确定是控制策略的核心。我用的双参数换挡规律里升挡车速随油门开度变化的表参考值大致是这样油门开度20%1-2挡升挡点15km/h2-3挡升挡点30km/h3-4挡升挡点45km/h4-5挡升挡点60km/h5-6挡升挡点75km/h 油门开度50%各升挡点相应提高例如1-2挡升挡点25km/h2-3挡升挡点45km/h 油门开度100%1-2挡升挡点45km/h2-3挡升挡点80km/h以此类推降挡点则比升挡点低8-10km/h形成换挡迟滞。这个迟滞非常重要没有它车辆在加速后匀速行驶时由于车速在升挡点附近波动会导致档位反复切换驾驶体验极差也不符合实际车辆行为。确定这些参数时我一般先用经验值跑一次仿真看发动机转速在换挡后是否落在一个合理的区间通常在2000-4000rpm如果换挡后转速掉得太多说明换挡点太早动力衔接不上如果转速拉得太高才换挡说明换挡点太晚经济性差。通过几轮迭代把换挡点调到一个比较合理的水平。5.4 仿真结果分析与换挡品质评价跑完仿真后看几个关键曲线就能判断控制策略是否合理车速曲线应该平滑上升没有明显的掉速或突变档位曲线从1挡逐渐升到6挡每个档位停留时间合理没有来回跳挡发动机转速曲线换挡瞬间转速会有一个下降升挡时但下降后应该落在下一挡对应的转速附近如果转速掉太多或者冲击大说明换挡点或者执行机构参数不合适纵向加速度曲线换挡过程中加速度会有短暂跌落这是正常的但跌落幅度不应该太大否则说明换挡品质差我把这套参数跑出来的结果做成了对比全油门加速时0-100km/h加速时间用Carsim内置换挡逻辑跑大约是9.8秒用我自己定的双参数换挡策略跑是9.6秒左右差别不大这说明参数标定在合理范围内。但用我自己策略的优势在于换挡规律可以根据需要灵活调整比如在30%油门和80%油门下的换挡行为完全不同这是内置逻辑做不到的。6. 常见问题与排查技巧实录6.1 Carsim模型跑不起来或者报错这个是出现频率最高的问题。报错原因千奇百怪但九成以上是下面几个原因路径问题整个工程路径有中文或者空格把工程剪切到纯英文路径下基本能解决工作目录问题Carsim的S-Function模块需要指定工作目录目录里必须有simfile.sim和对应的数据库文件检查一下Carsim生成的模型里的参数配置MATLAB版本太新导致编译错误这个只能换版本或者在Carsim官网查一下兼容性说明有些新版本支持有限的几个MATLAB版本6.2 档位指令不生效有时候你把档位输入端口接上了Constant模块设为3挡但跑出来车速响应还是按1挡起步的。这时候大概率是输入信号名称不对。Carsim的输入端口名称随着车辆模型配置不同会有差异你可以在Carsim界面的“Input”选项卡里看到当前模型的全部输入端口名称。确保Simulink里连的端口名称和Carsim里的完全一致。另一个可能是你只接了档位信号但发动机节气门信号没有正确接上。档位控制的前提是动力系统在其他方面正常工作比如发动机转速要能跟随油门变化。如果发动机信号没接通车辆就会因为动力不足而表现异常。6.3 换挡循环/频繁换挡我前面提到过用升挡点和降挡点之间的迟滞来避免换挡循环但有时候迟滞设置了还是会有原因可能是车速和油门信号本身有抖动导致查表结果在阈值附近来回跳。这时候可以在控制策略前加一个低通滤波器或者对车速信号做平滑处理换挡逻辑里没加时间约束只要条件满足就切换。加一个换挡间隔限制比如2秒内最多换一次挡能显著改善Carsim内部变速器模型本身的执行延迟导致实际档位和目标档位之间出现偏差进而影响后续判断。处理办法是在换挡逻辑里以“实际档位”为状态基准不要用“目标档位”作为下一时刻判断的基准6.4 如何验证你的档位控制是有效的验证控制策略有效性的方式有很多我常用的一个是做对比仿真在同一个工况下先跑一遍不用任何档位控制用Carsim内置逻辑再跑一遍用你的Simulink控制逻辑。对比两个工况下的加速时间、燃油经济性指标如果有油耗模型、换挡次数、发动机工作点分布等。如果你的控制策略表现不差于内置逻辑起码说明基础策略是合理的。还有一个更高阶的验证方法做一个阶跃工况比如车速稳定在60km/h时突然把油门踩到底看你的控制逻辑是否会触发降挡典型的kick-down策略以及降挡后车辆加速是否正常。这个验证能检查出你的降挡逻辑是否覆盖了所有场景。7. 进阶扩展方向与个人体会做完最基本的档位控制整个框架就已经搭起来了。后续要扩展方向非常多我列出几个我实际做过的方向供参考多挡位和CVT的差异化控制Carsim除了支持有级自动变速器也支持CVT模型可以在同一套框架下实现无级变速的速比控制坡度识别与换挡修正在换挡逻辑里增加坡度信号上坡时延迟升挡、提前降挡防止动力不足驾驶员意图识别通过油门踏板变化率、制动踏板状态判断驾驶员意图动态调整换挡策略与VCU整车控制策略集成把档位控制作为VCU策略的一个子模块和其他模块扭矩分配、能量管理共同工作我个人在做了这么多联合仿真和策略开发之后最大的体会是工具本身并不难难的是对车辆动力学的理解和对控制逻辑的严谨性要求。档位控制看起来是个小模块但它涉及变速器执行机构特性、发动机动态响应、整车平顺性等多个层面的知识。把仿真结果跟实车数据对照着看你会学到比单纯调参多得多的东西。最后分享一个小技巧在Simulink模型里给你的换挡逻辑模块加一个手动/自动切换开关。调试时用强制档位手动模式验证控制逻辑时切回自动模式。这个开关能让你在排查问题时快速定位是策略问题还是执行问题省下大量调试时间。
返回列表