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