版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 本科畢業(yè)論文(設(shè)計(jì))開題報(bào)告</p><p> 題 目 智能消防車 </p><p> 院 系 信息工程系 </p><p> 專 業(yè) 電子信息工程 </p><p> 學(xué)生姓名 </p><p> 2013 年 10 月 10 日</p
2、><p> 教學(xué)單位 信息工程系 </p><p> 學(xué)生學(xué)號 2101234145</p><p> 本科畢業(yè)論文(設(shè)計(jì))</p><p> 題 目 遙控消防車 </p><p> 學(xué)生姓名 </p><p> 專業(yè)名稱 電子信息工程
3、 </p><p> 指導(dǎo)教師 </p><p> 2014年03月18日</p><p><b> 遙控消防車</b></p><p> 摘要:本系統(tǒng)采用工業(yè)級STC89C52單片機(jī)為主控核心,功耗低,性能穩(wěn)定,系統(tǒng)各部分均采用模塊穩(wěn)定性高,系統(tǒng)給每個模塊單獨(dú)供
4、電,保證了運(yùn)行時的可靠性。系統(tǒng)各模塊與主機(jī)的通信距離短,故此系統(tǒng)采用綜合布線,減少了無線模塊的使用,降低了成本。且本系統(tǒng)采用C語言編程,無線遙控模式,可遠(yuǎn)程控制消防車的行走路線,滅火噴頭的旋轉(zhuǎn),水泵的上水等進(jìn)行無人員投入遠(yuǎn)距離滅火。</p><p> 關(guān)鍵字:遙控消防車;NRF24L01;STC89C52。</p><p> Design of remote control fire
5、truck</p><p> Abstract: In this design, the system using industrial grade STC89C52 micro controller to control the core, low power consumption, stable performance, each part of the system adopts the module
6、of high stability, system to each module power alone, to ensure the reliability of the runtime. The communication distance of each module in the system and the host of the short, so the system uses the integrated wiring,
7、 reducing the use of wireless module, reduces the cost. And this system uses the C langu</p><p> KEY:Remote control fire truck;NRF24L01;STC89C52。</p><p><b> 目 錄</b></p><
8、;p><b> 1引言1</b></p><p><b> 2相關(guān)技術(shù)2</b></p><p> 2.1 STC89C52單片機(jī)2</p><p><b> 2.2步進(jìn)電機(jī)2</b></p><p> 2.2.1供電模塊3</p>&l
9、t;p> 2.2.2供電模塊3</p><p> 2.3 NRF24L01無線收發(fā)模塊3</p><p><b> 3系統(tǒng)分析4</b></p><p> 4 系統(tǒng)的硬件電路設(shè)計(jì)5</p><p> 4.1 主控制器模塊的設(shè)計(jì)5</p><p> 4.2 NRF2
10、4L01無線模塊的設(shè)計(jì)5</p><p> 4.3 按鍵控制模塊的設(shè)計(jì)8</p><p> 4.4 晶振電路與復(fù)位電路設(shè)計(jì)8</p><p> 4.4.1 晶振電路8</p><p> 4.4.2 復(fù)位電路8</p><p> 4.5 電源模塊的設(shè)計(jì)10</p><p
11、> 4.6 L298N電機(jī)驅(qū)動模塊設(shè)計(jì)10</p><p> 4.7 ULN200311</p><p> 4.8 LM259611</p><p> 4.9 LM780512</p><p> 5 系統(tǒng)軟件設(shè)計(jì)13</p><p> 5.1設(shè)計(jì)軟件簡介13</p>
12、<p> 5.2軟件設(shè)計(jì)應(yīng)用環(huán)境簡介13</p><p> 5.3 總體設(shè)計(jì)15</p><p> 5.4 NRF24L01模塊程序設(shè)計(jì)15</p><p> 6 調(diào)試結(jié)果與分析17</p><p> 6.1 測試儀器17</p><p> 6.2 測試方法17</p>
13、;<p> 6.3 調(diào)試過程與分析17</p><p><b> 參考文獻(xiàn)18</b></p><p> 附錄1 源程序清單19</p><p> 附錄2 總體實(shí)物圖35</p><p><b> 1引言</b></p><p> 近年來隨
14、著科技的飛速發(fā)展,單片機(jī)的應(yīng)用正在不斷地走向深入,同時帶動傳統(tǒng)控制檢測技術(shù)日益更新。</p><p> 遙控消防車,是無人員投入火災(zāi)現(xiàn)場必備的終端設(shè)備,是一種代替人員進(jìn)入火災(zāi)現(xiàn)場滅火的設(shè)備。智能消防車系統(tǒng)主要由:STC89C52單片機(jī),NRF24L01無線收發(fā)模塊,左右減速電機(jī),步進(jìn)電機(jī),水泵,風(fēng)扇等部件組成??蛇M(jìn)行遠(yuǎn)程控制滅火。</p><p> 使用時,以STC89C52系列單片機(jī)
15、為控制核心設(shè)計(jì)搖控系統(tǒng)的發(fā)射器與接收器。搖控器由單片機(jī)、六個按鍵和NRF24L01模塊等組成.六個按鍵分別代表車的前進(jìn)和后退、左轉(zhuǎn)和右轉(zhuǎn)、啟動滅火風(fēng)扇和啟動二氧化碳。搖控器通過NRF24L01發(fā)射出去,接收器接收后,辨別發(fā)射傳輸?shù)男畔?,對車發(fā)出命令進(jìn)行滅火。</p><p><b> 2相關(guān)技術(shù)</b></p><p> 2.1 STC89C52單片機(jī)</p
16、><p> STC89C52是一種8K字節(jié)閃爍可編程可擦除只讀存儲器的低電壓高性能的CMOS8的微處理器,該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造。與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。主控芯片內(nèi)部電路圖如圖1所示。</p><p> 圖1 STC89C52內(nèi)部電路圖</p><p><b> 2.2步進(jìn)電機(jī)</b><
17、;/p><p> 步進(jìn)電機(jī)作為該系統(tǒng)的驅(qū)動電機(jī)。由于其轉(zhuǎn)過的角度可以精確的計(jì)數(shù),實(shí)現(xiàn)小車前進(jìn)路程和位置的精確定位,也能準(zhǔn)確引導(dǎo)小車駛向火源。</p><p> 采用專用芯片L298N作為電機(jī)驅(qū)動芯片。L298N是一個具有高電壓大電流的全橋驅(qū)動芯片,它相應(yīng)頻率高,輸出電壓最高可達(dá)50V,可以直接通過電源來調(diào)節(jié)輸出電壓;可以直接用單片機(jī)的IO口通過光耦芯片提供信號。</p>&l
18、t;p><b> 2.2.1供電模塊</b></p><p> 用航空鋰電池經(jīng)7805電壓變換電路為電機(jī)供電。再用12V蓄電池為系統(tǒng)供電,蓄電池具有較強(qiáng)的電流驅(qū)動能力以及穩(wěn)定的電壓輸出性能。采用此種供電方式后,單片機(jī)和傳感器工作穩(wěn)定,電機(jī)工作互不影響,能夠滿足系統(tǒng)的要求。</p><p><b> 2.2.2供電模塊</b></
19、p><p> LM2596-adj把鋰電池輸出的16.8V電壓降為9V來為L298N電機(jī)驅(qū)動供電驅(qū)動小車運(yùn)行。LM2596轉(zhuǎn)換效率高,輸出電壓可高達(dá)40V,輸出電流可高達(dá)3A,具有過流保護(hù)作用。</p><p> ULN2003工作電壓高,工作電流大,灌電流可達(dá)500mA所以用來驅(qū)動步進(jìn)電機(jī)</p><p> 鹽酸和碳酸鈉反應(yīng)產(chǎn)生二氧化碳?xì)怏w,排出空氣使包圍在蠟燭
20、周圍的氧濃度降低進(jìn)而產(chǎn)生窒息,起到了滅火的作用。 </p><p> 2.3 NRF24L01無線收發(fā)模塊</p><p> 采用NRF24L01芯片無線控制小車的前進(jìn)后退及轉(zhuǎn)彎。它RF24L01B微功率無線通訊模塊,采用Nordic公司的NRF24L01芯片,2.4G全球開發(fā)ISM頻段免許可證使用,最高工作速率達(dá)2Mbps,125頻道滿足多點(diǎn)通信和跳頻通信需要,內(nèi)置PCB天線體積小巧
21、約37*17mm,高效GFSK調(diào)制,抗干擾能力強(qiáng),特別適合工業(yè)控制、無線音視頻傳輸?shù)阮I(lǐng)域。NRF24L01是一款低成本無線收發(fā)器。它內(nèi)置頻率合成器,功率放大器,晶體振蕩器、調(diào)制器等功能模塊。</p><p><b> 3系統(tǒng)分析</b></p><p> 本系統(tǒng)包括電機(jī)驅(qū)動、步進(jìn)電機(jī)、無線收發(fā)等模塊。系統(tǒng)結(jié)構(gòu)圖如圖2所示。</p><p>
22、<b> 圖2 系統(tǒng)結(jié)構(gòu)圖</b></p><p> 供電系統(tǒng)包括可調(diào)的Lm2596芯片、Lm7805芯片、Ams1117等。供電系統(tǒng)結(jié)構(gòu)圖如圖3所示。</p><p><b> 圖3供電系統(tǒng)結(jié)構(gòu)圖</b></p><p> 4 系統(tǒng)的硬件電路設(shè)計(jì)</p><p> 4.1 主控制器
23、模塊的設(shè)計(jì)</p><p> 本設(shè)計(jì)采用了STC89C52芯片為主控制器,該芯片的應(yīng)用電路于其他51單片機(jī)完全一樣。介于小車各部分功能均為模塊實(shí)現(xiàn),所以,將單片機(jī)最小系統(tǒng)布局好后,其余各I/O口用排針引出。STC單片機(jī)支持串口下載功能,所以省去了調(diào)試時不住地插拔片子的麻煩,也保證了片子的完好。單片機(jī)引腳分布圖及最小系統(tǒng)圖如圖4如所示。</p><p><b> 圖4單片機(jī)最
24、小系統(tǒng)</b></p><p> 4.2 NRF24L01無線模塊的設(shè)計(jì)</p><p> NRF24L01 是 NORDIC 公司最近生產(chǎn)的一款無線通信通信芯片,采用 FSK 調(diào)制,內(nèi)部集成NORDI自己的 Enhanced Short Burst 協(xié)議??梢詫?shí)現(xiàn)點(diǎn)對點(diǎn)或是 1 對 6 的無線通信。</p><p> 無線通信速度可以達(dá)到 2M
25、(bps)。NORDIC 公司提供通信模塊的 GERBER 文件,可以直接加工生產(chǎn)。嵌入式工程師或是單片機(jī)愛好者只需要為單片機(jī)系統(tǒng)預(yù)留 5個GPIO,1個中斷輸入引腳,就可以很容易實(shí)現(xiàn)無線通信的功能,非常適合用來為 MCU 系統(tǒng)構(gòu)建無線通信功能。</p><p> 發(fā)射數(shù)據(jù)時,首先將nRF24L01配置為發(fā)射模式:接著把接收節(jié)點(diǎn)地址TX_ADDR和有效數(shù)據(jù)TX_PLD按照時序由SPI口寫入nRF24L01緩存區(qū)
26、,TX_PLD必須在CSN為低時連續(xù)寫入,而TX_ADDR在發(fā)射時寫入一次即可,然后CE置為高電平并保持至少10μs,延遲130μs后發(fā)射數(shù)據(jù);若自動應(yīng)答開啟,那么nRF24L01在發(fā)射數(shù)據(jù)后立即進(jìn)入接收模式,接收應(yīng)答信號(自動應(yīng)答接收地址應(yīng)該與接收節(jié)點(diǎn)地址TX_ADDR一致)。如果收到應(yīng)答,則認(rèn)為此次通信成功,TX_DS置高,同時TX_PLD從TX FIFO中清除;若未收到應(yīng)答,則自動重新發(fā)射該數(shù)據(jù)(自動重發(fā)已開啟),若重發(fā)次數(shù)(AR
27、C)達(dá)到上限,MAX_RT置高,TX FIFO中數(shù)據(jù)保留以便在次重發(fā);MAX_RT或TX_DS置高時,使IRQ變低,產(chǎn)生中斷,通知MCU。最后發(fā)射成功時,若CE為低則nRF24L01進(jìn)入空閑模式1;若發(fā)送堆棧中有數(shù)據(jù)且CE為高,則進(jìn)入下一次發(fā)射;若發(fā)送堆棧中無數(shù)據(jù)且CE為高,則進(jìn)入空閑模式2。</p><p> 接收數(shù)據(jù)時,首先將nRF24L01配置為接收模式,接著延遲130μs進(jìn)入接收狀態(tài)等待數(shù)據(jù)的到來。當(dāng)接
28、收方檢測到有效的地址和CRC時,就將數(shù)據(jù)包存儲在RX FIFO中,同時中斷標(biāo)志位RX_DR置高,IRQ變低,產(chǎn)生中斷,通知MCU去取數(shù)據(jù)。若此時自動應(yīng)答開啟,接收方則同時進(jìn)入發(fā)射狀態(tài)回傳應(yīng)答信號。最后接收成功時,若CE變低,則nRF24L01進(jìn)入空閑模式1。</p><p> NRF24L01模塊電路圖如圖5圖6所示。</p><p> 圖5 NRF24L01結(jié)構(gòu)圖</p>
29、<p> 圖6 NRF24L01模塊電路</p><p> NRF24L01的指令列表如表1所示。</p><p> 表1 NRF24L01令列表</p><p> 4.3 按鍵控制模塊的設(shè)計(jì)</p><p> 本設(shè)計(jì)中,采用獨(dú)立按鍵對單片機(jī)核心芯片STC89C52RC進(jìn)行輸入控制。各按鍵分別一端接地,一端接單片
30、機(jī)引腳。實(shí)現(xiàn)功能:六個鍵分別表示不按代表不控制車,按下代表控制。</p><p> 4.4 晶振電路與復(fù)位電路設(shè)計(jì)</p><p> 4.4.1 晶振電路</p><p> 晶振電路為單片機(jī)AT89C51工作提供時鐘信號,芯片中有一個用于構(gòu)成內(nèi)部振蕩器的高增益反相放大器,引腳XTAL1和XTAL2分別是該放大器的輸入端和輸出端。這個放大器與作為反饋元件的片
31、外石英晶體或陶瓷諧振蕩器一起構(gòu)成自激振蕩器。電路中的外接石英晶體及電容C5、C6接在放大器的反饋回路中構(gòu)成并聯(lián)振蕩電路。由于外接電容C5、C6的容量大小會輕微影響振蕩頻率的高低、振蕩器工作的穩(wěn)定性、起振的難易程度及溫度穩(wěn)定性,如果使用石英晶體,電容的容量大小范圍為20pF~40pF;如果使用陶瓷諧振,則電容容量大小為30 pF~50 pF。本設(shè)計(jì)中使用石英晶體,電容的容值設(shè)定為30pF。</p><p> 4.
32、4.2 復(fù)位電路</p><p> 本設(shè)計(jì)采用的是手動按鈕復(fù)位。手動按鈕復(fù)位需要人為在復(fù)位輸入端REST上加入高電平,采用的辦法是在REST端和正電源Vcc之間接一個按鈕。當(dāng)人為按下按鈕時,則Vcc的+5V電平就會直接加到REST端,系統(tǒng)復(fù)位。由于人的動作再快也會使按鈕保持接通達(dá)數(shù)十毫秒,所以,設(shè)計(jì)完全能夠滿足復(fù)位的時間要求。復(fù)位電路中SW-PB為手動復(fù)位開關(guān),電容Ch1可避免高頻諧波對電路的干擾。</
33、p><p> 因?yàn)?MCS-51系列單片機(jī)采用高電平復(fù)位方式,其內(nèi)部復(fù)位電路如圖3-15所示,高電平復(fù)位脈沖RST引腳輸入到內(nèi)部施密特觸發(fā)器整形后,送CPU內(nèi)部復(fù)位電路。CPU在每一個機(jī)器周期的S5P2相采樣施密特觸發(fā)器的輸出端,若為高電平,則強(qiáng)迫機(jī)器進(jìn)入復(fù)位狀態(tài)。為了保證CPU內(nèi)部各個單元電路可靠復(fù)位,RST引腳復(fù)位脈沖高電平維持時間必須大于等于2個機(jī)器周期(即24個振蕩周期)。內(nèi)部復(fù)位電路如圖7所示。
34、 </p><p><b> 圖 7 復(fù)位電路</b></p><p> 可以使用RC分立元件或微處理器監(jiān)控芯片構(gòu)成MCS-51單片機(jī)的外部復(fù)位電路。本設(shè)計(jì)中采用RC分立元件構(gòu)成MCS-51外部復(fù)位電路,外部復(fù)位電路圖電路如圖8所示。</p><p><b> 圖8 外部復(fù)位電路</b></p>&
35、lt;p> 按下復(fù)位按鍵K20時,電容C3通過R1放電,當(dāng)電容放電結(jié)束后,RST引腳電位由R1、R2分壓比決定。由于R2>>R1,因此RST引腳為高電平,CPU進(jìn)入復(fù)位狀態(tài)。松開復(fù)位按鍵后,電容C3充電,RST引腳電位下降,使CPU脫離復(fù)位狀態(tài)。R1的作用在于限制復(fù)位按鈕瞬間電容C3的放電電流,避免產(chǎn)生火花,以保護(hù)按鈕的觸點(diǎn)。</p><p> 單片機(jī)的復(fù)位都是靠外部電路實(shí)現(xiàn)的,在時鐘電路工
36、作后,只要在單片機(jī)的RST引腳上出現(xiàn)24個時鐘振蕩脈沖以上的高電平,單片機(jī)便實(shí)現(xiàn)初始化狀態(tài)復(fù)位。為了保證應(yīng)用系統(tǒng)可靠地復(fù)位,在設(shè)計(jì)復(fù)位電路時,通常使RST保持高電平。只要RST保持高電平,則單片機(jī)就循環(huán)復(fù)位。</p><p> 4.5 電源模塊的設(shè)計(jì)</p><p> 電源是整個系統(tǒng)穩(wěn)定運(yùn)行的基本要求,所以,制作一個小巧的可靠的電源就必須對電力資源合理分配。由于本次設(shè)計(jì)中電源分動力供
37、電和邏輯供電兩部分,為了減小干擾,兩部分電源應(yīng)相互獨(dú)立。其中,電機(jī)的動力供電有2596輸出,7805穩(wěn)壓供電為單片機(jī)提供電源,而NRF24L01工作電壓為3.3V所以用ASM1117為其供電。</p><p> 4.6 L298N電機(jī)驅(qū)動模塊設(shè)計(jì)</p><p> 雙電機(jī)驅(qū)動芯片L298N,性能可以滿足小車的電機(jī)控制要求,而且外圍電路比較簡單,穩(wěn)定性較好,驅(qū)動能力夠強(qiáng)。能夠很好的保證
38、兩電機(jī)的同步。實(shí)物圖及接線圖如圖9和圖10所示。</p><p> 圖9 L298N電機(jī)驅(qū)動模塊</p><p> 圖10 L298N電機(jī)驅(qū)動電路圖</p><p> 其內(nèi)部包含4通道邏輯驅(qū)動電路。是一種二相和四相電機(jī)的專用驅(qū)動器,即內(nèi)含二個H橋的高電壓大電流雙全橋式驅(qū)動器,接收標(biāo)準(zhǔn)TTL邏輯電平信號,可驅(qū)動46V、2A以下的電機(jī)。</p>
39、<p> 4.7 ULN2003</p><p> 其具有電流增益高、工作電壓高、溫度范圍寬、帶負(fù)載能力強(qiáng)等特點(diǎn)。在系統(tǒng)中為步進(jìn)電機(jī)供電。原理圖如圖11所示。</p><p> 圖11 ULN2003原理圖</p><p> 4.8 LM2596</p><p> 此芯片具有輸出電壓、電流大,輸出線性好且負(fù)載可調(diào)
40、,具有過流保護(hù)作用等特點(diǎn)。在系統(tǒng)中為步進(jìn)電機(jī)供電。實(shí)物圖和原理圖如圖12所示。</p><p> 圖 12 LM2596</p><p> LM2596的線路圖如圖13所示。</p><p> 圖13 LM2596</p><p> 4.9 LM7805</p><p> LM7805是一片最經(jīng)典的三
41、端線性穩(wěn)壓芯片,具有較好的線性穩(wěn)壓效果,外圍電路十分簡單,所以在本次設(shè)計(jì)中選為邏輯供電穩(wěn)壓芯片。為了得到理想的電壓,在輸出端用大的濾波電容和小電容并聯(lián)的方式進(jìn)行整波。電路圖如圖14所示。</p><p> 圖14 LM7805</p><p><b> 5 系統(tǒng)軟件設(shè)計(jì)</b></p><p><b> 5.1設(shè)計(jì)軟件簡介&
42、lt;/b></p><p> Keil C51的V8. xx是目前世界上最好的51單片機(jī)的匯編和C語言的開發(fā)工具。它支持匯編、C語言以及混合編程,同時具備強(qiáng)大的軟件仿真和硬件仿真功能。在此次設(shè)計(jì)中采用開發(fā)環(huán)境的正是此項(xiàng)。[3] (1)創(chuàng)建項(xiàng)目:執(zhí)行[Project]|[NewμVision Project]菜單命令,將新創(chuàng)建一個項(xiàng)目。為項(xiàng)目建一個單獨(dú)的文件夾,然后選擇子文件夾并鍵入項(xiàng)目的名稱。在項(xiàng)
43、目創(chuàng)建之前,需要為新建的項(xiàng)目選擇一個CPU。在命名項(xiàng)目名稱后,彈出的對話框,其中顯示的是器件數(shù)據(jù)庫,用戶只要選擇所需要的MCU就可以了。選擇AT89S52之后,右邊一欄是對這個單片機(jī)的基本的說明,然后單擊[確定]按鈕。2、添加配置啟動代碼:啟動文件STARTUP.C中包含了目標(biāo)啟動代碼,可在每個project中加入這個文件。 (2)項(xiàng)目設(shè)置:μVision 3允許用戶為目標(biāo)硬件設(shè)置選項(xiàng),可以通過工具條圖標(biāo)打開,也可以用鼠標(biāo)右擊項(xiàng)目
44、窗口中的Files標(biāo)簽頁中的Target1,在右鍵菜單中選擇[Options for Targe1]命令: Output:定義Keil工具的輸出文件,并定義生成處理</p><p> 5.2軟件設(shè)計(jì)應(yīng)用環(huán)境簡介</p><p> ?。?)Target標(biāo)簽:單擊Target標(biāo)簽,其中各參數(shù)設(shè)置如下:①Xtal(MHz):設(shè)置單片機(jī)的工作的頻率,默認(rèn)值是24.0MHz。
45、②Use On-chip ROM(0x0~0x1FFF): Flash ROM。單片機(jī)的EA引腳接高電平,則一定需要選中這個選項(xiàng)。③Memory Model:變量存儲空間。(2)Output標(biāo)簽:①Select Folder for Objects:選擇編譯之后的目標(biāo)文件存儲在哪個目錄。②Name of Executable:設(shè)置生成的目標(biāo)文件的名字。③Create Executable:生成omf以及hex文件。④Cre
46、ate Hex File:要生成hex文件一定要選中該選項(xiàng)。⑤Create Library:生成lib庫文件。(3)Listing標(biāo)簽:Keil C51在編譯之后除了聲稱目標(biāo)文件之外,還生成*.lst、*.m51的文件。用戶可以在Listing標(biāo)簽中設(shè)置*.lst、*.m51文件的各種選項(xiàng)。(4)C51標(biāo)簽:用戶通過C51標(biāo)簽來設(shè)置C51編譯器的特別的工具選項(xiàng)。(5)A51標(biāo)簽:A51標(biāo)簽用來設(shè)置匯編器的特別工</p>
47、;<p><b> 5.3 總體設(shè)計(jì)</b></p><p> 該系統(tǒng)包括無線發(fā)送和接收、步進(jìn)電機(jī)控制系統(tǒng)、水泵控制系統(tǒng)和滅火風(fēng)扇和噴頭的控制系統(tǒng)等。流程圖如圖15所示。</p><p> 圖15 系統(tǒng)總流程圖</p><p> 5.4 NRF24L01模塊程序設(shè)計(jì)</p><p> 該射頻模塊集
48、成了NORDIC公司生產(chǎn)的無線射頻芯片nRF24L01。其發(fā)射部分流程圖如圖16所示。</p><p> 圖16發(fā)射部分的流程</p><p><b> 其核心代碼如下:</b></p><p> SetTX_Mode(); //設(shè)置為發(fā)送模式</p><p> TxBuf[1] = 1; </p>
49、;<p> nRF24L01_TxPacket(TxBuf);//發(fā)送buffer 里的數(shù)據(jù)</p><p> TxBuf[1] = 0x00;</p><p> 接收部分流程圖如圖17所示。</p><p> 圖17 接收部分的流程</p><p><b> 其核心代碼如下:</b></
50、p><p> SetRX_Mode(); //設(shè)置為接收模式</p><p> nRF24L01_RxPacket(RxBuf); //將接收到的數(shù)據(jù)存到RxBuf中</p><p> if(RxBuf[1]==1) </p><p><b> {</b></p><p> in1=0;
51、 in2=1;</p><p> in3=0; in4=1;</p><p> RxBuf[1]=0; </p><p><b> led1 = 1;</b></p><p><b> }</b></p><p><b> 6 調(diào)試結(jié)果與分析</b
52、></p><p><b> 6.1 測試儀器</b></p><p> 萬用表,軟件Protues。</p><p><b> 6.2 測試方法</b></p><p> 先接通電源,看看系統(tǒng)能否正常工作,如果不能,可以在系統(tǒng)供電情況下,用萬用表檢測發(fā)射板和接收板各個模塊的電壓,
53、如果出現(xiàn)電壓為0或者無限大的情況,則為短路或者斷路,一一排查之后可以確定是哪個地方的問題,檢修后再次接通電源調(diào)試,使用protues軟件事先調(diào)試按鍵邏輯與顯示邏輯觀察是否正常。</p><p> 6.3 調(diào)試過程與分析</p><p> 在本次設(shè)計(jì)過程中,由于使用的是宏晶的STC89C52RC芯片,這個系列的程序下載只需通過MAX232下載接口就可以。使得本次設(shè)計(jì)中硬件仿真變的就比較
54、簡單,因?yàn)橛辛擞布抡婀ぞ呔涂梢噪S時修改程序,通過一步一步的調(diào)試來達(dá)到最后的目的,同時尤其學(xué)會了分部調(diào)試的思想,這就使得當(dāng)遇到問題時不會覺得無從下手,不會覺得那么迷茫,使調(diào)試變得比較有條理。</p><p> 在檢查完硬件電路沒有短路、斷路的情況下,接通電源,并且測試各個集成片的電源電壓是否符合要求,以及單片機(jī)晶振是否起振,只有晶振正常起振單片機(jī)才能工作,通過檢測,上述情況均正常。</p><
55、;p> 在protues軟件當(dāng)中以單步聯(lián)調(diào)的方法,測試按鍵邏輯與LCD1602現(xiàn)實(shí)邏輯 在實(shí)際電路調(diào)試過程中,由于沒有深入的了解24l01的收發(fā)機(jī)制,導(dǎo)致第一次試驗(yàn)接收器,經(jīng)常接受到亂碼,系統(tǒng)不能正常工作。在查閱相關(guān)資料和優(yōu)化代碼后,以多次檢測接受數(shù)據(jù)的方法,成功解決了該問題。</p><p><b> 參考文獻(xiàn)</b></p><p> [1]郭
56、天祥 新概念51單片機(jī)c語言教程 北京: 電子工業(yè)出版社 2009</p><p> [2] 譚浩強(qiáng).C程序設(shè)計(jì)(第二版) [M] .北京:清華大學(xué)出版社,2006-01</p><p> [3] 潘永雄.新編單片機(jī)原理與應(yīng)用[M].西安電子科技大學(xué)出版社,2007-02,19~25,65~66</p><p> [4]祁偉,楊婷
57、 單片機(jī)C51程序設(shè)計(jì)教程與實(shí)驗(yàn) 北京:航空航天出版社 2006</p><p> [5]CNKI數(shù)據(jù)庫 http://www.cnki.net/</p><p> [6]無線電雜志 刊號 ISSN 0512-4174 北京盛通印刷股份有限公司</p><p> [7] 英慶,王代華,張志杰.基于nRF24L01的無線數(shù)據(jù)傳輸系統(tǒng)[J].現(xiàn)代電
58、子技術(shù),2008,31(7):68-82.</p><p> [8] 丁永紅,孫運(yùn)強(qiáng).基于nRF2401的無線數(shù)傳系統(tǒng)設(shè)計(jì)[J].國外電子測量技術(shù),2008,27(4):45-47.</p><p> [9] 時志云,蓋建平,王代華,等.新型高速無線射頻器件nRF24L01及其應(yīng)用[J].國外電子元器件,2007(8):42-44.</p><p> [10]
59、 康華光.電子技術(shù)基礎(chǔ)數(shù)字部分[M].第四版,北京:高等教育出版社,2000.</p><p><b> 附錄1 源程序清單</b></p><p> #include <reg52.h> </p><p> #include "nrf.h"</p><p> sbit key1=
60、P3^3;</p><p> sbit key2=P3^4;</p><p> sbit key3=P3^5;</p><p> sbit key4=P3^6;</p><p> sbit key5=P2^4;</p><p> sbit key6=P2^6;</p><p> sb
61、it key7=P2^5;</p><p> sbit key8=P2^7;</p><p> sbit led1=P2^0;</p><p> void left();</p><p> void right();</p><p> unsigned char RxBuf[20]={0},flag,flag
62、1,flag2;</p><p> void delay(unsigned int ms)</p><p><b> {</b></p><p> unsigned int i,j;</p><p> for(i=0; i<ms; i++)</p><p> for(j=0; i&
63、lt;110; i++);</p><p><b> }</b></p><p> unsigned char TxBuf[20]={0}; </p><p> void main()</p><p><b> {</b></p><p> init_NRF24
64、L01();</p><p> P2 = 0xff;</p><p> P3 = 0xff;</p><p><b> led1 = 0;</b></p><p> flag1 = 0;</p><p> flag3 = 0;</p><p> flag4 =
65、0;</p><p><b> while(1)</b></p><p><b> {</b></p><p> flag1 = 0;</p><p> if(key1 == 0 ) //前進(jìn)</p><p><b> {</b></p
66、><p><b> delay(5);</b></p><p> if(key1 == 0)</p><p><b> {</b></p><p> TxBuf[1] = 1;</p><p> nRF24L01_TxPacket(TxBuf);// Transmit
67、 Tx buffer data</p><p> TxBuf[1] = 0x00;</p><p> led1 = 1;</p><p><b> do{</b></p><p> if(key1==1)</p><p><b> {</b></p>
68、<p> TxBuf[2] = 1;</p><p> nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p> TxBuf[2] = 0x00;</p><p><b> led1 = 0;</b></p><p> flag1 =
69、 1;</p><p><b> }</b></p><p> if(key5 == 0)</p><p><b> {</b></p><p><b> delay(5);</b></p><p> flag2 = 0; </p>
70、<p> if(key5 == 0)</p><p><b> {</b></p><p> TxBuf[4] = 1;</p><p> nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p> TxBuf[4] = 0x00;&
71、lt;/p><p><b> do{</b></p><p> if(key5 == 1)</p><p><b> {</b></p><p> TxBuf[1] = 1;</p><p> nRF24L01_TxPacket(TxBuf);// Transmit
72、Tx buffer data</p><p> TxBuf[1] = 0x00;</p><p> flag2 = 1;</p><p><b> }</b></p><p> if(key1==1)</p><p><b> {</b></p>&l
73、t;p> TxBuf[2] = 1;</p><p> nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p> TxBuf[2] = 0x00;</p><p><b> led1 = 0;</b></p><p> flag1 = 1;
74、</p><p> flag2 = 1;</p><p><b> }</b></p><p> }while(flag2 == 0);</p><p><b> }</b></p><p><b> }</b></p><
75、p> if(key6 == 0)</p><p><b> {</b></p><p><b> delay(5);</b></p><p> flag2 = 0; </p><p> if(key6 == 0)</p><p><b> {<
76、;/b></p><p> TxBuf[5] = 1;</p><p> nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p> TxBuf[5] = 0x00;</p><p><b> do{</b></p><p&
77、gt; if(key6 == 1)</p><p><b> {</b></p><p> TxBuf[1] = 1;</p><p> nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p> TxBuf[1] = 0x00;</p>
78、;<p> flag2 = 1;</p><p><b> }</b></p><p> if(key1==1)</p><p><b> {</b></p><p> TxBuf[2] = 1;</p><p> nRF24L01_TxPacket
79、(TxBuf);// Transmit Tx buffer data</p><p> TxBuf[2] = 0x00;</p><p><b> led1 = 0;</b></p><p> flag1 = 1;</p><p> flag2 = 1;</p><p><b>
80、; }</b></p><p> }while(flag2 == 0);</p><p><b> }</b></p><p><b> }</b></p><p> }while(flag1 == 0);</p><p><b> }&l
81、t;/b></p><p><b> }</b></p><p> flag1 = 0;</p><p> if(key2 == 0 ) //前進(jìn)</p><p><b> {</b></p><p><b> delay(5);</b>
82、;</p><p> if(key2 == 0)</p><p><b> {</b></p><p> TxBuf[3] = 1;</p><p> nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p> TxBuf[
83、3] = 0x00;</p><p> led1 = 1;</p><p><b> do{</b></p><p> if(key2==1)</p><p><b> {</b></p><p> TxBuf[2] = 1;</p><p&g
84、t; nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p> TxBuf[2] = 0x00;</p><p><b> led1 = 0;</b></p><p> flag1 = 1;</p><p><b> }</b&g
85、t;</p><p> if(key5 == 0)</p><p><b> {</b></p><p><b> delay(5);</b></p><p> flag2 = 0; </p><p> if(key5 == 0)</p><p&
86、gt;<b> {</b></p><p> TxBuf[6] = 1;</p><p> nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p> TxBuf[6] = 0x00;</p><p><b> do{</b>
87、</p><p> if(key5 == 1)</p><p><b> {</b></p><p> TxBuf[3] = 1;</p><p> nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p> TxBuf[3
88、] = 0x00;</p><p> flag2 = 1;</p><p><b> }</b></p><p> if(key2==1)</p><p><b> {</b></p><p> TxBuf[2] = 1;</p><p>
89、 nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p> TxBuf[2] = 0x00;</p><p><b> led1 = 0;</b></p><p> flag1 = 1;</p><p> flag2 = 1;</p>
90、<p><b> }</b></p><p> }while(flag2 == 0);</p><p><b> }</b></p><p><b> }</b></p><p> if(key6 == 0)</p><p><
91、;b> {</b></p><p><b> delay(5);</b></p><p> flag2 = 0; </p><p> if(key6 == 0)</p><p><b> {</b></p><p> TxBuf[7] = 1;&
92、lt;/p><p> nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p> TxBuf[7] = 0x00;</p><p><b> do{</b></p><p> if(key6 == 1)</p><p><b
93、> {</b></p><p> TxBuf[3] = 1;</p><p> nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p> TxBuf[3] = 0x00;</p><p> flag2 = 1;</p><p>
94、;<b> }</b></p><p> if(key2==1)</p><p><b> {</b></p><p> TxBuf[2] = 1;</p><p> nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p>
95、;<p> TxBuf[2] = 0x00;</p><p><b> led1 = 0;</b></p><p> flag1 = 1;</p><p> flag2 = 1;</p><p><b> }</b></p><p> }while(
96、flag2 == 0);</p><p><b> }</b></p><p><b> }</b></p><p> }while(flag1 == 0);</p><p><b> }</b></p><p><b> }<
97、;/b></p><p> if(key3 == 0)</p><p><b> {</b></p><p><b> delay(3);</b></p><p> if(key3 == 0)</p><p><b> {</b><
98、/p><p> TxBuf[8] = 1;</p><p> nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p> TxBuf[8] = 0x00;</p><p> while(!key3);</p><p> TxBuf[9] = 1;&l
99、t;/p><p> nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p> TxBuf[9] = 0x00;</p><p><b> }</b></p><p><b> } </b></p><p>
100、 if(key4 == 0)</p><p><b> {</b></p><p><b> delay(3);</b></p><p> if(key4 == 0)</p><p><b> {</b></p><p> TxBuf[10]
101、 = 1;</p><p> nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p> TxBuf[10] = 0x00;</p><p> while(!key4);</p><p> TxBuf[11] = 1;</p><p> nRF2
102、4L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p> TxBuf[11] = 0x00;</p><p><b> }</b></p><p><b> } </b></p><p> if(key7 == 0 &&
103、; flag3 ==0 ) //前進(jìn)</p><p><b> {</b></p><p><b> delay(5);</b></p><p> if(key7 == 0)</p><p><b> {</b></p><p> TxBuf
104、[12] = 1;</p><p> nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p> TxBuf[12] = 0x00;</p><p><b> led1 = 1;</b></p><p> flag3 = 1;</p>
105、<p><b> }</b></p><p><b> }</b></p><p> if(key7 == 1&& flag3 == 1)</p><p><b> {</b></p><p> TxBuf[13] = 1;</p&g
106、t;<p> nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p> TxBuf[13] = 0x00;</p><p> flag3 = 0;</p><p><b> }</b></p><p> if(key8 == 0 &
107、amp;& flag4 ==0 ) //前進(jìn)</p><p><b> {</b></p><p><b> delay(5);</b></p><p> if(key8 == 0)</p><p><b> {</b></p><p>
108、; TxBuf[14] = 1;</p><p> nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p> TxBuf[14] = 0x00;</p><p><b> led1 = 1;</b></p><p> flag4 = 1;<
109、;/p><p><b> }</b></p><p><b> }</b></p><p> if(key8 == 1&& flag4 == 1)</p><p><b> {</b></p><p> TxBuf[15] = 1;
110、</p><p> nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p> TxBuf[15] = 0x00;</p><p> flag4 = 0;</p><p><b> }</b></p><p><b>
111、; }</b></p><p><b> }</b></p><p> #include <reg52.h> </p><p> #include "nrf.h"</p><p> unsigned char RxBuf[20]={0};</p><
112、;p> //八拍方式驅(qū)動,順序?yàn)锳 AB B BC C CD D DA</p><p> unsigned char code clockWise[]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}; </p><p> unsigned char speed=5,j,i; //步進(jìn)電機(jī)的轉(zhuǎn)速</p><p> u
113、nsigned int D,T,speeda,speedb; </p><p> sbit ena = P3^3;</p><p> sbit enb = P1^3;</p><p> sbit in1 = P3^7;</p><p> sbit in2 = P3^6;</p><p> sbit in3 =
114、 P3^5;</p><p> sbit in4 = P3^4;</p><p> sbit led1= P1^7;</p><p> sbit fengshan = P0^1;</p><p> sbit shuibong = P0^0;</p><p> void stepper_motor_left()
115、;</p><p> void stepper_motor_right(); //步進(jìn)電機(jī)右轉(zhuǎn)</p><p> void delay(unsigned int ms)</p><p><b> {</b></p><p> unsigned int i,j;</p><p> for
116、(i=0; i<ms; i++)</p><p> for(j=0; j<110; j++);</p><p><b> }</b></p><p> void main()</p><p><b> {</b></p><p> TMOD=0x10;/
117、/設(shè)置定時器1,定時器1為工作方式1</p><p> TH1=(65536-100)/256;</p><p> TL1=(65536-100)%256;</p><p> EA=0;//開總中斷</p><p><b> ET1=0;</b></p><p> TR1=0;//啟動定
118、時器1</p><p> IT0=1;//低電平觸發(fā)</p><p> EX0=1;//允許中斷 </p><p><b> ena=1;</b></p><p><b> enb=1;</b></p><p><b> in1=0;</b&g
119、t;</p><p><b> in2=0;</b></p><p><b> in3=0;</b></p><p><b> in4=0;</b></p><p><b> speeda=0;</b></p><p>&l
120、t;b> speedb=0;</b></p><p> P0 = 0xff;</p><p> init_NRF24L01();</p><p> SetRX_Mode(); </p><p><b> led1 = 0;</b></p><p> shuibong=
121、0;</p><p> fengshan=0;</p><p><b> while(1)</b></p><p><b> {</b></p><p> SetRX_Mode(); </p><p> nRF24L01_RxPacket(RxBuf); <
122、/p><p> if(RxBuf[1]==1) </p><p><b> {</b></p><p> in1=0; in2=1;</p><p> in3=0; in4=1;</p><p> RxBuf[1]=0; </p><p><b>
123、led1 = 1;</b></p><p><b> }</b></p><p> if(RxBuf[2]==1) </p><p><b> {</b></p><p> in1=0; in2=0;</p><p> in3=0; in4=0;&l
124、t;/p><p> RxBuf[2]=0;</p><p> led1 = 0; </p><p><b> }</b></p><p> if(RxBuf[3]==1) </p><p><b> {</b></p><p> in1=
125、1; in2=0;</p><p> in3=1; in4=0;</p><p> RxBuf[3]=0; </p><p> led1 = 1; </p><p><b> }</b></p><p> if(RxBuf[4]==1) </p><p>&
126、lt;b> {</b></p><p> in1=0; in2=0;</p><p> in3=0; in4=1;</p><p> RxBuf[4]=0; </p><p> led1 = 1; </p><p><b> }</b></p><
127、;p> if(RxBuf[5]==1) </p><p><b> {</b></p><p> in1=0; in2=1;</p><p> in3=0; in4=0;</p><p> RxBuf[5]=0;</p><p> led1 = 1; </p>
128、<p><b> }</b></p><p> if(RxBuf[6]==1) </p><p><b> {</b></p><p> in1=0; in2=0;</p><p> in3=1; in4=0;</p><p> RxBuf[6]
129、=0; </p><p> led1 = 1; </p><p><b> }</b></p><p> if(RxBuf[7]==1) </p><p><b> {</b></p><p> in1=1; in2=0;</p><p&g
130、t; in3=0; in4=0;</p><p> RxBuf[7]=0; </p><p> led1 = 1; </p><p><b> }</b></p><p> if(RxBuf[8]==1) </p><p><b> {</b></p&
131、gt;<p><b> do</b></p><p><b> {</b></p><p> SetRX_Mode(); </p><p> nRF24L01_RxPacket(RxBuf); </p><p> stepper_motor_left();</p>
132、<p> }while(RxBuf[9]==0);</p><p> RxBuf[8]=0;</p><p> RxBuf[9]=0; </p><p> led1 = 1; </p><p><b> }</b></p><p> if(RxBuf[10]==1)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)論文——新型消防車的研究
- 搶險救援消防車懸架系統(tǒng)設(shè)計(jì) ——畢業(yè)論文
- 電動車消防車總體設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 無線遙控車畢業(yè)論文
- 消防車fireengine
- 畢業(yè)論文——無線語音遙控智能車
- 畢業(yè)論文——無線語音遙控智能車
- 壓縮消防車最小轉(zhuǎn)彎半徑_消防車
- 泰山區(qū)消防大隊(duì)云梯消防車及主戰(zhàn)消防車采購項(xiàng)目
- 高空消防車支承系統(tǒng)設(shè)計(jì).pdf
- 邢臺消防支隊(duì)消防車輛供氣消防車采購項(xiàng)目
- gb7956.2-2014 消防車 第2部分 水罐消防車
- 泡沫消防車的結(jié)構(gòu)
- 舉高噴射消防車要求
- 高空救援消防車的設(shè)計(jì)研究.pdf
- 消防車道和隱形消防車道設(shè)計(jì)
- 紅外遙控汽車設(shè)計(jì)畢業(yè)論文
- 輕型救援巡邏消防車設(shè)計(jì)探索.pdf
- 電動消防車參數(shù)及配置
- 寧陽鄉(xiāng)鎮(zhèn)消防隊(duì)消防車采購
評論
0/150
提交評論