资讯详情

资讯详情

线控转向路感力矩计算:转角-车速映射与Simulink实现

简介面向汽车电子与车辆工程研究者的一套线控转向研究资料聚焦线控转向X-by-Wire中路感力矩与车速、转向转角之间的耦合关系。压缩包共6个文件包含5个MATLAB脚本与1个Simulink模型整体仅约15KB。脚本涵盖转向力矩–转角计算、转向力矩–车速计算、实验数据预处理等功能Simulink模型则用于搭建线控转向动态仿真模拟不同车速下路感力矩的电子生成与调节逻辑。另有主程序与实验版代码便于对照运行和二次开发。当前已有364人学习适合具备一定MATLAB/Simulink基础、正在做转向系统建模或自动驾驶路感模拟的读者。通过该资源可快速理解线控转向的关键计算流程并借助模型验证车速、转角对路感力矩的影响为整车操控性与安全性优化提供参考。1. 线控转向路感力矩拆解转角、车速两个输入先讲清楚传统机械转向里驾驶员的“手感”来自转向柱与齿轮齿条的机械连接路面反力经过万向节直接顶回方向盘。线控转向Steer-by-Wire把这条机械链路拆掉了方向盘后面只剩一个角度传感器和一个力矩电机所有反馈都要靠算法重建。也就是说路感不再是“测得”的而是“算”出来的——算得不像驾驶员第一感觉就是假。这套MATLAB方案把路感力矩拆成两个独立映射一个是从方向盘转角计算基础回复力矩另一个是从车速修正增益和阻尼。前者的目标曲线像一根带死区的中性弹簧后者解决的问题是高速要稳、低速要轻。压缩包里的luganjisuan_zhuanjiao.m、luganjisuan_sudu.m分别对应这两条主线Untitled1.slx把两条主线接进完整的转向闭环。适合在做SBW预研、EPS手感标定、以及用Simulink搭车辆动力学仿真模型的工程师拿来当路感计算起点非常合适建议用 MATLAB R2021b 以上版本直接跑通整条链路再改参数。2. 转角-路感力矩映射的弹簧阻尼模型与 luganjisuan_zhuanjiao.m 实现2.1 转向力矩与转角关系的目标模型选型线控转向的路感力矩设计业内最常用的基准是“方向盘中心区小梯度、大转角大梯度、末端饱和”。这个形状不是拍脑袋定的它对应的是实车机械转向系统的固有特性中心区如果力矩太敏感驾驶员在高速直线行驶时会觉得方向盘“发贼”任何微小的手部抖动都会被放大大转角区如果力矩太软停车入库时驾驶员完全失去转角参考。所以luganjisuan_zhuanjiao.m这类的计算脚本核心就是构造一条分段线性的角度-力矩曲线。模型的数学表达一般写成弹簧-阻尼形式T_fb K(theta) * theta_eff B_sw * theta_dot C_fric * sign(theta_dot)其中第一项是回复力矩主项第二项是阻尼第三项是克服转向系统干摩擦的补偿。很多教科书习惯于直接画一条T K * theta的单斜率直线线控转向里很少有人这么用因为它还原不了真实转向手感的“中间轻、两边重”特征而且没有阻尼项时系统容易在中心区产生振荡。2.2 luganjisuan_zhuanjiao.m 的计算流程打开luganjisuan_zhuanjiao.m能看到一个典型的分段线性插值实现。我根据压缩包的主题和算法结构把它还原成可独立运行的路感转角计算函数function T_fb luganjisuan_zhuanjiao(theta, theta_dot, p) % 路感力矩-转角关系计算 % theta 方向盘转角, deg % theta_dot 转角速度, deg/s % p 参数结构体 % 死区处理: 小转角范围内不给路感力矩 if abs(theta) p.dead_zone theta_eff 0.0; else theta_eff abs(theta) - p.dead_zone; end % 分段线性刚度插值 K_cur interp1(p.theta_brk, p.K_map, theta_eff, linear, extrap); % 基础回复力矩 T_spring K_cur * theta_eff * sign(theta); % 阻尼项 库仑摩擦补偿 T_damp p.B_sw * theta_dot; T_fric p.C_fric * sign(theta_dot); T_fb T_spring T_damp T_fric; end这里interp1是MATLAB一维插值p.theta_brk是刚度曲线的断点p.K_map是对应断点处的刚度系数线性插值保证曲线连续。死区范围p.dead_zone一般取 ±2° 到 ±3°如果设得太大中心区会出现明显“空行程”驾驶员会觉得方向盘松垮设得太小力矩在零位附近变化太陡高速行驶时手稍微一搭方向盘就有纠偏力。阻尼项p.B_sw * theta_dot的方向始终与转速一致这在物理上等价于给转向柱加了一个旋转粘滞阻尼器用来抑制驾驶员快速来回打方向时的力矩突变。需要注意单位问题theta_dot如果来自Simulink的微分模块单位可能是 deg/s要换算成 rad/s 再乘阻尼系数否则数值差 57.3 倍调参时容易一头雾水。2.3 参数标定参考与常见误用下面这组参数是我在类似SBW路感项目中用过的初值可以用来做第一轮仿真参数取值说明dead_zone2.5 deg中心死区越小越灵敏theta_brk[0, 30, 90, 180] deg刚度断点需要覆盖转角行程K_map[0.25, 0.18, 0.09, 0.05] Nm/deg大转角刚度下降防止力矩饱和过快B_sw0.12 Nm·s/deg阻尼系数先取小值再逐步加C_fric0.3 Nm干摩擦补偿模拟机械转向的迟滞调参时最容易踩的坑是为追求“手感清晰”把中心区刚度K_map(1)调得过大比如超过 0.45 Nm/deg。这时候驾驶员在高速正常行驶时会被迫持续对抗方向盘回复力手臂疲劳度上升非常快。另一个常见误用是所有转角都共用同一个刚度导致大转角时力矩线性增长到超过 10 Nm实车方向盘根本拧不动。所以K_map后端的数值一定要比前端小整体呈递减趋势这样整个行程的力矩曲线才会像一条温和的饱和曲线。3. 车速耦合路感计算luganjisuan_sudu.m 的增益表与稳定性边界3.1 车速为什么必须进入路感公式转向力矩与车速的关系在传统液压助力HPS里是天然存在的液压助力泵的流量随发动机转速变化低速时助力大、方向盘轻高速时助力小、方向盘重。到了线控转向这种“随速变化”的特性如果不做进算法里驾驶员会明显感到不真实——低速停车时方向盘沉重高速变道时方向盘发飘。luganjisuan_sudu.m的核心任务就是给第二章算出来的基础路感乘上一个随车速变化的修正系数同时把横摆角速度反馈合并进来。从控制角度看车速增益还关系到转向系统稳定性。低速时车辆对转向输入的响应慢驾驶员需要更大的转角修正量此时路感力矩可以压低一些高速时车辆横摆响应快转向增益如果过高驾驶员一个微小输入就会引发较大的横摆角速度甚至诱发驾驶员-车辆闭环振荡。所以车速与路感力矩的关系不是线性放大而是一个先平缓上升、到临界车速后趋于饱和的曲线。3.2 luganjisuan_sudu.m 的增益表实现这个脚本一般不会用复杂算法直接做二维查表即可。横向是车速断点纵向是转角和横摆角速度的增益系数function T_fb luganjisuan_sudu(theta, yaw_rate, v, cal) % 车速-路感力矩耦合计算 % theta 方向盘转角, deg % yaw_rate 车辆横摆角速度, deg/s % v 车速, km/h % cal 标定结构体 % 车速断点: [0 10 30 60 100 140 180] km/h % 转角增益: 低速轻便, 高速稳重 K_theta interp1(cal.v_brk, cal.K_theta_map, v, linear, extrap); % 横摆角速度反馈增益: 高速时增强路面感 K_yaw interp1(cal.v_brk, cal.K_yaw_map, v, linear, extrap); % 合成路感力矩 T_fb K_theta .* theta K_yaw .* yaw_rate; endinterp1的两个_map数组是车速维度的插值表K_theta_map控制基础路感随车速的增益K_yaw_map控制横摆角速度反馈强度。注意K_theta_map通常在 0.6 到 1.4 之间变化而不是从 0 开始如果低速增益降太多驾驶员会彻底失去转角参考倒车入库时不知道方向盘是否回正。横摆角速度项是线控转向区别于普通 EPS 的关键。传统EPS没有真正的横摆角速度传感器它只能靠电机电流估算路感SBW 因为转向执行器和方向盘解耦可以自由地把车辆横摆信息织进手力里。K_yaw_map的典型取法是低速时取接近 0 的值避免泊车工况下转向手感被横摆反馈干扰到了 80 km/h 以上再逐渐增大让驾驶员能从方向盘上“摸到”车尾的滑动趋势。3.3 增益表参考与稳定性边界车速 (km/h)K_theta_mapK_yaw_map路感手感特征00.650.00最轻方便原地转向300.850.05中心区略重回正清晰601.000.12基准手感1001.200.20高速稳重横摆反馈明显1401.350.28接近饱和防止手力过重1801.400.30增益封顶不再上升调这部分参数时有个经验K_theta_map的中高速段不要超过 1.5。超过这个值驾驶员在做紧急避障时会觉得方向盘像被什么东西拽住反打速度明显跟不上K_yaw_map如果超过 0.35车辆在弯道中方向盘会持续传来“抢手”的修正感长时间驾驶非常累。另一个边界是车速断点要覆盖到车辆实际最高车速的 1.1 倍以上不然extrap外推会给出不合理的大增益。真实项目里这两个查表函数通常会合并成一个lookupTable2D放进Simulinkluganjisuan_sudu.m则作为离线标定工具在车载测试前先算出目标曲面意即“先做设计再上模型”。4. Simulink路感闭环模型与MATLAB脚本的协同调用4.1 Untitled1.slx 的模块链路Untitled1.slx把前两章的路感算法接进了完整的闭环。这个模型的典型模块链是方向盘角度输入 → 路感目标力矩计算 → 低通滤波 → 力矩电机电流环 → 方向盘连杆动力学 → 输出力矩同时车速和横摆角速度从车辆模型反馈回路感计算模块。打开模型后重点看三层结构。第一层是输入层方向盘转角用一个Sine Wave或Signal Builder给定扫频信号第二层是路感计算层Simulink 里放一个MATLAB Function模块内部直接调用luganjisuan_zhuanjiao和luganjisuan_sudu两个函数的合集第三层是执行层用PMSM电机模型或简化的Transfer Fcn模拟力矩电机响应电流环用PI控制器输出轴连到方向盘刚体模型上。4.2 辅助脚本在仿真流程中的角色zhaomiaomiao.m和shiyanban.m这两个文件看起来容易混淆实际分工不同。zhaomiaomiao.m更接近数据处理函数用于处理转角与力矩的采集序列——比如从logsout里查出指定时间段的力矩曲线或者把方向盘转角单位从 rad 换算成 deg 再喂给路感算法。shiyanban.m是实验版主控脚本定义所有的输入工况原地转向、蛇形绕桩、高速变道然后调用sim批量跑Untitled1.slx并收集结果。zhaomiaomiao_shiyanban.m是两者缝合的调试版一般只在仿真出现问题时用它会在每个仿真步长后打印中间变量方便定位是查表环节还是电机传递函数环节出了问题。4.3 批量工况仿真与数据读取实际调试时不会手动点 Simulink 的 Run 按钮而是用脚本循环跑。核心命令如下% 批量车速工况仿真 mdl Untitled1; load_system(mdl); v_list [0 10 30 60 100 140]; % 需要扫描的车速 T_fb_all zeros(3001, numel(v_list)); for i 1:numel(v_list) % 修改工作区车速变量, Simulink 模型从 base workspace 取值 assignin(base, Vx, v_list(i)); set_param(mdl, StopTime, 30); % 运行仿真并保存输出 simOut sim(mdl, ReturnWorkspaceOutputs, on); logs simOut.logsout; % 提取路感力矩信号 sig logs.get(T_fb).Values.Data; T_fb_all(:, i) sig(1:3001); end % 绘制不同车速下的力矩-转角曲线对比 plot(T_fb_all); legend(cellfun(num2str, num2cell(v_list), UniformOutput, false));这段代码的关键点是assignin(base, Vx, v_list(i))Simulink 模型如果直接引用工作区变量每次sim之前必须把对应的车速值写进 base workspace否则模型会沿用上一次仿真的旧值导致循环跑出来的数据完全一样还找不出原因。logsout是Simulink的信号记录对象需要在模型配置里把T_fb信号的日志勾选打开否则logs.get(T_fb)会直接报错。sig(1:3001)截取前 3001 个采样点对应 30 秒仿真时间、100 Hz 采样率。跑完这组数据之后可以绘制一组“力矩-转角-车速”三维曲面验证变化趋势是否符合第三章的增益设计。如果曲线在不同车速之间几乎重合先检查Vx是否真的进到了路感计算模块常见问题是总线信号用了常量模块硬编码根本没有引入工作区变量。5. 路感标定三步法与力矩波纹的滤波处理5.1 三步标定法死区、中心梯度、饱和区拿到这个模型先别急着调所有参数按照三步走基本一个下午能把基础手感拉出来。第一步只调dead_zone。用 0.2 Hz 的正弦转角输入在台架上感受零位附近是否“虚位”明显死区从 2° 开始逐步增加到 4°每次增加 0.5°找到既不突兀又不发虚的临界值。第二步固定死区后只调K_map(1)和K_map(2)让驾驶员在 60 km/h 工况下做小幅变道中心区梯度不合适的话手力反馈会表现为“要么轻到没信息要么重到对抗”。第三步调大转角区的K_map(3)和K_map(4)用原地转向验证末端力矩是否超过 8 Nm超过就减梯度。5.2 力矩波纹与扭振的陷波处理线控转向路感力矩上最容易出现的噪音源有两个一个是电机齿槽转矩带来的高频波纹另一个是转向管柱扭振在中频段的谐振峰。仿真阶段不接实际电机时齿槽转矩可以忽略但台架联调时这一项非常明显。我在实际项目里常用iirnotch做陷波滤波只压窄带谐振不破坏力矩的相位% 路感力矩信号陷波滤波, 抑制转向管柱一阶扭振 fs 1000; % 采样率 1 kHz f0 18; % 实测扭振频率 18 Hz bw 1.5; % 陷波带宽 1.5 Hz [b, a] iirnotch(f0/(fs/2), bw/(fs/2)); T_fb_filt filtfilt(b, a, T_fb_raw);f0不能凭感觉设要在台架上用手锤敲击方向盘管柱采集力传感器信号做FFT找第一阶峰。bw太大就会把 15-20 Hz 的正常路感信息一起滤掉驾驶员会觉得方向盘像隔了一层棉花太小则对谐振峰压制不够手上有明显抖动。filtfilt和filter的区别在于前者做零相位滤波不会引入额外相位滞后这对于路感力矩这种对相位敏感的信号非常关键但代价是不能实时流式处理只能离线分析或做分段缓存。验证标定结果的快捷方法在Untitled1.slx里把滤波后的T_fb_filt和原始T_fb_raw同时接到 Scope做一次 60 km/h 的扫频工况观察两条曲线在中频段是否有明显分离。再对比滤波前后驾驶员手部位置的加速度功率谱确认 18 Hz 附近的峰值下降至少 6 dB 才算合格。日常标定中我把这组数据存成.mat文件用zhaomiaomiao.m直接画出手力随转角的迟滞环看迟滞环的宽度是否随转向速度变化——如果固定不变说明库仑摩擦项C_fric设得偏大压低了阻尼项的作用此时优先减小C_fric而不是盲目调大B_sw。本文还有配套的精品资源点击获取
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →