基于分数阶扰动观测器的伺服系统摩擦补偿Matlab仿真 1.模型简介 模型为基于分数阶扰动观测器的摩擦补偿仿真,仿真基于永磁同步电机速度、电流双闭环控制结构开发,双环均采用PI控制,PI参数已经调好。 仿真中主要包含抗饱和PI控制器、摩擦力模型、分数阶扰动观测器、坐标变换、SVPWM、逆变器和永磁同步电机模块等,其中抗饱和PI控制器、摩擦力模型、分数阶扰动观测器、坐标变换、SVPWM模块均采用matlab function编程实现,其与C语言编程较为相似,容易进行实物移植。 模型均采用离散化仿真,其效果更接近实际数字控制系统。 2.算法简介 伺服系统中,由于摩擦力的存在,会降低系统响应,因此对摩擦力进行补偿是有必要的。 本仿真通过增加LuGre摩擦力模型,模拟摩擦力对系统性能的影响。 通过分数阶扰动观测器对摩擦力进行观测并进行补偿,降低摩擦力对系统性能的影响。 3.仿真效果 ① 加入摩擦力,速度给定为正弦波,模拟速度反复过零的情况。 由于摩擦力的存在,实际速度过零时不能很好的跟踪速度给定信号,如图1所示,0.5s 前没有使用分数阶扰动观测器,速度过零时,速度跟踪误差很大。 0.5s 后,开启扰动观测器,速度跟踪误差明显减小。 ② 图1为电流环响应波形,可见电流环跟踪很好。 ③ 图2为LuGre摩擦力模型输出的摩擦转矩波形和扰动观测器输出的扰动转矩观测波形。 其中,0.5s 后才开启分数阶扰动观测器。 可见观测的扰动转矩与摩擦转矩基本重合。 4. 可提供模型内相关算法的参考文献,避免大 量阅读文献浪费时间。 可针对模型内的相关技术问题进行,并给出指导意见。 【注】 模型已搭建完毕,原则上不会做任何修改。

伺服系统玩摩擦补偿这事,说白了就是跟机械结构较劲。咱们在实验室调电机的时候,总发现速度过零点时波形突然卡顿,跟被什么东西拽住了似的——这就是摩擦力的锅。今天咱们拆解的这个仿真模型,直接上硬菜:用分数阶扰动观测器怼摩擦力,效果堪比给电机抹润滑油。

先看模型骨架。整个系统是典型的速度、电流双闭环结构,但亮点在于所有核心模块都是Matlab Function手搓的。这种写法有个好处:仿真跑出来的波形跟真实DSP上跑的效果基本一致。比如电流环的PI控制器,代码长这样:

function [out, integral] = anti_sat_PI(err, Kp, Ki, integral_prev, Ts, output_limit)
    integral = integral_prev + Ki * err * Ts;
    % 抗饱和处理
    if (integral > output_limit)
        integral = output_limit;
    elseif (integral < -output_limit)
        integral = -output_limit;
    end
    out = Kp * err + integral;
    % 输出限幅
    out = min(max(out, -output_limit), output_limit);
end

这段代码里藏了个小机关:积分项和输出分别做了限幅。很多新手容易只做输出限幅,结果积分项无限累积导致超调。这里的处理方式让控制器在饱和时停止积分累加,相当于给积分项踩刹车。

摩擦力的建模用了LuGre模型,这玩意儿比库伦摩擦模型更细腻,能模拟预滑动阶段的微观形变。它的状态方程实现起来有点意思:

function [F, z] = LuGreFriction(v, z_prev, sigma0, sigma1, sigma2, Ts)
    dz = v - abs(v) * z_prev / (sigma0 + sigma1*exp(-(v/0.1)^2));
    z = z_prev + dz * Ts;
    F = sigma0*z + sigma1*dz + sigma2*v;
end

注意这里的指数项exp(-(v/0.1)^2),这是为了在极低速度下增强刚度。实际调试时,如果发现低速时有高频抖动,可以适当调整分母的0.1这个参数。

基于分数阶扰动观测器的伺服系统摩擦补偿Matlab仿真 1.模型简介 模型为基于分数阶扰动观测器的摩擦补偿仿真,仿真基于永磁同步电机速度、电流双闭环控制结构开发,双环均采用PI控制,PI参数已经调好。 仿真中主要包含抗饱和PI控制器、摩擦力模型、分数阶扰动观测器、坐标变换、SVPWM、逆变器和永磁同步电机模块等,其中抗饱和PI控制器、摩擦力模型、分数阶扰动观测器、坐标变换、SVPWM模块均采用matlab function编程实现,其与C语言编程较为相似,容易进行实物移植。 模型均采用离散化仿真,其效果更接近实际数字控制系统。 2.算法简介 伺服系统中,由于摩擦力的存在,会降低系统响应,因此对摩擦力进行补偿是有必要的。 本仿真通过增加LuGre摩擦力模型,模拟摩擦力对系统性能的影响。 通过分数阶扰动观测器对摩擦力进行观测并进行补偿,降低摩擦力对系统性能的影响。 3.仿真效果 ① 加入摩擦力,速度给定为正弦波,模拟速度反复过零的情况。 由于摩擦力的存在,实际速度过零时不能很好的跟踪速度给定信号,如图1所示,0.5s 前没有使用分数阶扰动观测器,速度过零时,速度跟踪误差很大。 0.5s 后,开启扰动观测器,速度跟踪误差明显减小。 ② 图1为电流环响应波形,可见电流环跟踪很好。 ③ 图2为LuGre摩擦力模型输出的摩擦转矩波形和扰动观测器输出的扰动转矩观测波形。 其中,0.5s 后才开启分数阶扰动观测器。 可见观测的扰动转矩与摩擦转矩基本重合。 4. 可提供模型内相关算法的参考文献,避免大 量阅读文献浪费时间。 可针对模型内的相关技术问题进行,并给出指导意见。 【注】 模型已搭建完毕,原则上不会做任何修改。

重头戏是分数阶扰动观测器。相比传统整数阶观测器,分数阶微积分能更灵活地捕捉扰动特性。核心算法用到了分数阶差分近似:

function [d_hat] = FODO(e, Ts, alpha)
    persistent buffer;
    if isempty(buffer)
        buffer = zeros(10,1);
    end
    % 分数阶差分系数计算
    coeff = (-1).^(0:9) .* gamma(alpha+1)./(gamma(0:9+1) .* gamma(alpha - 0:9 +1));
    % 滑动窗口更新
    buffer = [e; buffer(1:end-1)];
    d_hat = sum(coeff' .* buffer);
end

这段代码用滑动窗口存储误差历史数据,通过gamma函数计算分数阶系数。实际运行时发现,窗口长度10已经够用,再增加反而会增加计算延迟。alpha参数在0.5~1.5之间调节效果最佳,超过这个范围容易引发相位异常。

仿真结果验证环节最解压。开启观测器前,速度过零点时误差能飙到15%以上,跟电机突然踩了脚刹车似的。0.5秒后观测器一开,波形立马贴地飞行,误差直接压到3%以内。更绝的是观测器输出和真实摩擦转矩几乎重合,这精度拿去发论文都够用(当然实际调试时记得留点余量)。

调试这种系统时,最容易翻车的地方在离散化处理。比如在分数阶观测器里,采样周期Ts如果设置过大,会导致差分近似失效。建议先用0.1ms的步长跑仿真,再逐步增大到实际控制器的执行周期(比如200us),观察相位裕度的变化。

最后说个血泪教训:千万别在PI参数调好前开摩擦补偿!曾经有个哥们儿没调电流环就开观测器,结果系统直接震荡上天,电机嚎得跟电锯杀人狂似的...(此处省略500字事故报告)总之,按流程办事,先调内环再整观测器,保平安。

Logo

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

更多推荐