拓冰建站拓冰建站
首页 / 资讯中心 / 正文

二分之一车辆半车模型Simulink仿真:从动力学方程到悬架平顺性分析

1. 为什么要做二分之一车辆悬架半车模型1.1 整车模型与半车模型的取舍先说结论做悬架控制或者底盘调校预研的时候二分之一车辆悬架半车模型是性价比极高的选择。所谓“二分之一”并不是把车从中间劈开扔掉一半而是把车辆简化成一个对称平面内的“半车”。我们一般选取车辆的纵向对称平面把左右两侧车轮合并只研究俯仰方向和垂直方向的运动。这样一来四轮整车就变成了一个拥有车身垂向位移、车身俯仰角、前轴垂向位移、后轴垂向位移四个自由度的系统。很多刚接触仿真的朋友会问为什么不直接建整车模型整车模型当然更“真实”但代价是自由度从4个涨到十几个参数标定工作量成倍增加Simulink模型里的连线也复杂得多。如果你现在只是想验证一个悬架控制算法的基本效果比如PID调节车身垂向加速度、抑止俯仰或者观察前后悬架刚度阻尼匹配对平顺性的影响整车模型带来的信息增量往往没那么大反而会掩盖关键机理。半车模型保留了俯仰这个最重要的自由度已经能够捕捉到汽车在制动、加速、单轮过坎时最典型的车身姿态变化这就足够回答一大批实际问题了。我自己的经验是从二分之一模型起步至少能省下三到五天的建模和调试时间。更重要的是半车模型的每一项参数都有直观的物理意义出问题时容易定位。等算法成熟了再往整车模型迁移心里也更有底。1.2 半车模型能回答哪些工程问题半车模型不是拿来摆样子的它能直接服务于几个最常见的工程场景。第一个场景是平顺性分析。我们可以给前轮或后轮单独输入一个凸块脉冲观察车身垂向加速度的峰值变化对比不同悬架阻尼系数下的衰减效果。第二个场景是俯仰动力学研究。汽车制动时因为载荷转移车头下沉车尾抬起半车模型能清晰地表现出这个俯仰过程从而评估悬架刚度匹配是否合理。第三个场景是路面随机输入下的响应分析。把左右轮合成一路路面不平度信号接入模型就能算出车身加速度功率谱密度用于评价舒适性。另外半车模型也是做主动悬架、半主动悬架控制算法仿真的常用被控对象。无论是天棚阻尼控制、LQR还是PID先拿半车模型验证控制逻辑再换到更精细的模型这是一个非常成熟的研发路径。所以这篇文章里我写的每一个步骤都是围绕“如何用Simulink把这个半车模型搭起来、跑通、用起来”展开的。2. 建模前的物理数学准备2.1 半车模型的自由度与坐标定义动手在Simulink里画框图之前一定要先把物理模型定义清楚。我这里采用的半车模型实际上是经典的“四自由度半车模型”它由车身和前后两个非簧载质量组成。先定义坐标系以车身质心为原点x轴向前z轴向上。车身有两个运动量一个是质心处的垂向位移 zb单位米向下为正还是向上为正需要统一。我建议遵循ISO 8855取向上为正但Simulink积分器的默认方向无所谓关键是重力项和位移方向的符号要一致。另一个是车身俯仰角 θ绕y轴旋转车头上仰为正。前后轴的垂向位移分别记作 zt1、zt2代表前轴和后轴非簧载质量的绝对垂向位移。四个自由度的含义要反复嚙叨清楚zb、θ描述车身zt1、zt2描述两个车轴。前悬架和后悬架的簧载质量分配通过车身质心到前后轴的距离 a、b 来体现。质心到前轴距离为 a到后轴距离为 b轴距 Lab。当车身有垂向位移和俯仰角时前轴上方车身位置的垂向位移为 zb aθ注意符号后轴上方为 zb - bθ。这个几何关系是整个模型的核心很多新手在这里把符号搞错导致前后悬架的运动耦合完全反了。2.2 运动微分方程推导接下来就是写运动微分方程。这一步看起来像在做理论力学的作业但它决定了Simulink里积分器怎么连。车身垂向运动方程mb * (d²zb/dt²) F_front F_rear其中 F_front 是前悬架传递给车身的力F_rear 是后悬架传递给车身的力。这里不考虑重力因为建模时通常把重力引起的静挠度归入平衡位置研究的是动态偏移量。如果非要考虑重力需要在方程里加上 mb*g 的常值项并且初始状态要设置到静平衡位置否则模型一启动就会往下掉。车身俯仰运动方程Ib * (d²θ/dt²) a * F_front - b * F_rear注意这里取矩的方向。前悬架力作用在质心前方产生使车头上仰的力矩符号为正后悬架力作用在质心后方产生使车头下俯的力矩符号为负。而对于前后非簧载质量方程分别为m1 * (d²zt1/dt²) -F_front Ftire_frontm2 * (d²zt2/dt²) -F_rear Ftire_rear其中 Ftire_front、Ftire_rear 分别是轮胎与地面之间的作用力。悬架力 F_front 的表达式为F_front ks1 * (zs1 - zt1) cs1 * (dsdt_zs1 - dsdt_zt1)这里的 zs1 是前轴上方车身位置的位移等于 zb a*θdsdt_zs1 是对应的垂向速度。ks1 是前悬架刚度cs1 是前悬架阻尼系数。注意悬架力方向当车身相对车轴向上运动时悬架被压缩力向下作用在车身上所以在车身方程里用的是正号在车轮方程里悬架力向上作用在车轴上用负号。轮胎力Ftire_front kt1 * (zr1 - zt1)其中 zr1 是前轮路面输入位移。轮胎阻尼通常忽略或者加一个很小的阻尼系数。整套方程写成状态空间形式就可以直接在Simulink里搭积分器了。我的建议是先把这些方程写在纸上或者写在模型说明文档里明确各个符号的含义再开始建模。因为Simulink模型本身只是方程的可视化方程错了模型再漂亮也没有意义。2.3 参数选择与实车数据参考有了方程还缺一套合理的参数。很多人建模时随便填几个数结果仿真曲线离谱得一塌糊涂。参数必须来自实际车辆或参考论文。我常用的一组半车模型参数如下单位已统一参数符号数值单位车身质量mb1380kg车身绕y轴转动惯量Ib2440kg·m²前轴非簧载质量m140kg后轴非簧载质量m245kg前悬架刚度ks122000N/m后悬架刚度ks223000N/m前悬架阻尼cs11500N·s/m后悬架阻尼cs21600N·s/m前轮胎刚度kt1180000N/m后轮胎刚度kt2180000N/m质心到前轴距离a1.25m质心到后轴距离b1.45m这些参数取的是普通中级轿车的量级满足轴距 L2.7米左右。请注意这里的阻尼系数并不是实际减振器的非线性阻尼而是线性化后的等效值。实际减振器的阻尼在压缩和拉伸行程往往不同而且阻尼力与速度的关系也不是严格线性的。如果你只想做线性控制系统设计这个等效线性阻尼完全够用如果要做精确的平顺性预测那得换成非线性阻尼的查找表模型。另外提醒一句参数的单位换算永远是第一位的。工程上经常遇到的是 kN/m你直接填进去就可能差了一千倍。我踩过最深的坑就是轮胎刚度从文档里抄了一个数值没注意单位结果前轮悬架几乎被顶飞车身直接上天。3. Simulink模型搭建实操3.1 模型顶层架构设计Simulink模型不是把元件随便拖进去就完事顶层架构一定要清晰。我的习惯是分成三层输入层、被控对象层、输出观测层。输入层负责产生路面激励信号。可以是阶跃、凸块、正弦扫频或者随机路面统一封装在一个子系统里输出两路信号zr1、zr2分别给前后轮。被控对象层是整个半车模型的动力学部分我建议用一个子系统封装四个自由度方程对外接口只有四路输入前后路面激励和若干输出状态量和中间量。输出观测层则把关心的信号引出来比如车身加速度、俯仰角、悬架动行程等送给Scope或者To Workspace。这样分层的最大好处是后续如果想加入控制器不需要改动模型核心只要在输入层和对象层之间插入一个控制器子系统即可。如果一开始把所有连线都堆在根层后面改结构会非常痛苦。顶层子系统里我还会用一个Bus Creator把位移、速度这些状态打包成一根总线再用Bus Selector在观测层取用。这样模型连线会清爽得多没有乱飞的线。初学者可能觉得总线麻烦但用了之后真的回不去。3.2 用积分器搭建状态空间方程Simulink建模的本质是把微分方程组转换成积分器网络。半车模型有四个二阶方程所以需要八个积分器对应八个状态变量zb、dzb/dt、θ、dθ/dt、zt1、dzt1/dt、zt2、dzt2/dt。我的搭建顺序是先放八个积分器并排两列第一列输出位移第二列输出速度。每列积分器自上而下对应车身垂向、俯仰、前轴、后轴。用速度积分得到位移用加速度积分得到速度。加速度从哪里来从运动方程右边算出来。比如车身垂向加速度 d²zb/dt²它的输入是 (F_front F_rear) / mb。那么我就在积分器前面放一个求和器把前悬架力和后悬架力加起来再乘上 1/mb。这里可以用 Gain 模块增益为 1/mb。同样俯仰加速度的输入是 (aF_front - bF_rear)/Ib。前轴位移 zt1 的积分器输入是 v1也就是 dzt1/dtv1 的积分器输入是 a1 (-F_front Ftire_front)/m1。这个结构非常规整子系统和子系统之间只是连线变化只要按这个模板来就不容易乱。这里有个细节前后悬架力里包含速度项速度项来自积分器的输出。也就是说模型是一个带有闭环反馈结构的系统。Simulink会自动处理这种积分反馈不会产生代数环因为所有回路都经过了积分器延迟为零但物理上可解。请放心使用。3.3 路面输入与激励设置路面激励直接决定了你仿真的是什么工况。最常见的四种激励方式第一种凸块脉冲。用一个Signal Builder模块或者自己拼一个时间序列让 zr1 在0.5秒时升高0.05米再回零模拟过减速带。这种激励用来观察瞬态响应最直观。第二种阶跃输入。让路面在某个时刻从0突变到0.1米模拟上马路牙子。阶跃对系统的低频特性考验很大可以从车身俯仰角响应看出悬架的偏频是否合理。第三种正弦扫频。用Chirp Signal模块让频率从0.5Hz扫到20Hz时间跨度30秒。扫频激励能很清楚地暴露系统的共振峰前后悬架的固有频率一目了然。第四种随机路面。这是最接近实车工况的激励。最简单的方法是用Band-Limited White Noise加一个积分滤波器来近似路面谱或者直接用Simulink里的Random Number模块但要注意白噪声的功率谱密度是平直的而真实路面谱随频率上升而下降所以最好通过一个 1/f 形状的滤波器。我个人最常用的还是脉冲和扫频。因为半车模型本身是线性的用扫频得到频响函数比随机路面下的统计指标更能看出悬架参数的优劣。在做控制算法时再用随机路面来验证实际效果。3.4 仿真参数设置与求解器选择模型搭好之后仿真参数设置经常被忽略却是出结果的关键。首先是求解器。除非你明确知道30步以上的定步长求解器不会发散否则我建议使用变步长求解器 ode45。半车模型是光滑的线性系统ode45用默认误差容差就能跑得又快又准。如果你加了摩擦、限位这些非线性环节那就换 ode15s 或者把误差容差调小防止积分器漏掉突变。仿真时长根据工况设定。脉冲激励3秒足够看到完整的衰减过程扫频激励至少要30秒随机路面可以跑10秒到60秒取决于你需要的频率分辨率。最大步长不要不设建议设置成0.001秒或者更小。原因很简单路面激励如果是阶跃或脉冲信号突变很陡如果最大步长太大积分器可能“跳过”脉冲峰值导致响应幅值严重失真。还有一点状态初始值。很多模型跑出来图不对是因为积分器的初始条件没有设为稳态。半车模型的静平衡状态是位移都为0、速度都为0。如果你加了重力项初始位移就得设置为重力造成的静挠度否则模型一开始会有瞬态调整看起来像出了故障。我习惯不加重力直接把初始全部设为0这样动态响应曲线的零线就是平衡位置。4. 仿真结果分析与评价指标4.1 车身加速度、悬架动行程与轮胎动载荷仿真跑完Scope里哗啦出来一堆波形怎么解读三个指标必须看车身垂向加速度、悬架动行程、轮胎动载荷。车身垂向加速度是评价平顺性的核心指标。国标和ISO里常用加权加速度均方根值来评价舒适性但半车模型里我们直接看时域曲线的峰值和衰减情况。比如给前轮一个0.05米凸块车身加速度峰值如果超过 2 m/s²正常人就能明显感觉到冲击如果能压到 1 m/s² 以下体感会好很多。你可以改阻尼系数观察峰值怎么变。阻尼加大峰值通常下降但高频振动会变敏感所以不能一味加大。悬架动行程定义为车身相对车轮的位移即 zsj - ztjj1,2。这个指标直接反映悬架有没有“打到底”的风险。动行程超过悬架设计限位就说明减振器或缓冲块要撞击限位块了。SIMULINK里直接用减法模块就能得到这个信号。做主动悬架控制时悬架动行程往往是被约束的硬指标控制力再大也不能让悬架超出机械行程。轮胎动载荷等于轮胎力 Ftire kt*(zr - zt)。如果轮胎动载荷小于零意味着轮胎与地面脱离接触车辆失去附着力。这在仿真里表现为轮胎力方向反转实际里就是车轮离地了。做操纵稳定性相关分析时这个指标必须监控但半车模型主要关注垂向所以更多用动载荷的波动幅值来评价抓地力的一致性。4.2 频域响应分析时域波形只是第一步更多信息藏在频域里。用Simulink里的“Linear Analysis”工具或者把仿真数据导入MATLAB用 tfestimate 计算频响函数都可以。半车模型的频域特征通常有两个共振峰。高频那个峰来自非簧载质量的振动频率一般在10-15Hz这是轮胎和悬架共同形成的“车轮共振”。低频那个峰来自车身频率在1-2Hz左右对应车身浮沉模态和俯仰模态。车身模态的峰越高越尖锐说明悬架偏频接近共振舒适性差阻尼足够大的话这个峰会被压低拉平。我经常做的一件事是画“车身加速度对路面输入”的传递函数幅值曲线。在1-4Hz这个人体最敏感的频段幅值越低越好。通过这条曲线你能非常直观地看到参数变化带来的频带控制效果。比如增加车身质量整个共振峰向左移动但不改变峰值增加阻尼共振峰下降但在高频区域幅值略微上升。这个现象用语言描述很绕但图上一出来就秒懂。频域分析的另一个用途是验证模型。如果你手动计算过模型的固有频率仿真频响曲线的峰值频率应该与之吻合。如果不吻合那一定是参数或方程有错。这算是一个自检方法。4.3 不同参数对舒适性的影响半车模型最有魅力的地方就是你能自由地扭参数看效果。我建议做三组对照实验第一组只改变前悬架刚度从18000变到26000。你会看到车身垂向加速度峰值变化不大但俯仰角响应有明显差异。刚度过大后轴响应滞后更明显制动点头现象会加重。第二组只改变阻尼系数从1000变到2000。加速度时域曲线上的高频振荡会被快速压平。阻尼太小车身像船一样晃阻尼太大遇到路面接缝时冲击感很强这就是阻尼“过犹不及”的经典体现。半车模型能把这个trade-off展示得非常直观。第三组改变前后悬架的刚度比值。同样的总刚度下前软后硬和前硬后软带来的俯仰耦合完全不同。前软后硬时制动点头更小但加速抬头更大。通过扫频响应你可以看到俯仰和垂向模态的耦合情况。这些实验做完你对悬架调校的直觉会提升一个档次。5. 常见问题与调试技巧5.1 代数环问题用Simulink搭建方程模型时如果某个信号没有经过积分器就直接参与自身计算就会产生代数环。常见的情况是你试图用一个“当前时刻的力”去计算“同一时刻的位移”但位移反过来又决定力而中间没有任何积分器只有一个直接反馈回路。Simulink会提示检测到 algebraic loop仿真速度会变得极慢或者结果完全不对。半车模型里只要严格按照“力→加速度→积分→速度→积分→位移”的方向走就不会有代数环。如果你确实遇到了多半是因为你在某个地方把位移信号直接用在了力的计算中而没有通过积分器链路。排查方法是双击提示里的高亮回路看有没有哪个连线绕过了所有积分器。如果有把计算结构改成先算加速度再积分即可。5.2 数值发散与求解器设置仿真曲线突然变成一条竖线或者满屏NaN这是最劝退的问题。常见原因有三个。第一个参数单位错了。轮胎刚度少了个零等效于车轮装在弹簧上车身在0.1秒内飞出银河系。第一个动作永远是检查单位。第二个最大步长设置过大。对于脉冲输入如果你把最大步长设成0.01秒而脉冲宽度只有0.02秒那就可能漏采样导致积分器无法收敛。把最大步长降到0.0001秒再试。第三个积分器初始条件矛盾和重力项同时存在。如果加了重力但初始位移不为静平衡位置模型会因重力阶跃产生剧烈瞬态。正确做法是把重力项去掉或者仔细计算静平衡初值。另外一个隐蔽问题是阻尼系数为负。如果你在做主动悬架或者参数化扫描时不小心设置了负阻尼模型当然发散。负阻尼物理上相当于能量输入不是正常被动悬架该出现的。排查时用Data Inspector把悬架力、速度等中间量画出来很快就能定位到是哪个环节开始振荡的。5.3 单位与量纲错误很多仿真错误都是量纲问题而不是模型问题。我总结了一个快速检查法在模型里每个Gain模块上双击确认增益的单位。比如计算 1/mbmb 是1380kg增益就是 0.0007245看起来很小但别觉得不对就删掉或者改成7245。如果你看到曲线变化幅度异常优先检查所有增益的数值量级。还有一个好习惯在Simulink模型里用信号标签或者注释标明每个信号的单位。虽然Simulink本身支持单位传播但很多老版本模型里没有设置全靠文字备注。我自己的模型里每个量都写了[m]、[m/s]、[m/s²]、[rad]、[N]这样的标注调试时扫一眼就能发现谁多了一个千倍。5.4 实验结果验证思路仿真模型做得再漂亮也需要和实验对标。如果你手头有实车或台架数据可以这样做记录一段实际道路测试的车身加速度信号然后把同一段路面高度数据作为模型输入对比模型输出的加速度信号。两者在趋势上应该基本一致但峰值和时间延迟会有差异因为模型忽略了轮胎阻尼、衬套柔度、悬架非线性摩擦等。如果没有实验数据至少可以用理论计算来验证。半车模型的前后悬架偏频可以由公式 f (1/2π)*sqrt(ks/ms) 估算其中 ms 是分配到单轴上的簧载质量。算出来前悬架偏频大约1.1Hz后悬架大约1.15Hz然后扫频模型看车身加速度传递函数峰值是否出现在对应频率附近。这个方法虽然粗糙但足以验证模型没有搭错。我在实际项目中通常半车模型验证通过后才会进入整车模型或硬件在环阶段。不是说半车模型可以替代实验而是它能把绝大多数低级错误挡在前面让实验验证更有针对性。最后分享一个我个人的小习惯每次改完参数重新仿真我都会顺手把所有关键信号做一次均方根值统计并和上一次结果放在同一个表格里对比。这不仅方便追踪参数变化的影响还能在向别人展示模型时给出清晰的量化数据。半车模型研究看似基础但真正把它用熟、用透你对悬架系统动态行为的理解会上一个很大的台阶。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门