飛思卡爾電磁雙車----閉環控制PID ---Double LigHtning

(一) PID 的背景和一些原理上理解
PID 控制技術,是最簡單的閉環控制技術之一,通常都是利用單反饋或者
多反饋來實現對控制對象的調節,實現被控對象的可控性和可預知性的控制。
使得設備運行的更加的可靠,合理且平穩。
PID 的全稱爲比例積分微分控制,P 即爲比例,I 即爲積分,D 即爲微分。
PID 每每都是應用於惰性系統,所謂惰性系統就是變化較慢且沒法精確控制和
調節的對象,其中最最重要的特色就是變化速度慢,調節速度慢,控制週期較
長,最經典的控制對象就爲溫度的溫控。
下面就舉一個簡單的例子進行說明:
好比咱們要對一個水箱裏面的水進行加熱,咱們的目標加熱溫度爲100℃,
首先咱們不用閉環對水溫進行加熱,也就是說咱們只是靠人爲觀察溫度計的溫
度值來對加熱器進行人工的干預。
當溫度加熱到100℃之後,咱們就中止加熱,這個時候,雖然水溫已經到
達100 且加熱器已經再也不通電加熱,可是因爲加熱器的預熱和水自己傳遞溫度
的惰性,致使水溫會繼續上升,通過一段時間後,水溫會繼續升高,而且超過
100℃,那麼該系統就沒法達到咱們所預期的要求。
這個時候您誰想,中止加熱後自己會繼續散熱繼續升溫,那等到溫度到90
攝氏度左右之後,咱們中止加熱,而後利用水的惰性和加熱器的散熱,讓水溫
繼續升溫,正好達到100℃,這樣不就解決問題了嗎? 這麼想是對的,可是
水溫要達到90 幾度的時候咱們中止加熱呢?還有就是從中止加熱到100℃的時
間是多少?通過一段時間後,溫度沒有達到100℃,而是小於100 攝氏度之後
溫度就達到了頂峯,這樣怎麼辦?
上述全部的辦法,可能可以解決水溫到達 100℃的要求,可是其中不少環
節不少結果都是沒法預測和沒法控制的,即使經歷了很麻煩的人爲干預同時經
過了一個較長的時間達到了咱們對水溫加熱到100℃的要求,也要經歷一個相
當複雜和至關漫長的時間才能達到,而且整個過程一直要有人爲的干預,實在
是屬於勞民傷財。
不僅是對溫度的控制,還有其餘不少領域的過程控制,都遇到了這些讓人
很困惑問題,因此科學家就針對此類問題發明了閉環控制原理,其中最經典最
簡單最實用的就是PID 閉環控制。該控制原理簡單可靠,參數調整簡便,實用
性強,普遍的受到人們的支持。
利用 PID 控制原理對水溫進行加熱控制,我如今進行舉例說明:目標溫度
仍是咱們以前設定的100℃,加熱前咱們首先要把這個溫度值輸入到加熱器控
制器中,此時溫度計只是做爲咱們認爲觀察溫度的一個參考,咱們在水中放入
一個電子溫度計,電子溫度計測量的溫度能夠傳送到控制器,以使得咱們的PID
控制器知道當前的水溫,在剛剛通電加熱的時候,水溫假定爲室溫20℃,當前
的水溫會經過電子溫度計測量並傳輸到PID 控制器中,此溫度做爲當前溫度值
C_TEM,咱們的目標溫度值設定的爲100℃做爲T_TEM,那麼CPU 經過計算
T_TEM-C_TEM=80,兩者的差值較大爲80,說明水溫遠遠沒有達到咱們所需
的100℃,那麼這個時候CPU 就給加熱器通上最高的供電電壓,以全速對水箱
裏面的水進行加熱,隨着加熱的進行,水溫會慢慢的增長,某一時刻,水溫達
到了80℃,那麼目標溫度與當前溫度作差,差值僅僅爲20,那麼CPU 就知道
了當前的溫度跟實際咱們所但願的溫度差異已經很小了,那麼這個時候控制器
就減少加熱器的供電電壓,以一個適當的加熱量對水溫進行加熱。當到了一個
時刻,水溫達到了95℃,目標溫度和他的差值僅僅只有5 了,說明溫度已經十
分接近目標溫度,此時控制器可能已經早已中止對加熱器供電或者以一個更加
低電壓的加熱量對水溫進行加熱,直到水溫加熱到100℃。
固然水溫不可能一直恆定在 100℃,水溫必定會超過100 攝氏度,可是由
於採用PID 閉環控制,水溫不會超過的太多,好比某一時刻水溫到達了105℃,
作差後,差值爲-5℃,CPU 就知道此時溫度已經超過了目標溫度,那麼將會在
一段時間內中止加熱,直到溫度下降到100℃或者100℃如下後再進行進一步控
制,因此當水溫到達100 攝氏度附近的時候,CPU 控制器將會頻繁的對加熱器
進行控制,從而致使水溫永遠維持在100℃左右附近,並且水溫與100℃的目標
溫度相差不會很大,宏觀上經過平均測量,水溫就是認爲在100℃了,其實根
本上,水溫是永遠不會達到正好的100℃,只能是在100℃左右進行震盪,可是
震盪始終不會太大,從而達到了咱們控制目標對象的要求,使得加熱系統變得
更加科學更加可控。
固然上述所說明的 PID 加熱狀態是PID 各項參數調節比較好的狀況下的狀
態,PID 三個參數調整很差,會帶來不少問題,好比系統震盪,超調等問題,
因此調整PID 參數也是一個比較重要的環節,這個我將會在下面進行說明。
上述對水溫的 PID 控制已經基本上說明了PID 控制的核心,咱們之因此利
用PID 進行閉環控制,就是爲了讓被控制對象快速穩定的達到目標值,從而實
現對被控制對象的可控性,可預知性。
一我的沒法控制就是一個瘋子,一個車子速度沒法控制就是一個瘋車。
(二) 智能車電機閉環控制算法
對於智能車的電機閉環控制算法,我之因此標題沒有寫上「智能車電機PID
閉環控制算法」是由於PID 算法根本就不是特別好的適用於智能車這種變化很
快的系統,對於智能車,電機的調速能夠說是時時刻刻再進行調速控制的,我
上面說描述的經典PID 算法,都是針對一些惰性系統,也就是說是變化比較慢
的系統的,因此對於智能車的電機調速採用完完整整的PID 算法,是根本不可
取的,及時採用了,你必需要通過一些變換和改進才能使用。以上的簡述只是
鄙人本身的見解,若有錯誤,請各位高手指正。
如今估計您會疑問,PID 不適用於智能車的電機控制,那什麼才適用呢?
鄙人原來作過智能車,從鄙人自己的理解,P 算法控制電機,也就是比例控制
是最好的,反應速度快,控制精度高,不存在積分和微分效應,很是適用於適
用於控制週期短的系統,固然,對於一些特殊的邏輯控制算法,可能要採用PD
算法,用微分來作補償,防止震盪和超調。
下面來講下電機控制算法從開始的加入到最終的肯定的方法:
固然這一切的前提就是安裝了編碼器,車速有反饋,只有加上編碼器,有
了反饋,才能組成一個閉環系統。固然您也能夠加上碼盤,或者霍爾開關等一
切能夠返回車速的東西均可以。
(1) 首先建議在車速比較慢的時候,採用PID 算法來控制電機,爲
什麼開始要建議您採用PID 呢?主要是爲了讓您更加深入理解
PID 算法的精髓和調試步驟方法等,有助於之後對控制算法更加
深刻的研究和書寫。調試PID 三個參數的方法,不少地方都提
供了,我在這裏簡單的說下:首先將ID 參數都變爲0,先調整
P 比例參數,調整到速度基本上跟您給定的速度差很少,也就是
說基本穩定在您給定的脈衝數,固然這個時候會很是的震盪,
不要擔憂,接下來調整I,調整I 的結果就是震盪會消除不少,
可是車速會變化緩慢,也就是說會有一些延遲,而後再調整D,
調整D 的結果就是加強調節的靈活性和預見性,在給定速度變
化的過程當中,可以以一個平穩過渡來變換,並且速度能夠長時
間穩定在給定速度附近,而後PID 三個參數的基本範圍就肯定
了,而後再根據實際的跑車來微調這些參數,固然在您調試PID
以前,請仔細閱讀PID 理論知識,這樣有助於您的調試和理解,
當您把PID 調整好之後,您就基本上領會了PID 的精髓,對於
之後的調試做用很是大。這裏的給定速度,就至關於上面對溫
度例子中說的設定溫度。意思是同樣同樣的。
(2) 當您對PID 掌握之後,您能作到給定多少速度,就能讓車速穩
定在這個給定速度左右,能夠適當的提升點車速,慢慢的觀察
效果,你會發現當速度增長的時候,車速的控制會變得愈來愈
糟糕,調節緩慢,靈活性差。這個時候您就能夠試着去掉I 積分
環節,而後再從新調整參數,按照上面說的,而後繼續觀察效
果,試着提升速度,繼續觀察,由於車速畢竟很慢,不少細節
咱們都能看到,因此您就能夠看到PID 到PD 變換之後,實際的
效果是增長多少,也算是一種進步,這個時候,經典的PID 公
式已經被咱們簡化,不要擔憂,您能夠多多實驗多多觀察,可
能在這個變換之間,您能受到不少啓發,會產生不少思路,誰
之後的調試車子都是有好處的。因此搞智能車,本身一步
一步的進步學習,遠遠比去某些淘寶店鋪購買現成的程序學到
的東西更多,體會的也更多,思惟開闊的也更多。
(3) 在您的車速在3M 內的時候,我強烈建議您採用PD 算法,由於
PD 算法是最好調整,最容易控制的。固然這個時候我也強烈建
議您加上P 控制,P 控制的話,不是說就單純的P*誤差而後得
到的值給定PWM,而是必定要加上一些邏輯控制,不加上邏輯
控制而是直接運用比例公式來給定PWM 值,將會帶來不少問
題,具體的邏輯控制講解,在之後我會寫出相關的文檔,謝謝。
採用增量式編碼器爲反饋的智能車電機閉環調速系統:
其實藉助於我上面舉得例子,到這裏,您可能已經明白對於智能車來
說閉環系統是一個必須的,不可脫離的。固然,您可能已經徹底明白智能
車電機閉環調速系統怎麼作,而且您可能也作的更好,要比我在這裏所說
的更加的先進更加的有創意更加的有效果。因此在這裏我只是簡單的說說,
謝謝。
首先,咱們須要時刻反饋當前的智能車速度給單片機或者 ARM,讓
系統知道當前速度,有助於控制。
咱們先說說爲何咱們要反饋車子速度,要知道車子當前的速度?因
爲咱們的CPU 利用傳感器採集道路信息,經過CPU 收集和處理變化,系
統就能知道車子當前的狀態,好比是在直到上?仍是在進入彎道?仍是在
彎道內?仍是正在出彎道?仍是在上坡?仍是穿過了起跑線?有了這些信
息,咱們首先就是對舵機的控制,控制車子根據什麼道路狀況來進行轉彎,
轉彎的方向,大小,都是靠這些數據來實現,固然當前的速度值也是控制
舵機轉向大小的一個附加因素,這樣更加的有利於咱們及時處理不一樣彎道。
知道了這些信息,就跟咱們開車同樣,咱們要轉彎了,得感知咱們車的速
度,怎麼感知啊,就靠汽車自帶的速度表,這樣咱們就能夠經過控制剎車
或者油門還有方向盤來控制車子平穩的轉過彎道,不一樣的彎道,不一樣的速
度,轉彎的控制和剎車的控制都是不一樣的。若是咱們不知道當前的速度,
那麼極可能由於拐彎速度過快,致使翻車,或者側滑,形成危險。智能車
狀況跟真車是同樣的,咱們必須知道車子當前速度,好比咱們智能車拐彎
安全速度是3M/S,所謂安全速度就是車子順利安全且沒有較大側滑過彎時
的速度,在進入彎道前咱們車子的速度是4M/S,當傳感器感知要進入彎道
了,經過跟安全速度對比,咱們發現智能車的速度遠大於安全彎道速度,
這個時候咱們就要剎車,把車子速度快速下降到3M/S,這樣保證咱們順利
快速的過彎。在這裏您可能問3M/S 的安全速度怎麼來?其實很簡單這個
速度是靠實驗來的,不用什麼計算,徹底屬於經驗值,根據跑道的材料、
車子機械性能和彎道的角度來決定,因此爲何咱們要比賽的時候要試車,
試車中一個最重要的環節就是熟悉比賽跑道所用的材料,用於咱們實驗車
子的安全速度等。
對於智能車的速度反饋,在這裏我就針對增量式編碼器來講,其實碼
盤啊,霍爾啊,他們原理都同樣。光電增量式編碼器不一樣於絕對值編碼器,
絕對值編碼器在編碼器轉動一週的每一個特定位置都有一個肯定的值輸出,
增量式編碼器轉動一圈,固定輸出必定的脈衝,沒法肯定轉動到哪一個位置,
對外輸出通常爲方波,這樣有助於MCU 進行數據採集。
有了編碼器,咱們經過齒輪、皮帶等將編碼器跟電機或者傳動輪進行
鏈接,這樣電機轉動的時候,就會帶動編碼器轉動,而後編碼器就能向外
輸出方波,接到單片機上,咱們就能進行採集編碼器脈衝了。有了脈衝,
可能您又要問這個脈衝沒有規律性,隨着轉動不停的增長,到底怎麼來衡
量速度?您這個時候啊,動動手,觀察觀察數據特色,您會發現,當車速
度比較快的時候啊,脈衝數自增的速度比較快,也就是說,轉速越快,頻
率越高,單位時間內的脈衝數就越多,這樣馬上有了靈感,咱們用定時器
設置一箇中斷,這個中斷的時間爲5MS,那麼每5MS 咱們就採集編碼器
一次脈衝值,當採集完畢後,咱們就對脈衝數寄存器清零,這樣在5MS
內,獲得的脈衝數越多,說明車子速度越快,到這裏車速就解決了。到這
裏您可能會說:還沒完呢,還沒轉換爲速度呢?要把這個脈衝根據距離和
時間轉換爲具體的XX 米/秒的速度。您的這個想法很好,可是真的是沒
有必要,咱們根本沒有必要浪費時間去計算這個,由於咱們原本就是想知
道速度,脈衝數的多少已經就能衡量速度大小了,咱們何須要很麻煩的轉
換爲具體速度? 必定時間內的脈衝數已經夠了,夠咱們底層硬件進行判斷
計算了。既然咱們反饋的數據類型爲脈衝數,因此咱們所給定的速度也對
應的到脈衝數,好比50 個脈衝表明速度3M/S,80 個表明4M/S 的速度,
這樣經過道路類型給定脈衝數,就能實現電機的閉環控制了,是否是很簡
單?到這裏我知道又有人會疑問,50 個脈衝對應3M/S,80 個脈衝對應4M/S
是怎麼獲得的?其實這個更簡單,不少人作智能車容易把簡單問題複雜化,
其實不少問題均可以用幾行程序解決,好比那個坡道,不少人用了不少復
雜方法解決,好比加一個開關啊,加個加速度啊,加個陀螺儀啊,根本沒
有必要,程序幾行就搞定了。具體的脈衝對應速度,您固定給定一個脈衝
讓車子跑跑到一圈,而後記下時間,跑道實際長度除以時間,就是對應速
度,你只是須要大概知道對應就好了,不用一個一個實驗,具體的X 米/
秒是宏觀上咱們感知的,跟單片機沒有任何關係
算法