ADRC——一阶ESO扩张状态观测器simulink实现及C语言代码

这篇具有很好参考价值的文章主要介绍了ADRC——一阶ESO扩张状态观测器simulink实现及C语言代码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        理论部分见我之前的博客,一阶ESO相比起来实现更简单,也更好理解,可帮助新手入门使用。虽然常见的物理系统,绝大多都是二阶系统,如F=ma, 做位置控制时,一般用二阶ESO。但是一阶ESO也有一定的用途,后面有空把之前做的一阶ESO的实际案例开源出来。

simulink模型已上传网盘

链接:https://pan.baidu.com/s/1q7zgYNjGXXrAHaaPCSZqFA 
提取码:2579

1、公式推导

一阶系统模型:

eso_pm->z1_hat +=,算法,c语言

 拓展为2阶系统:

eso_pm->z1_hat +=,算法,c语言

建立起观测器:

eso_pm->z1_hat +=,算法,c语言

fal函数:

eso_pm->z1_hat +=,算法,c语言

 2、simulink

ESO代码

function [z1_hat,z2_hat] = fcn(y,u)
 
h=0.01;

 
persistent z1 z2 
if isempty(z1)  
    z1=0;
    z2=0;
end
 
e=y-z1;
 
fe1=fal(e,0.5,0.01);
fe2=fal(e,0.25,0.01);

z1=z1+h*(z2 + 100*fe1 + u);  %需要调参 <100,300>这两个参数
% 这里也可以写成 z1=z1+h*(z2 + 100*e + u);
z2=z2+ h*(300*fe2);


z1_hat=z1;
z2_hat=z2;

end
 
 
function f=fal(e,alpha,delta)
if abs(e)>delta
    f=abs(e)^alpha*sign(e);
else
    f=e/(delta^(1-alpha));
end
end

 模型搭建:

eso_pm->z1_hat +=,算法,c语言

扰动估计效果:

 eso_pm->z1_hat +=,算法,c语言

控制效果

 eso_pm->z1_hat +=,算法,c语言

3、C语言代码 

.h文件

typedef struct
{
    float dt;
    float b;
    float z1_hat;
    float z2_hat;

    float alpha_1;
    float alpha_2;
    float delta_1;
    float beta_1;
    float beta_2;

    uint8_t start_flag;
} ESO_1order_pm_st;

.c文件

void ESO_1order(float y, float u, ESO_1order_pm_st *eso_pm)
{
    float e, fe1, fe2;
    if (eso_pm->start_flag == 0)
    {
        eso_pm->z1_hat = y;
        eso_pm->z2_hat = 0;
    }
    e = y - eso_pm->z1_hat;

    fe1 = fal(e, eso_pm->alpha_1, eso_pm->delta_1);
    fe2 = fal(e, eso_pm->alpha_2, eso_pm->delta_1);

    eso_pm->z1_hat += eso_pm->dt * (eso_pm->z2_hat + eso_pm->beta_1 * fe1 + eso_pm->b * u);
    eso_pm->z2_hat += eso_pm->dt * (eso_pm->beta_2 * fe2);
}

使用方法:文章来源地址https://www.toymoban.com/news/detail-742853.html

ESO_1order_pm_st  ESO_pm;

/*一阶ESO参数初始化*/

ESO_pm.dt = 0.001;
ESO_pm.alpha_1 = 0.5;
ESO_pm.alpha_2 = 0.25;
ESO_pm.b = 1.0f;

ESO_pm.delta_1 = 0.01;
ESO_pm.beta_1 = 50.0f;
ESO_pm.beta_2 = 100.0f;
ESO_pm.start_flag = 0;


 /*调用方法*/
ESO_1order(y, u, &ESO_pm);  //需要给入参数y和u

到了这里,关于ADRC——一阶ESO扩张状态观测器simulink实现及C语言代码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 非线性扰动观测器(NDOB)

    干扰观测器是控制中非常常见的一种方法,本节推导的是一种简单的非线性干扰观测器NDOB 假设非线性系统方程为 x ˙ = f ( x ) + g 1 ( x ) u + g 2 ( x ) d y = h ( x ) begin{align} dot x = f(x) + g_1(x)u + g_2(x)d nonumber\\\\ y = h(x) nonumber end{align} x ˙ y ​ = f ( x ) + g 1 ​ ( x ) u + g 2 ​ ( x ) d = h ( x

    2023年04月08日
    浏览(35)
  • 六、BLDC矢量控制基础知识:滑膜观测器原理

    这是一篇关于滑膜观测器原理的学习笔记 当无刷电机使用FOC控制时,需要获得转子位置和角速度信息,当没有传感器的时候,已经有大量的算法用于解决这一问题,有一类处理办法是使用观测器来估计转子的位置,在众多解决方案中滑膜观测器有着广泛的应用。下面将我一个

    2024年02月02日
    浏览(78)
  • stm32 滑膜观测器+PLL 锁相环 FOC 无感无刷电机控制

            上一期为大家介绍了滑膜观测器正反切的应用案例,收到不少小伙伴的反馈是否有PLL的案例,大概看了一下网上的资料,讲理论的很多,能转化成源码的几乎没有。前半年工作和家里的事情都比较多,一拖再拖,终于在6月将源码调试好了,在这里跟大家分享一下调试

    2024年02月10日
    浏览(52)
  • 无刷直流电机矢量控制(四):基于滑模观测器的无传感器控制

            在越来越多的应用场景中,无刷直流电机开始采用无位置传感器的控制方式。无刷直流电机运行于中高转速时,可以利用反电势信号估算转子位置,具体实现的方法不止一种,应用较多的是滑模观测器法。         本文整理了该方法的基本原理,介绍了在MAT

    2023年04月09日
    浏览(61)
  • 【电机仿真】HFI算法脉振高频电压信号注入观测器-PMSM无感FOC控制

    【电机仿真】HFI算法脉振高频电压信号注入观测器-PMSM无感FOC控制 提示:以下是本篇文章正文内容,下面案例可供参考 通常,注入的高频信号有 1)旋转高频电压信号 2)旋转高频电流信号 3)脉振高频电压信号 是在 两相静止坐标系中注入高频电压(电流)信号 ,检测电机中

    2024年04月17日
    浏览(37)
  • WebRTC Native M96 SDK接口封装--注册语音观测器对象获取原始音频数据registerAudioFrameObserver

    很多时候,上层app需要获取RTC中的音频数据,比如获取RTC麦克风采集的裸数据、扬声器播放的混音之后的裸数据,再比如麦克风和扬声器混音后的裸数据等等。 在实时音视频中,用户可以对采集到的音频数据进行前处理和后处理,获取自己想要的播放效果,例如变音、录音等

    2023年04月16日
    浏览(48)
  • 一阶低通滤波介绍及simulink模型

    低通滤波是一种过滤方式,规定低频信号能正常通过,而超过设定临界值的高频信号则被阻隔、减弱。低通滤波可以简单的认为:设定一个频率点,当信号频率高于这个频率时不能通过,在数字信号中,这个频率点也就是截止频率,当频率高于这个截止频率时,则全部赋值为

    2024年02月10日
    浏览(39)
  • 自动驾驶状态观测1-坡度估计

    自动驾驶坡度对纵向的跟踪精度和体感都有一定程度的影响。行车场景虽然一般搭载了GPS和IMU设备,但pitch角一般不准,加速度也存在波动大的特点。泊车场景一般在室内地库,受GPS信号遮挡影响,一般无法获取高程和坡度。搭载昂贵的传感器虽然也能获取所需的坡度,但成

    2024年02月02日
    浏览(51)
  • 简单的状态机设计——序列检测器

    1.序列检测器 序列检测器是时序数字电路中非常常见的设计之一。它的逻辑功能是将一个指定的序列从数字码流中识别出来。 2.例1:\\\"10010\\\"序列检测器 对串行输入的数据进行检测,检测“10010”。设X为数字码流输入,Z为检出标记输出,高电平表示“发现指定序列”,低电平表

    2024年02月11日
    浏览(43)
  • 【 FPGA 】序列检测器 11010 (mealy状态机,moore状态机)

            状态机是硬件电路设计的常用的描述工具,也是电路设计的重要思想。很早之前我就知道mealy状态机和moore状态机,但是对两者的差别不是非常的清楚,最近在学习系列检测器的设计时对这两种状态机和一段式、三段式状态机有了更深刻的了解,在这里分享自己的见解

    2024年02月05日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包