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

控制器

電機控制器爲級聯式,採用位置,速度和電流控制迴路,如下圖所示。 當控制模式設置爲位置控制時,整個循環都會運行。 在速度控制模式下運行時,位置控制部分將不被使用,並將速度命令直接輸入到第二級輸入中。 同理,在電流控制模式下,僅使用電流控制迴路。
在這裏插入圖片描述
每個控制迴路都是基於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 進行交流。

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