控制器
電機控制器爲級聯式,採用位置,速度和電流控制迴路,如下圖所示。 當控制模式設置爲位置控制時,整個循環都會運行。 在速度控制模式下運行時,位置控制部分將不被使用,並將速度命令直接輸入到第二級輸入中。 同理,在電流控制模式下,僅使用電流控制迴路。
每個控制迴路都是基於PID控制器。PID控制器是一種被廣泛應用的控制方式,可以適用於控制大部分系統。 這種靈活性使得ODrive可以用於控制各種機械系統。
位置環:
位置環控制器是一個具有單個比例增益的P環路。
pos_error = pos_setpoint - pos_feedback
vel_cmd = pos_error * pos_gain + vel_feedforward
速度環:
速度環控制器是一個PI環路。
vel_error = vel_cmd - vel_feedback
current_integral += vel_error * vel_integrator_gain
current_cmd = vel_error * vel_gain + current_integral + current_feedforward
電流環:
電流環控制器是一個PI環路。
current_error = current_cmd - current_fb
voltage_integral += current_error * current_integrator_gain
voltage_cmd = current_error * current_gain + voltage_integral (+ voltage_feedforward when we have motor model)
可以通過閱讀ODrive源碼中的 "controller.cpp"文件來獲取更多信息。
參數整定
調整電機控制器是釋放ODrive潛力的必不可少的步驟。通過調整,控制器可以快速響應系統中的干擾或變化(例如施加的外力或設定值的變化)而不會變得不穩定。 正確設置三個調整參數(稱爲增益)可確保ODrive能夠以最有效的方式控制電動機。 這三個參數是:
<axis>.controller.config.pos_gain = 20.0
[(counts/s) / counts]<axis>.controller.config.vel_gain = 5.0 / 10000.0
[A/(counts/s)]<axis>.controller.config.vel_integrator_gain = 10.0 / 10000.0
[A/((counts/s) * s)]
我們即將推出帶有自動調整功能的版本。 但在此之前還是需要手動調節,以下是一個粗略的調整過程:
- 設置
vel_integrator_gain
爲 0 - 逐漸減小另外兩個值使系統達到穩定狀態
- 逐漸增加
vel_gain
,每次增加 30% 左右,直到電機出現輕微的震盪 - 設置
vel_gain
爲出現輕微震動時值的 50% - 逐漸增加
pos_gain
,每次增加 30% 左右,直到您看到有些過沖 - 逐漸減小
pos_gain
,直到過沖消失 - 可以將積分器
vel_integrator_gain
設置爲0.5 * 帶寬 * vel_gain
,其中“帶寬”是您的系統的控制帶寬。 例如,您發送一條運動控制指令,假設您的調整使它以100ms的建立時間(從設定值更改到系統到達新設定值的時間)跟蹤命令; 這意味着帶寬爲1/(100ms)=1/(0.1s)=10hz
。 在這種情況下,您應該設置vel_integrator_gain = 0.5 * 10 * vel_gain
。
實時繪圖功能對於調整控制器參數幫助很大,例如,可以通過在odrivetool
中運行以下命令來以曲線的形式實時顯示設置位置和實際位置:
start_liveplotter(lambda:[odrv0.axis0.encoder.pos_estimate, odrv0.axis0.controller.pos_setpoint])
如果您有任何問題或疑問,歡迎您加入ODrive社區或QQ羣 851421965 進行交流。