ODrive应用 #2 odrivetool入门指南

odrivetool入门指南

odrivetool是和ODrive配套的PC程序。 它的主要目的是提供一个类似命令行终端的工具软件来配置和调试ODrive,以及一些类似固件升级的其它附加功能。

安装

参考 ODrive入门指南进行安装。

输入 odrivetool --help 来查看可用的功能。

连接多个ODrive

默认情况下,odrivetool将连接到它找到的任意一个ODrive。 如果这不是您想要的,则可以选择特定的ODrive。

要查找ODrive的序列号,请运行odrivetool,然后连接ODrive并打开电源。 您应该看到以下内容:

Connected to ODrive 306A396A3235 as odrv0
In [1]:

306A396A3235 就是此ODrive的序列号。 如果您只想对这个序列号的ODrive进行操作可以关闭然后执行odrivetool --serial-number 306A396A3235来启动odrivetool。

我的ODrive进入DFU模式是否仍然可以查看它的序列号?
可以的,序列号可以通过查看USB描述符来查看。
假设您在Linux系统下,您可以输入以下命令来查看:

$ (sudo lsusb -d 1209:0d32 -v; sudo lsusb -d 0483:df11 -v) 2>/dev/null | grep iSerial
  iSerial                 3 385F324D3037
  iSerial                 3 306A396A3235

在此,连接了两个ODrive。

将ODrive配置参数备份

您可以使用odrivetool来备份和还原设备配置,也可以将一个ODrive的配置转移到另一ODrive。

  • 要将配置以文件的形式保存到PC上,执行 odrivetool backup-config my_config.json.
  • 要从配置文件还原到配置到ODrive,执行odrivetool restore-config my_config.json.

DFU固件烧录

ODrive v3.4 或更低版本不支持使用odrivetool进行固件升级,您需要使用STLink编程器进行固件烧录。
要将ODrive更新到最新固件版本,只需打开终端并运行以下命令:

~ $ odrivetool dfu
ODrive control utility v0.3.7.dev
Waiting for ODrive...
Found ODrive 308039673235 (v3.5-24V) with firmware v0.3.7-dev
Checking online for newest firmware... found v0.3.7
Downloading firmware...
Putting device 308039673235 into DFU mode...
Erasing... done            
Flashing... done            
Verifying... done            

请注意,此命令将连接到GitHub服务器以检索最新固件。

ODrive Tool整个固件更新中将保留您先前对ODrive的配置。 但是如果任何设置被删除或重命名,您将收到警告消息。

如何烧录自定义固件?

如果您要烧录一个特定的固件文件而不是自动下载一个固件文件,则可以运行odrivetool dfu path / to / firmware / file.hex

您可以从这里下载正式发布的固件文件。 您将需要hex文件(而不是elf文件)。 确保您选择的固件版本和您的ODrive版本相匹配。

如果您想要从源代码编译固件,请参考ODrive固件开发指南

常见问题

  • Windows: 在固件更新过程中,将出现一个名为STM32 BOOTLOADER的新设备。 打开Zadig,并将STM32 BOOTLOADER的驱动程序设置为libusb-win32。 之后就可以继续固件更新。

  • 在某些计算机上,您需要拔出并重新插入USB,以使PC理解我们已从运行模式切换到DFU模式。

  • 如果DFU脚本找不到设备,请尝试将其强制为DFU模式。

    怎样使ODrive v3.5强制进入DFU模式?

    将ODrive电路板上丝印有RUN DFU的拨码开关从RUN拨到DFU,然后重新启动ODrive。 完成固件升级后,请不要忘记调回RUN位置,然后再次对ODrive进行重启。

    怎么使ODrive v3.1, v3.2强制进入DFU模式?

    BOOT0引脚连接到3.3V,然后对电路板重新通电。 如不起作用,请同时将引脚GPIO1连接到GND。 完成后,移除电线,然后重新启动电路板。

使用其他DFU工具升级固件

有些人在使用python dfu工具时遇到了问题,因此以下是有关如何使用其他工具的指南。

在开始以下步骤之前,您需要获取固件二进制文件。 您可以从这里下载正式发布的固件文件。 确保选择与您的ODrive版本相匹配的文件,并下载。接下来将会使用到.hex后缀的文件。

如果您想要从源代码编译固件,请参考ODrive固件开发指南

Windows

您可以使用ST的DfuSe应用程序。

  1. 此处下载该工具。 想要完成下载您需要登录ST帐号。
  2. 安装该工具后,启动DfuFileMgr.exe,可以在您的开始菜单中找到名为Dfu file manager来启动。
  3. 选择 "I want to GENERATE a DFU file from S19, HEX or BIN files"然后点击OK。
  4. 点击 “S19 or Hex…”,选择到 ODriveFirmware.hex
  5. 将所有其它设置保持默认,然后单击"Generate…" 按钮。
  6. 将输出文件另存为ODriveFirmware.dfu。 请注意,由于某些原因,保存时会产生警告,直接忽略即可。
  7. 启动DfuSeDemo.exe,可以在您的开始菜单中找到名为DfuSeDemo来启动。
  8. 按照上面如何强制进入DFU模式中的说明将ODrive强制进入DFU模式。
  9. 此时在界面左上角应该显示出了处于DFU模式的STM设备。
    1. 如果未出现,则可能是因为Zadig将驱动程序设置为libusb。 我们需要将其设置回原始驱动程序。参考Zadig如何恢复为原始驱动.
    2. 如果完成上述步骤后,ODrive仍被识别为libusb设备,则可以尝试删除libusb驱动程序(当我们完成固件升级后可以再次使用Zadig重新安装驱动)。 您可以简单地删除文件C:\ Windows \ System32 \ drivers \ libusb0.sys
  10. 在界面右下角 “Upgrade or Verify Action” 点击 "Choose…"按钮。
  11. 选择到我们生成好的 ODriveFirmware.dfu文件。
  12. 点击 “Upgrade”.
  13. 如果收到警告,提示您无法检查设备类型是否正确,请单击“yes”以继续。
  14. 恭喜,您的ODrive固件已经被更新了; 您现在可以退出DfuSeDemo。
  15. 关闭ODrive的电源,然后将ODrive设置回RUN模式。

Linux

安装 dfu-util:

sudo apt install dfu-util

按照上述说明进入DFU模式。
完成固件构建后,在固件所在目录下执行:

sudo dfu-util -a 0 -s 0x08000000 -D build/ODriveFirmware.bin

macOS

首先,您需要安装arm开发工具以将hex格式文件转换为bin文件。

$ brew cask install gcc-arm-embedded

然后将二进制文件转换为.bin格式

$ arm-none-eabi-objcopy -O binary ODriveFirmware_v3.5-48V.elf ODriveFirmware_v3.5-48V.bin

安装 dfu-util:

$ sudo port install dfu-util   # via MacPorts; for HomeBrew use "brew install dfu-util"

找到要升级设备的序列号:

$ dfu-util --list              # list the DFU capable devices
[...]
Found DFU: [0483:df11] ver=2200, devnum=5, cfg=1, intf=0, path="20-2", alt=0, 
 name="@Internal Flash  /0x08000000/04*016Kg,01*064Kg,07*128Kg", serial="388237123123"

最后,使用找到的序列号刷新固件:

$ sudo dfu-util -S 388237123123 -a 0 -s 0x08000000 -D ODriveFirmware_v3.5-48V.bin

ST Link固件烧录

仅对于ODrive v3.4或更早版本,才需要使用STLink烧录。 您将需要STLink / v2或与之兼容的编程器。

  1. 安装 OpenOCD
    • Windows: 安装说明 (同时依照指示安装 ST-LINK/V2 的驱动)
    • Linux: sudo apt-get install openocd
    • macOS: brew install openocd
  2. 这里下载最新的固件。您将会使用 .elf 文件进行烧录。同时请确保您选择的固件版本和您的ODrive版本相匹配。
  3. 如下图所示连接ODrive和STLink/v2编程器:
    在这里插入图片描述
    打开ODrive的电源。
  4. 打开一个终端,然后导航到固件所在的目录。
  5. 运行以下命令(将ODriveFirmware_v3.4-24V.elf替换为您所使用的固件文件名称):
openocd -f interface/stlink-v2.cfg -f target/stm32f4x.cfg -c init -c "reset halt" -c "flash write_image erase ODriveFirmware_v3.4-24V.elf" -c "reset run" -c exit

如果一切正常,您应该会看到类似的内容:

wrote 262144 bytes from file ODriveFirmware_v3.4-24V.elf in 10.194110s (25.113 KiB/s)

如果以上操作出现错误,请确保您系统的PATH变量中包含openocd,检查电线是否正确连接,然后再次尝试。

实时绘图

实时绘图用于实时绘制ODrive内部的参数(如位置)。 要启动实时绘图,在新的命令窗口中运行odrivetool liveplotter。 默认情况下,在启动时会绘制两个参数。 轴1和轴2的编码器位置。在下面的示例中,电机在closed_loop_control模式下手动扭动电机轴施加外力。
在这里插入图片描述
要更改绘制的参数,请使用文本编辑器打开odrivetool(位于Anaconda3\Scripts或ODrive-master\tools中)并修改以下部分代码。

        # If you want to plot different values, change them here.
        # You can plot any number of values concurrently.
        cancellation_token = start_liveplotter(lambda: [
            my_odrive.axis0.encoder.pos_estimate,
            my_odrive.axis1.encoder.pos_estimate,
        ])

例如,要绘制150KV电机,电机的转速[RPM]和电机转矩[N.cm],可以将代码修改为:

        # If you want to plot different values, change them here.
        # You can plot any number of values concurrently.
        cancellation_token = start_liveplotter(lambda: [
            (((my_odrive.axis0.encoder.pll_vel)/8192)*60), # 8192 CPR encoder
            ((8.27*my_odrive.axis0.motor.current_control.Iq_setpoint/150) * 100), # Torque [N.cm] = (8.27 * Current [A] / KV) * 100
        ])

在这个示例中,手动旋转电机轴并保持在那里。 作为响应,电动机控制器增加转矩(橙色线)以抵消这种干扰,直至达到500 N.cm的峰值,此时达到电机电流极限。 松开电机后,电机会迅速选择(蓝线),很快返回到原来设定的位置。
在这里插入图片描述
要更改绘图的比例和采样率,请修改utils.py文件内的以下参数(位于Anaconda3\Lib\site-packages\odrive中):

data_rate = 100
plot_rate = 10
num_samples = 1000

有关如何和实时和绘图界面交互的示例,请参考Matplotlib示例

使用odrivetool操作实时绘图

您可以通过 start_liveplotter(...) 来从odrivetool启动实时绘图。如果要在实时绘制时同时要发出命令或以其他方式与odrive保持交互,这将很有用。
例如,您可以在odrivetool中直接输入以下内容:start_liveplotter(lambda:[odrv0.axis0.encoder.pos_estimate])。 就像上面的示例一样,您可以在方括号中同时添加几个参数,以逗号分隔。
通常,您可以像在odrivetool中正常读取一样绘制任何能够读取的变量。

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

发布了16 篇原创文章 · 获赞 9 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/abf1234444/article/details/103365140