簡易無線遙控系統(tǒng)_第1頁
簡易無線遙控系統(tǒng)_第2頁
簡易無線遙控系統(tǒng)_第3頁
簡易無線遙控系統(tǒng)_第4頁
簡易無線遙控系統(tǒng)_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、電子信息系統(tǒng)設計實驗報告-簡易無線遙控系統(tǒng)姓名:杜*學號:*1524*班級:*級電子信息工程C班一、 設計要求:一) 設計任務:設計并制作一個簡易無線遙控系統(tǒng)。二)要求:1、系統(tǒng)由一臺發(fā)射機和一臺接收機組成,采用單片機(或FPGA、CPLD)作為主控制器;2、發(fā)射機設有5個按鍵(例如:上、下、左、右、確認),當按鍵按下時,發(fā)出對應的編碼信號并給出聲或光提示,采用兩節(jié)電池供電(3V);3、接收機能夠接收發(fā)射機的編碼信號并解碼,采用一位LED數(shù)碼管顯示對應按鈕的信息(顯示圖形自定)并給出聲音提示,自制電源;4、遙控距離不低于5米,無線信道自定(如:紅外、射頻等);5、發(fā)揮部分:增加省電功能;增加抗

2、干擾能力,提高可靠性。二、系統(tǒng)設計:一) 系統(tǒng)組成框圖:電源部分聲音提示部分圖形顯示部分AT89C2051單片機nRF24L01模塊nRF24L01模塊AT89C2051單片機電源部分指示部分按鍵部分發(fā)射部分: 接收部分: 無線信道二) 系統(tǒng)各部分的功能與作用:1、按鍵部分:發(fā)射信號;2、指示部分:負責指示按下的對應按鍵;3、單片機部分:整個系統(tǒng)設計的核心,負責信號的輸入識別與輸出控制;4、nRF24L01模塊:負責無線射頻信號的調(diào)制和發(fā)射、通過無線信道的無線射頻信號的接收和解調(diào);5、圖形顯示部分:負責指示收到的信號信息;6、聲音提示部分:負責提示收到無線射頻信號;7、電源部分:負責提供整個系

3、統(tǒng)的能源。三)系統(tǒng)實現(xiàn)的基本原理:1、發(fā)射部分:單片機作為系統(tǒng)的控制核心,控制nRF24L01的內(nèi)部寄存器,是模塊正常工作。當有按鍵按下時,單片機將對應的按鍵信息進行編碼,通過SPI口傳給nRF24L01,nRF24L01接收到編碼之后,通過無線信道自動發(fā)送無線射頻信號,當接收到來自接收部分的nRF24L01的編碼信號時,則確定此次通信成功,否則失敗。2、接收部分:當nRF24L01接收到來自發(fā)射部分的信號時,檢測發(fā)射信號的頻率,符合要求則發(fā)射一個應答信號給發(fā)射部分的nRF24L01,確定本次通信發(fā)射信號的成功。接著,接受部分的nRF24L01解調(diào)接收到的信號后,產(chǎn)生一個中斷表示接收到一個有效

4、信號,此時單片機開始讀取nRF24L01內(nèi)部存儲的有效信號,進而驅(qū)動顯示部分的數(shù)碼管顯示相應的圖案,并驅(qū)動蜂鳴器工作。就這樣實現(xiàn)了一次的發(fā)射與接收的無線通信。三、電路工作原理:一)發(fā)射部分:1、單片機控制部分:單片機P1口輸出高電平,當有按鍵按下的時候,相應的IO口會被下拉成低電平,與此同時,對應相連的LED由VCC通過限流電阻到地導通發(fā)亮,限流電阻采用470歐姆。單片機的最小系統(tǒng)圖如下,采用上電復位的方法實現(xiàn)復位:2、按鍵部分和LED指示燈部分的接法:3、nRF24.L01模塊:nRF24L01是一款新型單片射頻收發(fā)器件,工作于2.4 GHz2.5 GHz ISM頻段,它的封裝及引腳排列如圖

5、所示。各引腳功能如下:CE:使能發(fā)射或接收; CSN,SCK,MOSI,MISO:SPI引腳端,微處理器可通過此引腳配置nRF24L01: IRQ:中斷標志位; VDD:電源輸入端;VSS:電源地: XC2,XC1:晶體振蕩器引腳; VDD_PA:為功率放大器供電,輸出為1.8 V; ANT1,ANT2:天線接口; IREF:參考電流輸入。nRF24L01主要通過CE ,CSN,SCK,MOSI,MISO,GND,VCC,IRQ同外界通信:二)接收部分:1、單片機最小系統(tǒng)與nRF24L01模塊:單片機的最小系統(tǒng)以及與nRF24L01的接口是和發(fā)射部分是一致的,復位電容10uF,復位電阻10k,

6、晶振采用12MHz,補償電容30pF。2、數(shù)碼管顯示和蜂鳴器與單片機的接法:如下圖所示采用的是共陰數(shù)碼管,當單片機引腳輸出高電平的時候,對應的段亮起,為增強亮度,在單片機的IO口接一個上拉的排阻,大小470歐姆。蜂鳴器需要一個晶體管的驅(qū)動,采用的是S9013晶體管,當P3.7輸出高電平時,晶體管導通,蜂鳴器鳴響,蜂鳴器采用有源蜂鳴器,上電長響。三) 仿真結(jié)果 1、SPI讀時序: 2、SPI寫時序四、 軟件設計1、主要的軟件模塊:主函數(shù)main.c:程序入口,系統(tǒng)運行的主干;nRF.c: 對nRF24L01的所有讀寫操作,配置nRF24L01;SPI.c:SPI的底層通信協(xié)議。nRF.h:nRF

7、.c對應的頭文件,包含nRF24L01的指令和寄存器地址信息。開始 2、流程圖是否收到應答信號判斷是哪個按鍵按下,并發(fā)送相應的編碼。發(fā)送失敗,設置nRF為待機模式是否為抖動延時消抖是否有按鍵按下?設置nRF為發(fā)送模式,并待機上電復位,配置單片機,配置nRF24L01是否松開過發(fā)送成功,設置nRF為待機模式1)發(fā)射部分: 否 否 否 否2)發(fā)射部分:3) 接受中斷服務程序流程圖:五、測試結(jié)果:測試儀器:做好的無線收發(fā)系統(tǒng);測試方法:發(fā)射接收部分上電,間隔不同的距離,按下發(fā)送端的不同按鈕,看收發(fā)端的測試結(jié)果是否與預期的一致。測試結(jié)果:距離上方向鍵下方向鍵左方向鍵右方向鍵確定鍵5m正常顯示鳴響正常顯

8、示鳴響正常顯示鳴響正常顯示鳴響正常顯示鳴響10m正常顯示鳴響正常顯示鳴響正常顯示鳴響正常顯示鳴響正常顯示鳴響15m正常顯示鳴響正常顯示鳴響正常顯示鳴響正常顯示鳴響正常顯示鳴響20m正常顯示鳴響正常顯示鳴響正常顯示鳴響正常顯示鳴響正常顯示鳴響測試結(jié)論:完成設計任務,并達到要求!六、個人總結(jié)根據(jù)課題要求,可以考慮到無線信道采用的技術(shù)是本次設計的關鍵,所以通過了解各種不用的無線信道技術(shù)包括紅外和射頻:紅外的特點,通信距離短,只能在接收頭發(fā)出的一個輻角范圍內(nèi)通信,且抗干擾能力較弱,但是成本較低;無線射頻的特點,通信距離遠,可以任意方向通信,通信距離遠,抗干擾能力強,具有自動應答功能,但是成本較高。為了

9、滿足高要求的調(diào)整要求,所以最后采用無線射頻。同時這在現(xiàn)實生活中使用也更廣泛。其他的設計內(nèi)容就是一如往常的了:畫原理圖、畫PCB、腐蝕焊接、調(diào)試。由于使用了nRF24L01,所以認真學習了一下這個模塊的特點和應用,很好的利用它來使整個系統(tǒng)的實現(xiàn)非常簡單方便。七、參考文獻 1、nRF24L01說明書/2008-12-20;2、單片機技術(shù)基礎八、附錄 1、nRF24L01的功能介紹:1)模式選擇: 2)指令格式:2、整體電路原理圖: 1)發(fā)射部分:2)接收部分3、PCB版圖 1)發(fā)射部分:2)接收部分:4、程序源代碼 1)發(fā)射部分程序: Main.c:#include <AT892051.H&

10、gt;#include <intrins.h>#include "nRF.h"#define DATA_WIDTH 1 /注意和文件nRF.c中定義的保持一致!/*函數(shù)和全局變量聲明:來自源文件nRF.c*/extern uchar TX_BufDATA_WIDTH;extern uchar RX_BufDATA_WIDTH;bit flag=0;extern void Init_nRF(void);extern void TX_Mode(void);extern void Write_TX_Data(void);extern uchar ReadConfigR

11、eg(uchar RegAddr);void Delay5ms(void) /按鍵消抖延時程序 uchar i,j,k; for(i=5;i>0;i-) for(j=4;j>0;j-) for(k=124;k>0;k-); void Init_MCU()EA=0;EX1=0;EX0=1;IT0=1;void ButtonDown() P1=0xff;_nop_();_nop_();if(P1=0xff) flag=0;return;else /有按鍵按下Delay5ms();if(P1=0xff) flag=0;return;else if(flag=0) /確定是按鍵穩(wěn)定按

12、下flag=1;switch(P1)case 0x7f: /上TX_Buf0=0x11;break;case 0xbf: /下TX_Buf0=0x22;break;case 0xdf: /左TX_Buf0=0x33;break;case 0xef: /右TX_Buf0=0x44;break;case 0xf7: /確定TX_Buf0=0x55;break;default:TX_Buf0=0x00;break;Write_TX_Data(); CE=1; /發(fā)送數(shù)據(jù)/*主函數(shù)入口*/void main()Init_MCU();Init_nRF();TX_Mode(); /設置本機為發(fā)送端EA=1

13、;/P1=ReadConfigReg(EN_AA);/P1=P1<<4;while(1)ButtonDown();nRF.c:/* 對象:nRF24L01*/#include<AT892051.H>#include "nRF.h"#define DATA_WIDTH 1 /定義收發(fā)數(shù)據(jù)寬度const uchar P0_Addr=0xe7,0xe7,0xe7,0xe7,0xe7; /通道0:五字節(jié)地址寬度const uchar P1_Addr=0xc2,0xc2,0xc2,0xc2,0xc2; /通道15,由左到右:低字節(jié)高字節(jié)const uchar

14、P2_Addr=0xc3,0xc2,0xc2,0xc2,0xc2;const uchar P3_Addr=0xc4,0xc2,0xc2,0xc2,0xc2;const uchar P4_Addr=0xc5,0xc2,0xc2,0xc2,0xc2;const uchar P5_Addr=0xc6,0xc2,0xc2,0xc2,0xc2;uchar TX_BufDATA_WIDTH; /將要發(fā)送的數(shù)據(jù)緩存區(qū)uchar RX_BufDATA_WIDTH; /接收的數(shù)據(jù)緩存區(qū)uchar cnt=0;/*函數(shù)聲明:來自源文件SPI.c*/extern uchar WriteCommand(uchar D

15、at);extern void WriteByte(uchar Dat);extern uchar ReadByte(void);/* 寫配置寄存器*/void WriteConfigReg(uchar RegAddr,uchar Dat)/寫配置寄存器(除“設置收發(fā)地址寄存器”外,即多字節(jié)寄存器)CSN=0;WriteCommand(WRITE_CONFIG_REG|RegAddr);WriteByte(Dat);CSN=1; void Set_TX_Addr() /設置發(fā)送地址CSN=0;WriteCommand(WRITE_CONFIG_REG|TX_ADDR);/設置發(fā)送地址與P0通道

16、接收地址一致for(cnt=0;cnt<5;cnt+)WriteByte(P0_Addrcnt);CSN=1;void Set_RX_Addr(uchar channel)/設置接收地址uchar *p,RegAddr;switch(channel)case 0:RegAddr=RX_ADDR_P0; p=P0_Addr;break; case 1:RegAddr=RX_ADDR_P1; p=P1_Addr;break;case 2:RegAddr=RX_ADDR_P2; p=P2_Addr;break;case 3:RegAddr=RX_ADDR_P3; p=P3_Addr;break

17、;case 4:RegAddr=RX_ADDR_P4; p=P4_Addr;break;case 5:RegAddr=RX_ADDR_P5; p=P5_Addr;break;default:break;CSN=0;WriteCommand(WRITE_CONFIG_REG|RegAddr);for(cnt=0;cnt<5;cnt+)WriteByte(*p+);CSN=1;/* 讀配置寄存器*/uchar ReadConfigReg(uchar RegAddr)/讀配置寄存器(除“設置收發(fā)地址寄存器”外,即多字節(jié)寄存器) uchar Dat;CSN=0;WriteCommand(READ

18、_CONFIG_REG|RegAddr);Dat=ReadByte();CSN=1;return Dat;/* 寫入將要發(fā)送的數(shù)據(jù)*/void Write_TX_Data()CSN=0;WriteCommand(WRITE_TX_FIFO);for(cnt=0;cnt<DATA_WIDTH;cnt+)WriteByte(TX_Bufcnt);CSN=1;/* 讀出接收的數(shù)據(jù)*/void Read_RX_Data()CSN=0;WriteCommand(READ_RX_FIFO);for(cnt=0;cnt<DATA_WIDTH;cnt+)RX_Bufcnt=ReadByte();C

19、SN=1;/* nRF初始化*/void Init_nRF()CE=0;SCK=0;CSN=1;IRQ=1;WriteConfigReg(EN_AA,0x01); /只有通道0自動應答允許WriteConfigReg(EN_RXADDR,0x01); /只有通道0接收允許WriteConfigReg(SETUP_AW,0x03); /收發(fā)地址寬度為5字節(jié)WriteConfigReg(SETUP_RETR,0x15); /自動重發(fā)延時500+86us,10次自動重發(fā)WriteConfigReg(RF_CH,40); /設置通道頻率WriteConfigReg(RF_SETUP,0x07); /0

20、dB,2MbpsSet_RX_Addr(0); /設置各個通道接收地址Set_RX_Addr(1);Set_RX_Addr(2);Set_RX_Addr(3);Set_RX_Addr(4);Set_RX_Addr(5);Set_TX_Addr(); /設置發(fā)送地址與通道0的接收地址一致WriteConfigReg(RX_PW_P0,DATA_WIDTH); /設置各個通道的數(shù)據(jù)寬度為1字節(jié)WriteConfigReg(RX_PW_P1,DATA_WIDTH);WriteConfigReg(RX_PW_P2,DATA_WIDTH);WriteConfigReg(RX_PW_P3,DATA_WID

21、TH);WriteConfigReg(RX_PW_P4,DATA_WIDTH);WriteConfigReg(RX_PW_P5,DATA_WIDTH);/* 設置本機為發(fā)送模式,并發(fā)送一次數(shù)據(jù)*/void TX_Mode()CE=0;WriteConfigReg(CONFIG,0x0e); /不屏蔽中斷、發(fā)送模式、16位CRC校驗位Write_TX_Data(); /發(fā)送數(shù)據(jù)CE=1;/* 中斷處理IRQ*/void IRQ_Handle() interrupt 0uchar Dat;EA=0;Dat=ReadConfigReg(STATUS); /讀狀態(tài)寄存器if(Dat&0x40)

22、=0x40) /接收完中斷Read_RX_Data();else if(Dat&0x20)=0x20) /發(fā)送完中斷CE=0; /進入待機模式Ielse if(Dat&0x01)=0x01) /重發(fā)次數(shù)滿中斷CSN=0;WriteCommand(FLUSH_TX); /清除TX FIFO中的數(shù)據(jù)CSN=1;CE=0; /進入待機模式IWriteConfigReg(STATUS,Dat); /清除中斷標志位,使IRQ拉高EA=1;SPI.c:/* SPI底層協(xié)議*/#include<AT892051.H>#include<intrins.h> #inclu

23、de "nRF.h"/向nRF寫進去指令uchar WriteCommand(uchar Dat)uchar cnt;for(cnt=0;cnt<8;cnt+)MOSI=(Dat&0x80);Dat<<=1;_nop_();_nop_();_nop_();SCK=1;_nop_();_nop_();_nop_();if(MISO=1) Dat|=0x01;SCK=0;return Dat;/向nRF寫進去一個字節(jié)void WriteByte(uchar Dat) uchar cnt;for(cnt=0;cnt<8;cnt+)MOSI=(Dat

24、&0x80);Dat<<=1;_nop_();_nop_();_nop_();SCK=1;_nop_();_nop_();_nop_();SCK=0;/從nRF讀出一個字節(jié)uchar ReadByte() uchar cnt;uchar Dat=0x00;for(cnt=0;cnt<8;cnt+)SCK=1;Dat<<=1;if(MISO=1) Dat|=0x01;_nop_();_nop_();SCK=0;_nop_();_nop_();_nop_();_nop_();return Dat;nRF.h:#ifndef _nRF_#define _nRF-

25、#endif#define uchar unsigned char#define uint unsigned int/定義各個控制引腳sbit CE=P30;sbit CSN=P31;sbit SCK=P33;sbit MOSI=P34;sbit MISO=P35;sbit IRQ=P32; /指令#define READ_CONFIG_REG 0x00 / 讀配置寄存器#define WRITE_CONFIG_REG 0x20 / 寫配置寄存器#define READ_RX_FIFO 0x61 / 讀接收的數(shù)據(jù)#define WRITE_TX_FIFO 0xA0 / 寫將要發(fā)送的數(shù)據(jù)#def

26、ine FLUSH_TX 0xE1 / 清除 TX FIFO 寄存器的數(shù)據(jù)#define FLUSH_RX 0xE2 / 清除 RX FIFO 寄存器的數(shù)據(jù)#define REUSE_TX_PL 0xE3 / Define reuse TX payload register command#define NOP 0xFF / Define No Operation, might be used to read status register/配置寄存器地址#define CONFIG 0x00 / 設置可屏蔽中斷、工作模式、CRC校驗的位數(shù)#define EN_AA 0x01 / 設置各個通道

27、是否為自動應答#define EN_RXADDR 0x02 / 設置各個通道是否允許接收數(shù)據(jù)#define SETUP_AW 0x03 / 設置收、發(fā)地址的寬度#define SETUP_RETR 0x04 / 設置自動重發(fā)的時間間隔和自動重發(fā)的最大次數(shù)#define RF_CH 0x05 / 設置通道頻率#define RF_SETUP 0x06 / 設置數(shù)據(jù)傳輸率和發(fā)射功率#define STATUS 0x07 / 狀態(tài)寄存器:中斷標志、接收數(shù)據(jù)的通道號、TX FIFO滿標志#define OBSERVE_TX 0x08 / 'Observe TX' register address#define CD 0x09 / 'Carrier Detect' register address#define RX_ADDR_P0 0x0A / 設置各個通道的接收地址#define RX_ADDR_P1 0x0B / #define RX_ADDR_P2 0x0C / #define RX_ADDR_P3

溫馨提示

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

評論

0/150

提交評論