无线收发系统设计.docx

上传人:小飞机 文档编号:5332297 上传时间:2023-06-26 格式:DOCX 页数:20 大小:184KB
返回 下载 相关 举报
无线收发系统设计.docx_第1页
第1页 / 共20页
无线收发系统设计.docx_第2页
第2页 / 共20页
无线收发系统设计.docx_第3页
第3页 / 共20页
无线收发系统设计.docx_第4页
第4页 / 共20页
无线收发系统设计.docx_第5页
第5页 / 共20页
亲,该文档总共20页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《无线收发系统设计.docx》由会员分享,可在线阅读,更多相关《无线收发系统设计.docx(20页珍藏版)》请在三一办公上搜索。

1、nRF2401无线收发系统设计一实验目的培养基本实验能力和工程实践能力,通过实验锻炼基本实验技能,使同学们掌握单片机 的基本工作原理和单片机系统应用设计的技能,掌握单片机的简单编程方法以及调试方法, 并能应用于电子系统设计中,提高同学们对综合电子系统的设计能力,加深对无线通信系统 理论知识的理解,增强工程实践能力,培养创新意识,提高分析问题和解决问题的能力。二实验基本要求(1)正确使用电子仪器;(2)根据项目设计要求能够进行单片机系统硬件电路设计和软件编程;(3)学会查阅接口电路手册和相关技术资料;(4)具有初步的单片机电路硬件和软件分析、寻找和排除常见故障的能力;(5)正确地记录实验数据和写

2、实验报告。三实验器材万能板、单片机、nRF2401无线收发模块、液晶屏、晶振、按键、发光二级管、开关、 电容、电阻、5V电源适配器、导线、万用表、电烙铁、焊锡。四GFSK调制解调原理4.1调制频移键控方式,幅度恒定不变的载波信号频率随着调制信号的信息状态而切换,通常采 用的是二进制频移键控,即载波信号频率随着数据信息码的“0”、“1”变化进行切换。根据 频率变化影响发射波形的方式,FSK信号在相邻的比特之间,呈现连续的相位或不连续的 相位。一种常见的二进制FSK信号产生方法是根据数据比特码是“0”还是“1”,在两个振 荡频率分别为f +匕和f -匕的振荡器间切换,这种FSK信号的表达式为:(二

3、进制1)(二进制0)S (t) = v (t)= 斐 cos 2兀(f + f )t0 t TFSK H V TcdbbS (t) = v (t)= 当 cos 房(f - f )t0 t TFSK L Tc db* bf和匕分别代表载波信号频率和恒定频率偏移,而Eb和二分别表示单比特能量和比 特周虹这种方法产生的波形在比特码“0”,“1”切换时刻是不连续的,这种不连续的相位 会造成诸如频谱扩展和传输差错等问题,信号的功率谱密度函数按照频率偏移的负二次幕衰 落,在无线系统中一般不采用这种FSK信号,而是使用信号波形对单一载波振荡器进行调 制,这样FSK信号可以表示如下:2nft + nh J

4、m(i )di c-8S (t) =,b cos l2nf t+0 (t)= ;b cos fsk q Tbc y Tb上式中,h是频率调制系数,定义为h = 2f /R,R为比特率,尽管调制波形m(t)在 “0”和“ 1”比特间转换时不连续,但是相位函数0(t)是与m(t)的积分成比例,所以是连续的,大部分信号能量集中在以载波频率为中心的主瓣范围,功率谱密度函数按照频率偏移 的负四次幕衰减。为了进一步减小信号的频谱旁瓣,可以在前加入一级高斯滤波器,高斯滤波器的传递函数为:兀2,exp 12,其中:k a 2 Ja 二In2 1r b+1x(t)-1-sin(2nft + 0 )b通过高斯滤波

5、,平缓了输入信号的相位变化,大大压缩了信号频谱的旁瓣。cos(2nft +0 )图1典型的GFSK调制输入信号x(t)是随机二进制信号形成的双极性方波,方波经高斯滤波器后是: g(t) = h(t)* n(t / T)式中*号表示线性卷积运算,矩形脉冲定义为:1/ T, |t| T/20, 其它-Qf2nB(t + T/2) k通过数学推导,得到的表达式可表示为:g(t)=2T Q 2nB式中Q定义为:Q(t)=8-e -T2/2dit 0; dly-) for(i=0; i0; dly-)LPin_RS = 0;LPin_RW = 1;LPin_E = 1;/指定最大超时时间,防止死循环/

6、RS置低,切换到命令字操作模式/ RW置高,切换到读取模式/ ELCD_Soft_Dly(LCD_Dly_Dat);isbusy = LPin_DB;LPin_E = 0;/ E置高,开始操作(读取操作时为高电平有效)/等待数据建立/读取忙标志(bit7=Busy)和当前指针(bit6:0=AC)置低,结束操作函数:LCD_Wait_Busy()描述:等待LCD空闲,只有在空闲状态下方可对LCD进行操作 参数:无void LCD_Wait_Busy(void)if(isbusy 0x80) break; / bit7=0=空闲,退出等待/ 函数:LCD_W_Reg()/描述:写LCD寄存器/参

7、数:dat待写入的数据void LCD_W_Reg(uint8 dat)LCD_Wait_Busy();/ 等待空闲LPin_RS = 0;/ RS置低,切换到命令字操作模式LPin_RW = 0;/ RW置低,切换到写入模式LPin_E = 1;/ E置高,开始操作LPin_DB = dat;/将数据输出到数据线上LCD_Soft_Dly(LCD_Dly_Dat);/ 等待数据建立LPin_E = 0;/ E置低,完成操作(写入操作时为下降沿有效) / 函数:LCD_W_Byte()/描述:向LCD写入1byte数据/参数:dat待写入的数据 void LCD_W_Byte(uint8 da

8、t)/等待空闲/ RS置高,切换到数据操作模式/ RW置低,切换到写入模式/ E置高,开始操作/ 将数据输出到数据线上/ 等待数据建立/ E置低,完成操作(写入操作时为下降沿有效)LCD_Wait_Busy();LPin_RS = 1;LPin_RW = 0;LPin_E = 1;LPin_DB = dat;LCD_Soft_Dly(LCD_Dly_Dat);LPin_E = 0;/ 函数:LCD_Init_Dev()/描述:LCD复位,注意该操作有固定顺序/参数:无void LCD_Init_Dev(void)LCD_Init_IO();LCD_W_Reg(0x38);LCD_Soft_Dl

9、y(500);/ 等待约 5msLCD_W_Reg(0x38);LCD_Soft_Dly(500);LCD_W_Reg(0x30);LCD_Soft_Dly(500);/ 8位数据总线宽度,两行字符,5x7点阵/显示关,光标不显示,光标不闪烁/清屏/显示光标右移,画面不滚动/ 显示开,光标不显示,光标不闪烁LCD_W_Reg(0x38);LCD_W_Reg(0x08);LCD_W_Reg(0x01);LCD_W_Reg(0x06);LCD_W_Reg(0x0C);/ 函数: LCD_Cls()/ 描述: 显示清屏/参数:无void LCD_Cls(void)LCD_W_Reg(0x01);/

10、清屏/ 函数:LCD_Set_Coor()/描述:指定显示坐标/参数:x列坐标(1602为0至15)/ y 行坐标(1602为0至1)void LCD_Set_Coor(uint8 x, uint8 y) if(y)x+=0x40;/在第二行的显示数据时,地址偏移0x40x+=0x80;/ 计算 DDRAM 地址(Display Data RAM)LCD_W_Reg(x);/ 写 AC(Address Counter)到 DDRAM 地址/ 函数:LCD_Print_Char()/描述:在指定位置显示一个字符/参数:x列坐标(1602为0至15)/y 行坐标(1602为0至1)/dat数据vo

11、id LCD_Print_Char(uint8 x, uint8 y, uint8 dat) LCD_Set_Coor(x,y);/ 指定显示坐标LCD_W_Byte(dat);/ 写入数据/ 函数: LCD_Print_Char()/描述:在指定位置显示一个字符串/参数:x列坐标(1602为0至15)/y行坐标(1602为0至1)/*s字符串首指针void LCD_Print_String(uint8 x, uint8 y, uint8 *s)LCD_Set_Coor(x,y);/ 指定显示坐标while(*s != 0)LCD_W_Byte(*s); s+;/ 写入数据#include S

12、TC89.H#include Type.h#include nRF24L01Ph”#define RF_CH 0#define RF_ADDR_WIDTH 5 15byte#define RF_DATA_WIDTH 5/ RF射频通道0125/ RF 地址宽度/ RF数据宽度132byteuint8 code n1P_RF_Addr5=0xBE,0xBD,0xBC,0xBB,0xBA;/ TX,RX 地址,可自行更改 uint8 n1P_RX_BuffRF_DATA_WIDTH=0,0,0,0,0;uint8 n1P_TX_BuffRF_DATA_WIDTH=K,E,Y,-,-/接收数据缓冲区

13、/发送数据缓冲区/ 函数:n1P_Init_IO()/描述:初始化IO/参数:无void n1P_Init_IO(void)nPin_CE = 0;nPin_CSN = 1;nPin_SCK = 0;/进入待机模式/ SPI禁止/ SPI时钟置低/函数:n1P_SPI_WR_Byte()描述:通过SPI写一个byte到nRF24L01+,同时从nRF24L01+读取一个byte参数:byte待写入字节数据return读取到的字节数据uint8 n1P_SPI_WR_Byte(uint8 byte)uint8 i;for(i=0; i8; i+)nPin_MOSI = (byte & 0x80)

14、;byte = 1;nPin_SCK = 1;MOSI读入1位数据,同时从MISO输出1位数据byte 1= nPin_MISO;nPin_SCK = 0;return(byte);/循环8次将byte最高位输出到MOSI低一位移位到最高位拉高 SCK,nRF24L01 从读MISO到byte最低位/ SCK置低返回读出的一字节/函数:n1P_SPI_W_Reg_Byte()描述:将val写入addr对应的寄存器地址,同时返回status字节参数:addr寄存器地址val待写入寄存器的数值return 返回status状态uint8 n1P_SPI_W_Reg_Byte(uint8 addr,

15、 uint8 val)uint8 status;nPin_CSN = 0;status = n1P_SPI_WR_Byte(addr);返回状态字n1P_SPI_WR_Byte(val);nPin_CSN = 1;return(status);/ CSN置低,开始传输数据/写入寄存器地址,同时/然后写数据到该寄存器/ CSN拉高,结束数据传输/ 返回状态寄存器/ 函数:n1P_SPI_W_Reg_Byte()/描述:读取addr所对应的寄存器地址/参数:addr寄存器地址/ return返回寄存器内的数值uint8 n1P_SPI_R_Reg_Byte(uint8 addr) uint8 va

16、l;nPin_CSN = 0;n1P_SPI_WR_Byte(addr);val = n1P_SPI_WR_Byte(0);nPin_CSN = 1;return(val);/ CSN置低,开始传输数据/ 写入寄存器地址/然后从该寄存器读数据/ CSN拉高,结束数据传输/ 返回寄存器数据/函数:n1P_SPI_W_Reg_Buff()描述:连续写入len个字节到addr指定的寄存器中,同时返回status状态字参数:cmd命令字*p待写入数据指针len待写入数据长度return 返回status状态uint8 n1P_SPI_W_Reg_Buff(uint8 cmd, uint8 *p, ui

17、nt8 len) uint8 status, i;nPin_CSN = 0;status = n1P_SPI_WR_Byte(cmd);状态字for(i=0; ilen; i+)n1P_SPI_WR_Byte(pi);nRF24L01+nPin_CSN = 1;return(status);/ CSN置低,开始传输数据/选择寄存器,同时返回/ 逐个字节写入/ CSN拉高,结束数据传输/ 返回状态寄存器/ 函数:n1P_SPI_W_Reg_Buff()/描述:连续写入len个字节到addr指定的寄存器中,同时返回status状态字参数:cmd命令字*p 待读取数据指针len待读取数据长度retu

18、rn 返回status状态uint8 n1P_SPI_R_Reg_Buff(uint8 cmd, uint8 *p, uint8 len) uint8 status, i;/ CSN置低,开始传输数据/选择寄存器,同时返回/逐个字节从nRF24L01+读出/ CSN拉高,结束数据传输/返回状态寄存器nPin_CSN = 0;status = n1P_SPI_WR_Byte(cmd);状态字for(i=0; ilen; i+)pi = n1P_SPI_WR_Byte(0);nPin_CSN = 1;return(status);/函数:n1P_Turn_RX()描述:初始化nRF24L01+,并

19、将其转换为接收状态参数:无void n1P_Turn_RX(void) nPin_CE = 0;/ CE置低,进入待机模式n1P_SPI_W_Reg_Buff(nCMD_W_REGISTER I nREG_RX_ADDR_P0, n1P_RF_Addr, RF_ADDR_WIDTH);/ 设置 RX 通道 0 地址n1P_SPI_W_Reg_Byte(nCMD_W_REGISTER I nREG_SETUP_AW, nRCD_AW_5byte);/设置RX地址宽度n1P_SPI_W_Reg_Byte(nCMD_W_REGISTER I nREG_RX_PW_P0, RF_DATA_WIDTH)

20、;/设置RX通道0数据宽度n1P_SPI_W_Reg_Byte(nCMD_W_REGISTER I nREG_RF_CH, RF_CH);/设置射频通道n1P_SPI_W_Reg_Byte(nCMD_W_REGISTERInREG_EN_RXADDR,nRCD_ERX_P0_enable);/ 使能接收通道 0n1P_SPI_W_Reg_Byte(nCMD_W_REGISTER I nREG_EN_AA, 0x00);/关闭自动应答nREG_SETUP_RETR,n1P_SPI_W_Reg_Byte(nCMD_W_REGISTERInRCD_ARC_disable);/ 禁用自动重发n1P_S

21、PI_W_Reg_Byte(nCMD_W_REGISTERInREG_RF_SETUP,nRCD_RF_DR_1Mbps I nRCD_RF_PWR_0dBm); / 设置传输速率为 1Mbps,发射功率为 0dBmn1P_SPI_W_Reg_Byte(nCMD_W_REGISTERInREG_CONFIGnRCD_MASK_TX_DS_enable/禁用发送完成中断InRCD_MASK_MAX_RT_enable/ 禁用发送超时中断I nRCD_EN_CRC_enable/启用CRCI nRCD_CRCO_2byte/ CRC16| nRCD_PWR_UP_powerup/上电模式| nRC

22、D_PRIM_RX_prx);/ RX模式nPin_CE = 1;/ CE置高,进入运行模式/ 函数:n1P_Turn_TX()/描述:初始化nRF24L01+,并将其转换为发送状态。发送数据缓冲区中的数据,发送完成 后再转换为接收状态/参数:p发送数据存放地址void n1P_Turn_TX(uint8 *p)uint8 sta=0;nPin_CE = 0;/ CE置低,进入待机模式n1P_SPI_W_Reg_Buff(nCMD_W_REGISTER I nREG_TX_ADDR, n1P_RF_Addr, RF_ADDR_WIDTH);/ 设置 TX 地址n1P_SPI_W_Reg_Buf

23、f(nCMD_W_TX_PAYLOAD, p, RF_DATA_WIDTH);/写入发送数据n1P_SPI_W_Reg_Byte(nCMD_W_REGISTER I nREG_RF_CH, RF_CH);/设置射频通道n1P_SPI_W_Reg_Byte(nCMD_W_REGISTERInREG_SETUP_RETR,nRCD_ARC_disable);/ 禁用自动重发n1P_SPI_W_Reg_Byte(nCMD_W_REGISTERInREG_RF_SETUPnRCD_RF_DR_1Mbps I nRCD_RF_PWR_0dBm); / 设置传输速率为 1Mbps,发射功率为 0dBmn1P_SPI_W_Reg_Byte(nCMD_W_REGISTERInREG_CONFIG,nRCD_MASK_RX_DR_enable/禁用发送完成中断InRCD_MASK_MAX_RT_enable/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号