ODrive应用 #6 编码器

编码器支持的编码器请首先阅读一下ODrive编码器选型指南。编码器校准ODrive支持的所有编码器类型都需要进行某种编码器校准。这需要以下条件:选择一种编码器并将其安装到电动机选择编码器通讯接口(e.g.,AB,ABIorSPI)将编码器通信接口连接到ODrive加载正确的odrive固件(默认的固件大多数情况下都是可以的)电机校准将设置保存在ODrive中,并正…

大家好,又见面了,我是你们的朋友全栈君。

编码器

支持的编码器

请首先阅读一下ODrive编码器选型指南

编码器校准

ODrive支持的所有编码器类型都需要进行某种编码器校准。 这需要以下条件:

  • 选择一种编码器并将其安装到电动机
  • 选择编码器通讯接口 (e.g., AB, ABI or SPI)
  • 将编码器通信接口连接到ODrive
  • 加载正确的odrive固件(默认的固件大多数情况下都是可以的)
  • 电机校准
  • 将设置保存在ODrive中,并正确启动

无索引信号的编码器

在编码器校准过程中,必须允许转子旋转而且不能有偏载。 这意味着载荷均匀和较弱的摩擦载荷才行,但是重载或类似弹簧载荷不行。
odrivetool中输入<axis>.requested_state = AXIS_STATE_ENCODER_OFFSET_CALIBRATION Enter
要验证一切正常,请检查以下变量:

  • <axis>.error应该为 0。
  • <axis>.encoder.config.offset应该打印出一个数字类似 -326 或 1364。
  • <axis>.motor.config.direction 应该打印出 1 或 -1。

带有索引信号的编码器

如果您的编码器带有索引(Z)信号,则可以避免每次启动时都必须进行编码器偏移校准,而可以使用索引信号将编码器重新同步到存储的偏移校准。
以下是进行一次性校准和配置的步骤。 请注意,您可以一次校准一台电机,也可以同时将所有电动机一起按照这些步骤操作。

  • 由于只需要这样做一次,因此建议您将电机与编码器以外的任何其他机械分离,以使其自由旋转。
  • 设置 <axis>.encoder.config.use_indexTrue
  • 执行 <axis>.requested_state = AXIS_STATE_ENCODER_INDEX_SEARCH。这将使电机朝一个方向旋转,直到找到编码器索引。
  • 按照无索引信号的编码器校准说明进行操作。
  • 设置 <axis>.encoder.config.pre_calibratedTrue 以使能索引脉冲。
  • 如果您想在启动时搜索索引信号,请设置 <axis>.config.startup_encoder_index_searchTrue
    • 如果您希望手动进行操作,请在每次启动ODrive后运行 <axis>.requested_state = AXIS_STATE_ENCODER_INDEX_SEARCH
  • 如果您希望在启动时尽量的快,请设置<axis>.motor.config.pre_calibratedTrue 这样就不需要在每次启动时重新测量电机参数。
  • 执行 <odrv>.save_configuration() Enter,保存配置。

现在每次重新启动时,电动机都会向一个方向旋转,直到找到编码器索引。

  • 如果您的电机启动后寻找编码器索引时由于负载过重转不动时,您可以适当增大<axis>.motor.config.calibration_current

反方向旋转编码器索引搜索

有时,您希望索引搜索仅在特定方向上进行(默认设置的相反),而不是通过交换马达引线来实现,可以将以下三个值设置为负数:

  • <axis0>.config.calibration_lockin.vel
  • <axis0>.config.calibration_lockin.accel
  • <axis0>.config.calibration_lockin.ramp_distance

重要提示 如果索引信号工作正常,当ODrive执行索引搜索时,您的电机应该找到相同的旋转位置。 这意味着如果设置了<axis> .config.startup_encoder_index_search,则电机应该旋转并停止在相同位置,以便搜索在重新启动时开始,或者您在重新启动后调用命令:<axis> .requested_state = AXIS_STATE_ENCODER_INDEX_SEARCH。 您可以对此进行测试。 发送reboot()命令,然后在重新启动时转动电机,然后确保每次退出重新索引搜索时电机都旋转到正确的位置。 确保尝试几次此过程。

启动顺序说明

以下是必须为您的编码器配置设置的变量。 您的值将根据您的编码器参数来配置:

  • <axis>.encoder.config.cpr = 8192
  • <axis>.encoder.config.mode = ENCODER_MODE_INCREMENTAL

以下变量的值会影响是否能顺利完成校准。请在您理解了这些变量的含义后再根据您的情况进行更改。

  • <axis>.motor.config.motor_type = MOTOR_TYPE_HIGH_CURRENT选择您所使用的电机类型(大电流电机、小电流云台电机)。
  • <axis>.encoder.config.calib_range = 0.05 有助于在校准期间放宽编码器计数准确性的检查。
  • <axis>.motor.config.calibration_current = 10.0 如果电机太大或太小需要调整此校准电流的大小。
  • <axis>.motor.config.resistance_calib_max_voltage = 12.0 对于某些电机需要调整。
  • <axis>.controller.config.vel_limit = 50000 如果此值太低电机在校准期间有可能会突然停止。
    这么多变量是不是有点烦恼,值得庆幸的是,有很多热心肠的人会帮助您调试校准问题。
    如果校准成功,则祝贺您。
    现在尝试:
  • <axis>.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL
  • <axis>.controller.set_vel_setpoint(3000,0)
    重复设置几个位置值,然后:
  • <axis>.requested_state = AXIS_STATE_IDLE

如果带现在一切顺利的话? 太棒了!现在保存校准,您可以设置以下内容。 请注意,这仅在使用绝对编码器或带索引编码器时才有效。

  • <axis>.encoder.config.pre_calibrated = True
  • <axis>.motor.config.pre_calibrated = True

然后确认一下是否已经为True

  • <axis>.encoder.config.pre_calibrated

如果上条指令返回为True,并且encoder.pre_calibratedTrue,则到目前为止没有错误。 运行以下指令:

  • odrv0.save_configuration()
  • odrv0.reboot()

现在,请查看重启后是否可以运行:

  • <axis>.requested_state = AXIS_STATE_ENCODER_INDEX_SEARCH

而且没有出现错误。

如果校准失败会怎样?

编码器问题会以很细微的方式影响您的ODrive。 例如,当您执行以下操作时,ODrive可能无法完成校准:

  • <axis>.requested_state = AXIS_STATE_FULL_CALIBRATION_SEQUENCE

又或者,当您执行以下操作时,ODrive完成了校准序列:

  • <axis>.requested_state = AXIS_STATE_FULL_CALIBRATION_SEQUENCE

但是,当您执行以下操作进入闭环运行时:

  • <axis>.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL

电机开始像这个视频里这样抖动。

编码器测试

您可以进行一些测试以确保编码器连接正确。
执行以下命令:

  • <axis>.encoder.shadow_count

然后用手转动电动机,看该值是否变化。 另外,请注意该命令:

  • <axis>.encoder.config.cpr = 4000

必须反映电机轴旋转一圈ODrive收到的计数。 因此,请使用shadow_count来测试其是否正常运行。
在某些情况下,您必须使用示波器,否则您可能永远无法正确调试。 如果您有示波器,请尝试以下操作:
连接到AB引脚,看看在转动电机时是否为方波。
连接到编码器索引引脚,看电机旋转一整圈是否有一个脉冲。 有时很难看到。
如果使用编码器的SPI通信接口,则可以测量CLK和CS引脚上的信号。 网上有很多例子说明怎么判断它们是否正常。

编码器噪声

噪声存在在所有电路中,我们只要让噪声不影响我们的系统正常工作即可。就算您用的编码器和别人的一样,别人的工作正常,这并不代表你自己的也没有问题。如果您担心噪音,可能有以下几种来源:

  • 最大的可能,编码器线可能太靠近电机线,请尽可能避免重叠
  • 编码器和ODrive之间的连线太长
  • 使用了排线连接编码器和ODrive

可以使用屏蔽电缆或双绞线,其中每对双绞线的一侧都接地,另一侧则与信号相连,来减少噪声干扰的影响。 如果使用的是SPI,请在CLK上串联一个20-50欧姆的电阻,因为CLK上更容易被噪声干扰。

如果您使用带有索引信号的编码器,则遇到的另一个问题是ODrive的Z输入上的噪声。 此问题的症状如下:

  • 当执行编码器校准时很难成功。

  • 执行完 odrv0.save_configuration()odrv0.reboot()后出现一些奇怪的现象。

  • 在执行索引搜索时,电机每次搜索完成后停在的位置不一致。

    一个简单的解决方案是在ODrive索引信号输入引脚和GND之间增加一个22nF到47nF的电容。

AS5047/AS5048 编码器

AS5047/AS5048 编码器是基于霍尔效应的磁旋转编码器。

AS5047 有三种独立的信号输出接口: SPI, ABI, PWM
AS5048 有四种独立的信号输出接口: SPI, ABI, I2C, PWM

这两种芯片都带有评估板,可以简化将芯片安装到电机。 如果您使用评估板,则应选择3.3v的设置,并将MOSI的高电平设置为3.3v。

如果您遇到校准问题,请确保您的磁体位于电动机旋转轴的中心,一些用户报告说这对校准有很大影响。 还要确保您的磁铁高度在规定范围内。

使用ABI接口

默认的ODrive固件支持通过ABI与AS5047/AS5048连接。 在接线时,将A,B,3.3v,GND连接到ODrive上标记的引脚。首字母缩写词 I 和 Z 表示相同,如果您使用编码器索引信号,则也将它们连接起来。

使用SPI接口

TobinHall编写了一个支持AS5047/AS5048上SPI选项的分支。 使用他的构建来烧录到ODrive,并将MISO,SCK和CS连接到ODrive上标记的引脚。
将MOSI连接至3.3v,连接至ODrive的SCK,CLK,MISO,GND和3.2v引脚。(请注意,对于SPI,首字母缩写SCK和CLK表示同一事物,首字母缩写CSn和CS表示同一事物)

将以下命令添加到您的校准/启动程序中:

  • <axis>.encoder.config.abs_spi_cs_gpio_pin = 4 或您选择的其它GPIO
  • <axis>.encoder.config.mode = 257
  • <odrv>.axis0.encoder.config.cpr = 2**14

如果您有任何问题或疑问,欢迎您加入ODrive社区或QQ群 851421965 进行交流。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/126789.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【CodeForces】704 B. Ant Man「建议收藏」

    【CodeForces】704 B. Ant Man

    2022年3月12日
    60
  • matlab 折线图 配色

    matlab 折线图 配色首先根据互补色原理,选矩形四个角的颜色为主色。其次根据matlabRGB颜色对照表MatlabRGB颜色对照表(0-1之间取值)选取颜色这里我选的是DodgerBlue4[0.06275,0.30588,0.5451]Purple[0.62745,0.12549,0.94118]DarkOrange[1,0.54902,0]Gold[1,0.84314,0]画的图长这样…

    2022年5月12日
    35
  • 机器学习之有监督学习,无监督学习,半监督学习

    机器学习之有监督学习,无监督学习,半监督学习文章目录前言有监督学习无监督学习半监督学习前言机器学习是数据分析和数据挖掘的一种比较常用,比较好的手段从有无监督的角度,可以分为三类:有监督学习无监督学习半监督学习有监督学习用已知某种或某些特性的样本作为训练集,以建立一个数学模型,再用已建立的模型来预测未知样本,此种方法被称为有监督学习,是最常用的一种机器学习方法。是从标签化训练数据集中推断出模型的机器学习任务问:有监督学习的…

    2022年5月28日
    54
  • vs2012卸载不干净_CAD如何卸载干净

    vs2012卸载不干净_CAD如何卸载干净当VS2005卸载不干净时  那个恶心……当手动删除一部分文件(也许这部分文件中包括了卸载程序)后,再调用win的卸载程序或360的软件卸载来卸载VS2005,答案是……没办法卸载干净的。想想也是必然的,没了对应的卸载程序当然会卸载不了对应那部分信息,然而再次安装时安装程序首先检测注册表中有没有对应的安装信息,假如检测到有,那你挂了,安装程序自动屏蔽掉已经有注册信息的一部分,只安装被正常卸

    2022年9月23日
    0
  • 《提问的艺术》读后感「建议收藏」

    《提问的艺术》读后感「建议收藏」前言提问前他明明能帮到我却不帮我提问前必知必会的一些事关于搜索引擎提问时找准对象学会停顿组织你的问题清晰的发问低声下气代替不了做自己的家庭作业删除无意义的要求不要把问题标记为紧急即使对你而言的确如此礼貌总是有益的对待无礼提问禁区总结前言众所周知,你所提技术问题的解答很大程度上取决于你提问的方式与解决此问题的难度,但是怎么清楚的让有经验的人明白你表述的问题,让你获得最

    2022年6月23日
    20
  • Jquery确认对话框弹出

    Jquery确认对话框弹出Jquery确认对话框弹出

    2022年4月23日
    92

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号