畢業(yè)設(shè)計(jì)+智能循跡避障小車設(shè)計(jì)-
單片機(jī)系統(tǒng)課程設(shè)計(jì)輪式移動(dòng)機(jī)器人的設(shè)計(jì) 學(xué)院: 通信與電子工程學(xué)院班級(jí): 電子131姓名: 初清晨學(xué)號(hào): 2013131013同組成員: 孟慶陽 張軒指導(dǎo)老師: 王艷春日期: 2015年12月24日組 員 分 工1、組長:張 軒 ,實(shí)物焊接,報(bào)告整理,程序設(shè)計(jì)2、組員:孟慶陽 ,實(shí)物焊接,仿真測(cè)試,報(bào)告整理3、組員:初清晨 ,實(shí)物焊接,報(bào)告整理,仿真測(cè)試目錄摘要1第一章 緒論21.1智能小車的意義和作用21.2智能小車的現(xiàn)狀3第二章 方案設(shè)計(jì)與論證32.1 主控系統(tǒng)32.2 電機(jī)驅(qū)動(dòng)模塊42.3 循跡模塊52.4 避障模塊62.5 機(jī)械系統(tǒng)72.6電源模塊7第三章 硬件設(shè)計(jì)73.1 AT89S52單片機(jī)的簡介83.2總體設(shè)計(jì)113.3驅(qū)動(dòng)電路123.4信號(hào)檢測(cè)模塊133.5主控電路14第四章 軟件設(shè)計(jì)154.1主程序框圖154.2電機(jī)驅(qū)動(dòng)程序154.3循跡模塊164.4避障模塊20結(jié)束語25致謝26附錄一 循跡加紅外避障綜合程序28附錄二 實(shí)物圖32摘要隨著計(jì)算機(jī)、微電子、信息技術(shù)的快速進(jìn)步,智能化技術(shù)的開發(fā)速度越來越快,智能度越來越高,應(yīng)用范圍也得到了極大的擴(kuò)展。智能作為現(xiàn)代的新發(fā)明,是以后的發(fā)展方向,它可以按照預(yù)先設(shè)定的模式在一個(gè)環(huán)境里自動(dòng)的運(yùn)作,不需要人為的管理,可應(yīng)用于科學(xué)勘探等用途。智能電動(dòng)小車就是其中的一個(gè)體現(xiàn)。設(shè)計(jì)者可以通過軟件編程實(shí)現(xiàn)它的行進(jìn)、循跡、停止的精確控制以及檢測(cè)數(shù)據(jù)的存儲(chǔ)、顯示,無需人工干預(yù)。因此,智能電動(dòng)小車具有再編程的特性,是機(jī)器人的一種。本設(shè)計(jì)采用AT89S52單片機(jī)加電機(jī)驅(qū)動(dòng)電路和紅外遙控及循跡模塊還有紅外接收一體化傳感器設(shè)計(jì)而成,采用模塊化的設(shè)計(jì)方案,運(yùn)用紅外遙控器控制小車的前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)、啟動(dòng)和停止。關(guān)鍵詞:智能小車;STC89C52單片機(jī);L9110;紅外對(duì)管 Intelligent tracking and obstacle-avoid carAbstract:Based infrared detection of black lines and the road obstacles, and use a STC89C52 MCU as the controlling core for the speed and direction, A electronic drived, which can automatic track and avoid the obstacle, was designed and fabricated. In which, the car is drived by the L298N circuit, its speed is controlled by the output PWM signal from the STC89C52.Keywords: Smart Car; STC89C52 MCU; L298N; Infrared Emitting Diode 第一章 緒論 1.1智能小車的意義和作用 自第一臺(tái)工業(yè)機(jī)器人誕生以來,機(jī)器人的發(fā)展已經(jīng)遍及機(jī)械、電子、冶金、交通、宇航、國防等領(lǐng)域。近年來機(jī)器人的智能水平不斷提高,并且迅速地改變著人們的生活方式。人們?cè)诓粩嗵接?、改造、認(rèn)識(shí)自然的過程中,制造能替代人勞動(dòng)的機(jī)器一直是人類的夢(mèng)想。隨著科學(xué)技術(shù)的發(fā)展,機(jī)器人的感覺傳感器種類越來越多,其中視覺傳感器成為自動(dòng)行走和駕駛的重要部件。視覺的典型應(yīng)用領(lǐng)域?yàn)樽灾魇街悄軐?dǎo)航系統(tǒng),對(duì)于視覺的各種技術(shù)而言圖像處理技術(shù)已相當(dāng)發(fā)達(dá),而基于圖像的理解技術(shù)還很落后,機(jī)器視覺需要通過大量的運(yùn)算也只能識(shí)別一些結(jié)構(gòu)化環(huán)境簡單的目標(biāo)。視覺傳感器的核心器件是攝像管或CCD,目前的CCD已能做到自動(dòng)聚焦。但CCD傳感器的價(jià)格、體積和使用方式上并不占優(yōu)勢(shì),因此在不要求清晰圖像只需要粗略感覺的系統(tǒng)中考慮使用接近覺傳感器是一種實(shí)用有效的方法。機(jī)器人要實(shí)現(xiàn)自動(dòng)導(dǎo)引功能和避障功能就必須要感知導(dǎo)引線和障礙物,感知導(dǎo)引線相當(dāng)給機(jī)器人一個(gè)視覺功能。避障控制系統(tǒng)是基于自動(dòng)導(dǎo)引小車(AVGauto-guide vehicle)系統(tǒng),基于它的智能小車實(shí)現(xiàn)自動(dòng)識(shí)別路線,判斷并自動(dòng)避開障礙,選擇正確的行進(jìn)路線。使用傳感器感知路線和障礙并作出判斷和相應(yīng)的執(zhí)行動(dòng)作。該智能小車可以作為機(jī)器人的典型代表。它可以分為三大組成部分:傳感器檢測(cè)部分、執(zhí)行部分、CPU。機(jī)器人要實(shí)現(xiàn)自動(dòng)避障功能,還可以擴(kuò)展循跡等功能,感知導(dǎo)引線和障礙物??梢詫?shí)現(xiàn)小車自動(dòng)識(shí)別路線,選擇正確的行進(jìn)路線,并檢測(cè)到障礙物自動(dòng)躲避?;谏鲜鲆?,傳感檢測(cè)部分考慮到小車一般不需要感知清晰的圖像,只要求粗略感知即可,所以可以舍棄昂貴的CCD傳感器而考慮使用價(jià)廉物美的紅外反射式傳感器來充當(dāng)。智能小車的執(zhí)行部分,是由直流電機(jī)來充當(dāng)?shù)?,主要控制小車的行進(jìn)方向和速度。單片機(jī)驅(qū)動(dòng)直流電機(jī)一般有兩種方案:第一,勿需占用單片機(jī)資源,直接選擇有PWM功能的單片機(jī),這樣可以實(shí)現(xiàn)精確調(diào)速;第二,可以由軟件模擬PWM輸出調(diào)制,需要占用單片機(jī)資源,難以精確調(diào)速,但單片機(jī)型號(hào)的選擇余地較大??紤]到實(shí)際情況,本文選擇第二種方案。CPU使用STC89C52單片機(jī),配合軟件編程實(shí)現(xiàn)。1.2智能小車的現(xiàn)狀現(xiàn)智能小車發(fā)展很快,從智能玩具到其它各行業(yè)都有實(shí)質(zhì)成果。其基本可實(shí)現(xiàn)循跡、避障、檢測(cè)貼片、尋光入庫、避崖等基本功能,這幾節(jié)的電子設(shè)計(jì)大賽智能小車又在向聲控系統(tǒng)發(fā)展。比較出名的飛思卡爾智能小車更是走在前列。我此次的設(shè)計(jì)主要實(shí)現(xiàn)循跡避障這兩個(gè)功能。第二章 方案設(shè)計(jì)與論證2.1 主控系統(tǒng)根據(jù)設(shè)計(jì)要求,我認(rèn)為此設(shè)計(jì)屬于多輸入量的復(fù)雜程序控制問題。據(jù)此,擬定了以下兩種方案并進(jìn)行了綜合的比較論證,具體如下:方案一:選用一片CPLD(如EPM7128LC84-15)作為系統(tǒng)的核心部件,實(shí)現(xiàn)控制與處理的功能。CPLD具有速度快、編程容易、資源豐富、開發(fā)周期短等優(yōu)點(diǎn),可利用VHDL語言進(jìn)行編寫開發(fā)。但CPLD在控制上較單片機(jī)有較大的劣勢(shì)。同時(shí),CPLD的處理速度非常快,而小車的行進(jìn)速度不可能太高,那么對(duì)系統(tǒng)處理信息的要求也就不會(huì)太高,在這一點(diǎn)上,MCU就已經(jīng)可以勝任了。若采用該方案,必將在控制上遇到許許多多不必要增加的難題。為此,我們不采用該種方案,進(jìn)而提出了第二種設(shè)想。方案二:采用單片機(jī)作為整個(gè)系統(tǒng)的核心,用其控制行進(jìn)中的小車,以實(shí)現(xiàn)其既定的性能指標(biāo)。充分分析我們的系統(tǒng),其關(guān)鍵在于實(shí)現(xiàn)小車的自動(dòng)控制,而在這一點(diǎn)上,單片機(jī)就顯現(xiàn)出來它的優(yōu)勢(shì)控制簡單、方便、快捷。這樣一來,單片機(jī)就可以充分發(fā)揮其資源豐富、有較為強(qiáng)大的控制功能及可位尋址操作功能、價(jià)格低廉等優(yōu)點(diǎn)。因此,這種方案是一種較為理想的方案。針對(duì)本設(shè)計(jì)特點(diǎn)多開關(guān)量輸入的復(fù)雜程序控制系統(tǒng),需要擅長處理多開關(guān)量的標(biāo)準(zhǔn)單片機(jī),而不能用精簡I/O口和程序存儲(chǔ)器的小體積單片機(jī),D/A、A/D功能也不必選用。根據(jù)這些分析,我選定了P89C51RA單片機(jī)作為本設(shè)計(jì)的主控裝置,51單片機(jī)具有功能強(qiáng)大的位操作指令,I/O口均可按位尋址,程序空間多達(dá)8K,對(duì)于本設(shè)計(jì)也綽綽有余,更可貴的是51單片機(jī)價(jià)格非常低廉。在綜合考慮了傳感器、兩部電機(jī)的驅(qū)動(dòng)等諸多因素后,我們決定采用一片單片機(jī),充分利用STC89C52單片機(jī)的資源。2.2 電機(jī)驅(qū)動(dòng)模塊方案一:采用分立元件組成的平衡式驅(qū)動(dòng)電路,這種電路可以由單片機(jī)直接對(duì)其進(jìn)行操作,但由于分立元件占用空間比較大,還要配上兩個(gè)繼電器,考慮到小車的空間問題,此方案不夠理想。方案二: 采用L9110 是為控制和驅(qū)動(dòng)電機(jī)設(shè)計(jì)的兩通道推挽式功率放大專用集成電路器件,將分立電路集成在單片 IC 之中,使外圍器件成本降低,整機(jī)可靠性提高。該芯片有兩個(gè) TTL/CMOS兼容電平的輸入,具有良好的抗干擾性;兩個(gè)輸出端能直接驅(qū)動(dòng)電機(jī)的正反向運(yùn)動(dòng),它具有較大的電流驅(qū)動(dòng)能力,每通道能通過 800mA 的持續(xù)電流,峰值電流能力可達(dá) 1.5A;同時(shí)它具有較低的輸出飽和壓降;內(nèi)置的鉗位二極管能釋放感性負(fù)載的反向沖擊電流,使它在驅(qū)動(dòng)繼電器、直流電機(jī)、步進(jìn)電機(jī)或開關(guān)功率管的使用上安全可靠。L9110 被廣泛應(yīng)用于玩具汽車電機(jī)驅(qū)動(dòng)、脈沖電磁閥門驅(qū)動(dòng),步進(jìn)電機(jī)驅(qū)動(dòng)和開關(guān)功率管等電路上。圖2.2 L91102.3 循跡模塊方案一:采用簡易光電傳感器結(jié)合外圍電路探測(cè),但實(shí)際效果并不理想,對(duì)行駛過程中的穩(wěn)定性要求很高,且誤測(cè)幾率較大、易受光線環(huán)境和路面介質(zhì)影響。在使用過程極易出現(xiàn)問題,而且容易因?yàn)?該部件造成整個(gè)系統(tǒng)的不穩(wěn)定。故最終未采用該方案。方案二:采用兩只紅外對(duì)管,分別置于小車車身前軌道的兩側(cè),根據(jù)兩只光電開關(guān)接受到白線與黑線的情況來控制小車轉(zhuǎn)向來調(diào)整車向,測(cè)試表明,只要合理安裝好兩只光電開關(guān)的位置就可以很好的實(shí)現(xiàn)循跡的功能。圖2.3 紅外對(duì)管2.4 避障模塊方案一:采用超聲波避障,超聲波受環(huán)境影響較大,電路復(fù)雜,而且地面對(duì)超聲波的反射,會(huì)影響系統(tǒng)對(duì)障礙物的判斷。方案二:采用紅外線避障,利用單片機(jī)產(chǎn)生38KHz信號(hào)對(duì)紅外線發(fā)射管進(jìn)行調(diào)制發(fā)射,發(fā)射出去的紅外線遇到避障物的時(shí)候發(fā)射回來,紅外線接收管對(duì)反射回來信號(hào)進(jìn)行解調(diào),輸出TTL電平。外界對(duì)紅外信號(hào)的干擾比較小,而且易于實(shí)現(xiàn),價(jià)格比較便宜,故采用方案二。紅外線接受電路原理圖2.5 機(jī)械系統(tǒng)本題目要求小車的機(jī)械系統(tǒng)穩(wěn)定、靈活、簡單,而三輪運(yùn)動(dòng)系統(tǒng)具備以上特點(diǎn)。驅(qū)動(dòng)部分:由于玩具汽車的直流電機(jī)功率較小,而小車上裝有電池、電機(jī)、電子器件等,使得電機(jī)負(fù)擔(dān)較重。為使小車能夠順利啟動(dòng),且運(yùn)動(dòng)平穩(wěn),在直流電機(jī)和輪車軸之間加裝了三級(jí)減速齒輪。電池的安裝:將電池放置在車體的電機(jī)前后位置,降低車體重心,提高穩(wěn)定性,同時(shí)可增加驅(qū)動(dòng)輪的抓地力,減小輪子空轉(zhuǎn)所引起的誤差。簡單,而三輪運(yùn)動(dòng)系統(tǒng)具備以上特點(diǎn)。2.6電源模塊方案一:采用有線電源通過USB接口供電,其優(yōu)點(diǎn)是可穩(wěn)定的提供5V電壓,但占用資源比較大。方案二:采用4支1.5V電池單電源供電,但6V的電壓太小不能同時(shí)給單片機(jī)與與電機(jī)供電。方案三:采用8支1.5V電池雙電源分別給單片機(jī)與電機(jī)供電可解決方案二的問題且能讓小車完成其功能。但是占用空間過大沒有采取。所以,我選擇了方案一來實(shí)現(xiàn)供電。第三章 硬件設(shè)計(jì)3.1 AT89S52單片機(jī)的簡介 AT89S52 是一種低功耗、高性能CMOS8位微控制器,具有8K在系統(tǒng)可編程Flash存儲(chǔ)器。使用Atmel公司高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使得AT89S52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。下圖為AT89S52引腳圖。 圖3-1 AT89S52引腳圖 (1)主要特性:與MCS-51 兼容 8K字節(jié)可編程閃爍存儲(chǔ)器 壽命:1000寫/擦循環(huán)數(shù)據(jù)保留時(shí)間:10年全靜態(tài)工作:0Hz-24MHz三級(jí)程序存儲(chǔ)器鎖定256*8位內(nèi)部RAM32可編程I/O線兩個(gè)16位定時(shí)器/計(jì)數(shù)器5個(gè)中斷源 可編程串行通道低功耗的閑置和掉電模式片內(nèi)振蕩器和時(shí)鐘電路 (2)管腳說明:VCC:供電電壓。GND:接地。P0口:P0口為一個(gè)8位漏級(jí)開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時(shí),P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須被拉高。P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為第八位地址接收。 P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門電流,當(dāng)P2口被寫“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢(shì),當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。 P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。 P3口也可作為AT89S52的一些特殊功能口,如下表3-1所示: 表3-1 特殊功能引腳對(duì)照表引腳號(hào)特殊功能P3.0RXD 串行通信輸入P3.1TXD 串行通信輸出P3.2INT0 外部中斷0 輸入,低電平有效P3.3INT1 外部中斷1 輸入,低電平有效P3.4T0 計(jì)數(shù)器0 外部事件計(jì)數(shù)輸入端P3.5T1 計(jì)數(shù)器1 外部事件計(jì)數(shù)輸入端P3.6WR 外部隨機(jī)存儲(chǔ)器的寫選通,低電平有效P3.7RD 外部隨機(jī)存儲(chǔ)器的讀選通,低電平有效P3口同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號(hào)。RST:AT89S52 的復(fù)位信號(hào)輸入引腳,高電位工作,當(dāng)要對(duì)芯片復(fù)位時(shí),只要將此引腳電位提升到高電位,并持續(xù)兩個(gè)機(jī)器周期以上的時(shí)間,AT89S52 便能完成系統(tǒng)復(fù)位的各項(xiàng)工作,使得內(nèi)部特殊功能寄存器的內(nèi)容均被設(shè)成已知狀態(tài)。ALE/PROG:當(dāng)訪問外部存儲(chǔ)器時(shí),地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時(shí),ALE端以不變的頻率周期輸出正脈沖信號(hào),此頻率為振蕩器頻率的1/6。因此它可用作對(duì)外部輸出的脈沖或用于定時(shí)目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲(chǔ)器時(shí),將跳過一個(gè)ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時(shí), ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。PSEN:外部程序存儲(chǔ)器的選通信號(hào)。在由外部程序存儲(chǔ)器取指期間,每個(gè)機(jī)器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的/PSEN信號(hào)將不出現(xiàn)。EA/VPP:該引腳為低電平時(shí),則讀取外部的程序代碼 (存于外部EPROM 中)來執(zhí)行程序。因此在8031中,EA引腳必須接低電位,因?yàn)槠鋬?nèi)部無程序存儲(chǔ)器空間。如果是使用AT89S52或其它內(nèi)部有程序空間的單片機(jī)時(shí),此引腳接成高電平使程序運(yùn)行時(shí)訪問內(nèi)部程序存儲(chǔ)器,當(dāng)程序指針PC值超過片內(nèi)程序存儲(chǔ)器地址(如8051/8751/89C51的PC超過0FFFH)時(shí),將自動(dòng)轉(zhuǎn)向外部程序存儲(chǔ)器繼續(xù)運(yùn)行。此外,在將程序代碼燒錄至8751內(nèi)部EPROM、89C51內(nèi)部FALSH時(shí),可以利用此引腳來輸入提供編程電壓(8751為2lV、AT89S52為12V、8051是由生產(chǎn)廠方一次性加工好)。XTAL1:接外部晶振的一個(gè)引腳。在單片機(jī)內(nèi)部,它是一反相放大器輸入端,這個(gè)放大器構(gòu)成了片內(nèi)振蕩器。它采用外部振蕩器時(shí),此引腳應(yīng)接地。XTAL2:接外部晶振的一個(gè)引腳。在片內(nèi)接至振蕩器的反相放大器輸出端和內(nèi)部時(shí)鐘發(fā)生器輸入端。當(dāng)采用外部振蕩器時(shí),則此引腳接外部振蕩信號(hào)的輸入。(3)振蕩器特性:XTAL1和XTAL2分別為反向放大器的輸入和輸出。該反向放大器可以配置為片內(nèi)振蕩器。石晶振蕩和陶瓷振蕩均可采用。如采用外部時(shí)鐘源驅(qū)動(dòng)器件,XTAL2應(yīng)不接。有余輸入至內(nèi)部時(shí)鐘信號(hào)要通過一個(gè)二分頻觸發(fā)器,因此對(duì)外部時(shí)鐘信號(hào)的脈寬無任何要求,但必須保證脈沖的高低電平要求的寬度。 (4)芯片擦除:整個(gè)PEROM陣列和三個(gè)鎖定位的電擦除可通過正確的控制信號(hào)組合,并保持ALE管腳處于低電平10ms 來完成。在芯片擦操作中,代碼陣列全被寫“1”且在任何非空存儲(chǔ)字節(jié)被重復(fù)編程以前,該操作必須被執(zhí)行。此外,AT89S52設(shè)有穩(wěn)態(tài)邏輯,可以在低到零頻率的條件下靜態(tài)邏輯,支持兩種軟件可選的掉電模式。在閑置模式下,CPU停止工作。但RAM,定時(shí)器,計(jì)數(shù)器,串口和中斷系統(tǒng)仍在工作。在掉電模式下,保存RAM的內(nèi)容并且凍結(jié)振蕩器,禁止所用其他芯片功能,直到下一個(gè)硬件復(fù)位為止。 3.2總體設(shè)計(jì)智能小車采用前輪驅(qū)動(dòng),前輪左右兩邊各用一個(gè)電機(jī)驅(qū)動(dòng),調(diào)制前面兩個(gè)輪子的轉(zhuǎn)速起停從而達(dá)到控制轉(zhuǎn)向的目的,后輪是萬象輪,起支撐的作用。將循跡光電對(duì)管分別裝在車體下的左右。當(dāng)車身下左邊的傳感器檢測(cè)到黑線時(shí),主控芯片控制左輪電機(jī)停止,車向左修正,當(dāng)車身下右邊傳感器檢測(cè)到黑線時(shí),主控芯片控制右輪電機(jī)停止,車向右修正。避障的原理和循線一樣,在車身右邊裝一個(gè)光電對(duì)管,當(dāng)其檢測(cè)到障礙物時(shí),主控芯片給出信號(hào)報(bào)警并控制車子倒退,轉(zhuǎn)向,從而避開障礙物。3.2主板設(shè)計(jì)框圖如圖3.2,所需原件清單如表3.2。Stc89c52循跡紅外對(duì)管時(shí)鐘電路復(fù)位電路報(bào)警電路電機(jī)驅(qū)動(dòng)避障紅外對(duì)管圖3.2 主板設(shè)計(jì)框圖元件數(shù)量元件數(shù)量元件數(shù)量直流電機(jī)2只電阻若干集成電路芯片若干單片機(jī)1 塊二極管若干電容若干紅外對(duì)管2只蜂鳴器1只電位器若干12M晶振1只杜邦線若干玩具小車1個(gè)排針若干液晶屏1個(gè)一體化紅外接收頭1只表3.2 元件清單3.3驅(qū)動(dòng)電路電機(jī)驅(qū)動(dòng)一般采用H橋式驅(qū)動(dòng)電路,L9110內(nèi)部集成了H橋式驅(qū)動(dòng)電路,從而可以采用L9110電路來驅(qū)動(dòng)電機(jī)。其引腳圖如3.3.1,驅(qū)動(dòng)原理圖如圖3.3.2。圖3.3.1 L9110引腳圖圖3.3.2 電機(jī)驅(qū)動(dòng)電路3.4信號(hào)檢測(cè)模塊小車循跡原理是小車在畫有黑線的白紙 “路面”上行駛,由于黑線和白紙對(duì)光線的反射系數(shù)不同,可根據(jù)接收到的反射光的強(qiáng)弱來判斷“道路”黑線。筆者在該模塊中利用了簡單、應(yīng)用也比較普遍的檢測(cè)方法紅外探測(cè)法。紅外探測(cè)法,即利用紅外線在不同顏色的物理表面具有不同的反射性質(zhì)的特點(diǎn)。在小車行駛過程中不斷地向地面發(fā)射紅外光,當(dāng)紅外光遇到白色地面時(shí)發(fā)生漫發(fā)射,反射光被裝在小車上的接收管接收;如果遇到黑線則紅外光被吸收,則小車上的接收管接收不到信號(hào),再通過LM393作比較器來采集高低電平,從而實(shí)現(xiàn)信號(hào)的檢測(cè)。避障亦是此原理。電路圖如圖3.4。市面上有很多紅外傳感器,在這里我選用94型光電對(duì)管。圖3.4循跡原理圖3.5主控電路本模塊主要是對(duì)采集信號(hào)進(jìn)行分析,同時(shí)給出PWM波控制電機(jī)速度,起停。以及再檢測(cè)到障礙報(bào)警等作用。其電路圖如圖3.5。圖3.5 主控電路第四章 軟件設(shè)計(jì)4.1啟動(dòng)循跡是否檢測(cè)到停止線停止是否檢測(cè)到障礙是否檢測(cè)到N YY避障YN主程序框圖:4.1 主程序圖4.2電機(jī)驅(qū)動(dòng)程序void goahead()s1=1;s2=0;s3=1;s4=0;void goback()s1=0;s2=1;s3=0;s4=1;void turnleft()s3=1;s4=0;void turnright()s1=1;s2=0;void stop()en1=0;en2=0;4.3循跡模塊開始前進(jìn)掃描I/O口,是否檢測(cè)到黑線Y左邊 右邊左轉(zhuǎn)右轉(zhuǎn)N循跡框圖:開始前進(jìn)掃描I/O口,是否檢測(cè)到黑線Y左邊 右邊左轉(zhuǎn)右轉(zhuǎn)N圖4.3 循跡框圖循跡程序:#include <at89x51.h> /包含51相關(guān)的頭文件typedef unsigned char uchar; /重定義char數(shù)據(jù)類型typedef unsigned int uint; /重定義int數(shù)據(jù)類型#define ShowPort P2 /定義數(shù)碼管顯示端口uchar code LedShowData=0x03,0x9F,0x25,0x0D,0x99, 0x49,0x41,0x1F,0x01,0x19;/0,1,2,3,4,5,6,7,8,9/定義數(shù)碼管顯示數(shù)據(jù)static unsigned int RecvData; /定義接收紅外數(shù)據(jù)變量static unsigned char CountData; /定義紅外個(gè)數(shù)計(jì)數(shù)變量static unsigned char AddData; /定義自增變量static unsigned int LedFlash; /定義閃動(dòng)頻率計(jì)數(shù)變量unsigned char HeardData; /定義接收到數(shù)據(jù)的高位變量bit RunFlag=0; /定義運(yùn)行標(biāo)志位bit EnableLight=0; /定義指示燈使能位/*完成基本數(shù)據(jù)變量定義*/sbit S1State=P10; /定義S1狀態(tài)標(biāo)志位sbit S2State=P11; /定義S2狀態(tài)標(biāo)志位sbit B1State=P12; /定義B1狀態(tài)標(biāo)志位sbit IRState=P13; /定義IR狀態(tài)標(biāo)志位sbit RunStopState=P14; /定義運(yùn)行停止標(biāo)志位sbit FontIRState=P15; /定義FontIR狀態(tài)標(biāo)志位sbit LeftIRState=P16; /定義LeftIR狀態(tài)標(biāo)志位sbit RightIRState=P17; /定義RightIRState狀態(tài)標(biāo)志位/*完成狀態(tài)指示燈定義*/sbit S1=P32; /定義S1按鍵端口sbit S2=P34; /定義S2按鍵端口/*完成按鍵端口的定義*/ sbit LeftLed=P20; /定義前方左側(cè)指示燈端口sbit RightLed=P07; /定義前方右側(cè)指示燈端口/*完成前方指示燈端口定義*/sbit LeftIR=P35; /定義前方左側(cè)紅外探頭sbit RightIR=P36; /定義前主右側(cè)紅外探頭sbit FontIR=P37; /定義正前方紅外探頭/*完成紅外探頭端口定義*/sbit M1A=P00; /定義電機(jī)1正向端口sbit M1B=P01; /定義電機(jī)1反向端口sbit M2A=P02; /定義電機(jī)2正向端口sbit M2B=P03; /定義電機(jī)2反向端口/*完成電機(jī)端口定義*/sbit B1=P04; /定義話筒傳感器端口sbit RL1=P05; /定義光敏電阻端口sbit SB1=P06; /定義蜂鳴端口/*完成話筒,光敏電阻,蜂鳴器.端口定義*/sbit IR1=P33; /定義紅外接收端口/*完成紅外接收端口的定義*/void Delay() /定義延時(shí)子程序 uint DelayTime=30000; /定義延時(shí)時(shí)間變量 while(DelayTime-); /開始進(jìn)行延時(shí)循環(huán) return; /子程序返回void main(void) /主程序入口 while(1) LeftLed=LeftIR; /左邊的指示燈狀態(tài)為左邊的紅外探頭 RightLed=RightIR; /右邊的指示燈狀態(tài)為右邊的紅外探頭 Delay(); /延時(shí) 4.4避障模塊避障框圖:開始后退一點(diǎn),報(bào)警后退左轉(zhuǎn)前進(jìn)右轉(zhuǎn)Y循跡是否檢測(cè)到黑線前進(jìn)N圖4.4 避障框圖避障程序:#include <REGX52.H> /包含51單片機(jī)相關(guān)的頭文件sbit LeftLed=P20; /定義前方左側(cè)指示燈端口sbit RightLed=P07; /定義前方右側(cè)指示燈端口sbit FontLled=P17;sbit LeftIR=P35; /定義前方左側(cè)紅外探頭端口sbit RightIR=P36 /定義前方右側(cè)紅外探頭端口sbit FontIR=P37; /定義前方正前方紅外探頭端口sbit M1A=P00; /定義左側(cè)電機(jī)驅(qū)動(dòng)A端sbit M1B=P01; /定義左側(cè)電機(jī)驅(qū)動(dòng)B端sbit M2A=P02; /定義右側(cè)電機(jī)驅(qū)動(dòng)sbit M2B=P03; /定義右側(cè)電機(jī)驅(qū)動(dòng)B端sbit B1=P04; /定義語音識(shí)識(shí)別傳感器端口sbit SB1=P06; /定義蜂鳴器端口void tingzhi() M1A=0; /將M1電機(jī)A端初始化為0 M1B=0; /將M1電機(jī)B端初始化為0 M2A=0; /將M2電機(jī)A端初始化為0 M2B=0;void qianjin() M1A=1; M1B=0; M2A=1; M2B=0;void houtui() M1A=0; M1B=1; M2A=0; M2B=1;void zuozhuan() M1A=1; M1B=0; M2A=0; M2B=1;void youzhuan() M1A=0; M1B=1; M2A=1; M2B=0;void delay_nus(unsigned int i) /延時(shí):i>=12 ,i的最小延時(shí)單12 us i=i/10; while(-i); void delay_nms(unsigned int n) /延時(shí)n ms n=n+1; while(-n) delay_nus(900); /延時(shí) 1ms,同時(shí)進(jìn)行補(bǔ)償 void ControlCar(unsigned char ConType) /定義電機(jī)控制子程序 tingzhi(); switch(ConType) /判斷用戶設(shè)定電機(jī)形式 case 1: /前進(jìn) /判斷用戶是否選擇形式1 qianjin(); break; case 2: /后退 /判斷用戶是否選擇形式2 houtui(); /M2電機(jī)反轉(zhuǎn) break; case 3: /左轉(zhuǎn) /判斷用戶是否選擇形式3 zuozhuan(); /M2電機(jī)正轉(zhuǎn)break; case 4: /右轉(zhuǎn) /判斷用戶是否選擇形式4 youzhuan(); /M1電機(jī)正轉(zhuǎn) /M2電機(jī)反轉(zhuǎn)break; case 8: /停止 /判斷用戶是否選擇形式8 tingzhi();break; /退出當(dāng)前選擇 void main() /主程序入口 bit RunFlag=0; /定義小車運(yùn)行標(biāo)志位 /RunShow=0; /初始化顯示狀態(tài) ControlCar(8); /初始化小車運(yùn)行狀態(tài) while(1) /程序主循環(huán) Start: LeftLed=LeftIR; /前方左側(cè)指示燈指示出前方左側(cè)紅外探頭狀態(tài) RightLed=RightIR; /前方右側(cè)指示燈指示出前方右側(cè)紅外探頭狀態(tài) FontLled= FontIR; SB1=FontIR; if(FontIR = 0) /如果前面避障傳感器檢測(cè)到障礙物 ControlCar(8); /停止 delay_nms (300); /停止300MS 防止電機(jī)反相電壓沖擊 導(dǎo)致系統(tǒng)復(fù)位 ControlCar(2); /后退 delay_nms (1000); /后退1500MS ControlCar(3); / delay_nms (1800); goto NextRun; if(FontIR = 1 ) ControlCar(1); /右側(cè)沒有信號(hào)時(shí),開始向左轉(zhuǎn)一定的角度 delay_nms (10); goto NextRun; goto Start; NextRun: ControlCar(1); 結(jié)束語 整個(gè)系統(tǒng)的設(shè)計(jì)以單片機(jī)為核心,利用了多種傳感器,將軟件和硬件相結(jié)合。本系統(tǒng)能實(shí)現(xiàn)如下功能:(1) 自動(dòng)沿預(yù)設(shè)軌道行駛小車在行駛過程中,能夠自動(dòng)檢測(cè)預(yù)先設(shè)好的軌道,實(shí)現(xiàn)直道和弧形軌道的前進(jìn)。若有偏離,能夠自動(dòng)糾正,返回到預(yù)設(shè)軌道上來。(2)當(dāng)小車探測(cè)到前進(jìn)前方的障礙物時(shí),可以躲避障礙物,從無障礙區(qū)通過。小車通過障礙區(qū)后,能夠自動(dòng)循跡(3)自動(dòng)檢測(cè)停車線并自動(dòng)停車。從運(yùn)行情況來看避障的效果比較好,循跡的效果不是很好,我認(rèn)為是由于焊接時(shí)沒有注意右側(cè)紅外燈管沒有焊接好,這也是我這次設(shè)計(jì)最大的誤區(qū),沒有及時(shí)的拆卸和重新焊接。我相信如果實(shí)驗(yàn)條件和時(shí)間的允許下我肯定能解決這一問題。 通過本次設(shè)計(jì)我掌握了很多以前不熟練的東西,認(rèn)識(shí)了很多以前不熟悉得東西,使我在人生上又進(jìn)了一步。也認(rèn)識(shí)到很多的不足。致謝本設(shè)計(jì)能夠順利完成,還承蒙王老師以及身邊的很多同學(xué)的指導(dǎo)和幫助。在設(shè)計(jì)過程中,王老師給予了悉心的指導(dǎo),最重要的是給了我解決問題的思路和方法,并且在設(shè)計(jì)環(huán)境和器材方面給予了大力的幫助和支持,在此,我對(duì)王老師表示最真摯的感謝!同時(shí)感謝所有幫助過我的同學(xué)!感些評(píng)閱老師百忙之中抽出時(shí)間對(duì)本論文進(jìn)行了評(píng)閱!參考文獻(xiàn)1 楊永輝現(xiàn)代電子技術(shù)J .智能小車的多傳感器數(shù)據(jù)融合.20052 何立民單片機(jī)與嵌入式系統(tǒng)應(yīng)用J.基于HCS12的小車智能控制系統(tǒng)設(shè)計(jì)20073 譚浩強(qiáng).C程序設(shè)計(jì).北京:清華大學(xué)出版社,2005,74 張立電子世界J.電動(dòng)小車的循跡2004 5 武慶生,仇梅.單片機(jī)原理與應(yīng)用(M).電子科技大學(xué)出版,1998,126 徐科軍傳感器與檢測(cè)技術(shù)M.電子工業(yè)出版社,20077 劉瑞新.單片機(jī)原理及應(yīng)用教程 .機(jī)械工業(yè)出版社,2003,78 劉湘濤,江世明單片機(jī)原理與應(yīng)用M.電子工業(yè)出版社,20069 何立民單片機(jī)初級(jí)教程M.北京航空航天大學(xué)出版社,199910 熊建云. Protel99 SE.北京:機(jī)械工業(yè)出版社,200711 鄭郁正單片機(jī)原理及應(yīng)用.四川大學(xué)出版杜,200312 盧靜,陳非凡,張高飛等.基于單片機(jī)的無刷直流電動(dòng)機(jī)控制系統(tǒng)設(shè)計(jì).北京機(jī)械工業(yè)學(xué)院學(xué)報(bào),2002,1013 張燕,曾光宇.光電式傳感器的應(yīng)用與發(fā)展J.科技情報(bào)開發(fā)與經(jīng)濟(jì),200725附錄一 循跡加紅外避障綜合程序#include<at89x52.h>#define uint unsigned int#define uchar unsigned char#define out P2sbit zuo1=P01;sbit zuo2=P00;sbit you1=P03;sbit you2=P02;sbit zuod=P35;sbit youd=P36;sbit qiand=P37;/左 右 前 3個(gè)紅外傳感器sbit jiao=P06;sbit D1=P20;sbit D2=P07;uchar code ZM=0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,;void delay(uint x)uchar i;while(x-)for(i=0;i<123;i+);void delay_nus(unsigned int i) /延時(shí):i>=12 ,i的最小延時(shí)單12 us i=i/10; while(-i); void delay_nms(unsigned int n) /延時(shí)n ms n=n+1; while(-n) delay_nus(900); /延時(shí) 1ms,同時(shí)進(jìn)行補(bǔ)償 void qian()zuo1=0;zuo2=1;/左邊往前you1=0;you2=1;/右邊往前void hou()zuo1=1;zuo2=0;/左邊往后you1=1;you2=0;/右邊往后void zuo() zuo1=0;zuo2=1;/左邊往前you1=1;you2=0;/右邊往后void you()zuo1=1;zuo2=0;/左邊往后you1=0;you2=1;/右邊往前void tingzhi() zuo1=0;zuo2=0;/左邊往后you1=0;you2=0;/右邊往前void main()while(1)if(zuod=0&youd=0)/如果左右兩個(gè)傳感器沒有檢測(cè)到黑線qian();/直走out=ZM1;if(qiand=0)/如果在直走的過程中遇見障礙物delay(50);/延時(shí)判斷是否為干擾if(qiand=0)/不是干擾jiao=0;/蜂鳴器報(bào)警tingzhi();delay_nms (120);hou();/后退半秒out=ZM2;delay(500);you();/右轉(zhuǎn)200毫秒out=ZM4;delay(200);jiao=1;/取消報(bào)警if(zuod=1&youd=0)/如果左邊的傳感器檢測(cè)到黑線while(1)zuo();out=ZM3;/左轉(zhuǎn)D1=0;if(zuod=0)/一直左轉(zhuǎn)到傳感器檢測(cè)不到為止D1=1;break;/跳出循環(huán)if(youd=1&zuod=0)while(1)you();out=ZM4;D2=0;if(youd=0)D2=1;break;/道理同上 /效果:沿著黑線行走 中途遇見障礙物后退右轉(zhuǎn)附錄二 實(shí)物圖30