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

解析odrive抗齿槽算法讲解 校准完后,直接通过编码器反馈的位置找到表中对应的力矩补偿上去,其中查表方法要搞明白,建表前其实有个先到绝对位置的0的操作,所以建表是从index=0开始的,对应就是绝对角度的0/3600,每次补偿通过编码器反馈的绝对角度!电机齿槽扭矩效应定义、产生原因等这里不再赘述,我前面编码器线性校准的文章也提到过,具体解决办法之前一直在看MITCheetah的方法,因为他的方法操作比较简洁,但是具体建表和查表的原理有点不好理解,odrive的原理姐非常的简单,并且效果不错所以这里讲一讲。 阅读详情
AI摘要

本文详细解释了齿槽效应在永磁电机中的表现、产生原因,以及ODrive的抗齿槽校准方法,包括硬件接线和官方代码操作。作者分享了校准步骤和注意事项,以及如何通过调整参数改善电机性能。

 
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接口。

在这里插入图片描述

驱动板 购买链接:https://item.taobao.com/item.htm?ft=t&id=644329838237
电机 购买链接:https://item.taobao.com/item.htm?ft=t&id=643573104607
 

三、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”,重启。

演示视频:https://www.bilibili.com/video/BV1XG411v7hM/?vd_source=33c70ef3713ea86e5385ac1e62223bcf

五、总结

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

 
 
欢迎加入技术交流群:923734429 (入群申请写:优快云)
 
 
 
(完)
 

ESP32+SimpleFOC实战:手把手教你移植ODrive的抗齿槽算法,让电机静如处子 本文详细介绍了如何将ODrive的抗齿槽算法(anti-cogging)移植到ESP32+SimpleFOC平台,解决无刷电机低速运转时的抖动问题。通过手把手教程,包括算法原理解析、代码移植步骤和调试技巧,帮助工程师实现电机静如处子的精密控制效果。 阅读详情

相关推荐

从开源驱动器到自研:手把手教你基于ODrive代码移植到STM32F4(Keil/VSCode双版本)

本文详细介绍了如何将开源电机驱动器ODrive的代码移植到STM32F4平台,涵盖架构解析、开发环境配置、核心模块移植及系统调试等关键步骤。通过Keil和VSCode双版本实现,帮助开发者快速掌握FOC算法移植与优化技巧,适用于电机控制领域的国产化替代与功能定制需求。

weixin_30666401的博客 414

simple foc 移植odriver foc的 anti-cogging(抗齿槽算法)

simple foc.低速运动,抗齿槽

raominping的专栏 2000

ODrive0.5.5源码分析(3) control_loop_cb

ODrive0.5.5 control_loop_cb

danger的博客 3900

简单理解:什么是抗齿槽算法?

本文介绍了永磁同步电机的齿槽效应及其补偿算法。齿槽效应源于定子齿槽与转子永磁体的周期性磁吸作用,导致电机在不通电时仍存在卡顿和转矩波动,尤其在低速时影响显著。抗齿槽算法通过离线标定建立角度与补偿电流的对应表,运行时实时查表叠加反向电流以抵消阻力,分为查表法和谐波拟合法两种实现方案。查表法精度高但需存储空间,谐波法节省内存但调试复杂。合理应用抗齿槽补偿可显著提升电机低速平稳性、降低噪音和振动,是精密驱动系统的关键模块。调试时需注意标定空载、表格点数足够、避免过补偿等问题。

DIY 1132

电机控制OdriveFOC-无刷电机控制(指令篇-配置)-odrive配置直接使用

【电机控制】OdriveFOC-无刷电机控制(指令篇——配置)——odrive配置直接使用

odrive移植 ODrive-fw-v0.3.6-keil 无刷电机控制

odrive移植 ODrive-fw-v0.3.6-keil 无刷电机控制

ODrive0.5.1程序分析#4 闭环控制程序(run_closed_loop_control_loop)

ODrive程序解读

ledros的博客 4058

ODrive FOC BLDC伺服控制方案,KEIL版本

ODrive FOC BLDC伺服控制方案,KEIL版本

SimpleFOC、ODrive和VESC 教程链接汇总

一、SimpleFOC系列教程 SimpleFOC(一)—— 简介(附有文件下载链接) SimpleFOC(二)—— 快速入门 (开环控制) SimpleFOC(三)—— AS5600角度读取 SimpleFOC(四)—— 闭环控制 SimpleFOC(五)—— 双电机控制 SimpleFOC(六)—— PowerShield和AS5047P SimpleFOC(七)——STM32(Bluepill)的应用 SimpleFOC(八)—— 理论+实践 深度分析SVPWM SimpleFOC(九)——

loop222的博客 12万+

ODrive-fw-v0.3.6_keil.zip

原版ODrive双电机驱动KEIL移植版

ODrive-fw-master-v0.3.6-keil(开源驱动keil工程).zip

ODrive驱动软件移植到keil工程,官网:https://discourse.odriverobotics.com/ ODrive入门指南:https://blog.youkuaiyun.com/abf1234444/article/details/103325808 版本说明 ODrive 硬件版本: v3.6-56V ODrive 硬件内部固件版本: fw-v0.5.1 odrivetool 版本: 0.5.1.post0(pip install odrive==0.5.1.post0)

ODrive移植keil(八)—— 闭环控制

定点运算早就存在,但是ST采用定点运算配合它的电机库,极大的推广了这一技术,我觉得目前市面上只要是定点运算的电机驱动器,应该都会受到ST的影响,或者直接就师承ST。发送指令“C”,3秒钟后电机“嘀”一声,然后正转8个电角度,反转8个电角度,同时串口打印校准参数。如果限速,电机只能达到限制转速。发送指令“C”,3秒钟后电机“嘀”一声,然后正转8个电角度,反转8个电角度,同时串口打印校准参数。发送指令“C”,3秒钟后电机“嘀”一声,然后正转8个电角度,反转8个电角度,同时串口打印校准参数。

loop222的博客 1万+

ODrive3.4 固件(keil移植版)

ODrive3.4 固件(keil移植版)

ODrive 8kHz控制环原理与定时器硬件时基设计

电机FOC控制中的控制环频率是决定动态响应、转矩纹波和系统稳定性的核心参数。8 kHz控制环并非随意设定,而是基于电机电气/机械时间常数匹配的工程最优解,其本质依赖高精度、低抖动的硬件定时器时基。在STM32F405平台上,该频率通过高级定时器TIM1(ARR=19999@168MHz)实现125 μs严格周期中断,并协同ADC同步采样、互补PWM生成与死区保护,构成实时性闭环。理解定时器配置、中断优先级、ADC触发时序及FOC计算流水线优化,是调试高动态伺服系统、移植固件或提升电流检测精度的关键基础。本文

weixin_33895657的博客 336

深入解析AndroidManifest.xml与device_admin.xml:打造完美DeviceOwner应用配置

本文深入解析了Android企业级开发中DeviceOwner应用的核心配置文件AndroidManifest.xml与device_admin.xml。详细阐述了如何精准声明DeviceAdminReceiver、定义管理策略,并提供了通过ADB命令进行设置与验证的实战指南,帮助开发者构建权限完整、配置正确的设备所有者应用。

ice55的博客 679

Yolov26 在 Rk3588 上的 Rknn Onnx 部署实践(模型转换)

本文详细介绍了将YOLOv26 ONNX模型转换为RKNN模型的过程,适用于RK3588平台。主要内容包括:1)量化数据集的创建,通过随机抽取最多400张JPG图片生成校准数据集;2)ONNX转RKNN的完整脚本,支持多种量化方式和平台适配;3)模型转换的参考调用方式;4)模型结构对比展示。文章还提供了注意事项,强调量化数据集图片尺寸、mean/std值需与实际推理一致,并给出精度优化建议。该转换流程为YOLOv26模型在RK3588上的高效部署提供了完整解决方案。

qq_64366203的博客 1125

电机参数之齿槽转矩

1:齿槽转矩(cogging torque)有谁产生? 通常电枢铁芯为了安放定子绕组,会存在齿和槽,由于齿槽的存在引起气隙磁场不均匀,一个齿距的磁通相对集中在齿部。转子的永磁体磁场和定子的齿槽相互作用产生。齿槽转矩是永磁电机特有的问题之一,齿槽转矩是永磁电机绕组不通电时永磁体和定子铁心之间相互作用产生的转矩,是由永磁体与电枢齿之间相互作用力的切向分量引起的。 2:齿槽转矩方向? 在圆周方向产

tangxing1212的专栏 2万+

CST局部网格加密实战:从基础设置到Meshgroup高效管理

本文详细解析了CST电磁仿真软件中的局部网格加密技术,重点介绍Meshgroup功能的高效管理方法。通过平行板电容等实战案例,阐述从基础设置到多级加密策略的完整流程,帮助用户精准提升关键区域仿真精度,同时优化计算资源使用效率。

grafana6viz的博客 694

foc进阶篇2——齿槽转矩补偿

(1)虽然这种离线标定再查表的方法非常直接且高效,但是也存在着诸多局限性。实际使用时一定要注意,否则可能效果不佳甚至会出现负面作用。(2)要搞清楚到底需不需要齿槽转矩补偿。​ 如果只是单纯为了速度环低速不抖动,那么只需要调高速度环刚性即可,不用补偿也能做到。​ 如果是纯电流环应用,且绝大部分都处于高速工况,那么这种补偿可以说是毫无作用的。想象一下,如果电流环的目标较大于负载转矩(包括摩擦和阻力),那么电机最终会加速到最高转速,此时在电流环目标上叠加齿槽转矩电流前馈是没有用的。

jdhfusk的博客 1442

Quartus Prime器件库安装实战:从版本选择到权限避坑指南

本文详细介绍了Quartus Prime器件库的安装全流程,从版本选择、精准下载到权限设置和安装验证。重点解析了版本匹配的黄金法则、管理员权限的必要性以及安装路径的最佳实践,帮助用户避开常见陷阱,确保器件库安装一次成功。

weixin_33713707的博客 514

【YOLO 系列】基于YOLOv8的工业零件表面缺陷智能检测系统【python源码+Pyqt5界面+数据集+训练代码】

本文详细介绍了如何基于YOLOv8深度学习模型和PyQt5图形界面,构建一套完整的工业零件表面缺陷智能检测系统。内容涵盖从环境搭建、数据集标注、模型训练调参到最终封装成可执行桌面软件的全流程,并深入解析了YOLOv8在工业视觉场景中的技术优势与落地优化策略。

ol78901234的博客 400

永磁电机齿槽转矩优化设计全解析

摘要:永磁直流电机的齿槽转矩问题会导致转矩波动和振动噪声,影响控制精度。本文系统分析其产生机理,综述多种优化方法:磁极优化(极弧系数调整、磁极偏心等)可降幅85%以上;定子优化(斜槽技术、槽口调整)能削减89.1%转矩;转子改进(辅助凹槽、表面开槽)结合磁极优化可降低70%。研究对比了田口法等多参数协同优化策略,证明组合方法效果更优。该成果为高性能永磁电机设计提供了重要参考,未来可结合智能算法和新型制造工艺进一步提升优化效果。

梦兮丫丫的博客 1898

【020】基于51单片机智能路灯系统Proteus仿真与实物设计

【020】基于51单片机智能路灯系统Proteus仿真与实物设计

小邓子分享官的博客 1878

ODrive移植keil(二)—— ODrive的程序架构

本节及之后的教程将把odrive移植到keil环境下,为了降低移植难度,同时也为了让大家更容易学习掌握移植后的代码,本次移植,只移植电机的核心控制功能,实现常用的一些功能。这部分代码会让人看得很无助,因为所有的代码都在此时执行,比如最下面的开环控制,都已经闭环了难道它还在运行,它运行的意义是什么?ADC1的规则通道转换所有闲杂的ADC,比如温度检测,不需要时效,软件触发后将一直在后台转换;国外的电机驱动技术领先国内这是不争的事实,“洋务运动”一直都在,只是在不同的领域不同的范围,

loop222的博客 1万+

SAP物料主数据中的销售视图。这是一个在销售与分销模块中至关重要的核心主数据,直接关系到从报价到交货的整个销售流程

SAP物料主数据的销售视图是销售流程的核心基础,它定义了物料如何被销售、定价、开票和交付。销售视图包含五个关键控制点:1)基本销售数据控制物料销售状态;2)销售组织数据决定销售渠道和产品分类;3)通用物料数据管理销售描述和税务分类;4)交货计划控制交付参数;5)开票计划管理定价规则。这些设置直接影响销售流程顺畅度、数据准确性、客户满意度、财务合规性和业务灵活性。建议将销售视图创建纳入新产品引入流程,并建立规范的维护机制,确保业务变化时及时更新配置。

金牌架构师 666

Grafana 可视化配置

Grafana 可视化操作使用

原名又逢乱世。不要放下学习的脚步,毕竟比天天打牌、钓鱼、打游戏更能从内在充实自己。 1940
上一篇: ODrive移植keil(八)—— 闭环控制
下一篇: JC2804/JC4010/JC4310 快速入门
loop222
博客等级 码龄8年 4091粉丝 61原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值