基于ARM CORTEX M4的磁導航自主路徑識別系統(tǒng)_第1頁
基于ARM CORTEX M4的磁導航自主路徑識別系統(tǒng)_第2頁
基于ARM CORTEX M4的磁導航自主路徑識別系統(tǒng)_第3頁
基于ARM CORTEX M4的磁導航自主路徑識別系統(tǒng)_第4頁
基于ARM CORTEX M4的磁導航自主路徑識別系統(tǒng)_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、摘 要本文詳細介紹了基于ARM Cortex M4的磁導航自主路徑識別系統(tǒng)的設計與實現過程。本系統(tǒng)以飛思卡爾32位單片機MK60DN512ZVLL10為控制核心,通過電感檢測賽道上通電導線產生的磁場來判斷賽道信息,從而控制小車自主行駛。對電感切割磁場產生的信號,先進行了選頻,然后使用運放對信號進行放大,再利用肖特基二極管對交流信號進行檢波,最后送入AD中獲得小車在賽道上的位置信息。在控制小車自主循跡中,方向與速度控制上分別使用了位置式PID與增量式PID。在調試PID參數以及系統(tǒng)時,還使用了上位機軟件。 關鍵詞:磁導航 自主路徑識別 MK60DN512ZVLL10 PIDAbstractThi

2、s paper describes the design and implementation process based on ARM Cortex M4 magnetic navigation path independent recognition system. This system MK60DN512ZVLL10 Freescale 32-bit microcontroller to control the core, through the inductor wire produces a magnetic field detection circuit is energized

3、 to determine the track information to control car autonomous driving. Cutting the magnetic field generated by the inductor signal, the first for a selected frequency, and then use the op amp to amplify the signal, and then use the AC signal Schottky diode detector, and finally into the AD position

4、information obtained in the car on the track. In self-control car tracking in the direction and speed control are used positional PID and incremental PID. PID parameters during commissioning and system, also used the PC software.Key Words:magnetic navigation path independent recognition MK60DN512ZVL

5、L10 PID目 錄摘 要IAbstractII引 言- 1 -1硬件電路- 2 -1.1單片機最小系統(tǒng)板- 2 -1.2電源模塊- 2 -1.2.1 LM1117- 2 -1.2.2 LM2940- 3 -1.2.3 LM2576-ADJ- 3 -1.2.4 主板總體設計- 4 -1.3 電機驅動模塊- 4 -1.4 傳感器模塊- 6 -1.4.1磁感應傳感器- 6 -1.4.1.1 選頻電路設計- 6 -1.4.1.2放大電路設計- 7 -1.4.1.3檢波電路設計- 7 -1.4.1.4磁感應傳感器整體設計- 7 -1.4.1.5磁感應傳感器的實際電路設計- 8 -1.4.2速度傳感器-

6、 8 -1.4.3起跑線檢測傳感器- 8 -2 機械調校- 10 -2.1 舵機的安裝- 10 -2.2 前瞻的固定- 10 -2.2.1電感的排布- 10 -2.2.2前瞻的長度- 11 -2.3 編碼器的安裝- 11 -2.4 降低重心- 11 -3 軟件編寫- 13 -3.1 開發(fā)環(huán)境- 13 -3.2 程序下載- 13 -3.3 底層驅動編寫- 13 -3.3.1 GPIO模塊- 14 -3.3.1.1 打開時鐘- 14 -3.3.1.2 設置引腳功能- 15 -3.3.1.3 GPIO口方向設置- 15 -3.3.2 PIT模塊- 16 -3.3.2.1 時鐘設置- 16 -3.3.

7、2.2 使能PIT模塊- 16 -3.3.2.3 計算并設定定時器初始值- 16 -3.3.2.4 使能PIT定時中斷- 17 -3.3.3 ADC模塊- 17 -3.3.3.1 ADC設置步驟- 17 -3.4 控制模塊- 18 -3.4.1方向控制- 18 -3.4.2速度控制- 18 -3.4.3電感值處理- 19 -3.4.4丟失處理- 20 -3.5調試系統(tǒng)- 20 -3.5.1 調試工具- 20 -3.5.1.1 上位機軟件- 20 -3.5.2.2 無線串口- 21 -3.5.2 PID參數整定- 21 -結 論- 24 -參考文獻- 25 -致 謝- 26 -附 錄A- 27

8、-附 錄B- 29 -引 言近年來,無人駕駛汽車發(fā)展的飛速,所謂無人駕駛汽車就是車可以自動駕駛無需人工控制。國外比較有代表性的是谷歌無人駕駛汽車,通過各種傳感器檢測到其他車輛。國內的無人駕駛汽車也發(fā)展的比較快,比較有代表性的就是,2011年的國防科技大學發(fā)明的無人駕駛汽車。無人駕駛汽車有很好的發(fā)展前景,我們不需要再親自開車,就有了更多的時間干其他事情,無人駕駛汽車還可以用于送貨等。但是無人駕駛汽車還有很多難題惡待解決,比如無人駕駛汽車是否可以應對緊急情況,這就需要無人駕駛汽車變得更加智能。本論文詳細介紹了采用飛思卡爾32位的MK60DN512ZVLL10作為控制核心,通過檢測道路中心的通電導線

9、的磁場使小車實現自主路徑識別,對研究無人駕駛汽車具有現實意義。其實現了通過電感檢測磁場來獲取賽道信息,并利用獲取的賽道信息來控制舵機轉向,即控制小車行駛方向。為了讓小車更快的自主循跡并且不沖出賽道,對速度還進行了控制,比如直道加速、彎道減速等。1硬件電路硬件系統(tǒng)主要是由最小系統(tǒng)板,放大電路,主板,電機驅動等組成。在設計硬件電路原理圖與PCB時,使用的是Altium Designer 9。1.1單片機最小系統(tǒng)板Kinetis芯片是首款基于ARM Cortex M4內核的微控制器,基于飛思卡爾創(chuàng)新的90nm薄膜存儲器(TFS)閃存技術,具有獨特的Flex存儲器(可配置的內嵌EEPROM)。Kine

10、tis芯片融合了最新的低功耗革新技術,具有高性能、高精度的混合信號能力,寬廣的互連性,人機接口和安全外設。我使用的最小系統(tǒng)板是Kinetis系列的MK60DN512ZVLL10,外觀如圖1.1所示。圖1.1 MK60DN512ZVLL101.2電源模塊電源模塊好比是大廈的基石,小車的穩(wěn)定運行是以電源模塊穩(wěn)定供電為基礎的。為小車供電的是信號為7.2V 2000mAh Ni-Cd電池,需要提供給單片機、放大電路等3.3V的電源,提供給電機驅動、編碼器等5V電源。因此,我們采用了低壓差集成穩(wěn)壓器,低壓差集成穩(wěn)壓器是線性穩(wěn)壓器的一種,相比于傳統(tǒng)的線性穩(wěn)壓器、開關式電壓穩(wěn)壓器等有結構簡單、線性度好等優(yōu)點

11、。1.2.1 LM1117為了給單片機與傳感器提供3.3V的電壓,我們選用了三端穩(wěn)壓器LM1117。LM1117輸出電壓有可調式和固定式,我們使用的是3.3V固定輸出電壓。對于給傳感器模塊供電電路也是相同的。原理圖如圖1.2所示。圖1.2 3.3V單片機電源1.2.2 LM2940硬件電路上多處用到了5V的電源,包括電機驅動、編碼器、無線串口等,還提供給了單片機與傳感器的輸入電壓。我們選用了低壓差集成穩(wěn)定器LM2940來提供5V電源,電路原理圖如圖1.3所示。圖1.3 5V電源1.2.3 LM2576-ADJ舵機的額定工作電壓為5V,為了能讓舵機反應更快、更靈敏,我們通常會增大給舵機的電壓,我

12、們給舵機提供的電壓是6V,使用的是開關式電源變換器LM2576-ADJ,ADJ的意思就是可以調節(jié)??赏ㄟ^調節(jié)R6可變電阻來改變輸出電壓。電路原理圖如圖1.4所示。圖1.4 6V舵機電源1.2.4 主板總體設計主板總體供電示意圖如圖1.5所示,實物圖如圖1.6所示。圖1.5 電源供電示意圖圖1.6 主板實物圖1.3 電機驅動模塊智能小車的動力來源于一臺直流電機,電機不僅要有較快的速度,還需要有較高的加速度,因此對電機的轉速要求較高。實現直流電動機正反轉的電路有很多,比較常用的電路就是H橋驅動電路,因其形狀類似于字母”H”而得名。H橋驅動電路示意圖如下圖所示。從電路圖上,很容易看出,當開關Q1、Q

13、4接通時,電流從左往右流過電機,電機正轉;當開關Q3、Q2接通時,電流從右往左流過電機,電機反轉。由此來控制直流電機的正反轉。H橋示意圖如圖1.7所示。圖1.7 H橋驅動電路示意圖但是,當電機運行時,必須要保證Q1、Q2以及Q3、Q4不能同時導通,可使用圖1.8電路示意圖來解決。圖1.8 H橋控制電路示意圖驅動芯片我用的是英飛凌公司的BTS7960集成半橋驅動器,BTS7960有著出色的性能和極高的穩(wěn)定性。使用兩片BTS7960搭成一個H橋驅動電路,來控制電機。電機驅動原理圖如圖1.9所示,實物圖如圖1.10所示。圖1.9 電機驅動原理圖圖1.10 電機驅動實物圖1.4 傳感器模塊1.4.1磁

14、感應傳感器小車需要通過檢測道路中心的通有100mA導線的磁場來實現路徑識別,使用的交變電流頻率為20kHz,那么磁場檢測就顯得尤為重要了?,F在測量磁場的方法很多,可以通過電感、磁阻、霍爾元件等交變磁場傳感器來測量磁場。我使用的是10mH工字型電感,如圖1.11所示。圖1.11 10mH工字型電感1.4.1.1 選頻電路設計電感切割磁場會產生感應電動勢,但是這個感應電動勢信號太弱,只有幾十毫伏,而且噪聲很多,會受到周圍不同頻率的磁場的干擾。因此,電感切割磁場產生的電動勢需要進行選頻,減少其他干擾信號的影響。利用電感電容即可組成簡單的并聯(lián)諧振電路來實現選頻電路,諧振頻率要求為20kHz,則可以通過

15、公式1-1計算出C的值。2fL=12fC (式1-1)將L=10mH,f=20000Hz代入公式,可以得到C=6.3 nF左右,在市場上能夠買到的最為接近6.3nF電容的標稱電容為6.8nF。電路圖如圖1.12所示。圖1.12 并聯(lián)諧振電路1.4.1.2放大電路設計選頻后的信號還是很弱,因此為了能夠更加準確地獲得賽道信息,還需要對感應電壓進行進一步的放大,這也是信號檢測最主要的部分??梢赃x用運算放大器進行電壓放大,運放在選型上應該選擇低噪音、動態(tài)范圍大、高速、單電源、增益帶寬積較高的運放。運放的選擇有很多,我們試過由TI公司生產的LMV358,雖然LMV358價格便宜,容易購買,但是其增益帶寬

16、積僅有1MHz,在20kHz的信號頻率下,開環(huán)增益僅有50倍,而一般放大倍數要大于100倍,所以性能一般。在運放芯片的不斷嘗試中,我們最終選擇了性能卓越的OPA2350,也是TI公司生產的高速、單電源、至軌運放,其增益帶寬積達到了38MHz,在20KHz頻率下開環(huán)增益達到了1900倍,這足以看出來OPA2350性能非常的出色。1.4.1.3檢波電路設計經過選頻和放大后的電壓信號仍然是交流信號,如果直接將交流信號接入單片機的AD端口,使用單片機直接采樣交變電壓信號的話,采集數據的處理方面比較麻煩。所以,一般將交流信號整流為直流信號再送入AD中進行處理。可以使用肖特基二極管,對信號進行檢波處理,以

17、便可以獲得更大的動態(tài)范圍。1.4.1.4磁感應傳感器整體設計從電感切割磁場產生感應電動勢要經過選頻、放大、檢波,最后再送入AD中。過程如圖1.13所示。圖1.13 放大電路過程1.4.1.5磁感應傳感器的實際電路設計放大電路使用的運放芯片是OPA2350,電感切割磁場產生的電動勢經過選頻、放大、檢波等步驟。設計的電路圖如圖1.14所示,實物圖如圖1.15所示。圖1.14 放大電路原理圖圖1.15 放大電路實物圖1.4.2速度傳感器小車在自主循跡過程中,速度的控制很重要。小車在直道上加速行駛,進入彎道后減速行駛,否則很容易沖出賽道。而在控制小車速度的環(huán)節(jié)上,首先得獲得小車的當前速度,然后才能決定

18、是加速還是減速。用于測速的傳感器通常有霍爾傳感器、光電傳感器、測速電機、編碼器四種,我們選用了測量精度較高,穩(wěn)定性較好的編碼器來進行測速。根據精度要求,我們購買了360線的歐姆龍編碼器,為數字量輸出,可供單片機直接采集以獲得速度值。1.4.3起跑線檢測傳感器智能小車除了能夠實現自主循跡外,還要有跑完一圈后自動停車功能。電磁組的賽道在起跑線處有永磁鐵,用來檢測起跑線。選擇干簧管來檢測永磁鐵無疑是最簡單的方法,干簧管我也試了很多種,有的好用有的不好用,好不好用是以可以檢測的最高高度衡量的,而且有的干簧管外表是玻璃的,很容易打碎,經過選擇,發(fā)現了外面有塑料包裝的干簧管,不容易損壞,我最終使用的是這個

19、,檢測高度大約有1.5CM,這個高度已經足夠了。當然磁鐵的大小不同,稍微有些差異。2 機械調校2.1 舵機的安裝小車轉向是通過舵機來驅動的,所以舵機的安裝會影響到小車轉向的角度和靈敏度。由于小車上面的空間有限,為了合理利用,將舵機安裝位置挪到了兩前輪之間。舵機的固定需要支架,使用了鋁合金材料的支架,不僅結實而且特別輕,不會使小車的重心向前移。舵機的安裝如圖2.1所示。圖 2.1 舵機的安裝2.2 前瞻的固定2.2.1電感的排布智能小車的前瞻應該盡量長點,正所謂“站得高看得遠”,足夠的前瞻量能提前獲得賽道的信息以便更好的控制小車。當使用多個傳感器的時候,傳感器之間的距離越大,便越能獲得更多的賽道

20、信息。我使用的是兩個電感的方案,兩個電感之間的距離為25cm左右,如圖2.2所示。圖2.2 電感的排布2.2.2前瞻的長度由于車模不限制長度,所以為了能夠提前獲取賽道信息以便更快的響應,我增加了前瞻的長度。當然,并不是說前瞻越長越好,而是需要一個合適的長度,與控制算法有關系,要結合實際情況。但是,短前瞻效果肯定不好。前瞻的材料使用的是碳纖維桿,為了減輕前瞻的重量,使小車的中心不往前移,我試了不同直徑的碳纖維桿,以小車行駛時前瞻不顫動為標準,選用了直徑為4*2mm的規(guī)格。前瞻的固定如圖2.3所示。圖2.3 前瞻的固定2.3 編碼器的安裝編碼器的安裝需要注意的事項就是齒輪的咬合,包含編碼器與差速、

21、差速齒輪與電機。調節(jié)齒輪之間的距離,然后打開電機聽聲音可以判斷齒輪咬合的松緊。如果轉動聲音尖銳,則表示齒輪咬合的太緊。如果聲音零碎,則表示齒輪咬合的太松。齒輪咬合的太松,容易損壞齒輪,齒輪咬合的太緊,影響電機。所以,調整齒輪咬合,以松緊合適為準,既不松動,也不卡滯。編碼器的安裝如圖2.4所示。圖2.4 編碼器的安裝2.4 降低重心為了讓小車運行穩(wěn)定,轉向靈活,過彎時不側翻,通常會降低小車的重心。小車上最重的就是電池了,所以為了降低小車的重心,我將電池的高度往下降了,并且位置往后移動一點。還去掉了小車上一些無關緊要的零件,最大限度的減輕小車的重量,使小車運行起來輕便,轉向靈敏,加速減速更快。電池

22、的安裝如圖2.5所示。圖2.5 電池的安裝3 軟件編寫3.1 開發(fā)環(huán)境Kinetis是基于ARM Cortex M4核心的,可以使用飛思卡爾公司推出的面向嵌入式應用開發(fā)的軟件工具CodeWarrior(簡稱CW),還可以選用第三方的開發(fā)環(huán)境,我使用的是嵌入式系統(tǒng)開發(fā)工具IAR。軟件界面如圖3.1所示。 圖3.1 IAR界面3.2 程序下載程序寫好之后,還需要下載到單片機中,我們使用的是USB接口的J-LINK下載器,將電腦與單片機通過J-LINK連接后,在IAR界面的右上角有個下載按鈕,點擊下載即可。IAR程序下載界面如圖3.2所示。圖3.2 IAR程序下載界面3.3 底層驅動編寫Kineti

23、s芯片是首款基于ARM Cortex M4內核的微控制器,基于飛思卡爾創(chuàng)新的90nm薄膜存儲器(TFS)閃存技術,具有獨特的Flex存儲器(可配置的內嵌EEPROM)。Kinetis芯片融合了最新的低功耗革新技術,具有高性能、高精度的混合信號能力,寬廣的互連性,人機接口和安全外設。Kinetis系列微控制器第一階段產品有五個系列,如圖3.3所示。圖3.3 Kinetis微控制器產品組合3.3.1 GPIO模塊GPIO即輸入輸出端口,常用于輸入或輸出邏輯信號。3.3.1.1 打開時鐘使用GPIO需要先啟用該端口的時鐘,否則無法使用,而時鐘需要通過SIM模塊的SIM_SCGC5寄存器設置,SIM_

24、SCGC5寄存器圖3.4所示。圖3.4 SIM_SCGC5寄存器將SIM_SCGC5寄存器的第9、10、11、12、13位設置為1,IO口模塊獲得系統(tǒng)時鐘,然后才能正常工作??梢允褂煤甓x來實現,不容易出錯。宏定義的代碼如下:#define SIM_SCGC5_PORTA_MASK 0x200u#define SIM_SCGC5_PORTB_MASK 0x400u#define SIM_SCGC5_PORTC_MASK 0x800u#define SIM_SCGC5_PORTD_MASK 0x1000u#define SIM_SCGC5_PORTE_MASK 0x2000uSIM_SCGC5寄

25、存器的設置代碼如下:SIM_SCGC5|=SIM_SCGC5_PORTA_MASK|SIM_SCGC5_PORTB_MASK|SIM_SCGC5_PORTC_MASK|SIM_SCGC5_PORTD_MASK | SIM_SCGC5_PORTE_MASK;3.3.1.2 設置引腳功能Kinetis系列的單片機的IO口一般都有復用功能,所以我們只有通過設置啟用GPIO功能,IO口才能使用,所以打開時鐘之后就需要將使用的引腳設為GPIO模塊,通過設置引腳控制寄存器(PORTx_PCRn)來實現。該寄存器如圖3.5所示。圖3.5 PORTx_PCRn寄存器引腳復用功能通過設置MUX即可,將MUX設為

26、1則該引腳GPIO功能即啟用。代碼如下:PORTE_PCR0= 0x00000100;/E0引腳設置為GPIO模式還可以通過宏定義的方式,宏定義如下:#define PORT_PCR_MUX(1) 0x000001003.3.1.3 GPIO口方向設置大多數單片機的IO口都是雙向的,當然功能強大的Kinetis系列的單片機也不例外。在使用IO口前,需要設置IO口為輸入或者輸出,可通過設置IO口方向寄存器,即GPIOx_PDDR寄存器來確定IO口為輸入還是輸出。GPIOx_PDDR寄存器如圖3.6所示。圖3.6 IO口方向寄存器GPIOx_PDDR其中,PDD為引腳方向設置位,PDDx=1是將引

27、腳x設置為輸出,PDDx=0是將引腳x設置為輸入。具體代碼如下:GPIOE_PDDR|=0X00000001;/E0設置為輸出3.3.2 PIT模塊中斷程序的作用是,中斷發(fā)生后,當前程序會被立即暫停,然后進入中斷程序,等中斷服務程序執(zhí)行完畢,再恢復現場,并回到斷點處繼續(xù)執(zhí)行剛才的程序。不同的中斷源,觸發(fā)中斷的事件也不同。在單片機的應用中,經常會用到的一種中斷就是定時中斷,當定時時間到時則觸發(fā)中斷。定時中斷在智能車中最主要的應用就是測速,而Kinetis中的PIT模塊用來做簡單的定時是最簡單的一種。PIT模塊即周期定時模塊,主要功能是用來產生定時中斷。定時中斷的原理是通過對總線時鐘進行計數,當計

28、數遞減到0時即產生中斷,我們可以通過給每個計數器賦予不同的初值來獲得想要的中斷周期,每次中斷后,計數器便會自動加載我們自己設定的初值,如此反復即實現了定時中斷的功能。3.3.2.1 時鐘設置如果要使用定時中斷的話,就需要先打開時鐘。通過寄存器SIM_SCG6的設置可以打開PIT模塊的時鐘,將寄存器SIM_SCG6的第1215位設置為1即可打開PIT時鐘,具體代碼如下:SIM_SCGC6|=SIM_SCGC6_PIT_MASK;/打開pit時鐘其中SIM_SCGC6_PIT_MASK為宏定義:#define SIM_SCGC6_PIT_MASK 0x800000u3.3.2.2 使能PIT模塊開

29、啟PIT模塊的時鐘之后,需要使能PIT模塊,通過設置PIT模塊控制器即PIT_MCR來實現,PIT_MCR寄存器如圖3.7所示。313029282726252423222120191817161514131211109876543210ReadMDISFRZWriteReset00000000000000000000000000000010圖3.7 PIT_MCR寄存器其中,MDIS為模塊使能位,默認為1,1為禁止狀態(tài),將其置0即可。具體代碼如下:PIT_MCR=0;/PIT模塊使能3.3.2.3 計算并設定定時器初始值下面便要設定定時器的初始值來實現自己想要的定時周期了。因為每次中斷重新載入

30、計數器初始值需要一個時鐘周期,然后遞減到0,所以我們在計算計數器初始值時需要考慮這個額外的時鐘周期,即每兩個周期中斷一次。由此可得:計數初值LDVAL = (定時周期/ 模塊時鐘周期) -1或者:計數初值LDVAL = (定時周期*模塊時鐘頻率) -1將計數初值LDVAL賦值給定時器初值寄存器PIT_LDVALn即可,具體代碼如下:PIT_LDVAL0=time*60000-1;/計數器初始化,time為中斷周期,單位ms3.3.2.4 使能PIT定時中斷最后還要使能定時器,使能中斷。用于設置對應通道的定時器是否使能以及是否產生中斷請求的寄存器為定時器控制寄存器PIT_TCTRLn,如圖3.8

31、所示。313029282726252423222120191817161514131211109876543210ReadTIETENWriteReset00000000000000000000000000000000圖3.8 PIT_TCTRLn寄存器其中,TIE=1為定時器中斷使能,TEN=1為定時器使能。具體設置代碼為:PIT_TCTRL0=PIT_TCTRL_TEN_MASK|PIT_TCTRL_TIE_MASK;/定時器使能,中斷使能其中PIT_TCTRL_TEN_MASK與PIT_TCTRL_TIE_MASK為宏定義:#define PIT_TCTRL_TEN_MASK 0x1u#

32、define PIT_TCTRL_TIE_MASK 0x2u3.3.3 ADC模塊智能車既然是自主循跡,那作為智能車“眼睛”的傳感器是必不可少的,而電磁小車的傳感器是電感,電感通過切割通電導線周圍的磁場產生電壓,但是單片機本身無法對電壓進行處理,需要進行AD轉換,即將模擬量轉換為數字量。ADC實際上是一把用來丈量電壓大小的尺子,對于3.3V供電的Kinetis芯片而言,能夠丈量電壓的范圍就是03.3V。3.3.3.1 ADC設置步驟a. 打開ADC模塊時鐘。b. 選擇時鐘和分頻系數。c. 設置采樣精度,是否啟用長采樣時間、高速模塊,設置觸發(fā)方式,是否啟用硬件均值濾波、硬件比較,選擇采樣通道。d

33、. 選擇使用硬件觸發(fā)還是軟件觸發(fā)。e. 等待轉換完成,讀取結果。其實,很多寄存器無需設置,使用默認值即可。3.4 控制模塊3.4.1方向控制在方向控制上,我采用的是兩個電感的方案,通過兩個電感值用公式3-1:pos=(long)(Sensor0-Sensor1)*K/(long)(Sensor0)*Sensor1) (式3-1)其中pos值代表小車中心偏離賽道中心的程度量,K值可以根據實際情況進行測定。獲得賽道中心位置值后,還需要通過賽道中心值來控制舵機,我使用的是PD控制,控制公式3-2:SERVO=(int)(CENTER+P*pos+D*poserro+D*preposerro/2) (

34、式3-2)其中CENTER為舵機中值,然后根據實際情況不斷地調節(jié)P與D的值,直道控制效果最佳為止。3.4.2速度控制在速度控制上,我們使用了比較經典的PID控制,具體是增量式PID控制,增量式PID控制可以使小車的速度變化比較平穩(wěn)連續(xù),如果使用位置式PID的話,小車的速度就會變化的比較大,不利于小車的平穩(wěn)運行。/增量式PID速度控制/公式:增量=KP*En-KI*En-1+KD*(En-1-En-2)int PID_Control(int curr_Value)/傳入當前值int currError;/當前誤差int increment;/增量值currError = ideal_speed

35、- curr_Value;/當前誤差increment = (int)(P_value*currError);/增量值lastError = currError;/記住上次的誤差prevError = lastError;/記住上上次的誤差return increment;3.4.3電感值處理AD轉換后的電感值由于比較雜亂,通常要對大量的電感值進行預處理,然后再利用處理后的電感值控制小車自主循跡??赏ㄟ^軟件濾波來濾出干擾信號,來獲取更為有價值的信號。通過一個算法即可實現,我們使用的是中值濾波,對因偶然因素而引起的波動有很好的克服作用。具體算法代碼如下。unsigned int ADCmid(i

36、nt channel) /ADCmid:(中值濾波)獲取1路通道channel中值濾波后的A/D轉換結果 int i,j,k,mid; i = ADCvalue(channel); j = ADCvalue(channel); k = ADCvalue(channel); if (i > j) mid = i; i = j; j = mid; if (k >= j) mid = j; else if (k >= i) mid = k; else mid = i; return mid; 電感值通過中值濾波后,我們還進行了均值濾波,使電感值變化比較平穩(wěn),不至于跳變的特別厲害,具

37、體算法代碼如下。unsigned int ADCave(int n,int channel)/ATDave:(均值濾波)對1路通道channel的A/D轉換結果求n次平均值 int i; int ave=0; for (i=0; i<n; i+) ave += ADCmid(channel); ave /= n; return ave;3.4.4丟失處理小車在沿著賽道循跡的過程中,遇到彎道特別大的時候,由于小車的前瞻,電感檢測到的賽道信息很弱,甚至為0。這時候,小車前瞻上的兩個電感值均為0,如果按照比較兩個電感值的大小來判斷賽道是直道還是彎道的話,就會判斷錯誤,明明是彎道,卻識別成了直道

38、,以至于沖出賽道。因此,需要對這種特殊情況進行處理,即電感值丟失處理。當兩個電感值都變?yōu)?前,肯定有一個變化的過程,即在進入大彎道時,小車會轉彎,當兩個電感值都變?yōu)?時,保持上一個轉彎狀態(tài),甚至將舵機“打死”在一邊即可。3.5調試系統(tǒng)3.5.1 調試工具3.5.1.1 上位機軟件在調試小車的時候,難免會遇到各種問題,比如小車不知道什么原因突然沖出賽道了,可能在同一個地方沖出賽道很多次。我們單純去看控制代碼是無法知道為什么小車沖出賽道了,或與我們可以從單片機上的液晶顯示屏看到一些數據,但是在小車在高速行駛的時候我們是無法去看數據的,這就需要我們采集小車在沖出賽道前與沖出賽道后的數據進行分析,才能

39、找到原因。為了實時監(jiān)測小車在行駛過程中的數據,我們使用了上位機軟件“Serial Digtial Scope”,即虛擬示波器,可以實時顯示并自動繪圖從單片機上發(fā)過來的數據,我們通過分析圖形與數據便可以知道小車的狀態(tài)。那么,如果小車沖出賽道,通過分析數據便很容易就知道原因了。虛擬示波器界面如圖3.9所示。圖3.9 上位機軟件3.5.2.2 無線串口由于電磁小車需要采集的數據并不是很多,所以我們選擇了使用無線串口工具來發(fā)送與接收數據。無線串口工具如下圖所示,分為發(fā)送部分與接收部分,一個是插在主板上來發(fā)送從單片機上傳輸的數據,一個是插在電腦上接收發(fā)送過來的數據。無線串口實物圖如圖3.10所示。圖3.

40、10 無線串口實物圖無線串口工具使用前,還需設置波特率,要保證兩個無線與軟件上波特率相同,這樣才能保證正常傳輸數據和數據的正確性。3.5.2 PID參數整定再好的控制算法,如果參數不整定好,控制效果也會一塌糊涂。我使用了上述的無線串口和上位機軟件進行了速度與方向的PID參數整定。在PID參數整定的時候,雖然可以通過理論的方法,但是往往在實際中,使用的是湊試的方法。系統(tǒng)的響應速度與比例系數P有關,P越大系統(tǒng)響應越快,但是太大的P值會導致系統(tǒng)振蕩,不利于系統(tǒng)的穩(wěn)定。增加積分系數I可以減少超調,增加系統(tǒng)的穩(wěn)定性,減少振蕩。增加微分系數D可以使系統(tǒng)超調量減少,穩(wěn)定性增加。在試湊PID參數的時候,可以先

41、只使用P,將P值由小到大不斷增加值,直到系統(tǒng)出現震蕩。振蕩的響應曲線如圖3.11所示。圖3.11 振蕩的響應曲線然后就可以加入參數I,參數I的設定變化與參數P正好相反,先設定參數I為一個較大的值,然后逐漸減少,直到系統(tǒng)系統(tǒng)振蕩消失為止。無超調的響應曲線如圖3.12所示。圖3.12 無超調的響應曲線最后再加入參數D,從0開始逐漸增加,直到滿足條件。理想的響應曲線如圖3.13所示。圖3.13 理想的響應曲線在整定PID參數的時候,需要不斷的調整各個參數的值,直到效果最佳為止。結 論本系統(tǒng)基本上實現了小車的自主循跡功能,并對不同的賽道進行了速度處理,小車跑完一圈后還實現了自動停車功能。在小車的機械方

42、面,結合很多前輩們的經驗對小車進行了機械調教,不斷的降低了小車的中心,使得小車在過坡道和高速行駛時平穩(wěn)。在硬件電路方面,進行了模塊化的設計,這樣大大降低了各個模塊之間的相互影響。分別設計了主板模塊、放大電路模塊、電機驅動模塊等,還根據系統(tǒng)在調試過程中遇到的問題,對電路板進行了多次的改進。為了節(jié)省成本,使用網孔板手工焊接了檢測起跑線模塊,對干簧管的位置以及高度對實際情況進行了多次的嘗試。在電感使用方面,我們也嘗試過不同的方案,包括三個四個電感甚至更多,最終我們使用的是兩個電感方案,兩個電感程序處理起來比較簡單。但是也有缺陷,電感少就代表獲取賽道的信息量小,可能無法應對比較復雜的賽道。在程序控制方

43、面,使用的是經典PID控制,我們還有很多控制方案沒有嘗試,比如模糊控制等方案,這些都是值得進一步探索的,所謂的沒有最好,只有更好。在嘗試不同的控制算法過程中,還發(fā)現了,控制算法不一定要很高級很高深。其實,即使簡單的PID控制也可以取得很好的控制效果,但前提是控制方法一定要是正確的。在整個系統(tǒng)設計的過程中,遇到了很多的問題,通過請教老師和上網查詢都一一解決了。之前一直都是學的理論知識,通過畢業(yè)設計終于可以將所學知識進行了一次比較徹底比較全面的實踐。參考文獻1王宜懷嵌入式系統(tǒng)原理與實踐M電子工業(yè)出版社,201232卓晴,黃開勝,邵貝貝學做智能車:挑戰(zhàn)“飛思卡爾杯”M北京航空航天大學出版社,2007

44、.33潘峰 全國大學生飛思卡爾智能車大賽應用技能詳解M中國鐵道出版社,2013.14胡壽松自動控制原理(第4版) M科學出版社 ,200125劉金琨智能控制M北京:電子工業(yè)出版社,2005:126 譚浩強.C程序設計M.北京:清華大學出版社,2001:173 電磁組競賽車模路徑檢測設計參考方案M.全國大學生"飛思卡爾"杯智能汽車競賽秘書處,2010:46 童詩白.模擬電子技術基礎M.北京:高等教育出版社,2001:67 劉迎春. 傳感器原理設計與應用M . 長沙:國防科技大學出版社,2009.5:771108 陳懂. 智能小車運動控制系統(tǒng)的研究與實現D.南京:東南大學儀器科

45、學與工程系,2005:3 致 謝歷時三個月的畢業(yè)設計終于完成了,期間雖然遇到了很多的棘手問題,但是在指導老師潘老師的耐心指導下都一一自己解決了。在做畢業(yè)設計的過程中,我遇到了問題去問潘老師,但是潘老師不會直接說出答案,而是反問我覺得是哪里出了問題,引導我自己思考問題,從問題的表象到問題的本質一步一步分析,問題自然而然就得到了解決。潘老師在我做畢業(yè)設計的時候,還對我的畢業(yè)設計提出了他的看法,而不是直接否認我的思想,他常說每個人都有自己的想法,說不定你的想法就是正確的,想法好不好實踐一下就知道了。潘老師不僅知識淵博,而且善于引導學生自己思考問題,養(yǎng)成獨立思考的好習慣,潘老師還提倡“做中學”,讓我們

46、從實踐中獲取知識,而不是從書本上間接獲取知識。潘老師在我做畢業(yè)設計的過程中給了我很大的幫助,在這里我由衷的感謝潘老師,感謝他的敦敦教導。在做畢業(yè)設計的時候,北京聯(lián)合大學的智能車團隊也給了我很大的便利,感謝他們的無私奉獻,使我比較順利的完成了畢業(yè)設計。我也要感謝我的父母,是他們的無私奉獻,我才完成了我的學業(yè)。他們在我的人生道路上給予了我莫大的幫助,他們的支持是我不斷前進的動力。最后,感謝各位老師能在百忙之中抽出時間來評審我的畢業(yè)設計,給我的畢業(yè)設計提出意見。附 錄A1.主板2.放大電路3.電機驅動附 錄B/*頭文件*/#include "includes.h"#include

47、 "LQ12864.h"#include "flexnvm.h"#include "uart.h"/*/方向定義: 右邊為負,左邊為正#define KEYCODE_MASK 0x0000000F#define KEYCODE_SHIFT 0#define ROADMODE_NUM 50/*宏定義 常量*/#define RIGHT 4505#define CENTER 5025#define LEFT 5540 #define Para_Num 4/設定參數個數#define LOSTFLAG 50/丟失值 電感在彎道上會丟失這時需

48、要做丟失處理/*DFlash*/#define READword(address) (unsigned int)(*(volatile unsigned int *)(address)#define dflash_add_mask 0x800000u;/Dflash地址unsigned int Dflash_Address=0;int dflashdata=0;unsigned int d_flash_F; /dflash參數保存標志,保存在dflash0x0000中,若不為0xffff,則讀取后面的參數,否則使用數組默認參數char *disparaPara_Num= "WANp&

49、quot;,"Fd","MAXSPEED","MINSPEED"/參數默認名稱,可自行修改uint32 parameterPara_Num=17, 70, 280, 160; /12 30 35 1111 2 0 /參數默認值,可自行修改/*/uint8 qiapao_flag=0;/起跑線標志位 uint8 stop_flag=0; /停車標志uint8 start_flag=0;uint8 enable_stop;/*road mode */ int16 SERVO;/舵機值 uint16 Sensor8;/存放電感值得數組 ui

50、nt16 last_Sensor8; /*速度控制變量*/ int16 speed; int16 speed_out; int16 speedP,speedI,speedD; /*按鍵處理變量*/uint8 keyscan_F=0;uint8 keyflag=0;uint8 keycode=0;uint8 keycode_last=0;uint8 set_F=0;uint8 keycount=0; uint8 star_F=0;/*時間變量&&標志位*/int32 TimeCnt=0;int32 TimeCnt1=0;int32 TimeCnt2=0;int32 time_ms

51、=0;int32 run_time=0;uint8 test_flag=0;int32 stop_time;int32 road_mode_zhidao_time;int road_count=0;unsigned char judge=0; /0左側丟失 1右側丟失 2全部丟失 3正常int max;int min;byte lostflag=0;int left;int right; int lastleft,lastright; int lastservo=CENTER;int WANp;int Fd;float pos;float forepos;int lastpos;float p

52、oserro=0,preposerro=0;int lastsensor0=250,lastsensor1=250;int Speed_Out;int jl;unsigned char route_F;/道路標志,0直道,1,直道入彎道,2彎道int SET_CARSPEED;int speed1,speed2;int SPEED_CONTROL_P;int SPEED_CONTROL_I;int REALSPEED;int CARSPEED;int ek1,ek2,ek3;int MAXSPEED,MINSPEED,AIMSPEED;int sum,abssum;int sum1,abssum1;int sum2,abssum2;int zongcha,qhc,hqc,jdc;int road50=0;uns

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論