简易无线遥控系统_第1页
简易无线遥控系统_第2页
简易无线遥控系统_第3页
简易无线遥控系统_第4页
简易无线遥控系统_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、电子信息系统设计实验报告-简易无线遥控系统姓名:杜*学号:*1524*班级:*级电子信息工程C班设计要求:设计任务:设计并制作一个简易无线遥控系统。二)要求:1、系统由一台发射机和一台接收机组成,采用单片机(或FPGA、CPLD)作为主控制器;2、发射机设有5个按键(例如:上、下、左、右、确认),当按键按下时,发出对应的编码信号并给出声或光提示,采用两节电池供电(3V);3、接收机能够接收发射机的编码信号并解码,采用一位LED数码管显示对应按钮的信息(显示图形自定)并给出声音提示,自制电源;4、遥控距离不低于5米,无线信道自定(如:红外、射频等);5、发挥部分:增加省电功能;增加抗干扰能力,提

2、高可靠性。二、系统设计:一) 系统组成框图:电源部分声音提示部分图形显示部分AT89C2051单片机nRF24L01模块nRF24L01模块AT89C2051单片机电源部分指示部分按键部分发射部分: 接收部分:电源部分声音提示部分图形显示部分AT89C2051单片机nRF24L01模块nRF24L01模块AT89C2051单片机电源部分指示部分按键部分 无线信道系统各部分的功能与作用:1、按键部分:发射信号;2、指示部分:负责指示按下的对应按键;3、单片机部分:整个系统设计的核心,负责信号的输入识别与输出控制;4、nRF24L01模块:负责无线射频信号的调制和发射、通过无线信道的无线射频信号的

3、接收和解调;5、图形显示部分:负责指示收到的信号信息;6、声音提示部分:负责提示收到无线射频信号;7、电源部分:负责提供整个系统的能源。三)系统实现的基本原理:1、发射部分:单片机作为系统的控制核心,控制nRF24L01的内部寄存器,是模块正常工作。当有按键按下时,单片机将对应的按键信息进行编码,通过SPI口传给nRF24L01,nRF24L01接收到编码之后,通过无线信道自动发送无线射频信号,当接收到来自接收部分的nRF24L01的编码信号时,则确定此次通信成功,否则失败。2、接收部分:当nRF24L01接收到来自发射部分的信号时,检测发射信号的频率,符合要求则发射一个应答信号给发射部分的n

4、RF24L01,确定本次通信发射信号的成功。接着,接受部分的nRF24L01解调接收到的信号后,产生一个中断表示接收到一个有效信号,此时单片机开始读取nRF24L01内部存储的有效信号,进而驱动显示部分的数码管显示相应的图案,并驱动蜂鸣器工作。就这样实现了一次的发射与接收的无线通信。三、电路工作原理:一)发射部分:1、单片机控制部分:单片机P1口输出高电平,当有按键按下的时候,相应的IO口会被下拉成低电平,与此同时,对应相连的LED由VCC通过限流电阻到地导通发亮,限流电阻采用470欧姆。单片机的最小系统图如下,采用上电复位的方法实现复位:2、按键部分和LED指示灯部分的接法:3、nRF24.

5、L01模块:nRF24L01是一款新型单片射频收发器件,工作于2.4 GHz2.5 GHz ISM频段,它的封装及引脚排列如图所示。各引脚功能如下:CE:使能发射或接收; CSN,SCK,MOSI,MISO:SPI引脚端,HYPERLINK /view/1125.htm t _blank 微处理器可通过此引脚配置nRF24L01: IRQ:中断标志位; VDD:电源输入端;VSS:HYPERLINK /view/8503941.htm t _blank 电源地: XC2,XC1:晶体振荡器HYPERLINK /view/641241.htm t _blank 引脚; VDD_PA:为功率放大器

6、供电,输出为1.8 V; ANT1,ANT2:天线接口; IREF:参考电流输入。nRF24L01主要通过CE ,CSN,SCK,MOSI,MISO,GND,VCC,IRQ同外界通信:二)接收部分:1、单片机最小系统与nRF24L01模块:单片机的最小系统以及与nRF24L01的接口是和发射部分是一致的,复位电容10uF,复位电阻10k,晶振采用12MHz,补偿电容30pF。2、数码管显示和蜂鸣器与单片机的接法:如下图所示采用的是共阴数码管,当单片机引脚输出高电平的时候,对应的段亮起,为增强亮度,在单片机的IO口接一个上拉的排阻,大小470欧姆。蜂鸣器需要一个晶体管的驱动,采用的是S9013晶

7、体管,当P3.7输出高电平时,晶体管导通,蜂鸣器鸣响,蜂鸣器采用有源蜂鸣器,上电长响。仿真结果 1、SPI读时序: 2、SPI写时序软件设计1、主要的软件模块:主函数main.c:程序入口,系统运行的主干;nRF.c: 对nRF24L01的所有读写操作,配置nRF24L01;SPI.c:SPI的底层通信协议。nRF.h:nRF.c对应的头文件,包含nRF24L01的指令和寄存器地址信息。开始 2、流程图开始是否收到应答信号判断是哪个按键按下,并发送相应的编码。发送失败,设置nRF为待机模式是否为抖动延时消抖是否有按键按下?设置nRF为发送模式,并待机上电复位,配置单片机,配置nRF24L01是

8、否松开过发送成功,设置nRF为待机模式1)发射部分:是否收到应答信号判断是哪个按键按下,并发送相应的编码。发送失败,设置nRF为待机模式是否为抖动延时消抖是否有按键按下?设置nRF为发送模式,并待机上电复位,配置单片机,配置nRF24L01是否松开过发送成功,设置nRF为待机模式 否 否 否 否2)发射部分:接受中断服务程序流程图:五、测试结果:测试仪器:做好的无线收发系统;测试方法:发射接收部分上电,间隔不同的距离,按下发送端的不同按钮,看收发端的测试结果是否与预期的一致。测试结果:距离上方向键下方向键左方向键右方向键确定键5m正常显示鸣响正常显示鸣响正常显示鸣响正常显示鸣响正常显示鸣响10

9、m正常显示鸣响正常显示鸣响正常显示鸣响正常显示鸣响正常显示鸣响15m正常显示鸣响正常显示鸣响正常显示鸣响正常显示鸣响正常显示鸣响20m正常显示鸣响正常显示鸣响正常显示鸣响正常显示鸣响正常显示鸣响测试结论:完成设计任务,并达到要求!六、个人总结根据课题要求,可以考虑到无线信道采用的技术是本次设计的关键,所以通过了解各种不用的无线信道技术包括红外和射频:红外的特点,通信距离短,只能在接收头发出的一个辐角范围内通信,且抗干扰能力较弱,但是成本较低;无线射频的特点,通信距离远,可以任意方向通信,通信距离远,抗干扰能力强,具有自动应答功能,但是成本较高。为了满足高要求的调整要求,所以最后采用无线射频。同

10、时这在现实生活中使用也更广泛。其他的设计内容就是一如往常的了:画原理图、画PCB、腐蚀焊接、调试。由于使用了nRF24L01,所以认真学习了一下这个模块的特点和应用,很好的利用它来使整个系统的实现非常简单方便。七、参考文献 1、nRF24L01说明书/2008-12-20;2、单片机技术基础八、附录 1、nRF24L01的功能介绍:1)模式选择: 2)指令格式:2、整体电路原理图: 1)发射部分:2)接收部分3、PCB版图 1)发射部分:2)接收部分:4、程序源代码 1)发射部分程序: Main.c:#include #include #include nRF.h#define DATA_WI

11、DTH 1 /注意和文件nRF.c中定义的保持一致!/*函数和全局变量声明:来自源文件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 ReadConfigReg(uchar RegAddr);void Delay5ms(void) /按键消抖延时程序 uchar i,j,k; for(i=5;i

12、0;i-) for(j=4;j0;j-) for(k=124;k0;k-); void Init_MCU()EA=0;EX1=0;EX0=1;IT0=1;void ButtonDown() P1=0 xff;_nop_();_nop_();if(P1=0 xff) flag=0;return;else /有按键按下Delay5ms();if(P1=0 xff) flag=0;return;else if(flag=0) /确定是按键稳定按下flag=1;switch(P1)case 0 x7f: /上TX_Buf0=0 x11;break;case 0 xbf: /下TX_Buf0=0 x22

13、;break;case 0 xdf: /左TX_Buf0=0 x33;break;case 0 xef: /右TX_Buf0=0 x44;break;case 0 xf7: /确定TX_Buf0=0 x55;break;default:TX_Buf0=0 x00;break;Write_TX_Data(); CE=1; /发送数据/*主函数入口*/void main()Init_MCU();Init_nRF();TX_Mode(); /设置本机为发送端EA=1;/P1=ReadConfigReg(EN_AA);/P1=P14;while(1)ButtonDown();nRF.c:/* 对象:n

14、RF24L01*/#include#include nRF.h#define DATA_WIDTH 1 /定义收发数据宽度const uchar P0_Addr=0 xe7,0 xe7,0 xe7,0 xe7,0 xe7; /通道0:五字节地址宽度const uchar P1_Addr=0 xc2,0 xc2,0 xc2,0 xc2,0 xc2; /通道15,由左到右:低字节高字节const uchar P2_Addr=0 xc3,0 xc2,0 xc2,0 xc2,0 xc2;const uchar P3_Addr=0 xc4,0 xc2,0 xc2,0 xc2,0 xc2;const uc

15、har P4_Addr=0 xc5,0 xc2,0 xc2,0 xc2,0 xc2;const uchar P5_Addr=0 xc6,0 xc2,0 xc2,0 xc2,0 xc2;uchar TX_BufDATA_WIDTH; /将要发送的数据缓存区uchar RX_BufDATA_WIDTH; /接收的数据缓存区uchar cnt=0;/*函数声明:来自源文件SPI.c*/extern uchar WriteCommand(uchar Dat);extern void WriteByte(uchar Dat);extern uchar ReadByte(void);/* 写配置寄存器*/

16、void WriteConfigReg(uchar RegAddr,uchar Dat)/写配置寄存器(除“设置收发地址寄存器”外,即多字节寄存器)CSN=0;WriteCommand(WRITE_CONFIG_REG|RegAddr);WriteByte(Dat);CSN=1; void Set_TX_Addr() /设置发送地址CSN=0;WriteCommand(WRITE_CONFIG_REG|TX_ADDR);/设置发送地址与P0通道接收地址一致for(cnt=0;cnt5;cnt+)WriteByte(P0_Addrcnt);CSN=1;void Set_RX_Addr(uchar

17、 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;case 4:RegAddr=RX_ADDR_P4; p=P4_Addr;break;case 5:RegAddr=RX_ADDR_P5; p=P5_Addr

18、;break;default:break;CSN=0;WriteCommand(WRITE_CONFIG_REG|RegAddr);for(cnt=0;cnt5;cnt+)WriteByte(*p+);CSN=1;/* 读配置寄存器*/uchar ReadConfigReg(uchar RegAddr)/读配置寄存器(除“设置收发地址寄存器”外,即多字节寄存器) uchar Dat;CSN=0;WriteCommand(READ_CONFIG_REG|RegAddr);Dat=ReadByte();CSN=1;return Dat;/* 写入将要发送的数据*/void Write_TX_Dat

19、a()CSN=0;WriteCommand(WRITE_TX_FIFO);for(cnt=0;cntDATA_WIDTH;cnt+)WriteByte(TX_Bufcnt);CSN=1;/* 读出接收的数据*/void Read_RX_Data()CSN=0;WriteCommand(READ_RX_FIFO);for(cnt=0;cntDATA_WIDTH;cnt+)RX_Bufcnt=ReadByte();CSN=1;/* nRF初始化*/void Init_nRF()CE=0;SCK=0;CSN=1;IRQ=1;WriteConfigReg(EN_AA,0 x01); /只有通道0自动应

20、答允许WriteConfigReg(EN_RXADDR,0 x01); /只有通道0接收允许WriteConfigReg(SETUP_AW,0 x03); /收发地址宽度为5字节WriteConfigReg(SETUP_RETR,0 x15); /自动重发延时500+86us,10次自动重发WriteConfigReg(RF_CH,40); /设置通道频率WriteConfigReg(RF_SETUP,0 x07); /0dB,2MbpsSet_RX_Addr(0); /设置各个通道接收地址Set_RX_Addr(1);Set_RX_Addr(2);Set_RX_Addr(3);Set_RX_

21、Addr(4);Set_RX_Addr(5);Set_TX_Addr(); /设置发送地址与通道0的接收地址一致WriteConfigReg(RX_PW_P0,DATA_WIDTH); /设置各个通道的数据宽度为1字节WriteConfigReg(RX_PW_P1,DATA_WIDTH);WriteConfigReg(RX_PW_P2,DATA_WIDTH);WriteConfigReg(RX_PW_P3,DATA_WIDTH);WriteConfigReg(RX_PW_P4,DATA_WIDTH);WriteConfigReg(RX_PW_P5,DATA_WIDTH);/* 设置本机为发送模

22、式,并发送一次数据*/void TX_Mode()CE=0;WriteConfigReg(CONFIG,0 x0e); /不屏蔽中断、发送模式、16位CRC校验位Write_TX_Data(); /发送数据CE=1;/* 中断处理IRQ*/void IRQ_Handle() interrupt 0uchar Dat;EA=0;Dat=ReadConfigReg(STATUS); /读状态寄存器if(Dat&0 x40)=0 x40) /接收完中断Read_RX_Data();else if(Dat&0 x20)=0 x20) /发送完中断CE=0; /进入待机模式Ielse if(Dat&0

23、x01)=0 x01) /重发次数满中断CSN=0;WriteCommand(FLUSH_TX); /清除TX FIFO中的数据CSN=1;CE=0; /进入待机模式IWriteConfigReg(STATUS,Dat); /清除中断标志位,使IRQ拉高EA=1;SPI.c:/* SPI底层协议*/#include#include #include nRF.h/向nRF写进去指令uchar WriteCommand(uchar Dat)uchar cnt;for(cnt=0;cnt8;cnt+)MOSI=(Dat&0 x80);Dat=1;_nop_();_nop_();_nop_();SCK

24、=1;_nop_();_nop_();_nop_();if(MISO=1) Dat|=0 x01;SCK=0;return Dat;/向nRF写进去一个字节void WriteByte(uchar Dat) uchar cnt;for(cnt=0;cnt8;cnt+)MOSI=(Dat&0 x80);Dat=1;_nop_();_nop_();_nop_();SCK=1;_nop_();_nop_();_nop_();SCK=0;/从nRF读出一个字节uchar ReadByte() uchar cnt;uchar Dat=0 x00;for(cnt=0;cnt8;cnt+)SCK=1;Dat

25、=1;if(MISO=1) Dat|=0 x01;_nop_();_nop_();SCK=0;_nop_();_nop_();_nop_();_nop_();return Dat;nRF.h:#ifndef _nRF_#define _nRF-#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 0 x0

26、0 / 读配置寄存器#define WRITE_CONFIG_REG 0 x20 / 写配置寄存器#define READ_RX_FIFO 0 x61 / 读接收的数据#define WRITE_TX_FIFO 0 xA0 / 写将要发送的数据#define FLUSH_TX 0 xE1 / 清除 TX FIFO 寄存器的数据#define FLUSH_RX 0 xE2 / 清除 RX FIFO 寄存器的数据#define REUSE_TX_PL 0 xE3 / Define reuse TX payload register command#define NOP 0 xFF / Define

27、 No Operation, might be used to read status register/配置寄存器地址#define CONFIG 0 x00 / 设置可屏蔽中断、工作模式、CRC校验的位数#define EN_AA 0 x01 / 设置各个通道是否为自动应答#define EN_RXADDR 0 x02 / 设置各个通道是否允许接收数据#define SETUP_AW 0 x03 / 设置收、发地址的宽度#define SETUP_RETR 0 x04 / 设置自动重发的时间间隔和自动重发的最大次数#define RF_CH 0 x05 / 设置通道频率#define RF_SETUP 0 x06 / 设置数据传输率和发射功率#define STATUS 0 x07 / 状态寄存器:中断标志、接收数据的通道号、TX FIFO满标志#define OBSERVE_TX 0 x08 / Observe TX register address#define CD 0 x09 / Carrier Detect register address#define RX_ADDR_P0 0 x0A / 设置各个通道的接收地址#define RX_ADDR_P1 0 x0B / #define RX_ADDR_P2 0 x0C /

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论