新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 智能車速度控制pid(電機(jī)閉環(huán)控制算法)

智能車速度控制pid(電機(jī)閉環(huán)控制算法)

作者: 時間:2016-12-02 來源:網(wǎng)絡(luò) 收藏
智能車電機(jī)閉環(huán)控制算法
對于智能車的電機(jī)閉環(huán)控制算法,我之所以標(biāo)題沒有寫上“智能車電機(jī)PID
閉環(huán)控制算法”是因為PID 算法根本就不是特別好的適用于智能車這種變化很
快的系統(tǒng),對于智能車,電機(jī)的調(diào)速可以說是時時刻刻再進(jìn)行調(diào)速控制的,我
上面說描述的經(jīng)典PID 算法,都是針對一些惰性系統(tǒng),也就是說是變化比較慢
的系統(tǒng)的,所以對于智能車的電機(jī)調(diào)速采用完完整整的PID 算法,是根本不可
取的,及時采用了,你必須要經(jīng)過一些變換和改進(jìn)才能使用。以上的簡述只是
鄙人自己的看法,如有錯誤,請各位高手指正。
現(xiàn)在估計您會疑問,PID 不適用于智能車的電機(jī)控制,那什么才適用呢?
鄙人原來做過智能車,從鄙人本身的理解,P 算法控制電機(jī),也就是比例控制
是最好的,反應(yīng)速度快,控制精度高,不存在積分和微分效應(yīng),非常適用于適
用于控制周期短的系統(tǒng),當(dāng)然,對于一些特殊的邏輯控制算法,可能要采用PD
算法,用微分來做補償,防止震蕩和超調(diào)。
下面來說下電機(jī)控制算法從開始的加入到最終的確定的方法:
當(dāng)然這一切的前提就是安裝了編碼器,車速有反饋,只有加上編碼器,有
了反饋,才能組成一個閉環(huán)系統(tǒng)。當(dāng)然您也可以加上碼盤,或者霍爾開關(guān)等一
切可以返回車速的東西都可以。
(1) 首先建議在車速比較慢的時候,采用PID 算法來控制電機(jī),為
什么開始要建議您采用PID 呢?主要是為了讓您更加深刻理解
PID 算法的精髓和調(diào)試步驟方法等,有助于以后對控制算法更加
深入的研究和書寫。調(diào)試PID 三個參數(shù)的方法,很多地方都提
供了,我在這里簡單的說下:首先將ID 參數(shù)都變?yōu)?,先調(diào)整
P 比例參數(shù),調(diào)整到速度基本上跟您給定的速度差不多,也就是
說基本穩(wěn)定在您給定的脈沖數(shù),當(dāng)然這個時候會非常的震蕩,
不要擔(dān)心,接下來調(diào)整I,調(diào)整I 的結(jié)果就是震蕩會消除很多,
但是車速會變化緩慢,也就是說會有一些延遲,然后再調(diào)整D,
調(diào)整D 的結(jié)果就是增強調(diào)節(jié)的靈活性和預(yù)見性,在給定速度變
化的過程中,能夠以一個平穩(wěn)過渡來變換,而且速度可以長時
間穩(wěn)定在給定速度附近,然后PID 三個參數(shù)的基本范圍就確定
了,然后再根據(jù)實際的跑車來微調(diào)這些參數(shù),當(dāng)然在您調(diào)試PID
之前,請仔細(xì)閱讀PID 理論知識,這樣有助于您的調(diào)試和理解,
當(dāng)您把PID 調(diào)整好以后,您就基本上領(lǐng)會了PID 的精髓,對于
以后的調(diào)試作用非常大。這里的給定速度,就相當(dāng)于上面對溫
度例子中說的設(shè)定溫度。意思是一樣一樣的。
(2) 當(dāng)您對PID 掌握以后,您能做到給定多少速度,就能讓車速穩(wěn)
定在這個給定速度左右,可以適當(dāng)?shù)奶岣唿c車速,慢慢的觀察
效果,你會發(fā)現(xiàn)當(dāng)速度增加的時候,車速的控制會變得越來越
糟糕,調(diào)節(jié)緩慢,靈活性差。這個時候您就可以試著去掉I 積分
環(huán)節(jié),然后再重新調(diào)整參數(shù),按照上面說的,然后繼續(xù)觀察效
果,試著提高速度,繼續(xù)觀察,因為車速畢竟很慢,很多細(xì)節(jié)
我們都能看到,所以您就可以看到PID 到PD 變換以后,實際的
效果是增加多少,也算是一種進(jìn)步,這個時候,經(jīng)典的PID 公
式已經(jīng)被我們簡化,不要擔(dān)心,您可以多多實驗多多觀察,可
能在這個變換之間,您能受到很多啟發(fā),會產(chǎn)生很多思路,誰
以后的調(diào)試車子都是有好處的。所以搞智能車,自己一步
一步的進(jìn)步學(xué)習(xí),遠(yuǎn)遠(yuǎn)比去某些淘寶店鋪購買現(xiàn)成的程序?qū)W到
的東西更多,體會的也更多,思維開闊的也更多。
(3) 在您的車速在3M 內(nèi)的時候,我強烈建議您采用PD 算法,因為
PD 算法是最好調(diào)整,最容易控制的。當(dāng)然這個時候我也強烈建
議您加上P 控制,P 控制的話,不是說就單純的P*偏差然后得
到的值給定PWM,而是一定要加上一些邏輯控制,不加上邏輯
控制而是直接運用比例公式來給定PWM 值,將會帶來很多問
題,具體的邏輯控制講解,在以后我會寫出相關(guān)的文檔,謝謝。
采用增量式編碼器為反饋的智能車電機(jī)閉環(huán)調(diào)速系統(tǒng):
其實借助于我上面舉得例子,到這里,您可能已經(jīng)明白對于智能車來
說閉環(huán)系統(tǒng)是一個必須的,不可脫離的。當(dāng)然,您可能已經(jīng)完全明白智能
車電機(jī)閉環(huán)調(diào)速系統(tǒng)怎么做,并且您可能也做的更好,要比我在這里所說
的更加的先進(jìn)更加的有創(chuàng)意更加的有效果。所以在這里我只是簡單的說說,
謝謝。
首先,我們需要時刻反饋當(dāng)前的智能車速度給單片機(jī)或者 ARM,讓
系統(tǒng)知道當(dāng)前速度,有助于控制。
我們先說說為什么我們要反饋車子速度,要知道車子當(dāng)前的速度?因
為我們的CPU 利用傳感器采集道路信息,通過CPU 收集和處理變化,系
統(tǒng)就能知道車子當(dāng)前的狀態(tài),比如是在直到上?還是在進(jìn)入彎道?還是在
彎道內(nèi)?還是正在出彎道?還是在上坡?還是穿過了起跑線?有了這些信
息,我們首先就是對舵機(jī)的控制,控制車子根據(jù)什么道路情況來進(jìn)行轉(zhuǎn)彎,
轉(zhuǎn)彎的方向,大小,都是靠這些數(shù)據(jù)來實現(xiàn),當(dāng)然當(dāng)前的速度值也是控制
舵機(jī)轉(zhuǎn)向大小的一個附加因素,這樣更加的有利于我們及時處理不同彎道。
知道了這些信息,就跟我們開車一樣,我們要轉(zhuǎn)彎了,得感知我們車的速
度,怎么感知啊,就靠汽車自帶的速度表,這樣我們就可以通過控制剎車
或者油門還有方向盤來控制車子平穩(wěn)的轉(zhuǎn)過彎道,不同的彎道,不同的速
度,轉(zhuǎn)彎的控制和剎車的控制都是不同的。如果我們不知道當(dāng)前的速度,
那么很可能因為拐彎速度過快,導(dǎo)致翻車,或者側(cè)滑,造成危險。智能車
情況跟真車是一樣的,我們必須知道車子當(dāng)前速度,比如我們智能車拐彎
安全速度是3M/S,所謂安全速度就是車子順利安全且沒有較大側(cè)滑過彎時
的速度,在進(jìn)入彎道前我們車子的速度是4M/S,當(dāng)傳感器感知要進(jìn)入彎道
了,通過跟安全速度對比,我們發(fā)現(xiàn)智能車的速度遠(yuǎn)大于安全彎道速度,
這個時候我們就要剎車,把車子速度快速降低到3M/S,這樣保證我們順利
快速的過彎。在這里您可能問3M/S 的安全速度怎么來?其實很簡單這個
速度是靠實驗來的,不用什么計算,完全屬于經(jīng)驗值,根據(jù)跑道的材料、
車子機(jī)械性能和彎道的角度來決定,所以為什么我們要比賽的時候要試車,
試車中一個最重要的環(huán)節(jié)就是熟悉比賽跑道所用的材料,用于我們實驗車
子的安全速度等。
對于智能車的速度反饋,在這里我就針對增量式編碼器來說,其實碼
盤啊,霍爾啊,他們原理都一樣。光電增量式編碼器不同于絕對值編碼器,
絕對值編碼器在編碼器轉(zhuǎn)動一周的每個特定位置都有一個確定的值輸出,
增量式編碼器轉(zhuǎn)動一圈,固定輸出一定的脈沖,無法確定轉(zhuǎn)動到哪個位置,
對外輸出一般為方波,這樣有助于MCU 進(jìn)行數(shù)據(jù)采集。
有了編碼器,我們通過齒輪、皮帶等將編碼器跟電機(jī)或者傳動輪進(jìn)行
連接,這樣電機(jī)轉(zhuǎn)動的時候,就會帶動編碼器轉(zhuǎn)動,然后編碼器就能向外
輸出方波,接到單片機(jī)上,我們就能進(jìn)行采集編碼器脈沖了。有了脈沖,
可能您又要問這個脈沖沒有規(guī)律性,隨著轉(zhuǎn)動不停的增加,到底怎么來衡
量速度?您這個時候啊,動動手,觀察觀察數(shù)據(jù)特點,您會發(fā)現(xiàn),當(dāng)車速
度比較快的時候啊,脈沖數(shù)自增的速度比較快,也就是說,轉(zhuǎn)速越快,頻
率越高,單位時間內(nèi)的脈沖數(shù)就越多,這樣立刻有了靈感,我們用定時器
設(shè)置一個中斷,這個中斷的時間為5MS,那么每5MS 我們就采集編碼器
一次脈沖值,當(dāng)采集完畢后,我們就對脈沖數(shù)寄存器清零,這樣在5MS
內(nèi),得到的脈沖數(shù)越多,說明車子速度越快,到這里車速就解決了。到這
里您可能會說:還沒完呢,還沒轉(zhuǎn)換為速度呢?要把這個脈沖根據(jù)距離和
時間轉(zhuǎn)換為具體的XX 米/秒的速度。您的這個想法很好,但是真的是沒
有必要,我們根本沒有必要浪費時間去計算這個,因為我們本來就是想知
道速度,脈沖數(shù)的多少已經(jīng)就能衡量速度大小了,我們何必要很麻煩的轉(zhuǎn)
換為具體速度? 一定時間內(nèi)的脈沖數(shù)已經(jīng)夠了,夠我們底層硬件進(jìn)行判斷
計算了。既然我們反饋的數(shù)據(jù)類型為脈沖數(shù),所以我們所給定的速度也對
應(yīng)的到脈沖數(shù),比如50 個脈沖代表速度3M/S,80 個代表4M/S 的速度,
這樣通過道路類型給定脈沖數(shù),就能實現(xiàn)電機(jī)的閉環(huán)控制了,是不是很簡
單?到這里我知道又有人會疑問,50 個脈沖對應(yīng)3M/S,80 個脈沖對應(yīng)4M/S
是怎么得到的?其實這個更簡單,很多人做智能車容易把簡單問題復(fù)雜化,
其實很多問題都可以用幾行程序解決,比如那個坡道,很多人用了很多復(fù)
雜方法解決,比如加一個開關(guān)啊,加個加速度啊,加個陀螺儀啊,根本沒
有必要,程序幾行就搞定了。具體的脈沖對應(yīng)速度,您固定給定一個脈沖
讓車子跑跑到一圈,然后記下時間,跑道實際長度除以時間,就是對應(yīng)速
度,你只是需要大概知道對應(yīng)就行了,不用一個一個實驗,具體的X 米/
秒是宏觀上我們感知的,跟單片機(jī)沒有任何關(guān)系。


評論


技術(shù)專區(qū)

關(guān)閉