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應用程序。
- 在此處下載該工具。 想要完成下載您需要登錄ST帳號。
- 安裝該工具後,啓動
DfuFileMgr.exe
,可以在您的開始菜單中找到名爲Dfu file manager
來啓動。 - 選擇 "I want to GENERATE a DFU file from S19, HEX or BIN files"然後點擊OK。
- 點擊 “S19 or Hex…”,選擇到
ODriveFirmware.hex
。 - 將所有其它設置保持默認,然後單擊"Generate…" 按鈕。
- 將輸出文件另存爲
ODriveFirmware.dfu
。 請注意,由於某些原因,保存時會產生警告,直接忽略即可。 - 啓動
DfuSeDemo.exe
,可以在您的開始菜單中找到名爲DfuSeDemo
來啓動。 - 按照上面如何強制進入DFU模式中的說明將ODrive強制進入DFU模式。
- 此時在界面左上角應該顯示出了處於DFU模式的STM設備。
- 如果未出現,則可能是因爲Zadig將驅動程序設置爲libusb。 我們需要將其設置回原始驅動程序。參考Zadig如何恢復爲原始驅動.
- 如果完成上述步驟後,ODrive仍被識別爲libusb設備,則可以嘗試刪除libusb驅動程序(當我們完成固件升級後可以再次使用Zadig重新安裝驅動)。 您可以簡單地刪除文件
C:\ Windows \ System32 \ drivers \ libusb0.sys
。
- 在界面右下角 “Upgrade or Verify Action” 點擊 "Choose…"按鈕。
- 選擇到我們生成好的
ODriveFirmware.dfu
文件。 - 點擊 “Upgrade”.
- 如果收到警告,提示您無法檢查設備類型是否正確,請單擊“yes”以繼續。
- 恭喜,您的ODrive固件已經被更新了; 您現在可以退出DfuSeDemo。
- 關閉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或與之兼容的編程器。
- 安裝 OpenOCD
- Windows: 安裝說明 (同時依照指示安裝 ST-LINK/V2 的驅動)
- Linux:
sudo apt-get install openocd
- macOS:
brew install openocd
- 從這裏下載最新的固件。您將會使用 .elf 文件進行燒錄。同時請確保您選擇的固件版本和您的ODrive版本相匹配。
- 如下圖所示連接ODrive和STLink/v2編程器:
打開ODrive的電源。 - 打開一個終端,然後導航到固件所在的目錄。
- 運行以下命令(將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 進行交流。