ODrive移植keil(九)—— 抗齿槽效应算法

目录

  • 一、齿槽效应
    • 1.1、齿槽效应的定义
    • 1.2、产生原因
    • 1.3、解决办法
  • 二、硬件接线
  • 三、ODrive官方代码操作
    • 3.1、固件版本v0.5.1
    • 3.2、抗齿槽校准原理
    • 3.3、校准注意事项
    • 3.4、校准操作
  • 四、移植后的代码操作
  • 五、总结


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

在这里插入图片描述

一、齿槽效应

1.1、齿槽效应的定义

  • 在永磁电机中,即使定子中没有电流通过,也会存在一个电磁转矩,这个转矩叫齿槽力矩(Cogging Torque)。
  • 用手转动电机,会感觉到它从当前点“跳跃”并“稳定”在另一个点,电机有“一格一格”的顿挫感(俗称颗粒感)。
  • 当电机低速转动时,表现为“一顿一顿”,
  • 当电机高速转动时,电机的振动和噪声会更大。某疆早期的2312电机齿槽效应非常大,后来的电机齿槽效应明显变小了。
    在这里插入图片描述

1.2、产生原因

  • 在磁极与铁心垂直的位置(0°和180°)磁阻最大,转矩为0,称之为“不稳定的平衡点”
  • 在磁极与铁心正对的位置(90°和270°)磁阻最小,转矩为0,称之为“稳定的平衡点”,如果没有较大负载施加的话,转子可以永久保持在这个位置
  • 在两个平衡点之间,磁阻转矩非线性变化,最大值一般是在趋近于定子齿的某一位置。

在这里插入图片描述

1.3、解决办法

1、斜槽
在这里插入图片描述

斜槽所带来的缺点有:会降低感应电动势的基波幅值,进而降低输出功率和输出转矩;电机的漏感和杂散损耗增加,降低电机效率;增加了工艺复杂度。

2、磁环代替磁片
在这里插入图片描述

早期云台电机有些使用的是磁片,有齿槽效应但比较微弱。现在的云台电机基本都已升级为磁环。
磁环的缺点:铁氧体材质磁性上限低,所以不能做大扭矩的电机,目前主要应用在云台电机上。

3、抗齿槽算法
通过编码器调制电机的电流驱动,以补偿一些齿槽转矩波动,并使用电子驱动技术对其进行平滑处理。
目前已知的并且开源的只有ODrive的技术,老外“人确实不错”!

4、网上看到一篇专业文章:《齿槽转矩削弱方法及多目标联合仿真优化》https://zhuanlan.zhihu.com/p/549569418

二、硬件接线

ODrive中默认的抗齿槽算法采样点3600个,AS5047P的ABZ接口只有4000cpr,分辨率太低,而SPI接口是14bit,相当于16384cpr,所以使用SPI接口。

在这里插入图片描述

驱动板 购买链接:某宝购买
电机 购买链接:某宝购买

三、ODrive官方代码操作

用官方代码操作,验证控制效果,并获取配置参数,

3.1、固件版本v0.5.1

因为v0.5.1的教程最丰富,所以我一般用v0.5.1的版本操作,
代码移植自v0.5.6,所以本文所有涉及源代码的地方都截图自v0.5.6,
0.5.1和0.5.6的抗齿槽算法功能完全一样,涉及到的抗齿槽源码也完全一样。

在这里插入图片描述

3.2、抗齿槽校准原理

  • 功能很高大上,但出乎意料的是代码非常简单,核心代码就下面这点,
    算法设置了3600个采样点,电机转到指定位置后保存当前的vel_integrator_torque_,
    在这里插入图片描述

  • 使用的时候,直接把保存的采样值赋给力矩
    在这里插入图片描述

  • 简单的说,就是校准的时候让电机转到指定位置,保持稳定并记录下当前的力矩;使用的时候直接输出保存的力矩,电机快速稳定的转到指定位置。

3.3、校准注意事项

  • 网上没有讲解抗齿槽操作的教程,我之前操作过很多次都没有成功,
  • 阅读代码,可以看出抗齿槽效应的使用只针对位置模式的梯形轨迹模式,选择其它模式无效。
    在这里插入图片描述
  • 配置为对应模式,但抗齿槽校准的时候电机始终转不动,即使把位置环P参数和速度环PI参数设置很大还是转不动。后来想想,因为梯形轨迹有上升斜率,限制了每次的最大输出,所以电机转不动。
    在这里插入图片描述
  • 设置为直通模式,没有了输出限制,电机就能转动了。所以,在抗齿槽校准前配置为“直通模式”,校准完以后再配置回“梯形轨迹模式”。
  • index初始化为0,所以抗齿槽校准是从位置0开始。为减少意外可以在配置完位置模式后先让电机转到位置0,再开始校准。
    在这里插入图片描述

3.4、校准操作

在这里插入图片描述
在这里插入图片描述


//odrive固件版本v0.5.1,电源电压12V,5008电机+AS5047P编码器
//位置模式,梯形轨迹,抗齿槽校准操作
//20231207,loop222@郑州

odrv0.erase_configuration()
odrv0.config.dc_max_positive_current = 30
odrv0.config.dc_max_negative_current = -5.0
odrv0.axis0.motor.config.motor_type = MOTOR_TYPE_HIGH_CURRENT
odrv0.axis0.motor.config.pole_pairs = 7
odrv0.axis0.motor.config.calibration_current = 6
odrv0.axis0.encoder.config.mode = ENCODER_MODE_SPI_ABS_AMS
odrv0.axis0.encoder.config.abs_spi_cs_gpio_pin = 1
odrv0.axis0.encoder.config.cpr = 2**14
odrv0.axis0.controller.config.control_mode = CONTROL_MODE_POSITION_CONTROL
odrv0.axis0.controller.config.vel_limit = 20
odrv0.axis0.controller.config.pos_gain = 50
odrv0.axis0.controller.config.vel_gain = 0.05
odrv0.axis0.controller.config.vel_integrator_gain = 0.5
odrv0.axis0.controller.config.input_mode =INPUT_MODE_TRAP_TRAJ
odrv0.axis0.trap_traj.config.vel_limit = 10
odrv0.axis0.trap_traj.config.accel_limit = 20
odrv0.axis0.trap_traj.config.decel_limit = 20
odrv0.axis0.controller.config.anticogging.calib_pos_threshold = 72
odrv0.axis0.controller.config.anticogging.calib_vel_threshold = 72
odrv0.save_configuration()
odrv0.reboot()

odrv0.axis0.requested_state = AXIS_STATE_FULL_CALIBRATION_SEQUENCE
odrv0.axis0.error
odrv0.axis0.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL

odrv0.axis0.controller.input_pos = 0      //转到位置0
odrv0.axis0.controller.config.input_mode = INPUT_MODE_PASSTHROUGH  //设置为直通模式
odrv0.axis0.controller.start_anticogging_calibration()   //开始抗齿槽校准
odrv0.axis0.controller.config.input_mode =INPUT_MODE_TRAP_TRAJ   //校准完成,切换回梯形轨迹模式

odrv0.axis0.motor.config.pre_calibrated = True
odrv0.axis0.controller.config.anticogging.pre_calibrated = True
odrv0.axis0.config.startup_encoder_offset_calibration = True
odrv0.axis0.config.startup_closed_loop_control = True
odrv0.save_configuration()
odrv0.reboot()

odrv0.axis0.controller.input_pos = 0.5
odrv0.axis0.controller.input_pos = 0.2
odrv0.axis0.controller.input_pos = 1.8
odrv0.axis0.controller.input_pos = -0.3
odrv0.axis0.controller.input_pos = -1.5
odrv0.axis0.controller.input_pos = 0

四、移植后的代码操作

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

  • 编译烧写,

  • 发送指令“C”,3秒钟后电机“嘀”一声,然后正转8个电角度,反转8个电角度,同时串口打印校准参数。

  • 发送指令“G”,电机闭环,

  • 发送指令“K0”,电机转到位置0,

  • 发送指令“D”,开始抗齿槽校准。校准时间不确定,校完为止,校准完成后电机回到位置0,
    代码中已做了改进,校准时切换直通模式,校准完成后恢复梯形轨迹模式,电机不再“腾”的一下回到位置0,
    校准成功后LED指示灯开始闪烁,方便观察是否校准成功(上电后默认LED不亮)。
    在这里插入图片描述

  • 此时可以输入指令查看电机转动效果,“K0.5”或者“K0.9”。

  • 如需保存参数,发送指令“A1”,表示已经校准;发送指令“B1”,表示上电进入闭环模式。
    移植后的代码可以跳过上电检测,直接进入闭环,上一节代码中有说明。

  • 发送指令“F”,保存,

  • 发送指令“R”,重启。

五、总结

  • 5008电机的齿槽效应小,改善效果不明显,用齿槽效应大的电机测试,改善效果还是很明显的。
    在这里插入图片描述
  • 位置环P参数和速度环PI参数,影响了抗齿槽的校准速度和运行效果,如果效果不理想可以调试这3个参数,
  • 对于齿槽效应大的电机可以放宽校准误差,特别是 ANTIcogging_pos_threshold 参数,以加快校准速度,
  • 尽管如此,仍然存在有转到指定位置后电机左右摆动不稳定的情况,大概是当前算法还不够完美。



(完)


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/227547.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络安全行业大模型调研总结

随着人工智能技术的发展,安全行业大模型SecLLM(security Large Language Model)应运而生,可应用于代码漏洞挖掘、安全智能问答、多源情报整合、勒索情报挖掘、安全评估、安全事件研判等场景。 参考: 1、安全行业大模…

【Java 基础】24 日期操作

文章目录 1.Date2.LocalDate3.LocalTime4.LocalDateTime5.DateTimeFormatter6.Period7.Duration8.ZoneId9.ZonedDateTime总结 日期和时间是我们常见的操作对象,Java 也提供了强大的日期和时间处理类库,使我们可以方便的进行日期的表示、计算、格式化等。…

SQL Server数据库的备份和还原

6.2 SQL Server备份和还原 数据库管理员最担心的情况就是数据库瘫痪,造成数据丢失,而备份作为数据的副本,可以有 效地保护和恢复数据。本节将介绍数据备份的原因,备份的方式.SOL Server的恢复模式.以及备 份策略和备份设备。 6.2…

思维模型 色彩心理效应

本系列文章 主要是 分享 思维模型,涉及各个领域,重在提升认知色彩影响情绪。 1 色彩心理效应的应用 1.1 色彩心理效应在营销中的应用 1 可口可乐公司的“红色”营销 可口可乐公司是全球最著名的饮料品牌之一,其标志性的红色包装已经成为了…

嵌入式_基于STM32F4标准库的Flash读写操作

嵌入式_基于STM32F4标准库的Flash读写操作 文章目录 嵌入式_基于STM32F4标准库的Flash读写操作前言一、STM32F4的 Flash 简介二、闪存的读写操作1.闪存的读取2.闪存的解锁、擦除和写入1.闪存解锁2.闪存擦除3.闪存写入 三、完整代码 前言 在STM32芯片内有一个Flash存储器断电后…

整数二分的建模

当题目能够使用整数二分法建模时&#xff0c;主要有整数二分法思想进行判定&#xff0c;它的基本形式如下&#xff1a; while(left < right) {int ans;//记录答案 int mid left (right - left) / 2;//二分if(check(mid)){//检查条件&#xff0c;如果成立 ans mid;//记录…

学习spring、springmvc、mybatis、ssm所有可能用到的依赖总结,父工程pom文件依赖,<packaging>pom</packaging>

1、父工程pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/PO…

Java:UDP 通信方法(发送 + 接收)并 实现简单的聊天 详细代码

文章目录 UDP 通信编程发送 数据接收 数据实现简易的通信聊天 UDP 通信编程 发送 数据 创建 DatagramSocket 对象&#xff08;创办 快递公司&#xff09; 不传参&#xff0c;随机一个可用端口&#xff0c;传参&#xff0c;可指定端口。&#xff08;发送端口&#xff09;创建 …

Leetcode算法题笔记(1)

目录 哈希1. 两数之和1.1 解法11.1 解法2 2. 字母异位词分组2.1 解法12.2 解法2 3. 最长连续序列3.1 解法 小结 双指针4. 移动零4.1 解法14.2 解法2 5. 盛最多水的容器5.1 解法一5.2 解法二 6. 三数之和6.1 解法16.2 解法2 7. 接雨水7.1 解法1 小结 滑动窗口8. 无重复字符的最长…

随机Numpy数组的创建方法(第2讲)

随机Numpy数组的创建方法 &#xff08;第2讲&#xff09;         &#x1f379;博主 侯小啾 感谢您的支持与信赖。☀️ &#x1f339;꧔ꦿ&#x1f339;꧔ꦿ&#x1f339;꧔ꦿ&#x1f339;꧔ꦿ&#x1f339;꧔ꦿ&#x1f339;꧔ꦿ&#x1f339;꧔ꦿ&#x1f339;꧔ꦿ&…

代码随想录算法训练营 ---第五十八天

今天开启单调栈的征程。 第一题&#xff1a; 简介&#xff1a; 本题有两种解法&#xff0c;第一种&#xff1a;暴力破解 两层for循环 时间复杂度为O(n^2) 超时了 第二种&#xff1a;单调栈解法也是今天的主角。 单调栈是什么&#xff1f; 单调递增栈&#xff1a;单调递增栈…

在vue中深度选择器的使用

一、为什么要使用深度选择器 在vue中&#xff0c;当我们使用了第三方库中的组件时&#xff0c;想要更改一些样式&#xff0c;达到我们想要的效果&#xff0c;由于scoped的影响直接编写同名样式时&#xff0c;是覆盖不了组件内的样式的。 为了达到我们想要的效果&#xff0c;…

关于最长上升子序列的动态规划问题的优化算法(二分搜索)

最长递增子序列 暴力解法&#xff1a; 思路&#xff1a;使用动态规划的思想&#xff0c;判断当前元素之前的所有元素&#xff0c;如果比当前元素小&#xff0c;则修改当前元素的最长递增子序列&#xff08;需判断是否需要修改&#xff09;。 时间复杂度&#xff1a;O(n^2) im…

智能优化算法应用:基于天鹰算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于天鹰算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于天鹰算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.天鹰算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

记一次Java内存溢出导致程序宕机的问题及排查

Hi, I’m Shendi 记一次Java内存溢出导致程序宕机的问题及排查 问题场景 今天在使用工具中的 word 转 pdf 出了问题&#xff0c;报502错误&#xff0c;打开服务器发现服务被关闭了&#xff0c;起初以为是误关&#xff0c;打开后重新转换又出现了这个问题&#xff0c;在项目文件…

Redis保证高可用的三种方式

Redis保证高可用主要有三种方式&#xff1a;主从、哨兵、集群。 主从复制了解吗&#xff1f; Redis主从复制简图 主从复制&#xff0c;是指将一台 Redis 服务器的数据&#xff0c;复制到其他的 Redis 服务器。前者称为 主节点(master)&#xff0c;后者称为 从节点(slave)。且…

【EXCEL】offset函数

语法&#xff1a; offset(reference,row,column,[height],[width]) 例子&#xff1a;

Java网络编程 *TCP与UDP协议*

网络编程 什么是计算机网络? 把分布在不同地理区域的具有独立功能的计算机,通过通信设备与线路连接起来&#xff0c;由功能完善的软件实现资源共享和信息传递的系统 简单来说就是把不同地区的计算机通过设备连接起来,实现不同地区之前的数据传输 网络编程是干什么的? 网络…

UDS诊断 10服务

文章目录 简介诊断会话切换请求和响应1、请求2、子功能3、肯定响应4、否定响应5、特殊的NRC 为什么划分不同会话报文示例UDS中常用 NRC参考 简介 10服务&#xff0c;即 Diagnostic Session Control&#xff08;诊断会话控制&#xff09;服务用于启用服务器中的不同诊断会话&am…

【软件测试】系统测试

一、系统测试概念 系统测试&#xff08;System Testing&#xff09;是将已经集成好的软件系统&#xff0c;作为整个基于计算机系统的一个元素&#xff0c;与计算机硬件、外设、某些支持软件、数据和人员等其他元素结合在一起&#xff0c;在实际运行环境下&#xff0c;对计算机…