1. SBW系统架构与信号流建模

SBW系统架构与信号流建模 学习卡片

任务说明

本案例建立线控转向(SBW)系统前轮转角与方向盘转角关系的Simulink模型。方向盘转角作为系统输入,经过转向执行电机理想传动比映射、前轮转角传感器反馈与闭环修正,最终输出前轮转角。模型需验证信号流从方向盘至前轮、再由前轮反馈至控制器的完整回路正确性。

SBW信号流架构

SBW系统取消了方向盘与转向器之间的机械连接,方向盘转角信号通过总线传输至控制器,控制器驱动转向电机实现前轮转向。本案例采用理想传动比控制策略,即前轮目标转角δf* = θsw / igear,其中igear为定传动比。控制器根据目标转角与实际前轮转角之差进行比例控制,输出电机转角指令,经执行机构一阶惯性环节后得到实际前轮转角。前轮转角传感器将实际转角反馈至控制器形成闭环。

方向盘转角 θ_sw (deg) 传动比映射 δ_f* = θ_sw / i_gear Σ + − 比例控制 Kp 执行机构 1/(τs+1) 前轮转角 δ_f 输出 δ_f (deg) 前轮转角传感器反馈 信号流:θ_sw → δ_f* → 误差e → 电机指令 → δ_f → 反馈闭环

Simulink模型实现

模型包含以下模块:方向盘转角输入(Step信号源)、增益模块(1/i_gear)、求和模块、比例控制器增益Kp、一阶惯性环节(1/(τs+1))以及反馈回路。仿真参数设置:i_gear = 15,Kp = 20,τ = 0.05s,方向盘转角阶跃输入幅值为90°(模拟方向盘转90°)。


% SBW_Steering_Model.m
% 建立SBW前轮转角与方向盘转角关系模型并仿真

% 清理工作区
clear; clc; close all;

% 模型参数
i_gear = 15;        % 转向传动比
Kp = 20;            % 比例控制器增益
tau = 0.05;         % 执行机构时间常数 (s)
theta_sw_step = 90; % 方向盘阶跃输入幅值 (deg)

% 创建Simulink模型
model_name = 'SBW_Steering_Model';
if bdIsLoaded(model_name)
    close_system(model_name, 0);
end
new_system(model_name);
open_system(model_name);

% 添加方向盘转角输入(阶跃信号)
add_block('simulink/Sources/Step', [model_name '/Steering_Angle']);
set_param([model_name '/Steering_Angle'], 'Time', '0');
set_param([model_name '/Steering_Angle'], 'Before', '0');
set_param([model_name '/Steering_Angle'], 'After', num2str(theta_sw_step));

% 添加传动比增益模块
add_block('simulink/Math Operations/Gain', [model_name '/Gear_Ratio']);
set_param([model_name '/Gear_Ratio'], 'Gain', ['1/' num2str(i_gear)]);

% 添加求和模块(误差计算)
add_block('simulink/Math Operations/Sum', [model_name '/Error_Sum']);
set_param([model_name '/Error_Sum'], 'Inputs', '+-');

% 添加比例控制器
add_block('simulink/Math Operations/Gain', [model_name '/Kp_Gain']);
set_param([model_name '/Kp_Gain'], 'Gain', num2str(Kp));

% 添加执行机构一阶惯性环节
add_block('simulink/Continuous/Transfer Fcn', [model_name '/Actuator']);
set_param([model_name '/Actuator'], 'Numerator', '[1]');
set_param([model_name '/Actuator'], 'Denominator', ['[' num2str(tau) ' 1]']);

% 添加输出端口
add_block('simulink/Sinks/Out1', [model_name '/Front_Wheel_Angle']);

% 添加反馈信号线
add_line(model_name, 'Actuator/1', 'Error_Sum/2', 'autorouting', 'on');

% 连接信号线
add_line(model_name, 'Steering_Angle/1', 'Gear_Ratio/1', 'autorouting', 'on');
add_line(model_name, 'Gear_Ratio/1', 'Error_Sum/1', 'autorouting', 'on');
add_line(model_name, 'Error_Sum/1', 'Kp_Gain/1', 'autorouting', 'on');
add_line(model_name, 'Kp_Gain/1', 'Actuator/1', 'autorouting', 'on');
add_line(model_name, 'Actuator/1', 'Front_Wheel_Angle/1', 'autorouting', 'on');

% 配置仿真参数
set_param(model_name, 'StopTime', '2');
set_param(model_name, 'Solver', 'ode45');

% 运行仿真
simOut = sim(model_name, 'ReturnWorkspaceOutputs', 'on');

% 获取仿真结果
t = simOut.tout;
delta_f = simOut.yout{1}.Values.Data;

% 绘制结果
figure('Name', 'SBW前轮转角响应', 'Position', [100 100 800 400]);
plot(t, delta_f, 'b-', 'LineWidth', 2);
hold on;
% 理论稳态值
yline(theta_sw_step / i_gear, 'r--', 'LineWidth', 1.5);
grid on;
xlabel('时间 (s)', 'FontSize', 12);
ylabel('前轮转角 δ_f (deg)', 'FontSize', 12);
title('SBW系统前轮转角阶跃响应', 'FontSize', 14);
legend('前轮转角响应', ['理论稳态值 = ' num2str(theta_sw_step/i_gear) '°'], 'Location', 'southeast');
xlim([0 2]);
ylim([0 8]);

% 保存模型
save_system(model_name);

验证方法

运行上述脚本后,Simulink模型自动构建并执行仿真。验证信号流正确性的判定标准如下:

  • 信号流完整性:模型编译无错误,信号线连接正确,反馈回路无断线警告。
  • 稳态响应:前轮转角最终稳定在90°/15 = 6°。观察响应曲线,稳态值应与理论值一致,误差小于0.1°。
  • 动态特性:响应曲线呈一阶惯性上升形态,无振荡,时间常数约为0.05s,在约0.2s(4倍时间常数)内达到稳态。
  • 反馈作用:若断开反馈线(Error_Sum的第二个输入),系统变为开环,稳态输出仍为6°但无闭环修正能力;闭环时比例增益Kp影响响应速度,Kp越大响应越快,验证反馈信号流有效。

预期输出:仿真曲线从0°开始,按一阶惯性规律上升,约0.2s后稳定在6°附近,稳态误差趋近于零,证明方向盘转角至前轮转角的信号流及反馈回路正确。