ODrive踩坑(五)ODrive驱动云台电机、低齿槽转矩电机实现高精度定位

2023-10-11 10:40

本文主要是介绍ODrive踩坑(五)ODrive驱动云台电机、低齿槽转矩电机实现高精度定位,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前几篇介绍了ODriveWindows下的使用环境搭建,驱动3508 / 5008无刷电机、TLE5012BAS5047P的ABI编码器配置、AS5047P-SPI绝对值编码器配置。

ODrive踩坑(一)windows下使用环境的搭建,odrivetool及USB驱动的安装
ODrive踩坑(二)电机和编码器参数配置、校准、位置闭环模式转动电机(TLE5012B - ABI)
ODrive踩坑(三)ODrive配置使用AS5047P磁编码器的ABI接口
ODrive踩坑(四)ODrive配置AS5047P-SPI绝对值磁编码器,不需每次上电校准无刷电机,直接上电可用


一、航模无刷电机空载的定位精度问题


  先前用ODrive驱动的电机,都是些航模无刷电机,高压 高转速 大功率,响应迅速并且能很好的进行闭环控制。不过使用的体验并没那么完美。差的地方主要体现在空载的定位精度不好,即使PI调节的很细致,空载时也多少有那么一点静差。而且效果因电机而异:尺寸小的电机,一般KV值大,定位效果也不好;尺寸大的电机,KV小,定位效果相对较好。

  使用普通航模电机,引起空载时定位精度差的主要原因有:电机磁极对数较少齿槽转矩过大

  • 电机磁极对数较少 这个好理解,查电机的磁瓦数量呗,多就是多少就是少,像航模电机大多数都喜欢使用7对极。也通常与电机尺寸有关,大尺寸电机更容易安放更多的磁极,相对的磁极越多KV值也就越小。

  • 齿槽转矩 指的是 永磁电机绕组不通电时,永磁体铁芯之间相互作用产生的转矩。它的产生来源于永磁体和铁芯,这种力试图将它们对齐。轻轻转一下电机轴,就能判断一个电机齿槽转矩的大与小。

  航模电机 的 齿槽转矩通常较大。用手转动的 挫顿感 越强,齿槽转矩就较大,也就越不适合用在需要 空载高精度定位 的场合。


  对于运动阻尼小需要高精度定位 的应用,可以选用专门设计的电机,像云台电机。这类电机一般 磁极对数较多相电阻偏大、磁极或者绕组可能特意优化过,以降低齿槽转矩,可以实现更高精度的定位。一般为扁平的外形,便于直驱载荷。不经过减速,就没有机械回差的影响。



二、云台电机测试


  从最近收到的一批云台电机说起,起初购买是图它尾部自带的磁钢,想着 配合磁编码器芯片进行闭环位置定位。以前都是拿普通电机在轴的尾部用胶水粘贴强磁,同心度完全看天意,而且也说不定哪天就掉了。而换成这种带磁铁安装卡座的电机,就没了安装上的顾虑,使用起来更为方便。

  经过一番测试,电机意外的好用。特点与上面说的一致,相电阻大、所需的驱动电流小,低转速大扭矩。最关键的是齿槽转矩小,小到几乎没有 挫顿感 ,进而运行起来异常丝滑,没有大电机的那种空载一卡一卡的情况,定位非常精准,闭环稳定后几乎没有静差。

  起初想看看里面的磁瓦数量,来确定极对数。但从外面很难看到里面,想卸掉底部的磁极和卡座,然后把转子卸下来。结果轴的尾部是设计过的,有一块突起,想要卸下转子只能从上面将轴敲下来。搞不定,不过勉强从缝隙中能看到转子的磁极,根本没有瓦片,是一整个环状…整个人傻了

  无奈,只能换一种方法。将一相通直流电,转动转子,转一周有7个卡顿的位置,也就是说它是7对极。

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


安装在以前的 万能电机转接板上,再将三相FPC排线转换成2.54的插针,便于引出。
在这里插入图片描述

  打个小广告。

  为了方便测试 AS5047P-SPI绝对值编码器,也便于扩展不同的电机,就有了下面这块万能转接板,支持 2208、2212、3508、5008、6010、6374、42步进、57步进 等不同电机的定位安装。

  图中AS5047P转接板购买链接,我的淘宝小店:AS5047P SPI磁编码器 3206云台无刷电机 带径向磁铁 Odrive电机

  店铺详情内有安装孔位、原理图、教程、资料,手机端可能因没做适配看不到,建议用电脑打开。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


  根据选择的 编码器类型,选择合适的接线方式,我用的是 AS5047P-SPI绝对值磁编码器,接线及配置方法参照本专栏第(四)章节。

  既然也是7对极,那电机参数和控制器参数也先按照之前的配置。测试后发现控制效果竟然出奇的好,之前调出来的真是万能参数。๑乛◡乛๑嘿嘿
在这里插入图片描述


三、ODrive配置


  • 首先根据自己的 编码器类型,照着本专栏的的(二)(三)或(四)撸一遍配置。
    例如:
    TLE5012B-E1000,ABI接口,按照(二)配置。
    AS5047P,ABI接口,按照(三)配置。
    AS5047P,SPI接口,按照(四)配置。(可在校准一次编码器后直接上电使用,不用像ABI编码器要每次上电都校准)

  • 仅进行其中的 主板参数配置电机参数配置编码器参数配置控制器参数配置 即可,电机和编码器校准要另外配置。


  • 进行电机和编码器校准前,需要先更改云台电机的电流电机类型
# 配置过流保护阈值(A)
odrv0.config.dc_max_positive_current = 6.0# 配置电机0的电流采样阈值(A)
odrv0.axis0.motor.config.requested_current_range = 10# 配置电机0的限制电流(A)(根据自己电机的额定电流更改)
odrv0.axis0.motor.config.current_lim = 3# 配置电机0校准时的电流阈值(根据自己电机的负载状况酌情配置)(A)
odrv0.axis0.motor.config.calibration_current = 3# 配置电机0类型。
# 目前支持两种电机:大电流电机(MOTOR_TYPE_HIGH_CURRENT)和云台电机(MOTOR_TYPE_GIMBAL)
odrv0.axis0.motor.config.motor_type = MOTOR_TYPE_GIMBAL# 保存参数
odrv0.save_configuration()# 重启驱动器
odrv0.reboot()

四、电机和编码器校准


校准云台电机的编码器。

# 测试AS5047P-SPI磁编码器能否正常读数(手动拨动下电机)
odrv0.axis0.encoder.shadow_count# 如上述读数始终为0,建议断电重启,再重新检查编码器读数是否正常# 进行校准,(运行后,电机会正转一圈再反转一圈)
# 注意这个指令跟先前用的都不一样
odrv0.axis0.requested_state = AXIS_STATE_FULL_CALIBRATION_SEQUENCE

之后进入闭环模式,电机会保持位置,用手扭动电机,电机会产生反抗并回到原来位置:

# 配置电机为闭环模式
odrv0.axis0.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL

测试运动。电机会按照之前设置的梯形轨迹运行到指定位置:

# 控制电机运行到10圈的位置
odrv0.axis0.controller.input_pos = 10# 控制电机运行到0圈的位置
odrv0.axis0.controller.input_pos = 0

经过上面的校准后,ODrive已经能够驱动云台电机,并用AS5047P磁编码器进行闭环控制。

但并不会在重启后自动进入闭环,仍需在重启后手动进入闭环,略有不便。下面设置上电自动进入闭环运行。

# 设置电机预校准。(不用每次上电都哔~的一声)
# 驱动器会将本次校准值保存,避免上电启动后自动校准,以加快启动速度。
odrv0.axis0.motor.config.pre_calibrated = True# 设置编码器预校准。(不用每次上电都右转一圈又左转一圈)
# 驱动器会将本次校准值保存,避免上电启动后自动校准,以加快启动速度。
odrv0.axis0.encoder.config.pre_calibrated = True# 设置ODrive上电启动时,自动进入闭环模式
odrv0.axis0.config.startup_closed_loop_control = True# 保存参数
odrv0.save_configuration()# 重启驱动器
odrv0.reboot()

运动过程丝滑流畅,齿槽转矩小的体验就是不一样。定位效果超级好,稳定后几乎没有静差。

不过跟先前的几个电机一样,闭环运行时的噪音较大,估计参数还要再重调一次。



五、错误修复、注意事项


多用odrv0.axis0.error去检错,多用odrv0.axis0.motorodrv0.axis0.encoder去检查参数。

odrv0.axis0.encoder.shadow_count可以测试AS5047P-SPI磁编码器能否正常读数。

odrv0.vbus_voltage:检查ODrive的供电电压。

如果你的ODrive无法正常工作,用如下查看错误列表:
dump_errors(odrv0) 查看错误
dump_errors(odrv0, True) 清除错误(如果报错ODrive不会继续执行电机旋转指令)


如需重新对 AS5047P 进行软硬件设计,有以下文章可供参考:
AS5047P磁编码器应用设计大全解:硬件电路设计、SPI通信时序、逻辑波形分析、注意事项

相关传感器:
TLE5012B 硬件电路设计、4线SPI通信,驱动完美兼容4线SPI不用改MOSI开漏推挽输出

这篇关于ODrive踩坑(五)ODrive驱动云台电机、低齿槽转矩电机实现高精度定位的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/187477

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略 1. 特权模式限制2. 宿主机资源隔离3. 用户和组管理4. 权限提升控制5. SELinux配置 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes的PodSecurityPolicy(PSP)是一个关键的安全特性,它在Pod创建之前实施安全策略,确保P

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

工厂ERP管理系统实现源码(JAVA)

工厂进销存管理系统是一个集采购管理、仓库管理、生产管理和销售管理于一体的综合解决方案。该系统旨在帮助企业优化流程、提高效率、降低成本,并实时掌握各环节的运营状况。 在采购管理方面,系统能够处理采购订单、供应商管理和采购入库等流程,确保采购过程的透明和高效。仓库管理方面,实现库存的精准管理,包括入库、出库、盘点等操作,确保库存数据的准确性和实时性。 生产管理模块则涵盖了生产计划制定、物料需求计划、