新聞中心

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

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

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


評(píng)論


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

關(guān)閉