# STM32 - PID controller ## 什麼是 " PID controller " (╯✧∇✧)╯ - **PID controller** 是工業控制中,用於連續性調節的一種常用的 **控制系統** - **PID** 是取自這個系統的三個控制項 - <font color=''>比例(proportional)</font>、<font color=''>積分(integral)</font> & <font color=''>微分(derivative)</font>  ::: info 三個參數代表什麼後面會再詳細介紹! ::: --- ## 為什麼要用 "PID controller" ก็ʕ•͡ᴥ•ʔ ก้ - PID controller 可以幫助我們 **更快速、穩定** 控制我們的目標物達到我們所設定的值 - <details> <summary>我們要怎讓直流馬達 有效的 達到轉速2.5rps?</summary> - 最終轉速要到達2.5rps - 要在短時間內到達 - 到達2.5rps後要維持,不要忽快忽慢 </details> - 我們希望 PID controller 可以幫助我們達到 - 精準達到我們設定的目標值 - 盡可能越快接近目標值(響應時間短) - 到目標值的時候要穩定維持 - <details> <summary>如果沒有 PID 控制 會出現什麼事?</summary> - 馬達轉速可能不在2.5rps - 可能過了很久很久才到達2.5rps - 到2.5rps之後還會忽快忽慢 ::: info <details> <summary>對機器人底盤有什麼影響?</summary> - 到不了2.5rps機器就不是照著我想的移動了! - 如果是 兩輪差動 的底盤,左輪響應很慢、右輪稍微快一點,<font color='SkyBlue'>車子會向左偏轉!</font> - 最後忽快忽慢的話,車子可能會像喝醉一樣S型移動! </details> ::: </details> --- ## 怎們用 " PID controller " - 以直流馬達為例 (❍ᴥ❍ʋ) ### 控制系統架構 1. 我們會給定一個 **目標值 SetPoint(SP)**,這個值是我們希望馬達到達的轉速。 2. 我們會利用 Encoder 去觀察馬達真實的轉速,這個數值我們叫 **ProccessVariable(PV)** 3. 有這兩個參數後,我們便可以將其相減得到 目前狀態與設定目標 的差距,也叫 **誤差函數 e(t)** $$ e(t) = SP-PV $$ 4. 接著我們把這個誤差函數 e(t) 交給 PID 處理,產生 **輸入函數 u(t)** 5. 不斷重複這個過程,利用觀察 **輸出與目標的差異** 不斷改變 **輸入的值**  --- ### "P" - Proportional 比例   --- ### "I" - Integral 積分    --- ### "D" - Derivative 微分  --- ## 控制程式 [Github - PID_Tune](https://github.com/Rabbit025879/PID_Tune) --- ## 那這樣控制制動器一定要使用 PID controller 嗎? - 還有很多不同控制器可以使用,依不同需求可以自己評估,但 PID 是常見的一個! - PID 也可以有其中幾個參數不用到! - 控制直流馬達轉速時常常只會用到 PI control,沒有用到 D control - 有些系統也會只用 P control,去降低響應時間 --- ## 實做練習 ### Basic - 利用 **PI controller** 控制 直流馬達到達 **指定轉速** - 先在 現場表達式 調整 **P** 的數值,觀察轉速變化,目標轉速為 0 時是否轉不動 - 接著調 **I** 的數值,觀察轉速變化,目標轉速為 0 時是否轉不動 - 最後調整 **P = 2.2** & **I = 20.5**,觀察轉速變化跟剛剛有什麼差別,轉速為 0 時轉的動嗎? - 再加入 D 試看看,有什麼改變嗎? --- ### Advanced - 利用 **PID controller** 控制 直流馬達到達 **指定角度**
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up