智能車電機閉環控制算法
對于智能車的電機閉環控制算法,我之所以標題沒有寫上“智能車電機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 米/
秒是宏觀上我們感知的,跟單片機沒有任何關系。