首页 | 期刊简介 | 编辑部 | 广告部 | 发行部 | 在线投稿 | 联系我们 | 产品信息索取
2024年12月26日星期四
2011年第01期
 
2010年第12期
 
2010年第11期
2010年第11期
 
2010年第10期
2010年第10期
 
2010年第09期
2010年第09期
 
2010年第09期
2010年第08期
 
2010年第07期
2010年第07期
 
2010年第06期
2010年第06期
 
2010年第05期
2010年第05期
 
2010年第04期
2010年第04期
 
2010年第03期
2010年第03期
 
2010年第02期
2010年第02期
 
2010年第01期
2010年第01期
 
2009年第12期
2009年第12期
 
2009年第11期
2009年第11期
 
2009年第10期
2009年第10期
 
2009年第9期
2009年第9期
 
2009年第8期
2009年第8期
 
2009年第7期
2009年第7期
 
2009年第6期
2009年第6期
 
2009年第5期
2009年第5期
 
2009年第4期
2009年第4期
 
2009年第3期
2009年第3期
 
2009年第2期
2009年第2期
 
2009年第1期
2009年第1期
 
2008年第12期
2008年第12期
 
2008年第11期
2008年第11期
 
2008年第10期
2008年第10期
 
2008年第9期
2008年第9期
 
2008年第8期
2008年第8期
 
2008年第7期
2008年第7期
 
2008年第6期
2008年第6期
 
2008年第5期
2008年第5期
 
2008年第4期
2008年第4期
 
2008年第3期
2008年第3期
 
2008年第2期
2008年第2期
 
2008年第1期
2008年第1期
基于nRF24E1无线传输的设计与应用

Design and Application of Wireless Transmission Based on nRF24E1

西南石油学院 于珍珠 何志敏 梅大成

摘要:本文从应用的角度出发,介绍了一种基于单片无线收发芯片nRF24E1的设计与应用,详细描述了nRF24E1的硬件结构,并介绍了硬件电路的设计难点,同时对单片机软件编程的主要函数做了详细说明。


引言

随着科技的进步,越来越多的无线技术正快速应用到各种产品中。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,节约了成本。

2005GEC.7
         
版权所有《世界电子元器件》杂志社
地址:北京市海淀区上地东路35号颐泉汇 邮编:100085
电话:010-62985649
E-mail:dongmei@eccn.com