關于pid控制的一些困惑解答
????對于pid控制電機時,我遇到了十分令人困惑的問題,即為何給予該pid系統(tǒng)的是電機轉(zhuǎn)速,卻可以直接時候使用該系統(tǒng)的feedback作為pwm波的占空比。究其原因是沒有徹底理解pid控制的核心內(nèi)涵:通過輸出偏差的比例、積分和微分的線性組合來構(gòu)造控制量,選擇合適的PID參數(shù)值,使輸出趨近于期望輸出,從而減小或者消除輸出偏差。
????現(xiàn)在簡略書寫每次測量時的中斷回調(diào)函數(shù):
????我們注意到,此時speed竟然可以直接等于PID-Cal函數(shù)返回值加本身的值。
????為了解釋這一原因,我援引了csdn一位朋友的例子,可以通俗理解:
????假設我們設置一個定時器,來定時讀取編碼器的值,相鄰兩次讀取的值做差得到值a,只要a一直保持不變,是不是電機的速度也就一直不變呢。有了這個最簡單的控制電機轉(zhuǎn)速的概念,就可以引用pid算法了。
???????我們假設目標值target_val=200,一開始電機不轉(zhuǎn),讀取做差測得的值便是0,這時就會產(chǎn)生error,有了error,pid就可以運算,假設pid運算出來的值b=1,用這個值去設置pwm占空比,顯然太小,電機甚至不轉(zhuǎn)動,然而電機不轉(zhuǎn)動,繼續(xù)產(chǎn)生error,產(chǎn)生的過程與之前說的同理,但是由于積分i的作用這次pid運算出來的值b更大了。
????????假如b=2吧,用b去設置pwm的占空比,還是太小,電機還是不動,那就接著pid運算,如此反復,最終b=50,這個值剛好是電機轉(zhuǎn)動了起來,但是速度太低,相鄰兩次讀取編碼器的值做差之后還是小于200,還是有error,繼續(xù)pid運算,b一直增大,最終b達到某個值,使得電機的轉(zhuǎn)速滿足相鄰兩次讀取編碼器的值做差等于200這一條件,這時error為0,pid運算出來的值還是最終的那個b,最后穩(wěn)定達到我們設置的預期值。
原文鏈接:https://blog.csdn.net/m0_73936072/article/details/128264417
? 于是這樣,我們就可以通過任意的量,如電壓,電流等與電機速度毫不相關的量來控制電機,達到目的。