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 進行交流。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章