
滨江学院
课程论文
题 目 基于NRF24L01的无线通信系统设计
专 业__ 通 信 工 程_____________
学生姓名_____金 建 超__________
学 号____***********___________
二O 一二 年 十二 月 二十九 日
基于nRF24L01的2.4 GHz无线通信系统设计
摘要:提出一种基于NORDIC公司生产的2.4 GHz无线收发芯片nRF24L01的短距离无线数据传输系统设计方法。介绍了系统的实现方案和硬件选型,该系统以ATmega8L为控制核心,PTR6000为无线传输模块;详细描述了硬件电路和软件程序设计方法,其中软件设计包括单片机主程序设计和PTR6000通信程序设计等;在硬件和软件设计的基础上,通过实验仿真验证了系统的正确性和可靠性,为系统实际应用提供了依据,最终达到了设计的要求。
关键词:nRF24L01;ATmega8L;无线通信
引言
2.4 GHz频段是全球开放的ISM频段,使用者无需申请许可证,给开发者和用户带来了很大方便;同时2.4 GHz无线射频技术采用专用的数据通道,并且搭载有跳频技术和数据加密,出现相似频段的可能性大大降低,从而减少了信号之间的干扰,保证了传输的稳定性。因为具有这些优点,蓝牙,ZigBee,Wi—Fi等短距离无线数据通信均工作在2.4 GHz ISM频段。在一般应用场合,以上这些技术显得过于复杂,其成本也过高,很难满足快速开发和低成本的要求。因此,目前迫切需要一种低成本、低功耗、能够快速开发应用的方案,来实现设备的无线连接。该文提出一种利用工作频率为2.4 GHz的无线收发芯片nRF24L01,进行短距离的点对点的无线通信系统设计方案。
1实现方案及硬件选型
1.1系统实现方案
系统的目的是在单片机的控制下实现数据的无线传输,硬件电路结构如图1所示。
图1硬件电路结构
该系统主要以单片机为控制处理核心,由它完成对数据的采集处理以及控制数据的无线传输;电源电路提供系统所需各种电压;复位电路提供单片机所需的复位信号;晶振电路提供单片机的时钟信号;指示电路用来指示无线传输模块的工作状态;键盘电路用来发送各种类型的指令和数据;显示电路用来显示系统接收到的指令和数据。
1.2硬件选型
设计采用低成本、性能好的NORDIC公司生产的nRF24I_I)l芯片来完成。nRF24L01是单片射频收发芯片,工作在全球开放的2.4 GHz频段,有多达125个频道可供选择;可通过SH写人数据,并且有自动应答和自动再发射功能;芯片功耗非常低,以一6 dBm的功率发射时,工作电流只有9 mA,接收时工作电流只有12.3 mA;多种低功率工作模式使节能设计更方便,并且市场上有不少以它为核心的模块,便于购买。PTR6000就是以nRF24I/)l为核心的无线收发模块,它可以通过软件设定地址,同时设置6路接收通道地址,特别方便点对多点无线通信。其内部全面的寄存器配置,能够更全面地对无线数据传输的细节进行控制。所以本次的无线数传模块选用了PTR6000,它的硬件接口如图2所示。
在待机或掉电模式下,单片机通过SPI接口配置PTR6000的工作参数;在发射/接收模式下,单片机通过SP接口发送和接收数据;中断输出接I=IIRQAM可提供如下3种中断输出:发送完成中断TX—DR、接收完成中断RX DR、最大发送次数到MAX—RT。由于PTR6000的工作电压为1.9~3.6 V,AVR系列单片机也工作在低电压,并且具有SPI接口,正好满足了这一点要求;考虑到显示部分使用串行方式,所使用的I/O口不是很多,ATmega8L足以满足要求,为了降低设计成本,控制芯片选择ATmega8L。
2.硬件电路设计
2.1电源、复位和晶振电路设计
为了缩短开发周期,设计中由交流220 V转直流12 V的部分由市场上的电源模块来代替。虽然ATmega8L可工作在2.7~5.5 V宽电压,但是由于PTR6000工作在1.9—3.6 V,超出这个电压范围就有被烧坏的可能,因此在用三端稳压管7805将12 v转换为5 V后,还要用1117将5 V的直流电转换到3.3 V,这样PTR6000和Atmega8L都能正常工作。此外,为了适应移动测试的需要,设计的电路上还配备了电池槽,以便用2节干电池为系统提供3 V直流电压。设计采用简单的阻容复位电路,由于ATmega8L是低电平复位,电源经1 K电阻和22心电解电容接地,复位线从电阻和电容之间引出,接到ATmega8L的复位引脚。为了获得较高的振荡频率,设计采用了外接8 MHz晶体振荡器。由于AVR单片机独特的熔丝位设置,很容易造成单片机的锁死现象,因此在设置有关时钟的相关位时要格外小心。当然,即便是锁死了一般情况下还是可以通过外接有源晶振来解锁,并重新烧写正确的熔丝位。
2.2键盘和显示电路设计
设计的键盘采用3 X 3的矩阵式键盘,3条行线接到ATmega8L的PC3、PCA、PC5,3条列线分别接到PC0、PCI、PC2,并且3条列线带有上拉电阻。在每个上拉电阻的下面引出一条线,接到三输入与门74HCll的输人口,然后输出口接到单片机的外中断1引脚,这样设置的目的是用中断的方法来进行键盘的扫描读取。这一功能的实现主要还依靠软件的设计,使得在有按键按下时,能够通过74HCll产生一个中断信号,通知单片机现在有键按下。然后单片机会进入预先编写好的键盘处理程序进行键盘扫描,判断键值,并执行相应的操作。显示电路使用2个8段数码管,通过串转并的动态显示来实现,并且通过2个I/O口控制2个三极管来分别进行驱动和控制。用SPI口进行显示数据的串行输出是一个比较方便的方法,但是考虑到PTR6000通过单片机SPI口接收数据,有与显示冲突的可能。因此,设计时利用了PDl、PD4两个普通的I/O口来分别作为数据线和时钟线,模拟时序来实现数据的串转并显示。
3 软件设计
3.1主程序设计
设计采用的是汇编语言,内存不能自动分配,在主程序的开始,首先对ATmega8L的堆栈指针进行设置。在I/O空间,地址为$3E($005E)和$3D($005D)的2个8位寄存器构成了一个16位宽的堆栈指针寄存器sP,单片机上电复位后,堆栈寄存器的初始值为SPH=$00、SPL=$00。AVR的堆栈是向下生长的,即新数据推入堆栈时,堆栈指针的数值将减小。所以系统程序一开始就对堆栈指针寄存器进行了初始化,将sP的值设在数据存储器(sRAM)空间的最高处。设置堆栈指针后的程序中,对各I/0口的存储器进行配置,包括数据寄存器
PORTx、数据方向寄存器DDRx。随后的初始化设置中,对外中断的触发方式进行相应的设置。最初设计采用的是低电平触发方式,但是由于低电平容易造成重复触发,造成键值读取错误,因此在后续的程序设计中将其改成了下跳沿触发,这样只要键盘消抖工作做好,就能解决重复触发的问题。在点对点和点对多点的短距离通信中,每一方随时都有发送数据的可能,所以在主程序的PTR6000初始化部分中设置为接收方式,并对其相关地址通道进行了开通和自动应答设置,并配置了其地址的的长度且按指定长度对地址进行了配置。在主程序中还设置了PTR6000的中断允许标志位,当有数据接收中断、发送完成中断、最大发送次数中断产生时,在PTR6000的IRQ引脚产生一个低电平,触发单片机外中断0,进行相应的处理。
3.2键盘程序设计
由硬件电路设计可知,键盘程序是放在中断服务程序中的,而且是下降沿触发中断,这一点有关的I/O口设置和寄存器有关位设置在主程序中完成,在此不再作具体说明。在外中断1服务程序的开始,首先对键盘延时消抖,判断是否真的有键按下,如果判断确实有键按下则向下执行键值判断程序,否则,判定为错误中断,中断返回。该部分键盘判断程序是通过线反转法完成的,首先3行送高电平,3列送低电平,延时一个时钟周期后,读取管脚电平(PINC),并且对读取的数据进行保存;然后3列送高电平,3行送低电平,延时一个时钟周期后,读取管脚电平(PINC),并且对读取的数据进行保存。然后两次读到的数据只保留低6位,高位全部清零,因为键盘只用到了低6位。然后再把2个键进行位或,得到一个数值,通过对这个数值的判断来判定是哪一个键按下了。
3.3显示程序设计
显示程序设计总的思想是首先串行传送转换后的十位显示数码,然后选通十位,再进行适当延时后关闭。再串行传送转换后的个位显示数码,然后选通个位,进行适当延时后关闭。具体串行显示是这样实现的:首先把要显示码寄存器进行带进位移位,然后判断进位标志位C来向串行数据输出口送0或1,进行适当延时后,向串行时钟口送低电平,适当延时后送高电平,目的是产生一个上跳沿,把串行数据口的电平状态移入74HCl。这样连续传送8次,就将8位显示码送出
3.4 PTR6000通信程序设计
由于与RF协议相关的高速信号处理部分已经嵌入在模块内部,PTR6000可与各种低成本单片机配合使用,也可以与DSP等高速处理器配合使用。此系统中PTR6000可以进行半双工通信,所有通信基点都初始化为接收模式,等待命令。当收到数据后,进行相应的操作。并且同样可以进行数据的发送,在数据发送完成后又立即转换成接收状态,等待再次有数据的到来。PTR6000有6种工作模式如表1所示,其中PWR—UP和PRIM—RX是模块寄存器参数。
3.4.1接收程序设计
接收程序编写流程主要是在初始化的过程中,把本机设置成接收状态,这部分主要是在主程序的初始化配置的过程中完成的。具体的程序流程如下:①设置PTR6000的配置寄存器,把门R6000配置成允许数据接收完成中断、数据发送完成中断和最大发送次数到中断3个中断,当有以上3种中断中的任何一个产生时PTR6000的IRQAM引脚都产生一个低电平;②给EN RXADDR接收地址允许寄存器送数$01只开通数据通道0;并且通过给EN从送数$01允许数据通道0自动应答允许;③通过对SETUP AW配置,设置地址的长度为3个字节;并且在对数据通道0的地址寄存器RX ADDR P0的配置过程中把地址配置为$000000,在随后的设置中把数据速率设置为2 Mbps;④对接收缓冲寄存器清空,确保其能进入接收状态。最后CE送高电平,进入接收状态。
3.4.2发送程序设计
当有键按下时就要启动相应的发送程序,发送子程序是在外中断0中被调用的。具体的程序流程如下:①PTR6000的发送缓冲寄存器进行清空操作;②程序中接收结点地址(RX ADDR)、最大发送次数(ARC)和有效数据(TX—P皿)通过SPI接口写入PTR6000,在写入过程中对SPI中断标志位进行
监测,如果数据传送没有完成保持CSN为低;③配置寄存器PRIM—RX位设为低,把标志寄存器rl和数据寄存器r19的数据不断写入PTR6000的发送缓冲寄存器;④设置CE为高,启动发射。CE高电平持续时间最小为10肚s。若启用了自动应答模式,模块立即进入接收模式。
3.5 PTR6000中断服务程序设计
PTR6000的3种类型的中断都是通过INT0触发的,所以在程序的开始要对中断的具体来源进行判断。PTR6000中有一个状态寄存器(STATUS),其中包括3种中断的标志位。在中断服务程序的开始首先向FrR6000发送一个空操作指令,此时返回单片机SPI数据寄存器SPDR的数据就是当前状态寄存器的数值。接下来对其3个中断标志位进行判断,判断是接收完成中断、发送完成中断还是最大发
送次数到中断,然后跳转到相应的服务程序部分。
4实验仿真
基于以上设计方案,对系统进行了实验仿真。在搭建相关硬件平台的基础上,通过对相关软件程序的调试,系统很好地实现了点对点的无线通信,实验证实,基于nRF24L01的2.4 GHz无线通信系统解决方案,可以实现小于10 m的短距离通信。此外还在2台计算机之间进行了不同格式、不同大小的文件的传输实验,其传输速率约为512 kB/S,具体结果如表2所示。通过提高单片机的晶振还可以加快文件的传输速度,最快可以达到2 Mb/s。
表2 2.4 GI-Iz无线通信系统文件传输速率对照表
5结束语
2.4 GHz无线通信是一项新兴的短距离无线通信解决方案,主要面向的应用领域是低速率无线个人区域网,典型特征是近距离、低功耗、低成本,主要适用于小型廉价设备的无线联网和控制。该文提出一种基于2.4 GHz无线收发芯片nRF24IDl的短距离无线数据传输系统设计方法,在实际应用时将系统作为一个模块可方便地移植,以便构建更为复杂的无线通信网络,可应用于无线抄表、工业数据采集系统、安全防火系统以及水文气象监控等领域,具有很高的实用价值。
参考文献
[1]张克彦.AVR单片机实用程序设计[M].北京:北京航空航天大学出版社,2004.
[2] 高传善,毛迪林,曾袖.数据通信与计算机网络[M].北京:高等教育出版社,2004,12.
[3] 王秀梅.低功耗2.4 GHz无线通信系统的设计与实现[J].中国数据通信,2004(11):57—61.
[4]
