基于nRF24L01的2.4GHz无线通信系统设计

无线通信

32人已加入

描述

  随着科技的发展进步,互联网技术的高速发展,人们对无线通信质量的需求不断提高。老一代无线传输技术以无法满足现今需求。于是新一代无线传输孕育而生;2.4G无线传输技术就是其中之一。

  所谓的2.4G无线传输技术,其频段处于2.405GHz-2.485GHz(科学、医药、农业)之间。所以简称为2.4G无线技术。这个频段里是国际规定的免费频段,是不需要向国际相关组织缴纳任何费用的。这就为2.4G无线技术可发展性提供了必要的有利条件。而且2.4G无线技术不同于之前的27MHz无线技术,它的工作方式是全双工模式传输,在抗干扰性能上要比27MHz有着绝对的优势。这个优势决定了它的超强抗干扰性以及最大可达10米的传输距离。此外2.4G无线技术还拥有理论上2M的数据传输速率,比蓝牙的1M理论传输速率提高了一倍。这就为以后的应用层提高了可靠的保障。综合2.4G、蓝牙以及27MHz这三种常用的无线传输技术,2.4G有着自己独到的优势所在。相比蓝牙它的产品制造成本更低,提供的数据传输速率更高。相比同样免费的27MHz无线技术它的抗干扰性、最大传输距离以及功耗都远远超出。

  实现方案及硬件选型

  系统实现方案

  系统的目的是在单片机的控制下实现数据的无线传输 ,硬件电路结构如图 1 所示

  nRF24L01

  该系统主要以单片机为控制处理核心 ,由它完成对数据的采集处理以及控制数据的无线传输 ;电源电路提供系统所需各种电压 ;复位电路提供单片机所需的复位信号 ;晶振电路提供单片机的时钟信号 ;指示电路用来指示无线传输模块的工作状态 ;键盘电路用来发送各种类型的指令和数据 ;显示电路用来显示系统接收到的指令和数据。

  硬件选型

  设计采用低成本、性能好的 NORDIC 公司生产的 nRF24L01 芯片来完成。nRF24L01 是单片射频收发芯片 ,工作在全球开放的 2. 4 GHz 频段 ,有多达125 个频道可供选择 ;可通过 SPI 写入数据 ,并且有自动应答和自动再发射功能 ;芯片功耗非常低 ,以- 6 dBm的功率发射时 ,工作电流只有 9 mA ,接收时工作电流只有 12. 3 mA ;多种低功率工作模式使节能设计更方便 ,并且市场上有不少以它为核心的模块 ,便于购买。PTR6000 就是以 nRF24L01 为核心的无线收发模块 ,它可以通过软件设定地址 ,同时设置6 路接收通道地址 ,特别方便点对多点无线通信。其内部全面的寄存器配置 ,能够更全面地对无线数据传输的细节进行控制。所以本次的无线数传模块选用了 PTR6000 ,它的硬件接口如图 2 所示。

 nRF24L01

  在待机或掉电模式下 ,单片机通过 SPI 接口配置 PTR6000 的工作参数 ;在发射/ 接收模式下 ,单片机通过 SPI 接口发送和接收数据 ;中断输出接口IRQAM可提供如下 3 种中断输出 :发送完成中断TX DR、接收完成中断 RX DR、最大发送次数到MAX RT。

  由于 PTR6000 的工作电压为 1. 9~3. 6 V ,AVR系列单片机也工作在低电压 ,并且具有 SPI 接口 ,正好满足了这一点要求 ;考虑到显示部分使用串行方式 ,所使用的 I/ O 口不是很多 ,ATmega8L 足以满足要求 ,为了降低设计成本 ,控制芯片选择 ATmega8L。

  硬件电路设计

  电源、复位和晶振电路设计

  为了缩短开发周期 ,设计中由交流 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μF 电解电容接地 , 复 位 线 从 电 阻 和 电 容 之 间 引 出 , 接 到ATmega8L 的复位引脚。

  为了获得较高的振荡频率 ,设计采用了外接8 MHz晶体振荡器。由于 AVR 单片机独特的熔丝位设置 ,很容易造成单片机的锁死现象 ,因此在设置有关时钟的相关位时要格外小心。当然 ,即便是锁死了一般情况下还是可以通过外接有源晶振来解锁 ,并重新烧写正确的熔丝位。

  键盘和显示电路设计

  设计的键盘采用 3 ×3 的矩阵式键盘 ,3 条行线接到 ATmega8L 的 PC3、PC4、PC5 ,3 条列线分别接到PC0、PC1、PC2 ,并且 3 条列线带有上拉电阻。在每个上拉电阻的下面引出一条线 ,接到三输入与门74HC11 的输入口 ,然后输出口接到单片机的外中断1 引脚 ,这样设置的目的是用中断的方法来进行键盘的扫描读取。这一功能的实现主要还依靠软件的设计 ,使得在有按键按下时 ,能够通过 74HC11 产生一个中断信号 ,通知单片机现在有键按下。然后单片机会进入预先编写好的键盘处理程序进行键盘扫描 ,判断键值 ,并执行相应的操作。

  显示电路使用 2 个 8 段数码管 ,通过串转并的动态显示来实现 ,并且通过 2 个 I/ O 口控制 2 个三极管来分别进行驱动和控制。用 SPI 口进行显示数据的串行输出是一个比较方便的方法 ,但是考虑到PTR6000 通过单片机 SPI 口接收数据 ,有与显示冲突的可能。因此 ,设计时利用了 PD1、PD4 两个普通的 I/ O 口来分别作为数据线和时钟线 ,模拟时序来实现数据的串转并显示。

  软件设计

  主程序设计

  设计采用的是汇编语言 ,内存不能自动分配 ,在主程序的开始 ,首先对 ATmega8L 的堆栈指针进行设置。在 I/ O 空间 ,地址为 3E ( 005E) 和 3D( 005D)的 2 个 8 位寄存器构成了一个 16 位宽的堆栈指针寄存器 SP ,单片机上电复位后 ,堆栈寄存器的初始值为 SPH = 00、SPL = 00。AVR 的堆栈是向下生长的 ,即新数据推入堆栈时 ,堆栈指针的数值将减小。所以系统程序一开始就对堆栈指针寄存器进行了初始化 , 将 SP 的 值 设 在 数 据 存 储 器(SRAM) 空间的最高处。设置堆栈指针后的程序中 ,对各 I/ O 口的存储器进行配置 ,包括数据寄存器PORTx、数据方向寄存器 DDRx 。

  随后的初始化设置中 ,对外中断的触发方式进行相应的设置。最初设计采用的是低电平触发方式 ,但是由于低电平容易造成重复触发 ,造成键值读取错误 ,因此在后续的程序设计中将其改成了下跳沿触发 ,这样只要键盘消抖工作做好 ,就能解决重复触发的问题。

  在点对点和点对多点的短距离通信中 ,每一方随时 都 有 发 送 数 据 的 可 能 , 所 以 在 主 程 序 的PTR6000 初始化部分中设置为接收方式 ,并对其相关地址通道进行了开通和自动应答设置 ,并配置了其地址的的长度且按指定长度对地址进行了配置。在主程序中还设置了 PTR6000 的中断允许标志位 ,当有数据接收中断、发送完成中断、最大发送次数中断产生时 ,在 PTR6000 的 IRQ 引脚产生一个低电平 ,触发单片机外中断 0 ,进行相应的处理。

  键盘程序设计

  由硬件电路设计可知 ,键盘程序是放在中断服务程序中的 ,而且是下降沿触发中断 ,这一点有关的I/ O 口设置和寄存器有关位设置在主程序中完成 ,在此不再作具体说明。在外中断 1 服务程序的开始 ,首先对键盘延时消抖 ,判断是否真的有键按下 ,如果判断确实有键按下则向下执行键值判断程序 ,否则 ,判定为错误中断 ,中断返回。

  该部分键盘判断程序是通过线反转法完成的 ,首先 3 行送高电平 ,3 列送低电平 ,延时一个时钟周期后 ,读取管脚电平(PINC) ,并且对读取的数据进行保存 ;然后 3 列送高电平 ,3 行送低电平 ,延时一个时钟周期后 ,读取管脚电平(PINC) ,并且对读取的数据进行保存。然后两次读到的数据只保留低 6 位 ,高位全部清零 ,因为键盘只用到了低 6 位。然后再把 2 个键进行位或 ,得到一个数值 ,通过对这个数值的判断来判定是哪一个键按下了。

  显示程序设计

  显示程序设计总的思想是首先串行传送转换后的十位显示数码 ,然后选通十位 ,再进行适当延时后关闭。再串行传送转换后的个位显示数码 ,然后选通个位 ,进行适当延时后关闭。

  具体串行显示是这样实现的 :首先把要显示码寄存器进行带进位移位 ,然后判断进位标志位 C 来向串行数据输出口送 0 或 1 ,进行适当延时后 ,向串行时钟口送低电平 ,适当延时后送高电平 ,目的是产生一个上跳沿 , 把串行数据口的电平状态移入74HC164。这样连续传送 8 次 ,就将 8 位显示码送出。

  PTR6000 通信程序设计

  由于与 RF 协议相关的高速信号处理部分已经嵌入在模块内部 ,PTR6000 可与各种低成本单片机配合使用 ,也可以与 DSP 等高速处理器配合使用。此系统中 PTR6000 可以进行半双工通信 ,所有通信基点都初始化为接收模式 ,等待命令。当收到数据后 ,进行相应的操作。并且同样可以进行数据的发送 ,在数据发送完成后又立即转换成接收状态 ,等待再次有数据的到来。PTR6000 有 6 种工作模式如表 1所示 ,其中 PWR UP 和 PRIM RX 是模块寄存器参数。

 nRF24L01

  接收程序设计

  接收程序编写流程主要是在初始化的过程中 ,把本机设置成接收状态 ,这部分主要是在主程序的初始化配置的过程中完成的。具体的程序流程如下:

  ①设置 PTR6000 的配置寄存器 ,把 PTR6000 配置成允许数据接收完成中断、数据发送完成中断和最大发送次数到中断 3 个中断 ,当有以上 3 种中断中的任何一个产生时 PTR6000 的 IRQAM 引脚都产生一个低电平 ;

  ②给 EN RXADDR 接收地址允许寄存器送数01 只开通数据通道 0 ;并且通过给 EN AA 送数01 允许数据通道 0 自动应答允许 ;

  ③通过对 SETUP AW 配置 ,设置地址的长度为 3 个字节 ;并且在对数据通道 0 的地址寄存器RX ADDR P0 的 配 置 过 程 中 把 地 址 配 置 为000000 ,在 随 后 的 设 置 中 把 数 据 速 率 设 置 为2 Mbps;

  ④对接收缓冲寄存器清空 ,确保其能进入接收状态。最后 CE 送高电平 ,进入接收状态。

  发送程序设计

  当有键按下时就要启动相应的发送程序 ,发送子程序是在外中断 0 中被调用的。具体的程序流程如下 :

  ①PTR6000 的发送缓冲寄存器进行清空操作 ;

  ②程序中接收结点地址 (RX ADDR) 、最大发送次数(ARC) 和有效数据 (TX PLD) 通过 SPI 接口写入 PTR6000 ,在写入过程中对 SPI 中断标志位进行监测 ,如果数据传送没有完成保持 CSN 为低 ;

  ③配置寄存器 PRIM RX 位设为低 ,把标志寄存器 r1 和数据寄存器 r19 的数据不断写入 PTR6000的发送缓冲寄存器 ;

  ④设置 CE 为高 ,启动发射。CE 高电平持续时间最小为 10μs。若启用了自动应答模式 ,模块立即进入接收模式。

  PTR6000 中断服务程序设计

  PTR6000 的 3 种类型的中断都是通过 INT0 触发的 ,所以在程序的开始要对中断的具体来源进行判断。PTR6000 中有一个状态寄存器 (STATUS) ,其中包括 3 种中断的标志位。在中断服务程序的开始首先向 PTR6000 发送一个空操作指令 ,此时返回单片机 SPI 数据寄存器 SPDR 的数据就是当前状态寄存器的数值。接下来对其 3 个中断标志位进行判断 ,判断是接收完成中断、发送完成中断还是最大发送次数到中断 ,然后跳转到相应的服务程序部分。

  实验仿真

  基于以上设计方案 ,对系统进行了实验仿真。在搭建相关硬件平台的基础上 ,通过对相关软件程序的调试 ,系统很好地实现了点对点的无线通信 ,实验证实 ,基于 nRF24L01 的 2. 4 GHz 无线通信系统解决方案 ,可以实现小于 10 m 的短距离通信。此外还在 2 台计算机之间进行了不同格式、不同大小的文件的传输实验 ,其传输速率约为 512 kB/ S,具体结果

  如表 2 所示。通过提高单片机的晶振还可以加快文件的传输速度 ,最快可以达到 2 Mb/ s。

  nRF24L01

  2. 4 GHz 无线通信是一项新兴的短距离无线通信解决方案 ,主要面向的应用领域是低速率无线个人区域网 ,典型特征是近距离、低功耗、低成本 ,主要适用于小型廉价设备的无线联网和控制。该文提出一种基于 2. 4 GHz 无线收发芯片 nRF24L01 的短距离无线数据传输系统设计方法 ,在实际应用时将系统作为一个模块可方便地移植 ,以便构建更为复杂的无线通信网络 ,可应用于无线抄表、工业数据采集系统、安全防火系统以及水文气象监控等领域 ,具有很高的实用价值。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分