控制器
電機控制器為級聯式,采用位置,速度和電流控制回路,如下圖所示。 當控制模式設定為位置控制時,整個循環都會運作。 在速度控制模式下運作時,位置控制部分将不被使用,并将速度指令直接輸入到第二級輸入中。 同理,在電流控制模式下,僅使用電流控制回路。
每個控制回路都是基于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能夠以最有效的方式控制電動機。 這三個參數是:
-
[(counts/s) / counts]<axis>.controller.config.pos_gain = 20.0
-
[A/(counts/s)]<axis>.controller.config.vel_gain = 5.0 / 10000.0
-
[A/((counts/s) * s)]<axis>.controller.config.vel_integrator_gain = 10.0 / 10000.0
我們即将推出帶有自動調整功能的版本。 但在此之前還是需要手動調節,以下是一個粗略的調整過程:
- 設定
為 0vel_integrator_gain
- 逐漸減小另外兩個值使系統達到穩定狀态
- 逐漸增加
,每次增加 30% 左右,直到電機出現輕微的震蕩vel_gain
- 設定
為出現輕微震動時值的 50%vel_gain
- 逐漸增加
,每次增加 30% 左右,直到您看到有些過沖pos_gain
- 逐漸減小
,直到過沖消失pos_gain
- 可以将積分器
設定為vel_integrator_gain
,其中“帶寬”是您的系統的控制帶寬。 例如,您發送一條運動控制指令,假設您的調整使它以100ms的建立時間(從設定值更改到系統到達新設定值的時間)跟蹤指令; 這意味着帶寬為0.5 * 帶寬 * vel_gain
。 在這種情況下,您應該設定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 進行交流。