置頂文字

歡迎來訪 !! 如有任何問題歡迎一起討論或是 eMail 給我 legorunmail@Gmail.com

2010年11月16日 星期二

驅動馬達的PID控制

樂高NXT的輸出目前是以馬達為主因此對於馬達的瞭解是非常重要的一課,實際在玩NXT有時候你對NXT下達轉90度的指令時馬達實際卻轉了100度這十度的誤差有可能影響很大,如果這類指令常用那累計的誤差值非常可觀,玩NXT想要精確的控制馬達一定要知道PID的控制原理。

研發養成所的這篇PID Speed Control  推薦一定要去看。


另外 文章中提到 NXC 沒有提供小數Float 資料型態在最新版的NXC已經支援了,以前在用NXC時也覺得不支援Float實在不方便要自己做轉換才能得到數據使用。


後來去研發養成所問了一個問題:
請問在NXC中讀取角度的Function:MotorRotationCount()、MotorTachoCount()..........都可以讀取馬達角度值...請問這兩者有何差異

再請問當我下達 RotateMotor(OUT_A,80,320) 指令後,再讀取馬達角度MotorTachoCount(OUT_A)時,往往不相同也就是馬達沒有精確的的停在320度.....請問要如何解決才能準確停在320度

-----------------------------------------------------------------
版主很熱心的回應:

MotorTachoCount()會因每次 RotateMotor 指令執行,而重置清除馬達角度值,但是 MotorRotationCount()不會,因此 MotorRotationCount()會一直累積馬達角度值,直到執行 ResetAllTachoCounts(OUT_A)才清除。

RotateMotor 指令,為 open loop 控制指令,它無法精確控制角度,會因電池電力大小或負載情形,造成角度有誤差。你可以嘗試 RotateMotorPID(OUT_A,80,320,P,I,D),P=50,I=50,D=50,這裡 PID 數值不是最佳值,您需要自行調整數值,PID控制後,才能修正回設定點。


看完回應後真是感謝版主的解釋........^_^



另一篇 J. Sluka PID 控制文章  也是一篇好文。
一定要去看看PID的計算原理你會獲益良多

2 則留言:

  1. Lego Run您好,
    很高興認識你,你許多專文寫的很棒,日後有機會向您討教。

    回覆刪除
  2. Bridan 您太客氣了
    從你的Blog文章中知道你是電子方面的專業人員在軟硬體方面有深入的研究.....這對於像我這種對電子沒認識的人有很大的幫助.......再次謝謝你 ^_^

    回覆刪除