引言
随着科技的进步,越来越多的无线技术正快速应用到各种产品中。nRF24E1是挪威Nordic公司推出的一款单片2.4GHz无线收发芯片,采用0.18
m CMOS技术制造,以增强型51为内核,9路10bitADC,采样率可达100K,具有125个频道,传输速率可达1Mbps,内置CRC校验并支持多点通信。1.9~3.6V低功耗工作,内置电压监视和复位电路,多种省电模式可供选择,待机电流仅为2
A。nRF24E1可广泛应用于无线水表、煤气、电表;无线智能传感器;无线数据采集装置;无线身份识别智能卡;无线火警探头;无线耳机、麦克风;无线鼠标、无线键盘;PDA手持终端等短距离无线通信场所。
概述
nRF24E1功能介绍
nRF24E1结构框图如图1所示。
图1 nRF24E1结构框图(略)
微处理器
nRF24E1微处理器的指令系统与工业标准的8051相兼容,但两者的执行时序稍有不同。通常,nRF24E1片内微控制器、的指令周期为4到20个指令周期,而工业标准的8051为12~48个时钟周期。nRF24E1的中断控制器支持ADC、SPI、RF接收器1、RF接收器2、唤醒定时器、5个中断源。nRF24E1拥有3个与8052一样的定时器。在传统的异步通信方式下,与8051兼容的UART可用作定时器1和定时器2的波特率发生器。nRF24E1的CPU集成了2个数据指针,以便于和外部RAM进行数据传递。晶振直接为nRF24E1的微控制器提供了时钟来源。
nRF24E1的微控制器中有256字节的数据RAM和512字节的ROM。上电复位或经软件初始化后,处理器自动加载ROM引导区中的代码。用户程序通常是在引导区的引导下,从外部串口EEPROM加载到1个4KB的RAM中,这个4KB的RAM也可作存储数据用。如果不使用掩膜ROM(即内含的ROM),程序代码必须从外部非易失性存储器中加载。这时,默认的启动引导区使用SPI接口的“通用25320”EEPROM。为了控制标准8051没有的功能,nRF24E1增加了一些特殊功能寄存器,如RADIO(P2)、ADCCON、ADCDATAH、PWMCON、PWMDUTY、RSTREAS等。其P0和P1也和标准8051有所不同,其它大部分的SFRs均与标准8051相同。
PWM
nRF24E1有一个可编程PWM输出,它和DIO9共同复用P0.7引脚,并可软件编程决定PWM工作于6、7或8位。
SPI(串行外设接口)
SPI的3个口(SDI、SCK和SDO)与GPIO(DIN0、DIO0和DIO1)共同复用P1口的三个引脚(P1.0、P1.1、P1.2)。SPI硬件不产生任何片选信号,通常用GPIO位(P0口)来作为外部SPI设备的片选口。
端口逻辑
nRF24E1有1个输入,10个输出引脚。P0(DIO2~DIO9)和P1(DIO0、DIO1、DIN0)默认配置为GPIO(通用输入输出端口)。多数GPIO在程序控制下可复用,这些复用功能包括两个外部中断,UART
RXD和TXD,一个SPI主机端口,三个定时器和PWM输出。
RTC唤醒定时器、WTD(看门狗)和RC振荡器
nRF24E1内有一个低功耗的RC振荡器。该振荡器在VDD≥1.8V时,会持续工作。RTC唤醒定时器和WTD(看门狗)是2个16位的可编程定时器,它们的工作时钟为RC振荡器的LP_OSC。唤醒定时器和看门狗的定时时间约为300
s~80ms,其默认值为10ms。唤醒定时器由用户软件控制启动和停止。看门狗在复位后被禁止,再次复位后才能被激活。
A/D转换器
nRF24E1内有9通道10位ADC,线性转换时间为每10位48个CPU指令周期。A/D转换器可在ARFE输入和内部1.22V的带隙参考之间进行软件选择。转换器的9个输入可由软件进行选择。通道0~7可以转换对应引脚AIN0~AIN7上的电压值,通道8用于对nRF24E1工作电压的监控。A/D转换器默认配置为10位,为满足需要,可通过软件使其工作于6位、8位或12位方式。
无线收发器
nRF24E1收发器通过内部并行口或内部SPI口与其他模块进行通信,同单片射频收发器nRF2401具有相同的功能。DuoCeiver接收器输出的数据准备信号,可通过程序使其作为微处理器的中断或通过GPIO口传给CPU。nRF24E1工作于全球开放的2.4~2.5GHz频段。收发器由1个完整的频率合成器、1个功率放大器、1个调节器和2个接收器组成。输出功率、频道和其它射频参数可通过对RADIO寄存器(SFR
0xA0)编程进行控制。发射模式下,射频电流消耗仅为10.5mA,接收模式下为18mA。为了节能,可通过软件程序控制收发器的开/关。
硬件设计
nRF24E1收发核心电路如图2所示。
图2 nRF24E1收发核心电路(略)
由于本设计要求PCB板越小越好而且成品要密封,所以如何供电成了这次设计的难点。若使用电池则有持续时间短、占用面积大和易震动脱落等缺点。nRF24E1电源电压是1.9~3.6V,且功耗很低。MAX2323及串口EEPROM25AA320均可工作在3.0V,因此在该设计中摒弃了由电池供电的做法,而采用了从串口取电源作为整个电路的供电系统。其串口取电源电路如图3所示。
图3 串口取电源电路(略)
软件设计
nRF24E1具有增强型8051内核,Keil C51支持nRF24E1开发,因此利用C51开发经验即可编出高效优质的代码。此程序是经Keil
C51 V7.05编译并调试通过,篇幅有限,仅列出主要功能函数。
(1)初始化程序如下:
void Init(void){
//配置I/O口
P0_ALT=0x06; // P0.1为RXD,P0.2为TXD
P0_DIR=0x09; // P0.0和P0.3设为输入
P1_DIR=0x03; // P1.0和P1.1设为输入
PWR_UP=1; //开Radio,读时不用,写时为电源
SPICLK=0; //SPI时钟为XTAL/8
SPI_CTRL=0x02; //把SPI与收发通道1(CH1)相连
//串口通讯初始化
TH1 = 0x0F3; // 晶振为16MHz,波特率为19200(当T1M=1且SMOD=1时)
CKCON |= 0x10; // T1M=1 (计数器时钟为CPU时钟的1/4)
PCON = 0x80; // SMOD=1 (双倍波特率)
SCON = 0x52; // 采用串口模式1,使能接收器
TMOD = 0x20; // 使用计数器1,8位计数值自动重载
TCON = 0x40; // 启动计数器
}
(2)接收器配置函数
void Init_Receiver(void){
unsigned char b;
CS = 1; //打开配置方式
Delay100us(0);
for(b=0;b<rconf.n;b++) //b<15
{
SpiReadWrite(rconf.buf[b]); //发送接收器配置字
}
CS = 0; // 关配置方式
CE = 1; // 使能收发功能
} (3)接收函数
void Receiver(void){
unsigned char b;
CS = 1; //打开配置模式
Delay100us(0);
for(b=0;b<rconf.n;b++){
SpiReadWrite(rconf.buf[b]); //发送接收器配置字
}
CS = 0; //关配置模式
for(;;){
b = ReceivePacket(); //接收数据包
PutChar(b); //串口通信函数,将接收到的数据通过串口传送
}
}
(4)发送函数
void Transmitter(void){
unsigned char b;
CS = 1;
Delay100us(0);
for(b=0;b<tconf.n;b++){
SpiReadWrite(tconf.buf[b]); //发送发送器配置字
}
CS = 0;
for(;;){
b= ReadADC(); // 读A/D转换结果
PutChar(b);
TransmitPacket(b); // 发送数据包
}
}
此程序除了以上函数外,还有串口通讯函数、读A/D转换结果函数、接收包处理函数和发送包处理函数等。
结论
本设计电路简单,易于实现。经实际调试应用完全可用于点对点及点对多点的无线数据传输,收到了良好的效果。1Mbps完全满足一般无线传输的要求。若进行批量生产时可将程序写进nRF24E1的内部RAM中,从而省去了外部串口EEPROM,节约了成本。
|