基于FPGA的智能小車設(shè)計(jì)
摘要:介紹基于FPGA的智能小豐設(shè)計(jì),小車包括在FPGA上構(gòu)建以NiosⅡ嵌入式系統(tǒng)為核心的控制電路、傳感器電路、動(dòng)力及轉(zhuǎn)向電路、LCM電路、溫度和濕度測(cè)量電路、無(wú)線數(shù)據(jù)收發(fā)電路。在NiosⅡ集成開(kāi)發(fā)環(huán)境(IDE)縞寫(xiě)C語(yǔ)言程序,實(shí)現(xiàn)能遠(yuǎn)程遙控小車、自動(dòng)避障、溫度和濕度監(jiān)測(cè)并無(wú)線傳輸至控制端的功能,其特點(diǎn)是能夠無(wú)線控制小車和遠(yuǎn)程采集環(huán)境信息。
關(guān)鍵詞:智能小車;FPGA;避障;NiosⅡ
智能監(jiān)控機(jī)器人是近年來(lái)機(jī)器人應(yīng)用工程中一項(xiàng)前沿性的題目,智能化探測(cè)小車是智能行走機(jī)器人的一種。智能監(jiān)控機(jī)器小車就是針對(duì)上述情況,在參考了目前大多數(shù)智能機(jī)器人的基礎(chǔ)上,以降低成本為原則設(shè)計(jì)的。小車具備溫濕度和環(huán)境監(jiān)測(cè)、無(wú)線通信、躲避障礙物以及無(wú)線遙控等功能。此智能監(jiān)控機(jī)器小車與目前已有的同類設(shè)計(jì)相比,有性價(jià)比高、操作方便、可靠性好、功耗小等優(yōu)點(diǎn)。
1 系統(tǒng)結(jié)構(gòu)及硬件設(shè)計(jì)
整個(gè)系統(tǒng)由發(fā)送端(智能小車部分)和接收端(控制臺(tái):控制和顯示部分)組成,如圖1所示。系統(tǒng)由傳感器系統(tǒng)、動(dòng)力及轉(zhuǎn)向系統(tǒng)、CCD圖像傳感器模塊、LCD顯示、溫度和濕度測(cè)量電路和供電系統(tǒng)等組成,整個(gè)系統(tǒng)的控制核心以2片Altera公司的EP2C20F484為核心,在Altera公司的QuartusⅡ和SoPC Builder開(kāi)發(fā)環(huán)境中完成。根據(jù)系統(tǒng)硬件結(jié)構(gòu)添加所需要的外圍模塊并生成NiosⅡCPU。
1.1 供電系統(tǒng)
小車安裝了兩塊充電電池,分別為FPGA開(kāi)發(fā)板(FPGA控制電路)和小車運(yùn)動(dòng)提供能量,電池置于車身底部。
1.2 傳感器系統(tǒng)
系統(tǒng)采用了6個(gè)紅外對(duì)射傳感器,通過(guò)FPGA配置的NiosⅡCPU來(lái)檢測(cè)傳感器信號(hào)實(shí)現(xiàn)小車躲避障礙物的功能。漫反射型紅外對(duì)射傳感器也稱光電開(kāi)關(guān),是一種集發(fā)射器和接收器于一體的傳感器,多用于檢測(cè)障礙物。原理是由光電開(kāi)關(guān)輻射出來(lái)的調(diào)制紅外光束被檢測(cè)物體反射回來(lái),紅外線經(jīng)同步選通接收,由電子開(kāi)關(guān)線路驅(qū)動(dòng)回路,從而來(lái)檢測(cè)物體的有或無(wú)。當(dāng)被檢測(cè)物體的表面光亮或其反光率極高時(shí),漫反射式的光電開(kāi)關(guān)是首選的檢測(cè)模式。這種電路模塊體積小,信號(hào)容易轉(zhuǎn)化為標(biāo)準(zhǔn)電平。
1.3 動(dòng)力及轉(zhuǎn)向系統(tǒng)
本小車有左右輪兩個(gè)電機(jī)及龜機(jī)驅(qū)動(dòng)。驅(qū)動(dòng)電路采用了CT Microelecttonics公司的大功率直流電機(jī)驅(qū)動(dòng)芯片L298,最高支持50 V電壓,最大電流為5 A,滿足大功率電動(dòng)機(jī)的要求,外圍電路簡(jiǎn)單,同時(shí),由于該芯片為雙路結(jié)構(gòu),分別控制左右電動(dòng)機(jī),增加了電路的可靠性,減少了復(fù)雜性。電機(jī)控制采用PWM脈沖寬度調(diào)制方式來(lái)控制汽車的前進(jìn)速度。由NiosⅡCPU寫(xiě)入控制字,可得到不同占空比的PWM驅(qū)動(dòng)信號(hào),此PWM信號(hào)送入電機(jī)驅(qū)動(dòng)芯片的控制端來(lái)調(diào)節(jié)速度。
1.4 小車自動(dòng)避障系統(tǒng)
小車自動(dòng)避障系統(tǒng)采用Verilog HDL語(yǔ)言編寫(xiě)驅(qū)動(dòng)電路。該模塊(見(jiàn)圖2中的MOTOR)和一個(gè)數(shù)據(jù)選擇器(見(jiàn)圖2中的select_2)相連來(lái)實(shí)現(xiàn)自動(dòng)避障與人工遙控之間的切換。當(dāng)小車上NiosⅡCPU的SEL管腳輸出低電平時(shí),數(shù)據(jù)選擇器將把該模塊的輸出作為電機(jī)的控制指令。這樣設(shè)計(jì)的好處在于設(shè)計(jì)具有響應(yīng)迅速,不需要NiosⅡCPU參與,提高了CPU處理濕度、溫度數(shù)據(jù)并控制無(wú)線模塊收發(fā)數(shù)據(jù)的效率。該邏輯電路的工作原理是根據(jù)紅外傳感器發(fā)回來(lái)的數(shù)據(jù),經(jīng)過(guò)邏輯判斷來(lái)控制電機(jī)的工作狀態(tài)。
1.5 小車的人工控制
小車的人工控制和自動(dòng)避障之間的轉(zhuǎn)換由一個(gè)數(shù)據(jù)選擇器控制,當(dāng)小車上NiosⅡCPU的SEL管腳輸出高電平時(shí),數(shù)據(jù)選擇器將把無(wú)線模塊所發(fā)送過(guò)來(lái)的指令作為電機(jī)的控制指令,實(shí)現(xiàn)了對(duì)小車的無(wú)線控制。
1.6 溫度和濕度測(cè)量
在溫度測(cè)量系統(tǒng)中,采用抗干擾能力強(qiáng)的新型數(shù)字溫度傳感器DS18B20,該系統(tǒng)設(shè)計(jì)中將DS18B20的1,3引腳分別接于FPGA板的GND和+3.3 V管腳,2引腳接FPGA的I/O腳,傳輸控制及數(shù)據(jù)信號(hào)。DS18B20最高可用12位表示溫度值,最高5位為符號(hào)位。
采用HS1101濕度傳感器,具有響應(yīng)速度快,工作溫區(qū)寬(-40~+100℃),測(cè)量范圍大(0%~100%RH),可靠性高,穩(wěn)定性好,功耗低,外圍電路簡(jiǎn)單等優(yōu)點(diǎn)。
工作原理為:用HS1101傳感器與TLC555構(gòu)成多諧振蕩器,HS1101傳感器內(nèi)部電容會(huì)隨濕度的變化而變化,從而使輸出頻率發(fā)生變化。編寫(xiě)VHDL程序在FPGA設(shè)計(jì)一個(gè)頻率計(jì)可精確的測(cè)出頻率值,通過(guò)輸出頻率與濕度的關(guān)系便可得到濕度值。
1.7 無(wú)線收發(fā)系統(tǒng)
系統(tǒng)采用PTR4000無(wú)線嵌入式模塊,工作頻率為2.4 GHz,最高工作速率可達(dá)1 Mb/s,高效GMSK調(diào)制,且有CRC檢錯(cuò)功能。具有低功耗,抗干擾能力強(qiáng),體積小等優(yōu)點(diǎn)。主要有三種工作模式,分別為:配置模式、ShockBurst發(fā)送模式和ShockBurst接收模式。
2 軟件設(shè)計(jì)和調(diào)試
采用NiosⅡ進(jìn)行C語(yǔ)言編程。NiosⅡ集成開(kāi)發(fā)環(huán)境(IDE)是NlosⅡ系列嵌入式處理器的基本軟件開(kāi)發(fā)工具。所有軟件開(kāi)發(fā)任務(wù)都可以在NiosⅡIDE下完成,包括編輯、編譯和調(diào)試程序。NiosⅡIDE是基于開(kāi)放式的、可擴(kuò)展Eclipse IDE project工程以及EclipseC/C++開(kāi)發(fā)工具(CDT)工程,NiosⅡIDE為GCC編譯器提供了一個(gè)圖形化用戶界面,可以支持標(biāo)準(zhǔn)C。NiosⅡIDE編譯環(huán)境自動(dòng)地生成一個(gè)基于用戶特定系統(tǒng)配置(SoPC Builder生成的SoPC文件)的makefile,有利于程序的開(kāi)發(fā)。
NiosⅡIDE包含一個(gè)強(qiáng)大的、在GNU調(diào)試器基礎(chǔ)之上的軟件調(diào)試器——GDB。完成軟件代碼的編寫(xiě)后,可以對(duì)代碼進(jìn)行仿真和調(diào)試。Nios-ⅡIDE提供了一個(gè)方便的閃存編程方法。任何連接到FPGA的兼容通用閃存接口(CFI)的閃存器件都可以通過(guò)NiosⅡIDE閃存編程器來(lái)燒結(jié)。針對(duì)本設(shè)計(jì)及應(yīng)用,編寫(xiě)了系統(tǒng)控制程序和LCD顯示程序。流程圖如圖3所示。
3 系統(tǒng)調(diào)試
小車系統(tǒng)需要測(cè)試能否準(zhǔn)確接收控制臺(tái)發(fā)送的指令并控制小車運(yùn)動(dòng)或停止,以及向前、后、左、右轉(zhuǎn)向。還要測(cè)試主控機(jī)能否準(zhǔn)確接收小車采集到的溫度以及濕度信息,能否正確顯示。經(jīng)過(guò)多次測(cè)試,發(fā)現(xiàn)由于系統(tǒng)程序是采用收發(fā)循環(huán)轉(zhuǎn)換的模式,為了讓兩個(gè)系統(tǒng)能夠收到對(duì)方發(fā)的信息,對(duì)小車的遙控與自動(dòng)部分進(jìn)行簡(jiǎn)單的分化。自動(dòng)情況下,控制臺(tái)為主要接收端,小車為主要發(fā)送端,一般情況下小車發(fā)送數(shù)據(jù)到控制臺(tái),需要自動(dòng)到遙控的轉(zhuǎn)換時(shí),通過(guò)在延時(shí)時(shí)間內(nèi)進(jìn)行中斷來(lái)實(shí)行從自動(dòng)到遙控的轉(zhuǎn)換;在遙控狀態(tài)下,控制臺(tái)為主要發(fā)射端,小車為接收端,一般情況下控制臺(tái)發(fā)送小車行進(jìn)指令到小車,需要采集數(shù)據(jù)時(shí),通過(guò)溫度、濕度采集按鍵來(lái)對(duì)小車進(jìn)行收發(fā)轉(zhuǎn)換,同時(shí)小車發(fā)出采集數(shù)據(jù)指令,之后再次轉(zhuǎn)為接收模式。這樣做之后使小車與控制臺(tái)的軟件部分清晰明了,小車的行進(jìn)以及采集顯示數(shù)據(jù)能夠?qū)崟r(shí)的進(jìn)行。
濕度測(cè)量系統(tǒng)需要測(cè)試是否能夠精準(zhǔn)輸出頻率值。采用芯片LM555手冊(cè)上推薦的電路,由于元件的誤差,使輸出的頻率并不精確,經(jīng)過(guò)與標(biāo)準(zhǔn)的濕度儀進(jìn)行比對(duì),通過(guò)參數(shù)調(diào)整,用直線做近似,最后得到的頻率值誤差在幾赫茲(頻率范圍是6 008~7 314Hz),經(jīng)過(guò)預(yù)算得到很準(zhǔn)確的濕度值。開(kāi)始求濕度值時(shí)用的是解一元三次方程的方法,由于計(jì)算量大,對(duì)小車的行進(jìn)會(huì)有很大影響,后來(lái)在小車端只是把小車采集到的頻率值通過(guò)紅外天線傳輸?shù)街骺囟?,并將原先的小車自?dòng)避障由NiosⅡCPU控制改為由Verilog編寫(xiě)的硬件模塊控制,最后在控制臺(tái)做濕度值的計(jì)算。這樣的更改既減少了小車NiosⅡCPU的工作量,同時(shí)由于小車的自動(dòng)避障改為由獨(dú)立的Verilog模塊控制,運(yùn)行起來(lái)很流暢。
對(duì)于無(wú)線收發(fā)系統(tǒng),要測(cè)試其可靠性以及發(fā)送或接收的信息的準(zhǔn)確性。測(cè)試方法是單獨(dú)設(shè)計(jì)了一個(gè)軟核下載到SoPC中,并編寫(xiě)一段程序用于測(cè)試是否正確寫(xiě)入配置控制字,是否能夠進(jìn)行ShockBurst模式的接收或發(fā)送。問(wèn)題是對(duì)天線各模式時(shí)序的把握,一開(kāi)始寫(xiě)的程序總是不能正確寫(xiě)入配置字,反復(fù)調(diào)試,并用數(shù)字示波器觀察寫(xiě)入配置字的瞬間過(guò)程以及各延時(shí)的時(shí)間,最后測(cè)試成功,并把發(fā)送或接收的狀態(tài)用LED顯示出來(lái),每發(fā)送或接收到一個(gè)數(shù)據(jù)包就讓LED閃一下。
4 結(jié)語(yǔ)
本設(shè)計(jì)以FPGA嵌入NiosⅡ軟核處理器為核心,輔以必要的外圍電路,構(gòu)成了高度集成化的片上系統(tǒng)。另外,SoPC系統(tǒng)的柔性配置,使得可以基于此系統(tǒng)擴(kuò)展片外存儲(chǔ)器和多路輸出。設(shè)計(jì)的小車具有較強(qiáng)的避障能力,且能通過(guò)接收端對(duì)其進(jìn)行方便的控制,溫度和濕度采集均達(dá)了較高的精度,并且能實(shí)現(xiàn)動(dòng)態(tài)顯示,無(wú)線收發(fā)模塊的有效范圍最遠(yuǎn)可達(dá)300 m,可應(yīng)用于較為惡劣的環(huán)境,可代替人進(jìn)行溫度和濕度的實(shí)地檢測(cè)。