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.rhkb.cn/news/158397.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯(等差素数列,C++)

思路: 1、因为找的是长度为10,且公差最小的等差素数列,直接用枚举即可。 2、枚举用三重循环,第一重枚举首项,第二重枚举公差,第三重因为首项算一个,所以枚举九个等差素数。 代码:…

《从菜鸟到大师之路 正则表达式 篇》

《从菜鸟到大师之路 正则表达式 篇》 正则表达式是一个强大的文本匹配工具。但是,对于前端初学者来说,众多的符号和规则可能让人难以理解。其实,你不需要记住所有的正则表达式语法!本文将分享一些简单而实用的技巧,帮…

ShopXO download 任意文件读取

漏洞描述 ShopXO存在任意文件读取漏洞,攻击者可利用该漏洞获取敏感信息 漏洞复现 访问url: 构造payload 漏洞证明: 文笔生疏,措辞浅薄,望各位大佬不吝赐教,万分感谢。 免责声明:由于传播或…

动态内存管理(malloc calloc realloc free)--- C语言

文章目录 写在前面1. malloc 和 free函数1.1 malloc函数介绍1.2 free函数介绍 2. calloc函数3. realloc函数4. 常见的动态内存错误4.1 对NULL指针的解引用操作4.2 对动态开辟空间的越界访问4.3 对非动态开辟内存使用free释放4.4 使用free释放一块动态开辟内存的一部分4.5 对同一…

低代码提速应用开发

低代码介绍 低代码平台是指一种能够帮助企业快速交付业务应用的平台。自2000年以来,低代码市场一直充斥着40大大小小的各种玩家,比如国外的Appian、K2、Pega Systems、Salesforce和Ultimus,国内的H3 BPM。 2015年以后,这个市场更是…

linux 安装python django pip 遇到的问题

Python解决SSL不可用问题 解决方案: 首先要明白python版本需要和openssl的版本需要相对匹配的,在Python3.7之后的版本,依赖的openssl,必须要是1.1或者1.0.2之后的版本,或者安装了2.6.4之后的libressl,linux…

centos7下安装elasticsearch7.8.1并配置远程连接

1、下载安装包 sudo wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.8.1-linux-x86_64.tar.gz 2、解压 sudo tar -zxvf elasticsearch-7.8.1-linux-x86_64.tar.gz 3、添加用户并设置密码 sudo useradd es sudo passwd es # 设置密码 Lida15…

Pycharm 2023 设置远程调试

pycharm 版本 : 2023.2.1 整体流程参考:https://blog.csdn.net/xuanhaolaile/article/details/128293254 首先确定远程服务器上已经安装好 requirements.txt 中所需的依赖包。 1、SSH Configurations 添加远程服务器 2、Python Interpreter 注意&…

Leetcode算法解析——查找总价格为目标值的两个商品

1. 题目链接:LCR 179. 查找总价格为目标值的两个商品 2. 题目描述: 商品价格按照升序记录于数组 price。请在购物车中找到两个商品的价格总和刚好是 target。若存在多种情况,返回任一结果即可。 示例 1: 输入:price …

Linux信号 signal()编程

在Linux的进程间通信中可以用signal()函数进行信号与信息传递。 1.信号 信号的名字和编号: 每个信号都有一个名字和编号,这些名字都以“SIG”开头,例如“SIGIO ”、“SIGCHLD”等等。 信号定义在signal.h头文件中&am…

虚幻阴影整理

虚拟阴影贴图(VSM)是一种全新的阴影贴图方法,可以提供稳定的高分辨率阴影。通过与虚幻引擎5的Nanite虚拟几何体、Lumen全局光照和反射以及世界分区功能结合使用,它能够实现电影级的品质效果,为大型开放场景提供光照。 …

html和css基础练习

vscode快捷键 alt b 在浏览器中打开 alt shift b 在其他浏览器打开 ctrl / 注释 ctrl y 快捷键删除 参考文章 https://www.bilibili.com/video/BV1m84y1w7Tb 基础html标签 img:图像,title:头部文字,body:主…

使用匿名函数在Golang中的好处

发挥Golang中无名代码块的潜力 匿名函数,也被称为lambda函数或闭包,是Golang中的一个强大功能,提供了许多好处。这些无名代码块为开发人员在设计和构建其代码时提供了更大的灵活性和模块化。在本节中,我们将探讨使用匿名函数可以…

AI对网络安全的影响与挑战

近年来,随着人工智能(AI)技术的快速发展,网络安全领域也开始逐渐引入生成式AI应用。根据最新的数据研究,生成式AI对网络安全和合规的影响最大,同时也包括了IT和云的运维、硬件和软件支持领域。通过AI和自动…

基于Java的点歌管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

【VTK】基础知识分析

很高兴在雪易的CSDN遇见你 ,给你糖糖 欢迎大家加入雪易社区-CSDN社区云 前言 本文分享VTK基础操作技术,记录vtk编程中常用的接口,变量等的创建及使用方法希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞关注,小易…

华为云云耀云服务器L实例评测|华为云耀云服务器L实例私有库搭建verdaccio(八)

九、华为云耀云服务器L实例私有库搭建verdaccio: Verdaccio 是一个简单的、零配置本地私有 npm 软件包代理注册表。Verdaccio 开箱即用,拥有自己的小型数据库,能够代理其它注册表(例如 npmjs.org),缓存下载…

软件工程与计算总结(十)软件体系结构设计与构建

目录 ​编辑 一.体系结构设计过程 1.分析关键需求和项目约束 2.选择体系结构风格 3.体系结构逻辑设计 4.体系结构实现 5.完善体系结构设计 6.定义构件接口 二.体系结构原型构建 1.包的创建 2.重要文件的创建 3.定义构件之间的接口 4.关键需求的实现 三.体系结构的…

屏幕亮度调节保护您的眼睛

官方下载地址: 安果移动 视频演示:屏幕亮度调节-保护您的眼睛_哔哩哔哩_bilibili 嗨,亲爱的用户,你是否有过这样的体验:夜晚安静的时刻,想要在抖音上看看热门的舞蹈、在快手上发现生活的 趣味、或是在哔…

Godot2D角色导航-自动寻路教程(Godot实现角色随鼠标移动)

文章目录 运行结果2D导航概述开始前的准备2D导航创建导航网格创建角色 其他文章 运行结果 2D导航概述 Godot为2D和3D游戏提供了多个对象、类和服务器,以便于基于网格或基于网格的导航和路径查找。 说到导航,就得说一下导航网格,导航网格定义…