版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
嵌入式智能小車作者:歐陽劍飛單位:江西理工大學(xué)(郵編:3421000)E-mail:oyjf0606@126.com摘要:本文給出一種基于ARM的智能小車的設(shè)計(jì)方案,小車以NXP公司生產(chǎn)的LPC2138作為主控芯片,控制包括無線、語音、液晶顯示、電機(jī)驅(qū)動(dòng)、鍵盤顯示、激光傳感、金屬探測等模塊,實(shí)現(xiàn)程控點(diǎn)流水燈、程控播放音樂、尋跡、掃雷等功能。關(guān)鍵詞:智能小車;嵌入式;無線通信;語音;液晶顯示;鍵盤顯示。1.引言智能小車是在動(dòng)態(tài)不確定環(huán)境下對(duì)人工智能的考驗(yàn),是以各種工控目的為載體的高科技對(duì)抗,是培養(yǎng)信息、自動(dòng)化領(lǐng)域科技人才的重要手段,同時(shí)也是展示高科技水平的生動(dòng)窗口和促進(jìn)科技成果實(shí)用化和產(chǎn)業(yè)化的有效途徑。智能小車的研究融入了機(jī)器人學(xué)、機(jī)電一體化技術(shù)、通訊與計(jì)算機(jī)技術(shù)、視覺與傳感器技術(shù)、智能控制與決策等多學(xué)科的研究成果,反映出一個(gè)國家信息與自動(dòng)化技術(shù)的綜合實(shí)力。所以本論文對(duì)智能小車的研究意義重大。2.相關(guān)介紹2.1智能小車硬件設(shè)計(jì)總體框圖2.1.1本系統(tǒng)應(yīng)要求系統(tǒng)的實(shí)時(shí)性較強(qiáng),所以選擇的MUC必須要有足夠高的運(yùn)行頻率,否則會(huì)造成上位機(jī)發(fā)送的命令,下位機(jī)接收不到的情況發(fā)生,智能小車失控的現(xiàn)象發(fā)生?;谝陨显?,系統(tǒng)采用的MUC為LPC2138,LPC2138是以ARM7為內(nèi)核的微控制器,具有運(yùn)算頻率高,功能強(qiáng),I/O口豐富等優(yōu)點(diǎn)。2.1.2電源模塊任何電子系統(tǒng)都少不了電源的支持。電源可以看成是電子系統(tǒng)的心臟。電源只有給系統(tǒng)的電路提供持續(xù)的、穩(wěn)定的能量,這樣電子系統(tǒng)才能正常的工作。在一個(gè)電子系統(tǒng)中電源的好壞直接影響到整個(gè)系統(tǒng)的穩(wěn)定性,并在一定程度上影響整個(gè)系統(tǒng)的功耗。常用的集成穩(wěn)壓芯片有78XX系列和79XX系列。它們是利用串聯(lián)負(fù)反饋來穩(wěn)定輸出電壓的,性能較好。如REF_Ref231477192\h圖3–6所示為本系統(tǒng)的一級(jí)電源電路。圖STYLEREF1\s3–SEQ圖\*ARABIC\s16系統(tǒng)電源1本系統(tǒng)主要靠鋰電池供電,鋰電性能優(yōu)良,體積小、重量輕、電密度高,也就是說同樣重量和體積下鋰電池的容量可以做得很大,很適合在本系統(tǒng)中使用。2.1.3本系統(tǒng)使用的無線通信模塊以nRF2401射頻收發(fā)芯片為核心,加上一些外圍電路設(shè)計(jì)出來的。nRF2401內(nèi)置地址解碼器、先入先出堆棧區(qū)、解調(diào)處理器、時(shí)鐘處理器、GFSK濾波器、低噪聲放大器、頻率合成器,功率放大器等功能模塊,需要很少的外圍元件,因此使用起來非常方便。它提供了一路的數(shù)據(jù)發(fā)送和兩路的數(shù)據(jù)接收功能。工作電壓為直流.3.3V,數(shù)據(jù)發(fā)送速率可在0~1Mbps之間任意選擇,工作于2.4~2.5GHZISM頻段,芯片能耗非常低,以-5dBm的功率發(fā)射時(shí),工作電流只有10.5mA,接收時(shí)工作電流只有18mA,多種低功率工作模式,節(jié)能設(shè)計(jì)更方便。其DuoCeiverTM技術(shù)使nRF2401可以使用同一天線,同時(shí)接收兩個(gè)不同頻道的數(shù)據(jù)。nRF2401適用于多種無線通信的場合,如無線數(shù)據(jù)傳輸系統(tǒng)、無線鼠標(biāo)、遙控開鎖、遙控玩具等。芯片封裝如REF_Ref231554325\h圖3–20所示。圖STYLEREF1\s3–SEQ圖\*ARABIC\s120nRF2401A芯片封裝圖nRF2401A引腳詳細(xì)說明如REF_Ref231564328\h表3–3所示。表STYLEREF1\s3–SEQ表\*ARABIC\s13nRF2401引腳說明引腳名稱引腳功能描述1CE數(shù)字輸入使nRF2401工作于接收或發(fā)送狀態(tài)2DR2數(shù)字輸出頻道2接收數(shù)據(jù)準(zhǔn)備好3CLK2數(shù)字I/O頻道2接收數(shù)據(jù)時(shí)鐘輸入/輸出4DOUT2數(shù)字輸出頻道2接收數(shù)據(jù)5CS數(shù)字輸入配置模式的片選端6DR1數(shù)字輸出頻道1接收數(shù)據(jù)準(zhǔn)備好7CLK1數(shù)字I/O頻道1接收數(shù)據(jù)時(shí)鐘輸入/輸出8DATA數(shù)字I/O頻道1接收/發(fā)送數(shù)據(jù)端9DVDD電源電源的正數(shù)字輸出10VSS電源電源地11XC2模擬輸出晶振212XC1模擬輸入晶振113VDD_PA電源輸出給功率放大器提供1.8V的電壓14ANT1天線天線接口115ANT2天線天線接口216VSS_PA電源電源地17VDD電源電源正端18VSS電源電源地19IREF模擬輸入模數(shù)轉(zhuǎn)換的外部參考電壓20VSS電源電源地21VDD電源電源正端22VSS電源電源地23PWR_UP數(shù)字輸入芯片激活端24VDD電源電源正端要使用nRF2401芯片必須加上外圍電路,具體如REF_Ref231564410\h圖3–21所示。圖STYLEREF1\s3–SEQ圖\*ARABIC\s121無線通信模塊電路圖此模塊引出的引腳如REF_Ref231564642\h圖3–22所示。各引腳的詳細(xì)功能與REF_Ref231564328\h表3–3一致。圖STYLEREF1\s3–SEQ圖\*ARABIC\s122nRF2401無線通信模塊引出的引腳nRF2401有工作模式有四種:收發(fā)模式、配置模式、空閑模式和關(guān)機(jī)模式。nRF2401的工作模式由PWR_UP、CE和CS三個(gè)引腳決定。如REF_Ref231564788\h表3–4所示。表STYLEREF1\s3–SEQ表\*ARABIC\s14nRF2401工作模式工作模式PWR_UPCECS收發(fā)模式110配置模式101空閑模式100關(guān)機(jī)模式0XX無線模塊引腳分配:nRF2401管腳CEPOWERUPCSCLK1DR1DATALPC2138管腳P0.26P0.25P0.22P0.23P0.23P語音報(bào)警ISD1420是美國ISD公司出品的新型單片優(yōu)質(zhì)語音錄放電路,較之以往所有的語音電路,具有專利技術(shù)的模擬處理存儲(chǔ)方式,使錄放音質(zhì)極佳,沒有常見的的背景噪音,且電路斷電后語音內(nèi)容仍不丟失。電路內(nèi)部由振蕩器、語音存儲(chǔ)單元、前置放大器、自動(dòng)增益控制電路、抗干擾濾波器、輸出放大器組成。一個(gè)最小的錄放系統(tǒng)僅由一個(gè)麥克風(fēng)、一個(gè)喇叭、兩個(gè)按鈕、一個(gè)電源、少數(shù)電阻電容組成。引出端功能說明:名稱管腳功能名稱管腳功能A0~A51~6地址AnaOut21模擬輸出A6、A79、10地址(MSB)AnaIn20模擬輸入VCCD28數(shù)字電路電源AGC19自動(dòng)增益控制VCCA16模擬電路電源Mic17麥克風(fēng)輸入VSSD12數(shù)字地MicRef18麥克風(fēng)參考輸入VSSA13模擬地24放音,邊沿觸發(fā)SP+、-14、15喇叭輸出+-27錄音XCLK26外接定時(shí)器25發(fā)光二極管接口NC11空腳23放音,電平觸發(fā)地址模式:A0-A7地址輸入有雙重功能,根據(jù)地址中的A6,A7的電平狀態(tài)決定功能。如果A6,A7有一個(gè)是低電平,A0~A7輸入全解釋為地址位,作為起始地址用。根據(jù)、或的下降沿信號(hào),地址輸入被鎖定。A0-A7由低位向高位排列,每位地址代表125毫秒的尋址,160個(gè)地址覆蓋20秒的語音范圍(160*0.125s=20s),錄音及放音功能均從設(shè)定的起始地址開始,錄音結(jié)束由停止鍵操作決定,芯片內(nèi)部自動(dòng)在該段的結(jié)束位置插入結(jié)束標(biāo)志(EOM),而放音時(shí)芯片遇到EOM標(biāo)志即自動(dòng)停止放音。操作模式:如果A6,A7同為高電平時(shí),它們即為模式位。地址位僅作為輸入端,在操作過程中不能輸出內(nèi)部地址信息。使用操作模式有兩點(diǎn)要注意:(一)所有初始操作都是從0地址開始,0地址是ISD1420存儲(chǔ)空間的起始端,以后的操作可根據(jù)模式的不同,而從不同的地址開始工作。當(dāng)電路中錄放音轉(zhuǎn)換或進(jìn)入省電狀態(tài)時(shí),地址計(jì)數(shù)器復(fù)位為0。(二)當(dāng)、或變?yōu)榈碗娖?同時(shí)A6,A7為高電平時(shí),執(zhí)行對(duì)應(yīng)操作模式。這種操作模式一直執(zhí)行到下一個(gè)低電平控制輸入信號(hào)出現(xiàn)為止,這一刻現(xiàn)行的地址/模式信號(hào)被取樣并執(zhí)行。操作模式可以與微控制器一起使用,也可用硬件連線得到所需系統(tǒng)操作。A0---信息檢索(或)不知道每個(gè)信息的實(shí)際地址,A0可使操作者快速檢索每條信息,A0每輸入一個(gè)低脈沖,可使得內(nèi)部地址計(jì)數(shù)器跳到下一個(gè)信息。這種模式僅用于放音,通常與A4操作同時(shí)應(yīng)用。A1---刪除標(biāo)志()可使錄入的分段信息成為連續(xù)的信息,用A1可刪除掉每段中間信息后的標(biāo)志,僅在所有信息后留一個(gè)標(biāo)志。當(dāng)這個(gè)操作模式完成時(shí),錄入的所有信息就作為一個(gè)連續(xù)的信息放出。A3---循環(huán)重放信息(或)可使存于存儲(chǔ)空間始端的信息自動(dòng)地連續(xù)重放。一條信息可以完全占滿存儲(chǔ)空間,那么循環(huán)就可以從頭至尾進(jìn)行工作,并由始至終反復(fù)重放。A4---連續(xù)尋址:在正常操作中,當(dāng)一個(gè)信息放出,遇到一個(gè)標(biāo)志時(shí),地址計(jì)數(shù)器會(huì)復(fù)位,A4可防止地址計(jì)數(shù)器復(fù)位,使得信息連續(xù)不斷地放出。ISD1420P地址功能表地址狀態(tài)功能說明DIP開關(guān)12345678(ON=0,OFF=1)地址位A0A1A2A3A4A5A6A7(1為高電平,0為低電平,*為高或低電平)00000000一段式最長20秒錄放音,從首地址開始。10000000以八位二進(jìn)制表示地址,每個(gè)地址代表125毫秒。地址模式00000010一段從A6地址開始的12秒錄放音。*******0只要A6、A7有一位是0,就處于地址模式。******0*00010011循環(huán)放音操作,按一下PE鍵可循環(huán)放音,按PL鍵停止;或按住PL鍵放音,松開即停止。操作模式00001011按順序連續(xù)分段錄放音,每段語音長度不限。00000011地址指針復(fù)位,開始錄放第一段。10001011按PE鍵可快速選段放音使用芯片前先將報(bào)警所用的音分段錄進(jìn)芯片固定地址,芯片各地址存放語音如下表:地址語音0000H10001H20002H30003H40004H50005H60006H70007H80008H90009H10000AH地000BH雷000CH個(gè)000DH數(shù)000EH歡000FH迎0010H使0011H用0012H小0013H車語音模塊引腳分配:ISD1420管腳A0A1A2A3A4A5A6A7PLAYLLPC2138管腳P1.16P1.17P1.18P1.19P1.20P1.21P1.22P1.23PTG12864E02帶中文字庫的128*64是一種具有4位/8位并行、2線或3線串行多種接口方式,內(nèi)部含有國標(biāo)一級(jí)、二級(jí)簡體中文字庫的點(diǎn)陣圖形液晶顯示模塊;其顯示分辨率為128×64,內(nèi)置8192個(gè)16*16點(diǎn)漢字,和128個(gè)16*8點(diǎn)ASCII字符集.利用該模塊靈活的接口方式和簡單、方便的操作指令,可構(gòu)成全中文人機(jī)交互圖形界面。可以顯示8×4行16×16點(diǎn)陣的漢字。也可完成圖形顯示.低電壓低功耗是其又一顯著特點(diǎn)。由該模塊構(gòu)成的液晶顯示方案與同類型的圖形點(diǎn)陣液晶顯示模塊相比,不論硬件電路結(jié)構(gòu)或顯示程序都要簡潔得多,且該模塊的價(jià)格也略低于相同點(diǎn)陣的圖形液晶模塊。液晶驅(qū)動(dòng)電路應(yīng)用說明,用帶中文字庫的TG12864E02顯示模塊時(shí)應(yīng)注意以下幾點(diǎn):①欲在某一個(gè)位置顯示中文字符時(shí),應(yīng)先設(shè)定顯示字符位置,即先設(shè)定顯示地址,再寫入中文字符編碼。②顯示ASCII字符過程與顯示中文字符過程相同。不過在顯示連續(xù)字符時(shí),只須設(shè)定一次顯示地址,由模塊自動(dòng)對(duì)地址加1指向下一個(gè)字符位置,否則,顯示的字符中將會(huì)有一個(gè)空ASCII字符位置。③當(dāng)字符編碼為2字節(jié)時(shí),應(yīng)先寫入高位字節(jié),再寫入低位字節(jié)。④模塊在接收指令前,向處理器必須先確認(rèn)模塊內(nèi)部處于非忙狀態(tài),即讀取BF標(biāo)志時(shí)BF需為“0”,方可接受新的指令。如果在送出一個(gè)指令前不檢查BF標(biāo)志,則在前一個(gè)指令和這個(gè)指令中間必須延遲一段較長的時(shí)間,即等待前一個(gè)指令確定執(zhí)行完成。指令執(zhí)行的時(shí)間請(qǐng)參考指令表中的指令執(zhí)行時(shí)間說明。⑤“RE”為基本指令集與擴(kuò)充指令集的選擇控制位。當(dāng)變更“RE”后,以后的指令集將維持在最后的狀態(tài),除非再次變更“RE”位,否則使用相同指令集時(shí),無需每次均重設(shè)“RE”位。表3—SEQ表_3—\*ARABIC3液晶顯示器管腳說明管腳號(hào)名稱電平管腳功能描述01VSS0V電源地02VCC3.0+5V電源正03V0—對(duì)比度(亮度)調(diào)整04RS(CS)H/LRS=H,DB7—DB0為顯示數(shù)據(jù)RS=L,DB7—DB0為顯示指令數(shù)據(jù)05R/W(SID)H/LR/W=H,E=H,數(shù)據(jù)被讀到DB7—DB0;R/W=L,E=H→L,DB7—DB0的數(shù)據(jù)被寫到IR或DR06E(SCLK)H/L使能信號(hào)07DB0H/L三態(tài)數(shù)據(jù)線08DB1H/L三態(tài)數(shù)據(jù)線09DB2H/L三態(tài)數(shù)據(jù)線10DB3H/L三態(tài)數(shù)據(jù)線11DB4H/L三態(tài)數(shù)據(jù)線12DB5H/L三態(tài)數(shù)據(jù)線13DB6H/L三態(tài)數(shù)據(jù)線14DB7H/L三態(tài)數(shù)據(jù)線15PSBH/LH:8位或4位并口方式,L:串口方式16NC—空腳17/RESETH/L復(fù)位端,低電平有效18VOUT—LCD驅(qū)動(dòng)電壓輸出端19AVDD背光源正端(+5V)20KVSS背光源負(fù)端15號(hào)管腳如在實(shí)際應(yīng)用中僅使用并口通訊模式,可將PSB接固定高電平,也可以將模塊上的J8和“VCC”用焊錫短接。17號(hào)管腳模塊內(nèi)部接有上電復(fù)位電路,因此在不需要經(jīng)常復(fù)位的場合可將該端懸空。19號(hào)管腳如背光和模塊共用一個(gè)電源,可以將模塊上的JA、JK用焊錫短接。2.1.4鍵盤顯示模塊在本論文中我選擇74HC164作為顯示電路的位碼和段碼傳輸芯片,它是種串行轉(zhuǎn)并行的IC,它有14個(gè)引腳,結(jié)構(gòu)如REF_Ref231826849\h圖中所示。圖3—SEQ圖_3—\*ARABIC774HC164引腳圖74HC164的狀態(tài)轉(zhuǎn)換表如REF_Ref167505844\h表3—274HC164狀態(tài)轉(zhuǎn)換表所示。A、B為串行數(shù)據(jù)輸入引腳,這兩個(gè)引腳完全一樣,通常將這兩個(gè)引腳連接在一起,再接到串行數(shù)據(jù)源;也可將其中一腳連接到VCC,另一只引腳連接串行數(shù)據(jù)源;在此使用前者。CLR為清除引腳,當(dāng)此引腳為低電平時(shí),QA~QH并行輸出引腳全部變?yōu)榈碗娖健1?—SEQ表_3—\*ARABIC274HC164狀態(tài)轉(zhuǎn)換表輸入輸出CLKAB……LLLLHLHHHHHLLHLLCLK為時(shí)鐘脈沖引腳,74HC164為上升沿觸發(fā),當(dāng)CLK的電平由低變高時(shí)輸出引腳的狀態(tài)發(fā)生變化。如REF_Ref199931678\h圖3—874HC164時(shí)序圖所示。圖3—SEQ圖_3—\*ARABIC874HC164時(shí)序圖LED數(shù)碼管是控制系統(tǒng)中最常用的顯示器件之一,在此使用了2個(gè)4段共陰極數(shù)碼管(FJ3461AH)用于顯示智能小車的當(dāng)前情況。8個(gè)按鍵用于控制啟動(dòng)和調(diào)節(jié)智能小車的運(yùn)行參數(shù)。電阻(470歐)用于限流,保證數(shù)碼管的正常工作。工作電源為3.3V,通過LPC2138供電。工作原理如下:設(shè)計(jì)中使用LPC2138的SPI接口作為主機(jī)與P1相連,通過此端口將需要顯示的數(shù)據(jù)的段碼和位碼信息在CLK脈沖的控制下分別移入到兩片74HC164段碼和位碼中完成數(shù)據(jù)顯示。MISO端口是鍵盤檢測口。在該部分的軟件設(shè)計(jì)中先從MOSI端口接收數(shù)據(jù)輸出顯示,顯示后緊接著查詢MISO端口是否為低電平(只有當(dāng)按鍵按下,同時(shí)對(duì)應(yīng)位碼時(shí)才為低),如果為低電平則記錄送出的位碼信息;之后進(jìn)行第二次循環(huán),顯示數(shù)據(jù)并查詢MISO端口。當(dāng)MISO端口為高電平或低電平時(shí)記錄的位碼信息與上次不相同,則放棄鍵處理;當(dāng)兩次讀MISO端口與低電平記錄下的位碼信息相同時(shí),進(jìn)行相應(yīng)的按鍵處理操作。鍵盤和數(shù)碼管顯示電路2.1.5顯然微控制器是不能直接驅(qū)動(dòng)電機(jī),所以必須要有專門的驅(qū)動(dòng)電機(jī)來驅(qū)動(dòng)電機(jī),本系統(tǒng)選用了SGS公司的美國國家半導(dǎo)體公司的L298N,器件引腳如REF_Ref200335485\h圖3–13所示,內(nèi)部機(jī)構(gòu)如REF_Ref200335534\h圖3–14所示。圖STYLEREF1\s3–SEQ圖\*ARABIC\s113L298引腳圖STYLEREF1\s3–SEQ圖\*ARABIC\s114內(nèi)部結(jié)構(gòu)圖L298是一個(gè)集成電路,L298共有15個(gè)引腳,如REF_Ref200335485\h圖3–13所示。內(nèi)含有2個(gè)H橋電路,能夠驅(qū)動(dòng)46V、2A以下兩個(gè)直流電機(jī)和一個(gè)46V、2A四相的步進(jìn)電機(jī)。接收標(biāo)準(zhǔn)TTL邏輯電平信號(hào)。在本系統(tǒng)中用到了兩個(gè)電機(jī),只需L298來驅(qū)動(dòng),具體的電路如REF_Ref231489197\h圖3–15所示。圖STYLEREF1\s3–SEQ圖\*ARABIC\s115L298驅(qū)動(dòng)電機(jī)電路REF_Ref231489197\h圖3–15所示的所有兩極管都是為了防止電機(jī)產(chǎn)生的電感反電動(dòng)勢打壞L298而設(shè)計(jì)的,PWM(對(duì)應(yīng)EN引腳)用來控制電機(jī)的轉(zhuǎn)速,而XA1、XA2則是控制電機(jī)的轉(zhuǎn)向和起到剎車功能的。具體如REF_Ref231489668\h表3–2所示。表STYLEREF1\s3–SEQ表\*ARABIC\s12L298邏輯功能表EnAIN1IN2電機(jī)狀態(tài)接PWM控制電機(jī)轉(zhuǎn)速高低正轉(zhuǎn)低高反轉(zhuǎn)低低剎車高高剎車LPC2138與L298的連接LPC2138與L298相連接的引腳如下所示:電機(jī)一用到的PWM1所對(duì)應(yīng)的引腳:P0.0電機(jī)一控制電機(jī)轉(zhuǎn)向用到的引腳:1A1:P0.14、1A2:P0.15電機(jī)一速度捕獲用到的引腳:P0.10電機(jī)二用到的PWM3所對(duì)應(yīng)的引腳:P0.1電機(jī)二控制電機(jī)轉(zhuǎn)向用到的引腳、2A1:P1.16、2A2:P1.17電機(jī)二速度捕獲用到的引腳:P0.11電機(jī)一獲取電機(jī)轉(zhuǎn)向用到的引腳:P0.20電機(jī)二獲取電機(jī)轉(zhuǎn)向用到的引腳:P電機(jī)轉(zhuǎn)速檢測原理與實(shí)現(xiàn)本系統(tǒng)采用了日本Namiki公司的微型減速電機(jī)22CL-3501PG,如REF_Ref231548834\h圖3–16所示。圖STYLEREF1\s3–SEQ圖\*ARABIC\s116電機(jī)實(shí)物其特點(diǎn)為:加速度大、力量大、耗能少、啟動(dòng)電壓小、容易控制。其配有鋼齒行星減速器,輸出軸徑4mm、電機(jī)加減速器長65mm、輸出軸長18mm、直徑22mm.。其轉(zhuǎn)速檢測機(jī)構(gòu)使用原配的光碼盤檢測電路,其原理如REF_Ref231546304\h圖3–17所示。圖STYLEREF1\s3–SEQ圖\*ARABIC\s117電機(jī)轉(zhuǎn)速檢測電路其光碼盤如REF_Ref231547118\h圖3–18所示。圖STYLEREF1\s3–SEQ圖\*ARABIC\s118光碼盤電機(jī)轉(zhuǎn)動(dòng)帶動(dòng)著光碼盤轉(zhuǎn)動(dòng),從而例光碼盤的盤葉不斷切割REF_Ref231546304\h圖3–17所示的發(fā)光二極光發(fā)出的光,使接收管在導(dǎo)通與不導(dǎo)通之間不斷的切換,即輸出信號(hào)經(jīng)兩路運(yùn)放(使用L324就可以)處理成方波信號(hào),如REF_Ref231547975\h圖3–19所示。圖STYLEREF1\s2SEQ圖\*ARABIC\s14泰克示波器觀察到的電機(jī)轉(zhuǎn)速檢測電路產(chǎn)生的脈沖通過LPC2138的定時(shí)器捕獲功能對(duì)上述脈沖進(jìn)行捕獲,通過以下式子就可以計(jì)算出電機(jī)的轉(zhuǎn)速了。(公式3-1)r為安裝的輪子的半徑,NUM為單周期捕獲到的脈沖數(shù)。電機(jī)使用的光碼盤為一周有12個(gè)刻度。從而使捕獲到的電機(jī)轉(zhuǎn)速精度非常高,更有利于電機(jī)的精確控制。同時(shí)為了擴(kuò)展電機(jī)數(shù)度控制范圍,我們運(yùn)用兩路光碼盤檢測并選擇適當(dāng)間距讓兩路出信號(hào)相位差為90°,然后將兩路信號(hào)分別輸給D觸發(fā)器的數(shù)據(jù)端和時(shí)鐘端,Q輸出就可以獲知電機(jī)是正轉(zhuǎn)還是反轉(zhuǎn)處理電路如REF_Ref251789234\h圖25,如此一來就可以將PID調(diào)節(jié)拓展到反轉(zhuǎn)了,這樣處理得好處是,PID調(diào)節(jié)范圍擴(kuò)大了一倍,同時(shí)速度給零時(shí)電機(jī)可以迅速停止,這樣就可滿足智能小車的電機(jī)控制要求。2.1.7為了提高小車尋跡的精度,小車使用基恩士傳感器FS2系列光纖傳感器,RGB(紅綠藍(lán))三光源,檢測范圍寬度70±20mm,高速反應(yīng)時(shí)間300μs,防水感測頭IP-67。KEYENCE光纖傳感器RGB數(shù)字光纖傳感器通過2個(gè)彩色熒屏和3種感測方式檢測傳統(tǒng)的傳感器所不能檢測的物體。業(yè)界最高的顏色解析度。RGB數(shù)字放大器的3原色中每一色的接收光量被轉(zhuǎn)換為12位資料。每一LED發(fā)射器內(nèi)部都裝置了自我穩(wěn)定其。CZ-V的放大器和傳感器設(shè)置十分簡單,大大改善了以往檢測應(yīng)用中的穩(wěn)定性問題。激光傳感傳感器信號(hào)接受電路使用開關(guān)電路即可,電路如圖:2.1.8為了實(shí)現(xiàn)小車掃雷的功能,我選擇了SN04-N.P.Y接近式開關(guān),它具有精度高,感應(yīng)靈敏,穩(wěn)定等特點(diǎn)。金屬探測信號(hào)接受電路同樣使用開關(guān)電路。2.2小車硬件電路圖原理圖2.3智能小車軟件總體及各模塊設(shè)計(jì)框圖2.3.1主程序框圖2.3.2按鍵掃描2.3.3液晶菜單顯示2.3.4控制下位機(jī)點(diǎn)流水燈2.3.5控制下位機(jī)播放歌曲2.3.6尋跡2.3.7掃雷2.3.8P2.3.9定時(shí)器1中斷2.4小車實(shí)物圖3程序文檔:/*********************************************************************BWM888Program*江西理工大學(xué)交通061班*(c)Copyright1992-2009,歐陽劍飛*AllRightsReserved**File:main.c*By:歐陽劍飛*Version:********************************************************************/#include"config.h"#include"stdio.h"#include"LCDApp.h"#include"DisplayKey.h"#include"nRF2410.h"#include"nRF2410Conf.h"#include"motor.h"volatileuint32T0Flag=0;/*LED掃頻標(biāo)志*/volatileuint32FollowFlage=0;/*啟動(dòng)尋跡小車標(biāo)志*/volatileuint32MetaldrFlage=0;/*啟動(dòng)探測金屬小車標(biāo)志*/volatileuint32RunLEDFlage=0;/*啟動(dòng)走迷宮小車標(biāo)志*/volatileuint32PlayMusicFlage=0;/*啟動(dòng)清潔小車標(biāo)志*/uint32GuiMetalNum=0;/*金屬數(shù)量寄存器*/charGuDisp_F[30];/*LCD顯示緩存寄存器*/structTIME/*定義時(shí)間結(jié)構(gòu)變量*/{uint8hour;uint8min;uint8sec;};structTIMETime1;/*時(shí)間緩存寄存器*//**********************************************************************Functionname: Timer0Init****Descriptions: InitializetheTime0****inputparameters: None**Returnedvalue: None****Usedglobalvariables: None**Callingmodules: None********************************************************************/voidTimer0Init(void){/**initializationforOStimetick*初始化MR0,為操作系統(tǒng)時(shí)鐘*/T0IR=0xffffffff;T0PR=0;T0TC=0;/*定時(shí)器設(shè)置為0 */ T0TCR=0x01; /*計(jì)數(shù)器使能 */T0MCR=0x03;/*設(shè)置T0MR0匹配后復(fù)位T0TC,*//*...并產(chǎn)生中斷標(biāo)志*/T0MR0=(Fpclk/1000);/*定時(shí)1ms*/}/**********************************************************************函數(shù)名稱:Delayms()**功能描述:延時(shí)程序**入口參數(shù):t時(shí)間,單位Ms**出口參數(shù):無********************************************************************/voidDelayms(uint32t){uint32n=0;while(n<(t)){if(T0Flag==1){n++;T0Flag=0;}}}/**********************************************************************函數(shù)名稱:IRQ_Timer0()**功能描述:TIMER0中斷服務(wù)程序**入口參數(shù):無**出口參數(shù):無********************************************************************/void__irqIRQ_Timer0(void){ T0Flag=1; /*T0中斷標(biāo)志置位*/ T0IR=0x01; /*清除中斷標(biāo)志*/ VICVectAddr=0; /*向量中斷處理結(jié)束*/}/**********************************************************************Functionname: VICInit****Descriptions: InitializetheInterruptVevtorController**------------------------------------********************************************************************/voidVICInit(void){/*1----------引入中斷函數(shù)句柄----------*/externvoidIRQ_Exception(void);VICIntSelect=0x00000000;/*所有中斷通道設(shè)置為IRQ中斷*/VICIntEnClr=0xffffffff;/*禁止所有中斷通道*//*2-----------分配向量通道------------*/VICVectAddr0=(uint32)IRQ_Timer0;/*設(shè)置Timer0向量入口*/VICVectCntl0=(ENABLE|TIME0_NUM);VICDefVectAddr=(uint32)IRQ_Exception;/*設(shè)置默認(rèn)向量入口*//*3-----------使能向量通道------------*/VICIntEnable=(1<<TIME0_NUM);/*使能相應(yīng)的中斷通道*/}/**********************************************************************函數(shù)名稱:playE()**功能描述:放音函數(shù)**入口參數(shù):無**出口參數(shù):********************************************************************/voidplayE(void){inti,j;PINSEL0&=~(3<<14);/*放音函數(shù)*/IO0DIR|=(1<<7);IO1PIN=(0xd0<<16);for(i=0;i<10000;i++)for(j=0;j<100;j++);IO0SET|=(1<<7);for(i=0;i<10000;i++)for(j=0;j<100;j++);IO0CLR|=(1<<7);}/**********************************************************************函數(shù)名稱:RTCInit(void)**函數(shù)功能:RTC初始化**入口參數(shù):無**出口參數(shù):無********************************************************************/voidRTCInit(void){ PREINT=Fpclk/32768-1; /*設(shè)置基準(zhǔn)時(shí)鐘分頻器*/ PREFRAC=Fpclk-(Fpclk/32768)*32768; HOUR=0; MIN=0; SEC=0; CCR=0x01; /*啟動(dòng)RTC*/}/**********************************************************************函數(shù)名稱:GetTime(structTIME*t)**函數(shù)功能:讀取時(shí)間**入口參數(shù):無**出口參數(shù):無********************************************************************/voidGetTime(structTIME*t){uint32times;times=CTIME0;t->hour=(times>>16)&0x1f;t->min=(times>>8)&0x3f;t->sec=times&0x3f;}/**********************************************************************函數(shù)名稱:main()**函數(shù)功能:lcd顯示控制主函數(shù)**入口參數(shù):無**出口參數(shù):無********************************************************************/INT8UAddress[5]={0x00,0x00,0x00,0x00,0x01}; //接收端地址:0000000001intmain(void){uint32RK=0;PINSEL2&=~0x08;/*初始化語音播放*/IO1DIR|=(0xff<<16);IO1SET|=(0xff<<16);IO1CLR|=(0xff<<16); LED_Init();LCD_Init();nRF2401Initial(); /*初始化nRF2401A*/ nRF2401Mode(1); /*設(shè)置nRF2401A工作方式:發(fā)送*/ nRF2401SetAddress(Address,5); /*設(shè)置接收端地址0000000001*/Timer0Init(); LCD_PictureClear();VICInit();IRQEnable();while(1){if(T0Flag==1){T0Flag=0;RK++;if(RK>2){LED_Redraw();RK=0;}}LCD_Menu();}return0;}/**********************************************************************函數(shù)名稱:voidHelp(void)**函數(shù)功能:LCD菜單**測試結(jié)果:通過********************************************************************/voidHelp(void){uint32key=NOKEY;LCD_TextClear();LCD_PrintString(0,0,"智能小車!");while(1){if(T0Flag==1){/*掃描顯示和按鍵*/T0Flag=0;LED_Redraw();}key=LED_GetKey();if(ESC==key){/*按ESC號(hào)鍵退出*/return;}}}/*---------------設(shè)置pwm頻率---------------*/voidSetPWMValve(void){uint32key=NOKEY;charcDispString[16];loops:LCD_TextClear();sprintf(cDispString,"路程:%d",ptt);LCD_PrintString(0,0,cDispString);while(1){if(T0Flag==1){/*掃描顯示和按鍵*/T0Flag=0;LED_Redraw();}www=0;key=LED_GetKey();if(UP==key){ptt++;gotoloops;}if(DOWN==key){ptt--;gotoloops;}if(ESC==key){/*按ESC號(hào)鍵退出*/return;}}*/}/*---------------設(shè)置右輪速度---------------*/voidSetSpeedR(void){uint32key=NOKEY;charcDispString[16];loops:LCD_TextClear();sprintf(cDispString,"右輪速度:%dmm/s",SpeedR/10);LCD_PrintString(0,0,cDispString);while(1){if(T0Flag==1){/*掃描顯示和按鍵*/T0Flag=0;LED_Redraw();}key=LED_GetKey();if(UP==key){SpeedR=SpeedR+10;gotoloops;}if(DOWN==key){SpeedR=SpeedR-10;gotoloops;}if(ESC==key){/*按ESC號(hào)鍵退出*/return;}}*/}/*---------------設(shè)置左輪速度---------------*/voidSetSpeedL(void){uint32key=NOKEY;charcDispString[16];loops:LCD_TextClear();sprintf(cDispString,"左輪速度:%dmm/s",SpeedL/10);LCD_PrintString(0,0,cDispString);while(1){if(T0Flag==1){/*掃描顯示和按鍵*/T0Flag=0;LED_Redraw();}key=LED_GetKey();if(UP==key){SpeedL=SpeedL+10;gotoloops;}if(DOWN==key){SpeedL=SpeedL-10;gotoloops;}if(ESC==key){/*按ESC號(hào)鍵退出*/return;}}*/}/*---------------設(shè)置捕獲頻率---------------*/voidSetCapValve(void){uint32key=NOKEY;charcDispString[16];loops:LCD_TextClear();sprintf(cDispString,"捕獲頻率:%dHz",CapValve);LCD_PrintString(0,0,cDispString);while(1){if(T0Flag==1){/*掃描顯示和按鍵*/T0Flag=0;LED_Redraw();}key=LED_GetKey();if(UP==key){CapValve++;gotoloops;}if(DOWN==key){CapValve--;gotoloops;}if(ESC==key){/*按ESC號(hào)鍵退出*/return;}}*/}/*---------------設(shè)置為點(diǎn)流水燈-----------------*/voidSetRunLED(void){uint32key=NOKEY;charcDispString[16];loops:LCD_TextClear();sprintf(cDispString,"點(diǎn)流水燈:%d",RunLEDFlage);LCD_PrintString(0,0,cDispString);while(1){if(T0Flag==1){/*掃描顯示和按鍵*/T0Flag=0;LED_Redraw();}key=LED_GetKey();if(UP==key){RunLEDFlage=0;/*不啟動(dòng)尋跡小車*/gotoloops;}if(DOWN==key){RunLEDFlage=1;/*啟動(dòng)尋跡小車*/PlayMusicFlage=0;/*保證一次只能設(shè)置一種狀態(tài)*/MetaldrFlage=0;FollowFlage=0;gotoloops;}if(ESC==key){/*按ESC號(hào)鍵退出*/return;}}}/*---------------設(shè)置為點(diǎn)歌設(shè)置---------------*/voidSetPlayMusic(void){uint32key=NOKEY;charcDispString[16];loops:LCD_TextClear();sprintf(cDispString,"點(diǎn)歌設(shè)置:%d",PlayMusicFlage);LCD_PrintString(0,0,cDispString);while(1){if(T0Flag==1){/*掃描顯示和按鍵*/T0Flag=0;LED_Redraw();}key=LED_GetKey();if(UP==key){PlayMusicFlage=0;/*不啟動(dòng)走迷宮小車*/gotoloops;}if(DOWN==key){PlayMusicFlage=1;/*啟動(dòng)走迷宮小車*/RunLEDFlage=0;/*保證一次只能設(shè)置一種狀態(tài)*/MetaldrFlage=0;FollowFlage=0;gotoloops;}if(ESC==key){/*按ESC號(hào)鍵退出*/return;}}}/*---------------設(shè)置為尋跡小車-----------------*/voidSetFollow(void){uint32key=NOKEY;charcDispString[16];loops:LCD_TextClear();sprintf(cDispString,"尋跡小車設(shè)置:%d",FollowFlage);LCD_PrintString(0,0,cDispString);while(1){if(T0Flag==1){/*掃描顯示和按鍵*/T0Flag=0;LED_Redraw();}key=LED_GetKey();if(UP==key){FollowFlage=0;/*不啟動(dòng)尋跡小車*/gotoloops;}if(DOWN==key){FollowFlage=1;/*啟動(dòng)尋跡小車*/PlayMusicFlage=0;/*保證一次只能設(shè)置一種狀態(tài)*/MetaldrFlage=0;RunLEDFlage=0;gotoloops;}if(ESC==key){/*按ESC號(hào)鍵退出*/return;}}}/*---------------設(shè)置為掃雷小車-------------*/voidSetMetaldr(void){uint32key=NOKEY;charcDispString[16];loops:LCD_TextClear();sprintf(cDispString,"掃雷小車設(shè)置:%d",MetaldrFlage);LCD_PrintString(0,0,cDispString);while(1){if(T0Flag==1){/*掃描顯示和按鍵*/T0Flag=0;LED_Redraw();}key=LED_GetKey();if(UP==key){MetaldrFlage=0;/*不啟動(dòng)探測金屬小車*/gotoloops;}if(DOWN==key){MetaldrFlage=1;/*啟動(dòng)探測金屬小車*/PlayMusicFlage=0;/*保證一次只能設(shè)置一種狀*/RunLEDFlage=0;FollowFlage=0;gotoloops;}if(ESC==key){/*按ESC號(hào)鍵退出*/return;}}}/*---------------小車點(diǎn)流水燈主程序-----------------*/voidRunLED(void){uint32i,T=0;uint32key=NOKEY;LCD_PrintString(0,2,"小車正在點(diǎn)流水燈");for(i=0;i<1000;i++);LCD_PrintString(2,1,"BMW888");for(i=0;i<1000;i++);LCD_PrintString(0,0,"交通061班");for(i=0;i<1000;i++);LCD_PrintString(2,3,"歐陽劍飛");while(1) {if(T==1){nRF2401SendByte(0x01); DelayUs(100000); } LED_Redraw();/*掃描顯示和按鍵*/key=LED_GetKey();if(DOWN==key){}if(UP==key){}if(ENTER==key){T=1;}if(ESC==key){/*按ESC號(hào)鍵退出*/T=0;return;}}}/*---------------小車點(diǎn)歌主程序---------------*/voidPlayMusic(void){uint32i,TT=0;uint32key=NOKEY;LCD_PrintString(1,1,"小車正在點(diǎn)歌");for(i=0;i<1000;i++);LCD_PrintString(2,2,"BMW888");for(i=0;i<1000;i++);LCD_PrintString(0,0,"交通061班");for(i=0;i<1000;i++);LCD_PrintString(2,3,"歐陽劍飛");while(1) {if(TT==1){ nRF2401SendByte(0x02); DelayUs(100000); } LED_Redraw();/*掃描顯示和按鍵*/key=LED_GetKey();if(DOWN==key){}if(UP==key){}if(ENTER==key){TT=1;}if(ESC==key){/*按ESC號(hào)鍵退出*/TT=0;return;}}}/*---------------小車尋跡主程序-----------------*/voidFollowMe(void){uint32i=0;uint32key=NOKEY;LCD_PrintString(1,1,"小車正在尋跡");for(i=0;i<1000;i++);LCD_PrintString(2,2,"BMW888");for(i=0;i<1000;i++);LCD_PrintString(0,0,"交通061班");for(i=0;i<1000;i++);LCD_PrintString(2,3,"歐陽劍飛");PINSEL1=(PINSEL1&~(0xff<<22));IO0DIR&=~(0x0f<<27);motorInit();while(1) {if(GuiFollowMeStart==0){if(GuiBBFindFlage==0){GuiBBFindFlage=1;if(GuiLeftMMoveFlage==0)BWMLeftMMoveDistance(0,0);if(GuiRightMMoveFlage==0)BWMRightMMoveDistance(100,300);}if(GuiLeftRedLed==0)GuiLeftRedLedFlage=1;if(GuiLeftGreenLed==0){GuiLeftGreenLedFlage=1;GuiLeftRedLedFlage=0;}if((GuiLeftGreenLedFlage==1)&(GuiLeftRedLedFlage==0)&(GuiLeftGreenLed)){GuiSetMotorRightSpeed=0;GuiFollowMeStart=1;}if(GuiBBFindFlage==2){GuiBBFindFlage=3;if(GuiLeftMMoveFlage==0)BWMLeftMMoveDistance(0,0);if(GuiRightMMoveFlage==0)BWMRightMMoveDistance(-100,300);}if(GuiBBFindFlage==4){GuiBBFindFlage=5;if(GuiLeftMMoveFlage==0)BWMLeftMMoveDistance(100,300);if(GuiRightMMoveFlage==0)BWMRightMMoveDistance(0,0);}if(GuiRightRedLed==0)GuiRightRedLedFlage=1;if(GuiRightGreenLed==0){GuiRightGreenLedFlage=1;GuiRightRedLedFlage=0;}if((GuiRightGreenLedFlage==1)&(GuiRightRedLedFlage==0)&(GuiRightGreenLed)){GuiSetMotorLeftSpeed=0;GuiFollowMeStart=1;}} LED_Redraw();/*掃描顯示和按鍵*/key=LED_GetKey();if(DOWN==key){}if(UP==key){}if(ENTER==key){}if(ESC==key){GuiSetMotorLeftSpeed=0;/*按ESC號(hào)鍵退出*/GuiSetMotorRightSpeed=0;return;}}}/*---------------小車正在掃雷主程序-------------*/voidMetaldr(void){uint32i=0,w=0;uint32uiMetalFlage=0;uint32key=NOKEY;charcDispString[16];PINSEL0=(PINSEL0&~(0x03<<16));IO0DIR&=~(0x01<<8);LCD_PrintString(1,1,"小車正在掃雷");for(i=0;i<1000;i++);LCD_PrintString(2,2,"BMW888");for(i=0;i<1000;i++);LCD_PrintString(0,0,"交通061班");for(i=0;i<1000;i++);LCD_PrintString(2,3,"歐陽劍飛");PINSEL1=(PINSEL1&~(0xff<<22));IO0DIR&=~(0x0f<<27);motorInit();while(1) {if(GuiFollowMeStart==0){if(GuiBBFindFlage==0){GuiBBFindFlage=1;if(GuiLeftMMoveFlage==0)BWMLeftMMoveDistance(0,0);if(GuiRightMMoveFlage==0)BWMRightMMoveDistance(100,300);}if(GuiLeftRedLed==0)GuiLeftRedLedFlage=1;if(GuiLeftGreenLed==0){GuiLeftGreenLedFlage=1;GuiLeftRedLedFlage=0;}if((GuiLeftGreenLedFlage==1)&(GuiLeftRedLedFlage==0)&(GuiLeftGreenLed)){GuiSetMot
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《奶制品培訓(xùn)資料》課件
- 《小王子英文》課件
- 《企業(yè)管理概論》課件
- 2024年雷電頌教案
- 尖子生家長會(huì)發(fā)言稿
- 單位管理制度匯編大合集【人員管理篇】十篇
- 單位管理制度合并匯編職工管理
- 單位管理制度分享大全【職員管理篇】
- 單位管理制度范文大合集人力資源管理十篇
- 單位管理制度范例合集【職工管理】十篇
- 保育員(高級(jí))考試題庫附答案(600題)
- 中國鋁業(yè)股份有限公司河南分公司鞏義市山川鋁土礦礦山地質(zhì)環(huán)境保護(hù)與土地復(fù)墾方案
- 工商企業(yè)管理畢業(yè)論文范文六篇
- 二十五項(xiàng)反措檢查表優(yōu)質(zhì)資料
- 保密辦主任工作總結(jié)保密辦主任工作總結(jié)八篇
- 新生兒沐浴及撫觸護(hù)理
- 機(jī)械原理課程設(shè)計(jì)-壓床機(jī)構(gòu)的設(shè)計(jì)
- 教學(xué)案例 英語教學(xué)案例 市賽一等獎(jiǎng)
- 四川省2023職教高考英語試題
- JJG 913-2015浮標(biāo)式氧氣吸入器
- GB/T 12190-2006電磁屏蔽室屏蔽效能的測量方法
評(píng)論
0/150
提交評(píng)論