matlab/simulink半车主动悬架建模:基于ADRC(自抗扰控制)的主动悬架控制, 主体模型为半车主动悬架,tt3采取ADRC控制。 输出为车身加速度,悬架动挠度,轮胎动变形。 默认输入为正弦路面输入。 有与pid控制的效果对比。

在汽车悬架系统的研究中,主动悬架能够显著提升车辆的行驶舒适性和操纵稳定性。今天咱们就来聊聊基于 Matlab/Simulink 的半车主动悬架建模,主角是自抗扰控制(ADRC),顺便和经典的 PID 控制来一场效果大比拼。

半车主动悬架主体模型

半车模型通常包含车身质量、悬架弹簧和阻尼器、轮胎等部件。在 Simulink 里搭建这个模型时,各个部件都有对应的模块来表示其物理特性。比如车身质量,我们可以用一个质量块模块来模拟,其动力学方程简单来说就是:$F = ma$,这里的 $F$ 是作用在车身上的合力,$m$ 是车身质量,$a$ 就是我们关心的车身加速度啦,这个加速度也是模型的一个重要输出。

悬架部分,弹簧和阻尼器的组合可以用一个简单的力学模型描述,悬架动挠度就是弹簧的伸缩量,它受到车身运动和路面激励的影响。轮胎动变形同理,它和轮胎与路面的相互作用紧密相关。

ADRC 控制闪亮登场

自抗扰控制(ADRC)在主动悬架控制中有着独特的优势。它不依赖于精确的系统模型,能对系统内外部干扰进行实时估计和补偿。下面咱们简单看看 ADRC 的代码实现(以 Matlab 为例):

% ADRC 参数设定
beta01 = 100; % 跟踪微分器参数
beta02 = 200; 
r = 1000; 
h = 0.001; % 步长

% 定义跟踪微分器函数
function [x1, x2] = TD(x0, x1, x2, r, h)
    d = r * h;
    d0 = h * d;
    a0 = x1 - x0 + h * x2;
    y = sqrt(a0^2 + 4 * r * abs(a0));
    a = (a0 + sign(a0) * y) / 2;
    a = (a0 + sign(a0) * y) / 2;
    if abs(a0) <= d0
        a = x2 + a0 / h;
    else
        a = x2 + sign(a0) * d;
    end
    x1 = x1 + h * a;
    x2 = x2 + h * (-r * sign(a));
end

% 扩张状态观测器
function [z1, z2, z3] = ESO(z1, z2, z3, u, y, beta1, beta2, beta3, h)
    e = z1 - y;
    z1 = z1 + h * (z2 - beta1 * e);
    z2 = z2 + h * (z3 - beta2 * sign(e) + u);
    z3 = z3 - h * beta3 * sign(e);
end

% 非线性状态误差反馈控制律
function u0 = NLSEF(z1, z2, z3, v1, v2, kp, kd)
    e1 = v1 - z1;
    e2 = v2 - z2;
    u0 = kp * e1 + kd * e2 - z3;
end

这段代码里,首先设定了 ADRC 的一些关键参数,比如跟踪微分器的参数 beta01beta02r 等。跟踪微分器(TD 函数)的作用是安排过渡过程,让系统的输入更加平滑,减少超调。扩张状态观测器(ESO 函数)则是 ADRC 的核心,它能实时估计系统的状态和总扰动 z3。非线性状态误差反馈控制律(NLSEF 函数)根据观测器的估计值和期望输出计算控制量 u0

PID 控制不甘示弱

PID 控制作为经典控制算法,简单有效且应用广泛。在 Matlab 里实现 PID 控制也很容易,代码如下:

% PID 参数设定
Kp = 10;
Ki = 0.1;
Kd = 1;

% PID 控制函数
function u = PID(Kp, Ki, Kd, e, e_prev, integral)
    derivative = (e - e_prev) / dt;
    integral = integral + e * dt;
    u = Kp * e + Ki * integral + Kd * derivative;
    e_prev = e;
end

这里设定了比例系数 Kp、积分系数 Ki 和微分系数 KdPID 函数根据当前误差 e、上一时刻误差 e_prev 和积分项 integral 计算控制量 u。比例环节能快速响应误差,积分环节消除稳态误差,微分环节则对误差变化率做出反应,提前调整控制量。

正弦路面输入与效果对比

默认情况下,我们给模型输入正弦路面激励。在 Simulink 里可以很方便地用正弦波模块来实现。运行模型后,就能得到车身加速度、悬架动挠度和轮胎动变形这些输出。

matlab/simulink半车主动悬架建模:基于ADRC(自抗扰控制)的主动悬架控制, 主体模型为半车主动悬架,tt3采取ADRC控制。 输出为车身加速度,悬架动挠度,轮胎动变形。 默认输入为正弦路面输入。 有与pid控制的效果对比。

对比 ADRC 和 PID 控制的效果,从车身加速度来看,ADRC 由于能实时估计和补偿干扰,在抑制路面不平带来的振动方面表现出色,车身加速度曲线更加平滑,波动更小,能给乘客带来更好的乘坐舒适性。而 PID 控制在面对复杂干扰时,可能会出现一定的超调或者调节时间较长的情况。

悬架动挠度和轮胎动变形方面也是类似,ADRC 能更好地维持悬架和轮胎工作在合理范围,保障车辆的行驶稳定性和轮胎的接地性。

通过这次 Matlab/Simulink 半车主动悬架建模及 ADRC 与 PID 的对比,我们能清楚看到不同控制策略的特点,ADRC 的自抗扰特性确实为主动悬架控制提供了一种优秀的解决方案。在实际汽车工程中,根据具体需求选择合适的控制算法,能大大提升车辆性能。希望这篇博文能给对汽车悬架控制感兴趣的小伙伴一些启发。

Logo

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

更多推荐