天天看點

ODrive應用 #7 控制器&參數整定控制器

控制器

電機控制器為級聯式,采用位置,速度和電流控制回路,如下圖所示。 當控制模式設定為位置控制時,整個循環都會運作。 在速度控制模式下運作時,位置控制部分将不被使用,并将速度指令直接輸入到第二級輸入中。 同理,在電流控制模式下,僅使用電流控制回路。

ODrive應用 #7 控制器&參數整定控制器

每個控制回路都是基于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 進行交流。

繼續閱讀