文档库 最新最全的文档下载
当前位置:文档库 › 2.4GHz射频收发芯片nRF24L01点对点跳频技术应用

2.4GHz射频收发芯片nRF24L01点对点跳频技术应用

2.4GHz射频收发芯片nRF24L01点对点跳频技术应用
2.4GHz射频收发芯片nRF24L01点对点跳频技术应用

2.4GHz射频收发芯片nRF24L01点对点跳频技术应用

摘要:本文介绍了工作于2.4GHz ISM频段的射频收发芯片nRF24L 01的芯片结构、引脚功能、工作模式、接收与发送的工作流程及相关器件配置,详细描述了nRF24L01的跳频技术实现,给出了应用电路图,分析了PCB设计时应该注意的问题,最后对全文进行了总结。关键词:nRF24L01;射频;无线通信;跳频

1 n RF24L01概述

n RF24.L01是一款新型单片射频收发器件,工作于2.4 GHz~2.5 GHz ISM频段。内置频率合成器、功率放大器、晶体振荡器、调制器等功能模块,并融合了增强型ShockBurst技术,其中输出功率和通信频道可通过程序进行配置。n RF24L01功耗低,在以-6 dBm的功率发射时,工作电流也只有9 mA;接收时,工作电流只有12.3 mA,多种低功率工作模式(掉电模式和空闲模式)使节能设计更方便。

n RF24L01主要特性如下:

GFSK调制:

硬件集成OSI链路层;

具有自动应答和自动再发射功能;

片内自动生成报头和CRC校验码;

数据传输率为l Mb/s或2Mb/s;

SPI速率为0 Mb/s~10 Mb/s;

125个频道:

与其他n RF24系列射频器件相兼容;

QFN20引脚4 mm×4 mm封装;

供电电压为1.9 V~3.6 V。

2 引脚功能及描述

n RF24L01的封装及引脚排列如图1所示。各引脚功能如下:

图(1)

CE:使能发射或接收;

CSN,SCK,MOSI,MISO:SPI引脚端,微处理器可通过此引脚配置n RF24L01:

IRQ:中断标志位;

VDD:电源输入端;

VSS:电源地:

XC2,XC1:晶体振荡器引脚;

VDD_PA:为功率放大器供电,输出为1.8 V;

ANT1,ANT2:天线接口;

IREF:参考电流输入。

3 工作模式

通过配置寄存器可将n RF241L01配置为发射、接收、空闲及掉电四种工作模式,如表1所示。

表(1)

待机模式1主要用于降低电流损耗,在该模式下晶体振荡器仍然是工作的;

待机模式2则是在当FIFO寄存器为空且CE=1时进入此没收; 待机模式下,所有配置字仍然保留。

在掉电模式下电流损耗最小,同时n RF24L01也不工作,但其所有配置寄存器的值仍然保留。

4 工作原理

发射数据时,首先将nRF24L01配置为发射模式:接着把接收节点地址TX_ADDR和有效数据TX_PLD按照时序由SPI口写入nRF24L01缓存区,TX_PLD必须在CSN为低时连续写入,

而TX_ADDR在发射时写入一次即可,然后CE置为高电平并保持至少10μs,延迟130μs后发射数据;若自动应答开启,那么n RF24L01在发射数据后立即进入接收模式,接收应答信号(自动应答接收地址应该与接收节点地址TX_ADDR一致)。如果收到应答,则认为此次通信成功,TX_DS置高,同时TX_PLD从TX FIFO中清除;若未收到应答,则自动重新发射该数据(自动重发已开启),若重发次数(ARC)达到上限,MAX_RT置高,TX FIFO 中数据保留以便在次重发;MAX_RT或TX_DS置高时,使IRQ 变低,产生中断,通知MCU。最后发射成功时,若CE为低则

n RF24L01进入空闲模式1;若发送堆栈中有数据且CE为高,则进入下一次发射;若发送堆栈中无数据且CE为高,则进入空闲模式2。

接收数据时,首先将n RF24L01配置为接收模式,接着延迟130μs进入接收状态等待数据的到来。当接收方检测到有效的地址和CRC时,就将数据包存储在RX FIFO中,同时中断标志位RX_DR置高,IRQ变低,产生中断,通知MCU去取数据。若此时自动应答开启,接收方则同时进入发射状态回传应答信号。最后接收成功时,若CE变低,则n RF24L01进入空闲模式1。

5 配置字

SPI口为同步串行通信接口,最大传输速率为10 Mb/s,传输时先传送低位字节,再传送高位字节。但针对单个字节而言,要

先送高位再送低位。与SPI相关的指令共有8个,使用时这些控制指令由n RF24L01的MOSI输入。相应的状态和数据信息是从MISO输出给MCU。

nRF24L0l所有的配置字都由配置寄存器定义,这些配置寄存器可通过SPI口访问。n RF24L01

的配置寄存器共有25个,常用的配置寄存器如表2所示。

表(2)

6 n RF24L01应用原理框图

图(2)

7 跳频功能实现

由于2.4G频段没有使用授权限制,目前家用电器、手机、无线网络都集中在此频段,干扰问题难以避免。如何避开在家庭市场中易与其它无线传输间(Bluetooth、HomeRF)发生干扰成了首要解决的问题。

跳频技术 (Frequency-Hopping Spread Spectrum; FHSS)是在2.4GHz频带以一定的频宽将其划分为若干个无线电频率信道(Radio Frequency Channel;RFC),并且以使用接收和发送两端一样的频率跳跃模式(Frequency Hopping)来接发讯号及防止数据撷取。其工作原理是,收发双方传输信号的载波按照预定规律进行离散变化。以达到避开干扰,完成传输。简单的说,FHSS不是抑制干扰而是容忍干扰。图3是跳频实现的流程图。

跳频发射流程图

跳频接收流程图

图 (3) 8 结束语

n RF 24L01整体性能良好,使用方便。跳频功能的应该很好的解决了无线传输干扰问题,实际应用测试效果良好。

GSM跳频技术与频点

射频跳频:TRX的发射TX和接收RX都参与跳频。小区参与跳频频点数可以超过该小区内的TRX数目。 基带跳频:每个发信机工作在固定的频率上,TX不参与跳频,通过基带信号的切换来实现发射的跳频,但其接收必须参与跳频。因此小区跳频频点数不可能大于该小区的TRX数。 跳频技术源于军事通信,目的是为了获得较好的保密性和抗干扰能力。跳频分为快速和慢速两种,GSM中的跳频属于慢跳频。 跳频方式从时域概念上分为帧跳频和时隙跳频,从载频实现方式上分为射频跳频和基带跳频。 帧跳频:每个TDMA帧频点变换一次,这种方式下,每一个载频可以看做一个信道,在一个小区中帧跳频时BCCH所在的TRX载频上的TCH不能参与跳频,其它不同的载频应有不同MAIO,它是时隙跳频的特例。 时隙跳频:即每个TDMA帧的每个时隙频点变换一次,时隙跳频时BCCH所在的TRX 中的TCH可以参加跳频,但目前只在基带跳频时实现。 射频跳频:TRX的发射TX和接收RX都参与跳频。小区参与跳频频点数可以超过该小区内的TRX数目。 基带跳频:每个发信机工作在固定的频率上,TX不参与跳频,通过基带信号的切换来实现发射的跳频,但其接收必须参与跳频。因此小区跳频频点数不可能大于该小区的TRX 数。 就ERICSSON的设备来说,有X总线的为基带跳频;基带跳频的频点数与载波数是一样的;而综合跳频(射频跳频)的频点数一般比载波数多。移动一般为基带跳频,联通一般用的是综合跳频。联通的可用频点少,在满足容量的基础上面,必须采用综合跳频来降低频点干扰咯。 基带跳频的技术难点在于如何实现信息数据的高速交换,满足217跳/秒的跳频速度及271kbits/s的数据传输速率。考虑以无线接口时隙为基础进行数据的交换,交换方法可以是空分、时分、数据包交换。基站在设计中采用了先进的总线技术,以时隙交换为基础实现基带跳频,其具体的实现方法为:每个发射机(TRX)调谐在固定频率,有一个固定的ID号。收发信机的编码器将下行信号编码,形成突发格式数据,编码器根据跳频算法计算本突发应调制的频道(即TRX号),加上有关功率控制等附加信息形成特定的数据包格式,收发信机的编码器在固定的时间(子时隙)内发出数据包。调制器对每个子时隙的数据包的TRX号进行检查,如和本TRX的ID号不同,则收下一子时隙;如相同,则将本子时隙的数据包接收下来,延时一时隙再发射到空间接口,实现了基带跳频。 射频跳频实现的技术难点主要表现在如何实现宽频带内的快速变频和在快速变频的同时如何保证信号的高质量。快速变频与信号的高质量是相互矛盾的。在GSM系统中各个时隙之间的间隙只有二十几微秒,要实现射频跳频,系统必须在时隙之间二十几微秒的保护时间内快速地从一个频点切换到另一个频点。按照以前的技术,在实现快速跳频的同时必然会带来调制精度下降、接收灵敏度恶化、杂散增加以及阻塞性能下降等一系列负作用。 采用紧密频率复用技术时,系统干扰是决定频率复用比的最重要因素。为了降低系统干扰,通常采用的技术是功率控制、非连续发射技术;而为了抗干扰,提高系统在同等干扰条件下的通信质量,通常采用跳频技术。 因此,跳频是GSM系统抗干扰和提高频率复用度的一项重要技术。按照GSM规范,慢跳频可以用于GSM通信系统中,跳频是指载波频率在一定范围内,按某种规律跳变。每个小区信道组的跳频功能都能单独激活或关闭。BCCH由于是广播信道,不参与跳频,TCH 信道,SDCCH信道可以使用跳频。基站使用的跳频有两种,基带跳频和射频跳频,各自的

NRF24L01发送程序

#include #include typedef unsigned int uint; typedef unsigned char uchar; #define TX_ADDR_WITDH 5//发送地址宽度设置为5个字节 #define RX_ADDR_WITDH 5//接收地址宽度设置为5个字节 #define TX_DATA_WITDH 8// #define RX_DATA_WITDH 8 #define R_REGISTER 0x00 // 读寄存器 #define W_REGISTER 0x20 // 写寄存器 #define R_RX_PLOAD 0x61 // 读RX FIFO有效数据,1-32字节,当读数据完成后,数据被清除,应用于接收模式 #define W_TX_PLOAD 0xA0 // 写TX FIFO有效数据,1-32字节,写操作从字节0开始,应用于发射模式 #define FLUSH_TX 0xE1 // 清除TX FIFO寄存器,应用于发射模式 #define FLUSH_RX 0xE2 // 清除RX FIFO寄存器,应用于接收模式 #define REUSE_TX_PL 0xE3 // 重新使用上一包有效数据,当CE为高过程中,数据包被不断的重新发射 #define NOP 0xFF // 空操作,可以用来读状态寄存器 #define CONFIG 0x00 // 配置寄存器 #define EN_AA 0x01 // “自动应答”功能寄存 #define EN_RX_ADDR 0x02 // 接收通道使能寄存器 #define SETUP_AW 0x03 // 地址宽度设置寄存器 #define SETUP_RETR 0x04 // 自动重发设置寄存器 #define RF_CH 0x05 // 射频通道频率设置寄存器 #define RF_SETUP 0x06 // 射频设置寄存器 #define STATUS 0x07 // 状态寄存器 #define OBSERVE_TX 0x08 // 发送检测寄存器 #define CD 0x09 // 载波检测寄存器 #define RX_ADDR_P0 0x0A // 数据通道0接收地址寄存器 #define RX_ADDR_P1 0x0B // 数据通道1接收地址寄存器 #define RX_ADDR_P2 0x0C // 数据通道2接收地址寄存器 #define RX_ADDR_P3 0x0D // 数据通道3接收地址寄存器 #define RX_ADDR_P4 0x0E // 数据通道4接收地址寄存器 #define RX_ADDR_P5 0x0F // 数据通道5接收地址寄存器 #define TX_ADDR 0x10 // 发送地址寄存器 #define RX_PW_P0 0x11 // 数据通道0有效数据宽度设置寄存器 #define RX_PW_P1 0x12 // 数据通道1有效数据宽度设置寄存器 #define RX_PW_P2 0x13 // 数据通道2有效数据宽度设置寄存器 #define RX_PW_P3 0x14 // 数据通道3有效数据宽度设置寄存器 #define RX_PW_P4 0x15 // 数据通道4有效数据宽度设置寄存器 #define RX_PW_P5 0x16 // 数据通道5有效数据宽度设置寄存器

NRF24L01无线模块收发程序(实测成功 多图)

NRF24L01无线模块收发程序(实测成功多图) 本模块是NRF24L01无线传输模块,用于无线传输数据,距离不远,一般只是能够满足小距离的传输,目测是4-5m,价格一般是4元左右,可以方便的买到。 51最小系统学习板就可以,当时是用了两块学习板,一块用于发送,一块用于接收。 小车也是比较容易购到的,四个端口控制两个电机,两个控制一个电机,当两个端口高低电平不同时电机就会转动,即为赋值1和0是电机转动,赋值可以用单片机作用,当然这是小车启动部分,前进后退左转右转就是你赋值0和1的顺序问题了。

整体思路是用发射端的按键控制小车,即为按键按下就前进,再按其他按键实现其他功能,本次程序是在用NRF24L01发射数据在接收端用1602显示的基础上改变。 下面是程序源码(有好几个文件,分别创建) ////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////// #include #include #include'1602.h' #include'delay.h' #include 'nrf24l01.h' #define uint unsigned int #define uchar unsigned char uint Weight_Shiwu=1234; unsigned char KeyScan(void);//键盘扫描 // unsigned char KeyScan(void);//键盘扫描 //#define KeyPort P0 sbit KEY1 = P0^0; sbit KEY2 = P0^1; sbit KEY3 = P0^2; sbit KEY4 = P0^3; sbit KEY5 = P0^4; void main() { // char TxDate[4]; // LCD_Init(); //初始化液晶屏 // LCD_Clear(); //清屏

多项选择题-初级

1、关于基带跳频和射频跳频,正确的说法有( AB ) A、基带跳频的频率数只能小于或等于发信机数,射频跳频的频率数可以大于发信机数 B、基带跳频一般使用窄带滤波合路器,射频跳频一般使用宽带滤波合路器 C、基带跳频属于慢跳频,射频跳频属于快跳频 D、如果条件允许,射频跳频可获得比基带跳频更高的跳频增益 2、在GSM规中,有两个参数用来定义跳频序列,分别为: ( A、C ) A、MAIO B、TFI C、HSN D、USF 3、关于天线增益说确的是?(A、D ) A、是与基准天线比较得出的相对值 B、馈线驻波比越大,天线增益越小 C、使用功率放大器时,天线增益增大 D、天线辐射越集中,天线增益越大 4、若发生SDCCH掉话,可能发生的状况有:( ABCD ) A、被叫寻呼无响应 B、位置更新失败 C、SDCCH分配失败 D、TCH分配丢失 E、随机接入失败 5、某小区位于位置区边界, 主要覆盖横穿位置区边界的铁路动脉, 除火车用户外基本没有其他用户. 为减轻SDCCH拥塞, 可能的方案包括( ACD ) A、提高SDCCH信道数配置 B、降低天线, 缩小覆盖 C、启用动态SDCCH分配功能 D、D、增大小区重选滞后值 6、在以下电调天线和机械天线的比较中,说确的有:(A B D) A、电调天线在增大天线下倾角度过程中,天线方向图基本保持不变。而机械天线在增大天线下倾角度过程中, 天线方向图会随着下倾角的增大而产生一定程度的改变 B、一般情况下电调天线的三阶互调指标要优于机械下倾天线

C、电调天线调整倾角的步进度数为0.2度,而机械天线调整倾角的步进度数为1度,因此电调天线的精度高,效果好 D、电调天线可以对基站天线实行远程监控调整,机械天线则必须到现场进行基站天线调整 7、应用分集接收技术可以大大降低移动通信接收信号不稳定的概率,分集技术主要包括:(A、B、C、D) A、空间分集 B、时间分集 C、频率分集 D、极化分集 8、降低移动系统中干扰的方法有:(A、C、D) A、动态功率控制 B、负荷分担 C、不连续发射 D、跳频 9、从以下情况可以推断小区上行信号可能受到干扰:(B、D) A、TEMS测试中观察到手机占用某一频点通话时Rxqual值达到7。 B、在BSC监控终端上发现该小区各BPC的ICMBAND值不都为1。 C、扫频仪监测到在939~950MHz频段基础噪声达到-100dBm左右。 D、占用开启上下行动态功率控制的小区时,手机从待机状态进入通话状态后Rxlev下 降而手机发射功率没有下降。 10、所谓公共控制信道是指面向小区所有手机的控制信道,以下控制信道中不属于公共控制 信道的有:(C、D) A、AGCH B、RACH C、FACCH D、SDCCH 11、基站站址设计一般应满足下列要求( ABDE ) A、在不影响基站布局的情况下,尽量选择现有的电信楼邮电局做站址,以利用其机 房电源铁塔等设施 B、将天线的主瓣方向指向高话务密度区,可以加强该地区的信号强度,从而提高通话

NRF24L01无线模块收发程序例程

//下面是接收的NRF24L01的程序。 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #include #include "nrf24l01.h" #include #define uchar unsigned char #define uint unsigned int sbit IRQ =P1^2;//输入 sbit MISO =P1^3; //输入 sbit MOSI =P1^1;//输出 sbit SCLK =P1^4;//输出 sbit CE =P1^5;//输出 sbit CSN =P1^0;//输出 uchar RevTempDate[5];//最后一位用来存放结束标志 uchar code TxAddr[]={0x34,0x43,0x10,0x10,0x01};//发送地址 /*****************状态标志*****************************************/ uchar bdata sta; //状态标志 sbit RX_DR=sta^6; sbit TX_DS=sta^5; sbit MAX_RT=sta^4; /*****************SPI时序函数******************************************/ uchar NRFSPI(uchar date) { uchar i; for(i=0;i<8;i++) // 循环8次 { if(date&0x80) MOSI=1; else MOSI=0; // byte最高位输出到MOSI date<<=1; // 低一位移位到最高位 SCLK=1; if(MISO) // 拉高SCK,nRF24L01从MOSI读入1位数据,同时从MISO输出1位数据date|=0x01; // 读MISO到byte最低位 SCLK=0; // SCK置低 } return(date); // 返回读出的一字节 } /**********************NRF24L01初始化函数*******************************/ void NRF24L01Int() {

NRF24L01无线模块C语言程序

NRF24L01无线模块C语言程序 24MHz晶振 #include #include #include #include #include #include #define U8 unsigned char #define U16 unsigned int #define TX_ADDR_WITDH 5 //发送地址宽度设置为5个字节 #define RX_ADDR_WITDH 5 //接收地址宽度设置为5个字节 #define TX_DATA_WITDH 1//发送数据宽度1个字节 #define RX_DATA_WITDH 1//接收数据宽度1个字节 #define R_REGISTER 0x00//读取配置寄存器 #define W_REGISTER 0x20//写配置寄存器 #define R_RX_PAYLOAD 0x61//读取RX有效数据 #define W_TX_PAYLOAD 0xa0//写TX有效数据 #define FLUSH_TX 0xe1//清除TXFIFO寄存器 #define FLUSH_RX 0xe2//清除RXFIFO寄存器 #define REUSE_TX_PL 0xe3//重新使用上一包有效数据 #define NOP 0xff//空操作 #define CONFIG 0x00//配置寄存器 #define EN_AA 0x01//使能自动应答 #define EN_RXADDR 0x02//接收通道使能0-5个通道 #define SETUP_AW 0x03//设置数据通道地址宽度3-5 #define SETUP_RETR 0x04//建立自动重发 #define RF_CH 0x05//射频通道设置 #define RF_SETUP 0x06//射频寄存器 #define STATUS 0x07//状态寄存器 #define OBSERVE_TX 0x08//发送检测寄存器 #define CD 0x09//载波 #define RX_ADDR_P0 0x0a//数据通道0接收地址 #define RX_ADDR_P1 0x0b//数据通道1接收地址 #define RX_ADDR_P2 0x0c//数据通道2接收地址 #define RX_ADDR_P3 0x0d//数据通道3接收地址 #define RX_ADDR_P4 0x0e//数据通道4接收地址 #define RX_ADDR_P5 0x0f//数据通道5接收地址

nrf24l01无线模块NRF24L01模块收发c程序

//许多人都在找nrf24l01无线模块的c程序;我以前刚接触无线//时用的就是nrf24l01模块;搜索了许多程序有很多都没法直接用;甚至还怀疑模块是不是被我搞坏了;拿去让别人检测模块又是好的;为避免大家走弯路;我将我的程序发出来供大家参考; 这是nrf24l01无线模块pcb图; 下面有Nrf24l01无线模块的收发c程序;以下程序经本人亲自测试;绝对能用!! 请注意以下几点: 1、24L01模块的电源电压是否为3V-3.6V之间; 2、如果您用的单片机是5V的话,请在IO口与模块接口之间串一个1K电阻; 3、检查模块的GND是否与单片机的GND相连接 4、先用程序进行调试,如果IO口不同,请更改IO口或相关时序; 5、如果是51系列单片机,晶振请选用11.0592M Hz; 模块供电最好用asm1117 5v转3.3v 稳压 测试单片机是stc89c52;at89c52 通用; 收发一体;

一大截不废话了;上程序;此程序是按键控制led;当按下s的时候对应接受的led会闪闪发光;很简单的~如果要实现其他更先进的功能;自己发掘吧~~ 务必将硬件连接正确;否则;它不会工作的~~当然做什么都要严谨~~错一点就差大了~~ 《《收发一体程序》》 #include #include typedef unsigned char uchar; typedef unsigned char uint; //****************************************NRF24L01端口定义

*************************************** sbit M ISO =P1^3; sbit M OSI =P1^4; sbit SCK =P1^2; sbit CE =P1^1; sbit CSN =P3^2; sbit IRQ =P3^3; //************************************按键*************************************************** sbit KEY=P2^0; //***************************************************************************** sbit led=P2^1; //*********************************************NRF24L01*********************** ************** #define TX_ADR_WIDTH 5 // 5 uints TX address width #define RX_ADR_WIDTH 5 // 5 uints RX address width #define TX_PLOAD_WIDTH 20 // 20 uints TX payload #define RX_PLOAD_WIDTH 20 // 20 uints TX payload uint const TX_ADDRESS[TX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01}; //本地地址uint const RX_ADDRESS[RX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01}; //接收地址//***************************************NRF24L01寄存器指令******************************************************* #define READ_REG 0x00 // 读寄存器指令 #define WRITE_REG 0x20 // 写寄存器指令 #define RD_RX_PLOAD 0x61 // 读取接收数据指令 #define WR_TX_PLOAD 0xA0 // 写待发数据指令 #define FLUSH_TX 0xE1 // 冲洗发送FIFO指令 #define FLUSH_RX 0xE2 // 冲洗接收FIFO指令 #define REUSE_TX_PL 0xE3 // 定义重复装载数据指令 #define NOP 0xFF // 保留 //*************************************SPI(nRF24L01)寄存器地址**************************************************** #define CONFIG 0x00 // 配置收发状态,CRC校验模式以及收发状态响应方式#define EN_AA 0x01 // 自动应答功能设置 #define EN_RXADDR 0x02 // 可用信道设置 #define SETUP_AW 0x03 // 收发地址宽度设置 #define SETUP_RETR 0x04 // 自动重发功能设置 #define RF_CH 0x05 // 工作频率设置 #define RF_SETUP 0x06 // 发射速率、功耗功能设置 #define STATUS 0x07 // 状态寄存器 #define OBSERVE_TX 0x08 // 发送监测功能 #define CD 0x09 // 地址检测 #define RX_ADDR_P0 0x0A // 频道0接收数据地址 #define RX_ADDR_P1 0x0B // 频道1接收数据地址

GSM跳频原理

GSM跳频原理 1.概述 引入跳频的原因:GSM体系中的引入有两个主要原因,第一是频率分集,跳频可以保证各个突发在不同的频率上发射,这样就可以对抗由于瑞利衰落等引起的影响,因为这些影响是因频 率而异的。第二是干扰分集,在高业务地区,由频率复用带来的干扰显得较为突出。 引入跳频后,我们可以对使用相同频率组的远地蜂窝小区配置不同的跳频序列,这样 就可以分散使用相同频率集的信道之间的干扰,从中得到收益。 引入跳频的目的:提高系统抗干扰,抗衰落能力。GSM的无线接口,也相应采用了跳频的方法+。 概念:跳频就是按要求改变信道所用的频率。 GSM中的说明:在GSM系统中,整个突发期间,传输频率保持不变,每个突发的持续时间为577us,故GSM系统的跳频属于慢速跳频(SFH)。 图一是不跳频信道的时间和频率关系,图2表示了一个跳频信道的时间和频率关系。从图中可以看出,信道频率在每个突发期间维持不变,而在突发与突发之间,频率的改变则是一种看似杂乱的伪随机序列关系。 图1 信道不跳频时的时间频率关系图 图2 信道跳频时的时间频率关系示意图 在图2中,如果跳频实现是在一个TRU内实现就是射频跳频,如果在一个小区内的多个TRU间实现就是基带跳频。 下面举例说明: 下图在基带跳频方式下,HSN=0、RTSL(radio Time SLot no)=2时在不同FN时刻下的信道的使用的跳频序列。在该BTS下,配置有4个TRX。

下图为另一个实例。 使用的为射频跳频和不跳频方式。 该实例中,BTS有2个TRX。

2.跳频实现流程 跳频的实现包括信道分配和信道激活过程。首先,由OMC(操作维护中心)配置BSS及BSS中各信道的参数,这些参数通过BSC下发到BTS的每个信道。再有用户通信需要时,由BSC激活相应的信道进行业务数据传送。 A.信道分配过程 信道分配通过由BSC向BTS在Abis接口上发送的若干条消息完成。包括BTS属性设置消息(Set BTS Attributes),无线载频属性设置消息(Set Radio Carrier Attributes)和信道属性设置消息(Set Channel Attributes)。其中与BTS中跳频实现直接相关的是信道属性设置消息。该消息由OMU接收,再由OMU传给OAMM模块。其详细说明可参考协议12.21。 FH 图3 FUC中 SET FH MODE中的跳频方式 0 不跳频 1 基带跳频BB FH 2 射频跳频RF FH 在BSC后台的数据表R_FHS表中可查看跳频模式及相关信息。 A中Object Instance参数表明本消息的目标信道,包括BTS号,收发信机号,时隙号。Starting Time指明该信道配置的起始时间即起始帧号。FU根据此消息确定本FU所管辖的8个时隙的跳频参数包括HSN、MAIO和ARFCN List(用于构成MA表),这些参数将在跳频算法中详细说明。 B.信道激活过程

NRF24L01功能使用文档

NRF24L01使用文档 基于c8051f330单片机

目录 芯片简介 (3) 1 NRF24L01功能框图 (4) 2 NRF24L01状态机 (5) 3 Tx与Rx的配置过程 (7) 3.1 Tx 模式初始化过程 (7) 3.2 Rx模式初始化过程 (8) 4控制程序详解 (9) 4.1 函数介绍 (9) 4.1.1 uchar SPI_RW(uchar byte) (9) 4.1.2 uchar SPI_RW_Reg (uchar reg, uchar value) (10) 4.1.3 uchar SPI_Read (uchar reg); (10) 4.1.4 uchar SPI_Read_Buf (uchar reg, uchar *pBuf, uchar bytes); (11) 4.1.5 uchar SPI_Write_Buf (uchar reg, uchar *pBuf, uchar bytes); (11) 4.1.6 void RX_Mode(void) (12) 4.1.7 void TX_Mode(void) (13) 4.2 NRF24L01相关命令的宏定义 (13) 4.3 NRF24L01相关寄存器地址的宏定义 (14) 5 实际通信过程示波器图 (16) 1)发射节点CE与IRQ信号 (17) 2)SCK与IRQ信号(发送成功) (18) 3)SCK与IRQ信号(发送不成功) (19)

芯片简介 NRF24L01是NORDIC公司最近生产的一款无线通信通信芯片,采用FSK调制,内部集成NORDIC自己的Enhanced Short Burst 协议。可以实现点对点或是1对6的无线通信。无线通信速度可以达到2M(bps)。NORDIC公司提供通信模块的GERBER文件,可以直接加工生产。嵌入式工程师或是单片机爱好者只需要为单片机系统预留5个GPIO,1个中断输入引脚,就可以很容易实现无线通信的功能,非常适合用来为MCU系统构建无线通信功能。

跳频原理

1、跳频技术 跳频就是按照预先定义的跳频序列(FHS)随机地改变正在进行通信的信道所占用频率的技术。在同一个频道组内,各跳频序列应是正交的,各信道在跳频传输过程中不能被碰撞。 过去采用跳频技术是为了确保通信的秘密性和抗干扰性,它首先被用于军事通信,后来发现在移动通信中,电波传播多径效应引起的瑞利衰落与传输的发射频率有关,衰落空洞将因频率的不同发生在不同地点,如果在通话期间载波频率在几个频点上变化,则传送信息仅在短时间内受到衰落空洞的影响,尤其是处于多径环境中的漫速移动的移动台通过采用跳频技术,能大大改善移动台的通信质量,可达到频率分集的效果。此外,跳频还具有干扰分集的作用。由于跳频频道间的不相关性,分离了来自许多小区的同频干扰,可提高蜂房小区的容量。 跳频系统分为快跳频和慢跳频两种。慢跳频的跳频频率低于或等于调制符号速率,即在一个或几个调制符号周期内跳频一次;快跳频的跳频频率大于调制符号速率,即在一个调制符号周期内跳频一次以上。 1、GSM的跳频技术 在GSM标准中采用慢跳频技术。每秒217跳,每跳周期为1200比特。GSM系统中的跳频分为基带跳频和射频跳频两种。 基带跳频的原理是将话音信号随着时间的变换使用不同频率发射机发射,其原理图如图6.26所示。 TR X1 TR X2 TR X3 TR X4 图6.26 基带跳频原理

由上图可见,基带跳频中可供跳频的频率数N(hop)≦基站载频数N(TRX)。基带跳频适用于合路器采用空腔耦合器的基站,由于这种空腔耦合器的谐振腔无法快速改变发射频率,故基站无法靠改变载频频率的方法实现跳频。实施的方框图如图6-27所示,其中,收发信机负责无线信号的接收与发送,基带处理单元进行信道的处理。 图6.27基带跳频实施框图 为了实现基带跳频,如上图所示,收发信机与基带处理单元之间的连接由路由转接器来控制,在用户通信过程中,要求无论移动台通信频率如何变化,负责处理用户链路的基带处理单元要保持不变,而基带跳频中所有收发信机的频率也不变。那么,怎样才能确保跳频实现呢?其实只要在路由转接器中根据预先设定的跳频方式来改变收发信机与基带处理单元之间的连接,就能保证该基带处理单元与用户之间的通信链路始终保持畅通。由此可见,由于频率变换的范围仅限于基站所拥有的收发信机的个数,故跳频的频率数N(hop) ≦基站载频数N(TRX)。 射频跳频是将话音信号用固定的发射机,由跳频序列控制,采用不同频率发射,原理图如图6-28所示。射频跳频为每个时隙内的用户均跳频(TRX1因为是BCCH 信道所在的载频,故不跳频),可供跳频的频率数N(hop)不受基站载频数N(TRX)的限制,GSM 规范规定每个小区最多可有64个频率供跳频。 1 2 3 4 5 6 7 TR X 1TR X 2 图6.28 射频跳频原理图 射频跳频适用于合路器采用宽带耦合器的基站,由于这种宽带耦合器与发射器频率的变化无关,故在跳频时载频与手机根据预设的跳频序

NRF24L01无线发射简易教程

NRF24L01 简易教程

先来看接口电路,使用的IO 口不是唯一的哦,可随意定义接口,当然是在使用IO 口模拟SPI 且IRQ 中断引脚不使用的使用查询方法判断接收状态的情况下了。作为初探我们就是用简单的IO 模拟SPI 的方法了,中断使用查询的方式。那么该教程讲解的接口与单片机的连接如下: 首先您需要了解NRF24L01,请参阅“NRF24L01 芯片中文资料”或者“NRF24L01 芯片英文资料”。 我们的教程是以一个简单的小项目为大家展示NRF24L01 的使用方法与乐趣。我们所写的教程均是以这种方式的呢,让您在学习的时候明白它能做什么,使您学起来不至于枯燥无味。 作为简易的教程,我们只需要知道它是怎么使用的就够了,我们本教程的目的是用NRF24L01 发送数据和接收数据,且接收方会对比发送的数据与接收的数据,若完全相同则控制LED 闪烁一次,并且把接收到的数据通过串口发送到PC 端,通过串口工具查看接收到的数据。 具体的要求如下: 1、具备发送和接收的能力。 2、发送32 个字节的数据,接收方接收到正确数据之后给予提示,通过LED 闪烁灯形 式。 3、把接收到的数据传送到PC 进行查看。 4、发送端每隔大约1.5 秒发送一次数据,永久循环。以上是程序的要求,若您想自行 设计出硬件接口,您也是可以添加一条呢:使用DIY 方 式设计NRF24L01 的接口板,且包含含单片机平台,使用PCB 方式或者万用板方式均可。如果您想让自己学的很扎实,那么推荐您自行做出接口板子呢。当然若您的能力不足,那么我们不推荐自行做板呢,因为这样会增加您学习的难度,反而起到了反效果呢。 我们使用的方式是画PCB 的方式呢,若您自己做了接口板子,那么您可以对比下一呢,O(∩_∩)O! 我们知道NRF24L01 的供电电压是1.9V~3.6V 不能超过这个范围,低了不工作,高了可能烧毁NRF24L01 芯片。我们常用的STC89C52 的单片机的供电电压是5V,我们不能直接给24L01 这个模块供电,我们需要使用AMS1117-3.3V 稳压芯片把5V 转成3.3V 的电压为24L01 模块供电。 为此我们的设计原理图如下:包含单片机最小系统、供电系统、下载程序接口、5V 转3.3V 电路、NRF24L01 模块接口。并且全部引出单片机的IO 口,另外还加了5 个电源输出接口,为扩展使用。还包括了电源指示LED 以及一个IO 口独立控制的LED,这个独立控制的LED用于NRF24L01 接收成功闪烁指示。为了保证系统的稳定性,在设计中添加了两个滤波电容。

NRF24L01参考程序(包含多个实例)

(相关人员如觉得本人水平低下,还请见谅) Nrf24L01的使用程序和使用方法和简单操作: 功能: 无线对发程序。两个模块a,b,实现按下一个按键,会在对方的数码管上显示3或4,在本机上显示1,2。 当一个模块,比如a模块。当两个按键按下其中一个,则会在另一个模块b上显示数字3,4(具体根据按下哪个按键)。以上功能描述,B模块按键按下,如同a模块一样的功能,不做系统性描述了。 下面给出程序中几个地方的解释: #define READ_REG 0x00 // 读寄存器指令 #define WRITE_REG 0x20 // 写寄存器指令 #define RD_RX_PLOAD 0x61 // 读取接收数据指令 #define WR_TX_PLOAD 0xA0 // 写待发数据指令 #define FLUSH_TX 0xE1 // 冲洗发送FIFO指令 #define FLUSH_RX 0xE2 // 冲洗接收FIFO指令 #define REUSE_TX_PL 0xE3 // 定义重复装载数据指令 #define NOP 0xFF // 保留 类似这种的描述,可以等同于READ_REG =0x00;这个是经过实际程序测试出来的,比如 以下程序: #include #define k 0xfe void main() { P1=k; } 则会出现此类结果:

MOSI = (uchar & 0x80); // output 'uchar', MSB to MOSI uchar = (uchar << 1); // shift next bit into MSB.. SCK = 1; // Set SCK high.. uchar |= MISO; // capture current MISO bit SCK = 0; 此处为spi的核心,是spi协议的编程,其中uchar |= MISO; 表示uchar |= MISO | uchar; MOSI = (uchar & 0x80);其中0x80是1000 0000,与上uchar,这种&,是按位与,故可以从uchar提取出一个电平给mosi。 MOSI = (uchar & 0x80); // output 'uchar', MSB to MOSI uchar = (uchar << 1); 这两句组合起来用,就实现了把uchar编程8位2进制数后的每一位都可以发送给mosi;Uchar的只待对象,就是上面的诸如#define FLUSH_TX 0xE1 这样的数,或者是相关的发送数据。 *pBuf这个并不是一个主要的问题,实际这个是涉及指针问题的,带*的跟地址有关系,但是我们其实不需要很关心编译的时候数据被具体存入哪个地址,即使是很重要的数据。 void init_NRF24L01(void) { inerDelay_us(100); CE=0; // chip enable CSN=1; // Spi disable SCK=0; // SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); // 写本地地址 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // 写接收端地址 SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); // 频道0自动ACK应答允许 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // 允许接收地址只有频道0,如果需要多频道可以参考Page21 SPI_RW_Reg(WRITE_REG + RF_CH, 0); // 设置信道工作为2.4GHZ,收发必须一致 SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //设置接收数据长度,本次设置为32字节 SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); //设置发射速率为1MHZ,发射功率为最大值0dB } 在整个初始化中我们看到: CE=0; // chip enable CSN=1; // Spi disable 这是设置整个的状态。如过状态设置成待机,则引脚可能变为高阻。(以上并非全部引脚)

GSM的基带跳频和射频跳频!(总结)

跳频技术源于军事通信,目的是为了获得较好的保密性和抗干扰能力。跳频分为快速和慢速两种,GSM中的跳频属于慢跳频。 跳频方式从时域概念上分为帧跳频和时隙跳频,从载频实现方式上分为射频跳频和基带跳频。 帧跳频:每个TDMA帧频点变换一次,这种方式下,每一个载频可以看 做一个信道,在一个小区中帧跳频时BCCH所在的TRX载频上的TCH不能 参与跳频,其它不同的载频应有不同MAIO,它是时隙跳频的特例。 时隙跳频:即每个TDMA帧的每个时隙频点变换一次,时隙跳频时 BCCH所在的TRX中的TCH可以参加跳频,但目前只在基带跳频时实现。 射频跳频:TRX的发射TX和接收RX都参与跳频。小区参与跳频频点数可 以超过该小区内的TRX数目。 基带跳频:每个发信机工作在固定的频率上,TX不参与跳频,通过基带 信号的切换来实现发射的跳频,但其接收必须参与跳频。因此小区跳频 频点数不可能大于该小区的TRX数 就ERICSSON的设备来说,有X总线的为基带跳频;基带跳频的频点数与载波数是一样的;而综合跳频(射频跳频)的频点数一般比载波数多。移动一般为基带跳频,联通一般用的是综合跳频。联通的可用频点少,在满足容量的基础上面,必须采用综合跳频来降低频点干扰咯。 基带跳频的技术难点在于如何实现信息数据的高速交换,满足217跳/秒的跳频速度及271kbits/s的数据传输速率。考虑以无线接口时隙为基础进行数据的交换,交换方法可以是空分、时分、数据包交换。基站在设计中采用了先进的总线技术,以时隙交换为基础实现基带跳频,其具体的实现方法为:每个发射机(TRX)调谐在固定频率,有一个固定的ID号。收发信机的编码器将下行信号编码,形成突发格式数据,编码器根据跳频算法计算本突发应调制的频道(即TRX号),加上有关功率控制等附加信息形成特定的数据包格式,收发信机的编码器在固定的时间(子时隙)内发出数据包。调制器对每个子时隙的数据包的TRX号进行检查,如和本TRX的ID号不同,则收下一子时隙;如相同,则将本子时隙的数据包接收下来,延时一时隙再发射到空间接口,实现了基带跳频。 射频跳频实现的技术难点主要表现在如何实现宽频带内的快速变频和在快速变频的同时如何保证信号的高质量。快速变频与信号的高质量是相互矛盾的。在GSM系统中各个时隙之间的间隙只有二十几微秒,要实现射频跳频,系统必须在时隙之间二十几微秒的保护时间内快速地从一个频点切换到另一个频点。按照以前的技术,在实现快速跳频的同时必然会带来调制精度下降、接收灵敏度恶化、杂散增加以及阻塞性能下降等一系列负作用。 采用紧密频率复用技术时,系统干扰是决定频率复用比的最重要因素。为了降低系统干扰,通常采用的技术是功率控制、非连续发射技术;而为了抗干扰,提高系统在同等干扰条件下的通信质量,通常采用跳频技术。 因此,跳频是GSM系统抗干扰和提高频率复用度的一项重要技术。按照GSM规范,慢跳频可以用于GSM通信系统中,跳频是指载波频率在一定范围内,按某种规律跳变。每个小区信道组的跳频功能都能单独激活或关闭。BCCH由于是广播信道,不参与跳频,TCH信道,SDCCH信道可以使用跳频。基站使用的跳频有两种,基带跳频和射频跳频,各自的实现原理是不相同的。 系统中具有多个相对独立的基带处理单元和载频处理单元,每一个载频处理单元的工作频点固定不变;每一路通信的业务信息由固定的基带单元处理,按照时间顺序和一定的跳频规则,通过总线结构,将处理后待发送的信息传送到工作于不同频点的载频单元处理并发送。这种跳频的实现方式称为“基带跳频”。在基带跳频中,每个发信机工作在一个不变的频率,

NRF24L01发送程序(可用)

//***************************************************发送程序**********************************************************// #include #include typedef unsigned char uchar; //****************************************NRF24L01端口定义*************************************** sbit M ISO =P1^5; sbit M OSI =P1^1; sbit SCK =P1^6; sbit CE =P1^7; sbit CSN =P1^2; sbit IRQ =P1^0; //***********************************发送缓冲区********************************************* uchar TxBuf[32]= { 0x01,0x22,0x32,0x04,0x08,0x01,0x07,0x08, 0x09,0x10,0x11,0x12,0x13,0x14,0x15,0x16, 0x17,0x18,0x19,0x20,0x21,0x22,0x23,0x24, 0x25,0x26,0x27,0x28,0x29,0x30,0x31,0x32, }; //

//*********************************************NRF24L01************************ ************* #define TX_ADR_WIDTH 5 // 5 uints TX address width #define RX_ADR_WIDTH 5 // 5 uints RX address width #define TX_PLOAD_WIDTH 32 // 20 uints TX payload #define RX_PLOAD_WIDTH 32 // 20 uints TX payload uchar const TX_ADDRESS[TX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01}; //本地地址 uchar const RX_ADDRESS[RX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01}; //接收地址 //***************************************NRF24L01寄存器指令******************************************************* #define READ_REG 0x00 // 读寄存器指令 #define WRITE_REG 0x20 // 写寄存器指令 #define RD_RX_PLOAD 0x61 // 读取接收数据指令 #define WR_TX_PLOAD 0xA0 // 写待发数据指令 #define FLUSH_TX 0xE1 // 冲洗发送FIFO指令 #define FLUSH_RX 0xE2 // 冲洗接收FIFO指令 #define REUSE_TX_PL 0xE3 // 定义重复装载数据指令 #define NOP 0xFF // 保留 //*************************************SPI(nRF24L01)寄存器地址**************************************************** #define CONFIG 0x00 // 配置收发状态,CRC校验模式以及收发状态响应方式 #define EN_AA 0x01 // 自动应答功能设置 #define EN_RXADDR 0x02 // 可用信道设置

相关文档