STM32 Simulink 自动代码生成电机控制:无传感扩展卡尔曼滤波(EKF)仿真和开发板运行

最近疫情比较严重,居家隔离,突然想要尝试无传感基于卡尔曼滤波器角度速度观测控制自动生成代码生成的实验,有些收获,在这里记录一下。

目录

1.模型搭建和仿真

2.自动代码生成和系统验证

3.总结


1.模型搭建和仿真

Q矩阵:系统噪声

R矩阵:测量噪声

P0矩阵:状态方差

下图是EKF的算法模型,用的是Simulink模型搭建

为了小电机能正常启动,采用了IF的开环强拉启动后再切闭环的方案,都是通过Simulink实现

EKF估计的转速和实际转速(开始是开环强拉,转速会有波动),进入闭环后和实际转速基本一致

 EKF估计的角度

 通过Simulink搭建的EKF仿真没有问题,开始生成代码验证

2.自动代码生成和系统验证

生成代码后集成到Keil的工程里面,以下是Simulink生成的代码

 好家伙,在STM32F401(主频84MHz)的平台上,从进中断计算完成到出中断的时间需要84us,PWM的频率是10KHz,后面仔细去查找原因后发现EKF的观测器执行时间太长,比起滑模算法来讲更占用时间

调整编译器的优化选项:

选择version 6的编译器

 选择优化选项-O2:

 执行时间从84us直接降到50us左右,电机正常运行。

 运行效果演示:

EKF

3.总结

目前发现基于EKF的观测器计算量比较大,对于低端的MCU来讲压力还是比较大,后面再看看能不能把算法优化,节省时间。

对于不同的电机,需要对

Q矩阵:系统噪声

R矩阵:测量噪声

进行调优

模型链接:https://item.taobao.com/item.htm?id=710606708452&spm=a1z10.1-c.w4004-13354255027.11.41292a1f58UIQV

  • 15
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 17
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡洛斯伊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值