odrive教程(处理器2O11接口)

输入接口在开发自定义ODrive控制代码时,建议您的电动机可以自由连续旋转,并且不与行程有限的传动系统连接ODrive可以通过各种端口和协议进行控制。如果您对嵌入式熟悉的话也可以直接在ODrive上运行自定义代码。请参考ODrive固件开发指南。文章目录输入接口引脚说明引脚功能优先级模拟输入霍尔信号反馈引脚native协议Python其它编程语言ASCII协议ArduinoStep/…

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

输入接口

在开发自定义ODrive控制代码时,建议您的电动机可以自由连续旋转,并且不与行程有限的传动系统连接

ODrive可以通过各种端口和协议进行控制。 如果您对嵌入式熟悉的话也可以直接在ODrive上运行自定义代码。 请参考ODrive固件开发指南

引脚说明

GPIO primary step/dir other
GPIO1 UART TX Axis0 Step Analog input, PWM input
GPIO2 UART RX Axis0 Dir Analog input, PWM input
GPIO3 Axis1 Step (+) Analog input, PWM input
GPIO4 Axis1 Dir (+) Analog input, PWM input
GPIO5 Analog input (*)
GPIO6 (*)
GPIO7 (*) Axis1 Step (*)
GPIO8 (*) Axis1 Dir (*)

(+) 适用于ODrive v3.4和更低的版本
(*) 适用于ODrive v3.5和更高的版本

注意:

  • 您还必须将ODrive和另一块板的GND连接在一起。
  • ODrive v3.3及更高版本具有5V耐压GPIO引脚。
  • ODrive v3.5和更高版本的默认step/dir引脚上具有一些噪声抑制滤波器
  • 您可以通过配置 axis.config.<step/dir>_gpio_pin来选择step/dir使用的引脚

引脚功能优先级

  1. PWM 输入,如果启用,默认没有启用。
  2. UART,默认启用.
  3. Step/Dir,如果启用,默认没有启用。
  4. Analog,默认启用(如果没有被配置为其它用途)(仅在受支持的引脚上才有)。
  5. Digital 输入,默认启用(其它不支持Analog的引脚)。

为了使对引脚的配置生效请执行以下指令:

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

模拟输入

模拟输入可用于测量0至3.3V之间的电压。 Odrive使用12位ADC(0-4095),因此最大分辨率为0.8 mV。 某些GPIO引脚需要先设置适当的引脚优先级(请参见上文),然后才能用作模拟输入。 如果要在odrivetool中读取GPIO1上的电压,可以输入以下内容:odrv0.get_adc_voltage(1)

霍尔信号反馈引脚

当编码器模式设置为霍尔时,编码器端口上的引脚分配如下:

Label on ODrive Hall feedback
A Hall A
B Hall B
Z Hall C

native 协议

该协议是odrivetool用来与ODrive通信的协议。 可以使用USB或者UART作为通信载体。

Python

您安装的odrivetool包含了一个python库,您可以方便的使用python利用这个库来编写代码来控制ODrive。
假设您已经安装了odrive(pip install odrive),那么控制ODrive的最简单程序是:

import odrive
odrv0 = odrive.find_any()
print(str(odrv0.vbus_voltage))

有关多示例,请参见tools/odrive_demo.py

其它编程语言

我们没有官方发布的库来供您使用,您可以去论坛看一下,说不定有其他人编写了相关的库。如果您想自己编写库的话可以参考ODrive通讯协议。如果您能将自己的库回馈到社区,我们将非常感谢。

ASCII 协议

如果您不需要其它复杂的功能,那么这个将是native protocol的一种简单替代方法。 使用此功能之前,请确保可以接收这种协议的局限性。 ASCII协议默认在UART上启用,也可以通过USB和native protocol一起启用。

有关更多详细信息,请参见ASCII 格式协议

Arduino

我们提供了Arduino库,和一些有关如何使用ASCII协议与ODrive通信的示例。位于/Arduino/ODrive Arduino文件夹下。

Step/direction

这是控制ODrive的最简单的方法。 它也是最原始,抗干扰最差的一种。 因此,除非必须,否则不要使用它。

引脚:

  • Step/dir 信号: 查看引脚说明
  • GND: 您必须将设备的接地线连接在一起。 可以使用ODrive J3上的任何GND引脚。

要使用 step/dir 模式,设置 <axis>.config.enable_step_dirTrue

Axis0 step/dir引脚与UART冲突,并且UART优先。 为了能够在Axis 0上使用step/dir,还必须设置odrv0.config.enable_uart = False。 有关更多详细信息,请参见引脚功能优先级。 不要忘记保存配置并重新启动。

还有一个名为<axis>.config.counts_per_step的配置变量,它指一个“step”对应的编码器计数。 它可以是任何浮点值。

最大步进速率正在等待测试,但应至少可以处理50kHz的step信号。 如果要对其进行测试,请注意,step速度过高出现的现象是电机关闭并惯性停车。

请注意,当前没有使能信号输入,并且step/dir默认情况下处于启用状态,只要ODrive处于位置控制模式,它就保持工作状态。 要使ODrive在启动时进入位置控制模式,请参见如何配置启动程序

RC PWM 输入

您可以直接使用RC接收器来控制ODrive。
如果某些GPIO引脚未分配给其他功能,则它们可用于PWM输入。 例如,必须禁用UART以使用GPIO 1,2。 有关更多详细信息,请参见引脚功能优先级
可以通过odrivetool 来设置GPIO作为PWM输入。
例如,我们将配置GPIO4以控制Axis0的角度。我们希望Axis在-1500到1500编码器计数范围内移动。

  1. 首先确保您已经能够通过 odrv0.axis0.controller.pos_setpoint来控制电机,如果您遇到问题请参考 ODrive 入门指南

  2. 如果要使用PWM输入控制ODrive而不使用其他任何方法来激活ODrive,则可以配置ODrive,以使Axis 0 在启动时自动运行。 有关更多信息,请参见启动程序

  3. 使用 odrivetool , 来配置PWM输入和被控制量的映射。

    In [1]: odrv0.config.gpio4_pwm_mapping.min = -1500
    In [2]: odrv0.config.gpio4_pwm_mapping.max = 1500
    In [3]: odrv0.config.gpio4_pwm_mapping.endpoint = odrv0.axis0.controller._remote_attributes['pos_setpoint']
    

    注意:您可以通过设置odrv0.config.gpio4_pwm_mapping.endpoint = None来禁用输入。

  4. 保存配置并重新启动

    In [4]: odrv0.save_configuration()
    In [5]: odrv0.reboot()
    
  5. 在关闭ODrive电源的情况下,将RC接收器接地连接到ODrive的GND,并将RC接收器信号之一连接到GPIO4。如果RC接收器耗电量不太多,则可以尝试使用ODrive的5V电源为接收机供电。 给RC遥控器上电。 现在,您应该能够使用遥控器来控制电机了。

确保在RC接收器上设置故障保护功能,以便在遥控器和接收器之间失去连接时,接收器为两个轴的速度设定值输出0(或对您来说最安全的输出)。 另请注意,如果接收器关闭(电源丢失等),或者从接收器到ODrive的信号丢失(电线拔出等),则ODrive将继续执行上一个命令的速度设定值。 ODrive中的PWM输入当前没有超时保护功能。

端口

注意:如果您使用的我们提供的库时,无需纠结本节中描述的细节,只需大概了解即可。

USB

本节假定您熟悉通用USB体系结构,尤其是诸如“配置”,“接口”和“端点”之类的术语。

在USB上,ODrive提供单一配置,该配置是由CDC设备(虚拟COM端口)和特定于供应商的设备组成的复合设备。

什么是USB复合设备?

复合设备是通过接口关联描述符对接口进行分组的设备。 对于此类设备,主机操作系统会加载一个中间驱动程序,因此每个接口组都可以像单独的设备一样对待,并具有自己的主机侧驱动程序。

在ODrive上,存在以下接口:

  • Interface Association: Communication Device Class (CDC)
    • Interface 0:
      • Endpoint 0x82: CDC commands
    • Interface 1:
      • Endpoint 0x01: CDC data OUT
      • Endpoint 0x81: CDC data IN
  • Interface Association: Vendor Specific Device Class
    • Interface 2:
      • Endpoint 0x03: data OUT
      • Endpoint 0x83: data IN

端点对0x010x810x030x83的行为完全相同,只是它们的描述符(接口类,…)不同。

如果您打算直接访问USB端点,建议您使用接口2。其他接口(与CDC设备关联的接口)通常由主机OS的CDC驱动程序声明,因此如果没有第一个接口,则无法使用接口2。

UART

波特率: 115200
引脚:

  • GPIO 1: Tx (连接到其他设备的Rx)
  • GPIO 2: Rx (连接到其他设备的Tx)
  • GND: 您必须将设备的接地线连接在一起。 使用ODrive J3上的任何GND引脚都可以。

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

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

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

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


相关推荐

  • wifi6是6ghz频段吗_wifi信号频段

    wifi6是6ghz频段吗_wifi信号频段随着全球影响力最大的移动通信大展MWC2022的正式开展,高通于全球首发Wi-Fi7解决方案-FastConnect7800,支持高达5.8Gbps的峰值速度和低于2ms的时延。大众也期待能从成熟的WIFI4、WIFI5向更新的WIFI6、WIFI6E、WIFI7产品过渡,享受更加流畅的无线体验。与WIFI相关的6GHz频段,在世界各地区的分配也是无线人关注的重点。WIFI6所使用频段与WIFI5是一样的,即2.4GHz+5GHz,只是支持更新的802.11AX协议。WIFI6E与WIFI7则是三

    2022年10月20日
    0
  • 【Hibernate】关系映射

    【Hibernate】关系映射【Hibernate】关系映射

    2022年4月25日
    44
  • emwin实体按键_qt指示灯控件

    emwin实体按键_qt指示灯控件分享一个emWin软键盘控件[复制链接]本帖最后由glcd于2016-6-2716:30编辑花了两天时间做了个emWin软键盘控件,并命名为ButtonSKB控件:image001.png(20.29KB,下载次数:0)2016-6-2716:19上传前言:(1)ButtonSKB已经是1个控件,即可以像使用Button控件一样使用ButtonSKB。(2)ButtonSKB…

    2022年10月14日
    0
  • XMind思维导图快捷键[通俗易懂]

    XMind思维导图快捷键[通俗易懂]快捷键的使用会让我们的工作效率大大的提高,XMind做为思维导图中软件的佼佼者,让众多办公的人们体会到了便捷;这么好使的一个工具,它的快捷键还不快快的学习/使用起来吗?需要更多教程,微信扫码即可XMind快捷键汇总先来张比较全的大图然后我们再来分解快捷键的大图,顺序按照XMind顶部的菜单顺序。一、文件【注】Command为Mac系统,若为Windows系统换为Ctrl即可,例如:Command+C/V(Mac)=>Ctrl+C/V…

    2022年5月30日
    33
  • upx脱壳日记[通俗易懂]

    upx脱壳日记[通俗易懂]一、静态方法upx-d有时候可能会失败,需要切换使用正确的UPX版本。Windows下内置对各UPX版本的第三方图形化界面UPXShell工具,可以方便的切换版本,通过go按钮,可以切换upx加壳版本与脱壳版本二、动态方法(手脱)虽然UPX本身可以脱壳,但是UPX是基于加壳后可执行文件内存储的标识来查找并操作的,由于UPX是开源的,软件保护者可以随意修改这些标识,从而导致官方标准版本的UPX脱壳失败。因为UPX中可以改动的地方太多,所以人们在这种情况下一般采用动态脱壳x86的..

    2022年7月12日
    22
  • 浅析AnyCast网络技术「建议收藏」

    浅析AnyCast网络技术「建议收藏」什么是BGPAnyCast?BGPanycast就是利用一个(多个)as号码在不同的地区广播相同的一个ip段。利用bgp的寻路原则,短的aspath会选成最优路径(bgp寻路原则之n),从而优化了访问速度。其实bgpanycast是不同服务器用了相同的ip地址。阿里的DNS就是使用了BGPAnyCast“其实bgpanycast是不同服务器用了相同的ip地址。”言简意赅啊!D…

    2022年5月24日
    46

发表回复

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

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