当前位置: 首页 > news >正文

ODrive移植keil(七)—— 插值算法和偏置校准

目录

  • 一、角度读取
    • 1.1、硬件接线
    • 1.2、程序演示
    • 1.3、代码说明
  • 二、锁相环和插值算法
    • 2.1、锁相环
    • 2.2、插值
    • 2.3、角度补偿
  • 三、偏置校准
    • 3.1、硬件接线
    • 3.2、官方代码操作
    • 3.3、移植后的代码操作
    • 3.4、代码说明
    • 3.5、SimpleFOC的偏置校准对比


ODrive、VESC和SimpleFOC 教程链接汇总:请点击

一、角度读取

1.1、硬件接线

在这里插入图片描述

1.2、程序演示

  • 目前支持四种编码器:ABZ、AS5047P、MT6701、MA730,本例以ABZ信号为例,

  • ENCODER_cpr 为接口对应的cpr,比如AS5047P的ABZ接口cpr=4000,SPI接口的cpr=16384,注意区分。

  • 在MyProject.h文件中设置参数,下图:
    在这里插入图片描述

  • 编译烧写,

  • 发送指令“P”(不需要回车换行),同时用手转动电机,查看角度打印,
    在这里插入图片描述

在这里插入图片描述

  • 打印的角度为累加角度,不会转一圈后清零。

1.3、代码说明

  • 角度读取在TIM1更新中断中被调用,
  • 更新中断的同时触发ADC,所以进入中断后ADC并未完成,此时读取角度,也是在等待ADC完成,
  • ODrive的代码执行时间非常紧凑,所以不支持I2C接口的编码器,当然也就不支持AS5600(I2C接口的读取速度比较慢)。

在这里插入图片描述

  • 官方代码中,读取数据使用了SPI收发DMA模式,我觉得SPI的速度已经很快,没有必要再用DMA,
  • 官方代码中,SPI读取角度都是一个16bit指令完成(比如读取AS5047P的指令是0xFFFF)。所以移植后的代码不再支持TLE5012B编码器,TLE5012B的指令包含了收发切换和延时,效率较低。
  • 官方代码支持多种SPI接口编码器,大部分型号在国内比价冷门,所以没有移植,
  • 移植后的代码很容易添加 符合这些规则的编码器。

在这里插入图片描述

二、锁相环和插值算法

读取后的角度为原始数据,再在encoder_update() 中处理,数据处理包含了两部分:锁相环和插值,
在这里插入图片描述
在这里插入图片描述

2.1、锁相环

  • 能百度到的关于锁相环的介绍,都是关于无线电通信的,本人上学的时候刚好还做过这个实验,所以我一直以为锁相环就是用于通信的。
  • 用锁相环来滤波角度超出了我的想象,我也没找网上找到任何理论依据,国内电机论坛上也从没人讲过这事(至少我没看到过)。
  • 我猜测它是用读出的角度做为目标值,估算值最终收敛于目标值。当读出角度有较大波动或者干扰时,估算值能够保证一定的平滑性,起到滤波的作用。
    在这里插入图片描述
  • 上图是ODrive中无感电机启动的锁相环,都是锁相环,原理应该差不多,就是一开始有误差,最终消除误差,实际值和估算值保持一致。

2.2、插值

  • 插值算法一开始觉得很神奇,仔细看了代码后,发现是和偏置校准相关的一个处理角度的方法,
  • 可以提前透漏下,在闭环速度控制的时候,把插值算法屏蔽了,电机转动的效果丝毫不受影响,
  • 不知道这个算法什么时候起作用,也可能是我的测试不够多,但我已经没有兴趣了。
    在这里插入图片描述

2.3、角度补偿

  • 从发出读编码器指令,到获取角度再用于反Park变换,中间会有一段时间的延迟,而且同样的延迟时间,电机转速越高影响就越大,所以需要角度补偿。
  • 我在调试SimpleFOC的时候就遇到了这一问题,SimpleFOC代码支持的最大转速基本只能到3000RPM,我曾通过增加补偿角的方法把转速提高到8000RPM(效果并不好,电机有咔咔的噪声)。补偿角不是固定值,而且随着转速提高逐渐增大。
  • 有些公司把补偿角称之为:“进角”或者“攻角”。
  • 国内一般的做法是通过事先测试获取不同转速时的补偿角,分段补偿或者设定系数根据速度线性补偿。
  • 手动添加补偿角的方式有两个缺点:第一事先需要大量测试以得到最佳值,第二这种方法看起来不太灵活,毕竟电机转动时速度是有波动的,补偿角过于呆板。
  • ODrive中就没有补偿角,我觉得要么是它的算法精确,很好的解决延迟问题;要么就是锁相环可以起到补偿的作用。
  • 我尝试把锁相环部分给屏蔽了,测试高转速时的效果,以确定它是否有补偿效果,但是没有屏蔽成功,这个稍后再测试。
  • 角度“ 锁相环” 在国内闻所未闻,我觉得是ODrive代码中最有价值的一项技术!

三、偏置校准

3.1、硬件接线

使用SPI接口,SPI读出角度为绝对值,更容易找到规律,

在这里插入图片描述

(以下内容待续)

3.2、官方代码操作

3.3、移植后的代码操作

3.4、代码说明

  • 想要理解ODrive的偏置校准,建议先理解SimpleFOC的偏置校准。请看这篇教程:SimpleFOC移植STM32(四)—— 闭环控制,零点校准部分。
  • SimpleFOC的偏置校准是用简单的方法实现简单的功能,
  • ODrive的偏置校准是用复杂的方法实现简单的功能,当然也可能ODrive的适应性更好。

3.5、SimpleFOC的偏置校准对比









http://www.lryc.cn/news/192443.html

相关文章:

  • 【肌电信号】OpenSignals使用方法 --- 肌电信号采集及导入matlab
  • STM32 多功能按键中断
  • Linux-文件管理命令
  • JS DataTable中导出PDF右侧列被截断的问题解决
  • 学习笔记-MongoDB(复制集,分片集集群搭建)
  • Servlet与设计模式
  • Python学习基础笔记六十五——布尔值
  • ChatGPT生产力|实用指令(prompt)
  • 【大数据Hive】hive select 语法使用详解
  • Android---java线程优化 偏向锁、轻量级锁和重量级锁
  • 处理机调度
  • Webpack 解决:ReferenceError: dist is not defined 的问题
  • MySQL的index merge(索引合并)导致数据库死锁分析与解决方案 | 京东云技术团队
  • 第四章 网络层 | 计算机网络(谢希仁 第八版)
  • 课题学习(八)----卡尔曼滤波动态求解倾角、方位角
  • 仿真软件Proteus8.9 SP2 Pro 下载、安装、汉化详细图文教程
  • 振弦传感器和无线振弦采集仪在隧道安全监测的解决方案
  • c# xml 参数读取的复杂使用
  • 在Mac中使用 brew services start redis 命令启动、停止Redis服务报错
  • iapp源码-----比较经典
  • 为什么手机会莫名多出许多软件?
  • 测试自动化的边缘:DevTestOps 和 DevSecOps
  • fatal:Could not read from remote repository解决方法
  • 数学基础
  • 【Python】Python语言基础(上)
  • C#设计模式六大原则之依赖倒置原则
  • IDEA的使用(二)快捷键 (IntelliJ IDEA 2022.1.3版本)
  • 微信小程序个人账号申请和配置详细教程
  • opencv定位图片中的图案?
  • 高防CDN:网络安全的不可或缺之选