无线收发系统设计.docx
- 文档编号:12806198
- 上传时间:2023-06-08
- 格式:DOCX
- 页数:28
- 大小:389.74KB
无线收发系统设计.docx
《无线收发系统设计.docx》由会员分享,可在线阅读,更多相关《无线收发系统设计.docx(28页珍藏版)》请在冰点文库上搜索。
无线收发系统设计
nRF2401无线收发系统设计
一实验目的
培养基本实验能力和工程实践能力,通过实验锻炼基本实验技能,使同学们掌握单片机的基本工作原理和单片机系统应用设计的技能,掌握单片机的简单编程方法以及调试方法,并能应用于电子系统设计中,提高同学们对综合电子系统的设计能力,加深对无线通信系统理论知识的理解,增强工程实践能力,培养创新意识,提高分析问题和解决问题的能力。
二实验基本要求
(1)正确使用电子仪器;
(2)根据项目设计要求能够进行单片机系统硬件电路设计和软件编程;
(3)学会查阅接口电路手册和相关技术资料;
(4)具有初步的单片机电路硬件和软件分析、寻找和排除常见故障的能力;
(5)正确地记录实验数据和写实验报告。
三实验器材
万能板、单片机、nRF2401无线收发模块、液晶屏、晶振、按键、发光二级管、开关、电容、电阻、5V电源适配器、导线、万用表、电烙铁、焊锡。
四GFSK调制解调原理
4.1调制
频移键控方式,幅度恒定不变的载波信号频率随着调制信号的信息状态而切换,通常采用的是二进制频移键控,即载波信号频率随着数据信息码的“0”、“1”变化进行切换。
根据频率变化影响发射波形的方式,FSK信号在相邻的比特之间,呈现连续的相位或不连续的相位。
一种常见的二进制FSK信号产生方法是根据数据比特码是“0”还是“1”,在两个振荡频率分别为
和
的振荡器间切换,这种FSK信号的表达式为:
(二进制1)
(二进制0)
和
分别代表载波信号频率和恒定频率偏移,而
和
分别表示单比特能量和比特周期。
这种方法产生的波形在比特码“0”,“1”切换时刻是不连续的,这种不连续的相位会造成诸如频谱扩展和传输差错等问题,信号的功率谱密度函数按照频率偏移的负二次幂衰落,在无线系统中一般不采用这种FSK信号,而是使用信号波形对单一载波振荡器进行调制,这样FSK信号可以表示如下:
上式中,
是频率调制系数,定义为
,
为比特率,尽管调制波形
在“0”和“1”比特间转换时不连续,但是相位函数
是与
的积分成比例,所以是连续的,大部分信号能量集中在以载波频率为中心的主瓣范围,功率谱密度函数按照频率偏移的负四次幂衰减。
为了进一步减小信号的频谱旁瓣,可以在前加入一级高斯滤波器,高斯滤波器的传递函数为:
,其中:
通过高斯滤波,平缓了输入信号的相位变化,大大压缩了信号频谱的旁瓣。
图1典型的GFSK调制
输入信号
是随机二进制信号形成的双极性方波,方波经高斯滤波器后是:
式中﹡号表示线性卷积运算,矩形脉冲定义为:
通过数学推导,得到的表达式可表示为:
式中Q定义为:
连续相位通过频率调制产生为:
式中h是调制指数;
是对
离散时间采样。
4.2解调
尽管高斯滤波器减小了发送GFSK信号对带宽的需求,但是以接收端得到符号间干扰为代价的。
GFSK是频率调制信号,所以采用鉴相和鉴频的方法来解调。
令:
是引入码间干扰的
,基带同相和正交成分分别表示为:
基带信号的相位可以通过:
计算。
在输出端可以通过:
获得数字信号
。
图2典型的GFSK解调
五主要器件介绍
5.151单片机
引脚功能:
MCS-51是标准的40引脚双列直插式集成电路芯片,引脚分布请参照——单片机引脚图:
P0.0~P0.7P0口8位双向口线(在引脚的39~32号端子)。
P1.0~P1.7P1口8位双向口线(在引脚的1~8号端子)。
P2.0~P2.7P2口8位双向口线(在引脚的21~28号端子)。
P3.0~P3.7P3口8位双向口线(在引脚的10~17号端子)。
P0口有三个功能:
1、外部扩展存储器时,当作数据总线(如图1中的D0~D7为数据总线接口)
2、外部扩展存储器时,当作地址总线(如图1中的A0~A7为地址总线接口)
3、不扩展时,可做一般的I/O使用,但内部无上拉电阻,作为输入或输出时应在外部接上拉电阻。
P1口只做I/O口使用,其内部有上拉电阻。
P2口有两个功能:
1、扩展外部存储器时,当作地址总线使用
2、做一般I/O口使用,其内部有上拉电阻;
P3口有两个功能:
除了作为I/O使用外(其内部有上拉电阻),还有一些特殊功能,由特殊寄存器来设置。
有内部EPROM的单片机芯片(例如8751),为写入程序需提供专门的编程脉冲和编程电源,这些信号也是由信号引脚的形式提供的。
即:
编程脉冲:
30脚(ALE/PROG)
编程电压(25V):
31脚(EA/Vpp)
ALE/PROG地址锁存控制信号:
在系统扩展时,ALE用于控制把P0口的输出低8位地址送锁存器锁存起来,以实现低位地址和数据的隔离。
当CPU对外部进行存取时,用以锁住地址的低位地址,即P0口输出。
ALE有可能是高电平也有可能是低电平,当ALE是高电平时,允许地址锁存信号,当访问外部存储器时,ALE信号负跳变(即由正变负)将P0口上低8位地址信号送入锁存器。
当ALE是低电平时,P0口上的内容和锁存器输出一致。
关于锁存器的内容,我们稍后也会介绍。
在8051单片机内部有一个4KB或8KB的程序存储器(ROM),ROM的作用就是用来存放用户需要执行的程序的,那么我们是怎样把编写好的程序存入进这个ROM中的呢?
实际上是通过编程脉冲输入才能写进去的,这个脉冲的输入端口就是PROG。
PSEN外部程序存储器读选通信号:
在读外部ROM时PSEN低电平有效,以实现外部ROM单元的读操作。
1、内部ROM读取时,PSEN不动作;
2、外部ROM读取时,在每个机器周期会动作两次;
3、外部RAM读取时,两个PSEN脉冲被跳过不会输出;
4、外接ROM时,与ROM的OE脚相接。
EA/VPP访问和序存储器控制信号:
1、接高电平时:
CPU读取内部程序存储器(ROM)
扩展外部ROM:
当读取内部程序存储器超过0FFFH(8051)1FFFH(8052)时自动读取外部ROM。
2、接低电平时:
CPU读取外部程序存储器(ROM)。
在前面的学习中我们已知道,8031单片机内部是没有ROM的,那么在应用8031单片机时,这个脚是一直接低电平的。
RST复位信号:
当输入的信号连续2个机器周期以上高电平时即为有效,用以完成单片机的复位初始化操作,当复位后程序计数器PC=0000H,即复位后将从程序存储器的0000H单元读取第一条指令码。
XTAL1和XTAL2:
外接晶振引脚。
当使用芯片内部时钟时,此二引脚用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。
5.2无线通信模块nRF24L01+
nRF24L01+是一款工作在2.4~2.5GHz世界通用ISM频段的单片无线收发器芯片。
无线收发器包括:
频率发生器、增强型SchockBurst模式控制器、功率放大器、晶体管振荡器调制器、解调器。
输出功率频道选择和协议的设置可以通过SPI接口进行设置。
极低的电流消耗,当工作在发射模式下发射功率为0dBm时电流消耗为11.3mA,接收模式为13.5mA,掉电模式和待机模式下电流消耗更低。
nRF24L01+适用于多种无线通信的场合,如无线数据传输系统、无线鼠标、遥控开锁、遥控玩具等。
模块特点
(1)2.4~2.5GHz全球免申请ISM工作频段。
(2)125个通讯频道,满足多点通讯、分组、跳频等应用需求。
(3)发射功率可设置为:
0dBm、-6dBm、-12dBm和-18dBm。
(4)实际发射功率≥0dBm(设置为0dBm时测试得出)。
(5)SMA接口,可方便连接同轴电缆或外置天线。
SMA接口:
微波高频连接器,最高频率为18GHz。
(6)通过SPI(行外设接口)接口与MCU连接,速率0~8Mbps。
(7)支持2Mbps、1Mbps和250kbps传输速率。
(8)增强型ShockBurstTM传输模式,完全兼容nRF2401A、nRF24L01等芯片。
(9)支持自动应答及自动重发,内置地址及CRC数据校验功能。
(10)工作电压范围:
1.9V~3.6V,待机模式下电流低于1μA。
(11)工作温度范围:
-40℃~+85℃
CE:
使能发射或接收;
CSN、SCK、MOSI、MISO:
SPI引脚端,微处理器可通过此脚配置nRF24L01;
IRQ:
中断标志位;
VDD:
电源输入端;
VSS:
地;
XC2、XC1:
晶体振荡器引脚;
VDD_PA:
为功率放大器供电,输出为1.8V;
ANT1、ANT2:
天线接口;
IREF:
参考电流输入。
模块上的引脚定义,与外部连接信号只有8个。
引脚
a
b
c
d
e
f
g
h
名称
VCC
CE
CSN
CLK
MOSI
MISO
IRQ
GND
5.2.1天线
鞭状天线是一种可弯曲的垂直杆状天线,其长度一般为1/4或1/2波长。
可用于小型通信机、步谈机、汽车收音机等,军用电台等。
该实验仅用到了通道1,因为通道1的DATA引脚是双向的数字I/O口,已经满足要求,通道2的DOUT只能在接收模式中使用,为单向数字输出口。
其中PWR_UP、CE、CS三个引脚控制着nRF2401的四种工作模式:
收发模式、配置模式、空闲模式、关断模式。
工作模式
PWR_UP
CE
CS
收发模式
1
1
0
配置模式
1
0
1
空闲模式
1
0
0
关断模式
0
*
*
5.2.2状态字设置
位置
个数
名称
功能
143-120
24
TEXT
测试保留
119-112
8
DATA2_W
通道2数据段长度
111-104
8
DATA1_W
通道1数据段长度
103-64
40
ADDR2
通道2硬件地址
63-24
40
ADDR1
通道1硬件地址
23-18
6
ADDR_W
地址段长度
17
1
CRC_L
检验段长度,值为1时16bit,0时8bit
16
1
CRC_EN
检验使能,值为1时检验有效,0时无效
15
1
RX2_EN
启用通道数,值为1时两通道,0时单通道
14
1
CM
通信模式,值为1时突发模式,0时直接传递模式
13
1
RFDR_SB
通信速率,值为1时1kbit/s,0时250kbit/s
12-10
3
XO_F
晶振频率,值为011时16MHz
9-8
2
RF_PWR
输出功率,值为11
7-1
7
RF_CH#
工作频率
0
1
RXEN
工作状态,值为1时表示接收,1为发送
5.3显示屏
引脚
名称
方向
功能
1
VSS
I
电源地
2
VDD
I
电源电压5V
3
VO
O
LCD驱动电压(可调,一般0.8V)
4
RS
I
RS=0,选择指令寄存器;RS=1,数据寄存器
5
R/W
I
R/W=0,写操作;R/W=1,读操作;
6
E
I
写操作时,信号下降沿有效;读操作高电平有效
7
DB0
I/O
数据口0
8
DB1
I/O
数据口1
9
DB2
I/O
数据口2
10
DB3
I/O
数据口3
11
DB4
I/O
数据口4
12
DB5
I/O
数据口5
13
DB6
I/O
数据口6
14
DB7
I/O
数据口7
15
LED+
I
背光电源正
16
LED-
I
背光电源地
状态字由RS、R/W、DB7~DB0写入,包括清屏、光标归位、设置输入模式、显示开/关控制、光标或显示移位、功能设置、地址设置、写数据、读数据。
具体参照文档。
六工作过程
(1)单片机对自身、nRF24L01+、显示屏进行初始化配置
设置CS高、CE低,使nRF24L01+进入编程模式,nRF24L01+的DATA引脚为输入状态,配置数据写入。
(2)单片机向nRF24L01+发送数据
设置CE高,使nRF24L01+进入TX模式,nRF24L01+的DATA为输入状态,并通过它输出数据到TXFIFO,之后设置CE低,开始传输。
(3)单片机通过nRF24L01+读取数据
七程序
#include"STC89.H"//STC89系列单片机头文件
#include"Type.h"//数据类型声明头文件
#include"LCD1602.h"//字符型液晶屏头文件
#include"Board.h"//LED、按键和蜂鸣器引脚定义头文件
#include"nRF24L01P.h"//nRF24L01+无线数传模块驱动头文件
uint8key_down=0;//按键按下标志.为0时代表没有按键按下,为1时代表已有按键按下.
uint8key_code=0;//按键编号,为0时无按键按下.
voidKey_Send(void)
{
key_code=0;
if(KEY1==KEY_DOWN){key_code+=1;}//根据按键状态设置按键编号标志
if(KEY2==KEY_DOWN){key_code+=2;}
if(KEY3==KEY_DOWN){key_code+=3;}
if(KEY4==KEY_DOWN){key_code+=4;}
if(key_code==0){//key_code=0,说明未有按键按下
if(key_down==1){key_down=0;}
}else{//key_code!
=0,说明已有按键按下
if(key_down==0){//key_down=0,之前没有按键按下
key_down=1;//设置按键状态标志
n1P_TX_Buff[3]=key_code+'0';//将按键代码转换为ASCII字符后存入TX缓存数组
n1P_TX_Buff[4]='0';//设置标志为"发送按键信息"
LCD_Print_String(0,1,"Key-SendErr");//提前显示按键信息发送失败信息
LCD_Print_Char(5,1,n1P_TX_Buff[3]);//显示本机按键代码
LED3=LED_ON;
n1P_Turn_TX(n1P_TX_Buff);//发送按键代码信息
LED3=LED_OFF;
}
}
}
voidKey_Rece(void)
{
if(n1P_RX_Buff[4]=='0'){//接收到的数据为对方设备发送的按键信息
LCD_Print_String(0,1,"Key-Received");//显示从对方设备接收到的按键信息
LCD_Print_Char(5,1,n1P_RX_Buff[3]);//显示从对方设备接收到的按键代码
n1P_TX_Buff[3]=n1P_RX_Buff[3];
n1P_TX_Buff[4]='1';//设置标志为"接收按键信息成功"
LED3=LED_ON;
n1P_Turn_TX(n1P_TX_Buff);//切换nRF24L01(+)为发送模式,并发送"接收成功"信息,发送结束后返回接收模式
LED3=LED_OFF;
}else{//接收到的数据为对方设备返回的接收正确信息
LCD_Print_String(0,1,"Key-SendOK!
");//显示对方接收按键信息成功信息
LCD_Print_Char(5,1,n1P_RX_Buff[3]);//显示对方接收到的按键代码
}
}
voidmain(void)
{
LCD_Init_Dev();//初始化LCD.清屏、设置工作方式等。
LCD_Cls();//清屏
LCD_Print_String(0,0,"NOVATEnRF24L01+");//显示字符
LCD_Print_String(0,1,"PressAnyKey");//显示字符
LED1=LED_OFF;LED2=LED_OFF;LED3=LED_OFF;//熄灭全部指示灯,完成上电程序部分
n1P_Init_IO();//初始化nRF24L01(+)模块IO
n1P_Turn_RX();//初始化nRF24L01(+),并将其设置为接收模式
while
(1){
if(n1P_Check_IRQ(n1P_RX_Buff)){//检查IRQ引脚状态
Key_Rece();//接收处理
}
Key_Send();//检测按键
}
}
#include"STC89.H"
#include"Type.h"
#include"LCD1602.h"
#defineLCD_Dly_Dat6//等待数据建立时间,实测STC89C52RC外部晶振11.0592MHz时需>=4.
//函数:
LCD_Soft_Dly()
//描述:
软件延时
//参数:
dly延时时间
voidLCD_Soft_Dly(uint16dly)
{
uint16i;
for(;dly>0;dly--)for(i=0;i<10;i++);
}
//函数:
LCD_Init_IO()
//描述:
初始化IO
//参数:
无
voidLCD_Init_IO(void)
{
LPin_E=0;//E置低,设备禁用
LPin_RS=0;//RS置低,切换到命令字操作模式
LPin_RW=0;//RW置低,切换到写入模式
LPin_BLED=0;//关闭背光
}
//函数:
LCD_Wait_Busy()
//描述:
等待LCD空闲,只有在空闲状态下方可对LCD进行操作
//参数:
无
voidLCD_Wait_Busy(void)
{
uint8isbusy=0,dly=0;
for(dly=250;dly>0;dly--){//指定最大超时时间,防止死循环
LPin_RS=0;//RS置低,切换到命令字操作模式
LPin_RW=1;//RW置高,切换到读取模式
LPin_E=1;//E置高,开始操作(读取操作时为高电平有效)
LCD_Soft_Dly(LCD_Dly_Dat);//等待数据建立
isbusy=LPin_DB;//读取忙标志(bit7=Busy)和当前指针(bit6:
0=AC)
LPin_E=0;//E置低,结束操作
if(isbusy<0x80)break;//bit7=0=空闲,退出等待
}
}
//函数:
LCD_W_Reg()
//描述:
写LCD寄存器
//参数:
dat待写入的数据
voidLCD_W_Reg(uint8dat)
{
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待写入的数据
voidLCD_W_Byte(uint8dat)
{
LCD_Wait_Busy();//等待空闲
LPin_RS=1;//RS置高,切换到数据操作模式
LPin_RW=0;//RW置低,切换到写入模式
LPin_E=1;//E置高,开始操作
LPin_DB=dat;//将数据输出到数据线上
LCD_Soft_Dly(LCD_Dly_Dat);//等待数据建立
LPin_E=0;//E置低,完成操作(写入操作时为下降沿有效)
}
//函数:
LCD_Init_Dev()
//描述:
LCD复位,注意该操作有固定顺序
//参数:
无
voidLCD_Init_Dev(void)
{
LCD_Init_IO();
LCD_W_Reg(0x38);
LCD_Soft_Dly(500);//等待约5ms
LCD_W_Reg(0x38);
LCD_Soft_Dly(500);
LCD_W_Reg(0x30);
LCD_Soft_Dly(500);
LCD_W_Reg(0x38);//8位数据总线宽度,两行字符,5x7点阵
LCD_W_Reg(0x08);//显示关,光标不显示,光标不闪烁
LCD_W_Reg(0x01);//清屏
LCD_W_Reg(0x06);//显示光标右移,画面不滚动
LCD_W_Reg(0x0C);//显示开,光标不显示,光标不闪烁
}
//函数:
LCD_Cls()
//描述:
显示清屏
//参数:
无
voidLCD_Cls(void)
{
LCD_W_Reg(0x01);//清屏
}
//函数:
LCD_Set_Coor()
//描述:
指定显示坐标
//参数:
x列坐标(1602为0至15)
//y行坐标(1602为0至1)
voidLCD_Set_Coor(uint8x,uint8y)
{
if(y){x+=0x40;}//在第二行的显示数据时,地址偏移0x40
x+=0x80;//计算DDRAM地址(DisplayDataRAM)
LCD_W_Reg(x);//写AC(AddressCounter)到DDRAM地址
}
//函数:
LCD_Print_Char()
//描述:
在指定位置显示一个字符
//参数:
x列坐标(1602为0至15)
//y行坐标(1602为0至1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 无线 收发 系统 设计