基于nRF905的无线数据传输设备设计
扫描二维码
随时随地手机看文章
无线通信在机动性要求较强的设备中或人们不方便随时到达现场的条件下得到了越来越广泛的应用,如无线数据采集、无线设备管理和监控、汽车仪表数据的无线读取等都是其典型应用。
微功率短距离无线通信技术作为无线通信实用技术,一般使用单片射频收发芯片,加上微控制器和少量外围器件构成专用或通用无线通信模块,通常射频芯片采用GFSK(高斯频移键控)调制方式,工作于ISM(工业、科学、医疗)频段,通信模块包含简单透明的数据传输协议或使用简单的加密协议,用户不必对无线通信原理和工作机制有较深的了解,只要依据命令字进行操作即可实现基本的数据无线传输功能,因其功率小、开发简单快速而在工业、民用等领域应用广泛。本文介绍利用ATmega16单片机和无线数据收发芯片nRF905构成的短距离无线数据传输设备,给出了硬件和软件设计方案。
1 系统硬件设计
1.1 系统结构
无线数据传输系统结构如图1所示。该系统由外部数据设备和无线数据传输模块组成,外部数据设备为PC机或数据采集等设备,我们设计的主要是无线数据传输模块。无线数据传输模块基于微功耗单片射频收发器nRF905设计,采用Atmel公司的高性能、低功耗8位处理器ATmega16为主处理芯片,完成数据的处理和控制。
1.2 ATmega16和nRF905
Atmel公司的ATmega16单片机具有先进的RISC(精简指令集计算机)结构、非易失性程序和数据存储器,16 kB可编程Flash存储器、512 B的EEPROM和1 kB片内SRAM,具有丰富的外设接口,其USART(通用同步和异步接收器和转发器)是一个高度灵活的串行通信设备,SPI(串行外设接口)允许ATmega16与外设或其他AVR器件进行高速的同步数据传输。
nRF905是挪威Nordic VLSI公司推出的单片射频收发器,工作电压为1.9 V~3.6 V,工作于433/868/915 MHz这3个ISM频段,频道转换时间小于650μs,最大数据速率为100 kbit/s。nRF905由频率合成器、接收解调器、功率放大器、晶体振荡器和GFSK调制器组成,不需外加声表面滤波器,ShockBurstTM工作模式,自动处理字头和CRC(循环冗余检验),使用SPI接口与微控制器通信,配置非常方便。此外,其功耗很低,以-10 dBm输出功率发射时电流只有11 mA,工作于接收模式时的电流为12.5 mA,具有窄闲模式与关机模式,易于实现功率管理。
1.3 硬件电路
硬件电路主要由电源与复位电路、外部数据设备接口电路、单片机系统和nRF905应用电路等几部分组成。硬件电路如图2所示。
1.3.1 电源与复位电路
nRF905和单片机的典型工作电压为+3.3 V,而系统供电电源为+5V,所以采用低压差线性稳压器TPS7333实现+5 V~+3.3 V的线性稳压。为了实现稳定、可靠的复位,使用低电压工作的复位芯片TPS70733产生复位信号。
1.3.2 外部数据设备接口
无线数据传输模块与外部数据设备之间采用RS-232接口,ATmega16的PD0-PD1用于连接RS-232串口。通常,PC机与单片机用两根线方式进行全双工异步通信。由于AVR单片机输人输出为TTL电平,PC机配置的是RS-232标准串行接口,二者电气规范不一致,因此,使用ICL3221收发芯片实现串口电平转换。
数据传输速率在板可设置或通过外部数据设备设置。在板波特率利用ATmega16的PA7、PA6两位设置,可设置为9.6kbit/s、19.2 kbit/s、38.4kbit/s、115.2 kbit/s。利用外部数据设备设置波特率时,单片机的初始数据传输速率为9.6 kbit/s,PA7、PA6置为00状态,当单片机收到波特率没置命令后,数据传输速率调整为设定值。
1.3.3 单片机与nRF905接口电路
单片机与nRF905的接口电路很最要。nRF905内部有5个寄存器:状态寄存器、配置寄存器、发射地址寄存器、发射数据寄存器和接收数据寄存器。除了对寄存器读写外,还需对nRF905工作模式的切换进行控制。单片机与nRF905的信号连接见图3。
ATmega16与nRF905之间的双向数据传输使用SPI接口,单片机的PB7-PB4连接nRF905的SPI接口,PD2-PD7连接nRF905的控制信号和检测信号,用于nRF905的模式切换以及通信过程中必须的信号指示接口。
2 系统软件设计
2.1 数据传输过程
PC机(或其他外部设备)有数据传输或需设置设备参数时,通过串口将数据发送给单片机,单片机接收数据后,将需发送的数据(这里包括目标设备地址和所要发送的数据)通过SPI接口发送给nRF905,nRF905将数据加前导码和CRC码,将数据包发送。
当nRF905接收到有效数据后,DR置高,单片机检测到DR为高电平后,复位TRX_CE引脚,使nRF905进入空闲模式,通过SPI接口从nRF905中读出接收数据,然后通过USART传送给PC机或其他外部没备。
软件功能模块由CPU寄存器初始化、串行口初始化、串口收发送程序、SPI初始化、SPI收发送程序、I/O口初始化、nRF905配置寄存器操作、nRF905接收程序、发送程序、主程序模块组成。下面简要介绍主要的软件功能模块。
2.2 USART串口软件设计
AVR USART与AVR UART在寄存器位定义、波特率发生器、发送器操作、发送缓冲器的功能以及接收器操作等方面完全兼容,此外,接收缓冲器进行了两方面改进:增加了一个缓冲器;接收移位寄存器可以作为第3级缓冲。
2.2.1 串口数据帧格式
外部数据设备与无线数据传输设备间的双向数据传输使用相同的帧格式,帧格式由帧头、帧长、帧标志和数据组成。帧头为数据帧开始标志,固定为0FF81H,长度2字节。帧长指从帧标志开始至本帧结束的所有数据的字节数,不包括帧头、帧长本身,单位为字节,帧长占1字节。帧标志用以指示本帧数据的内容属性,长度为1字节。不同类型帧的数据长度和帧标志具体定义如表1所示。
数据指所传输的业务等内容,数据长度见表1,数据内容定义如下:
a) 波特率设置:01H~0AH对应波特率(单位为kbit/s)为2.4、4.8、9.6、14.4、19.2、28.8、38.4、57.6、76.8、115.2。
b) 设备地址设置:设备地址为00000000H~FFFFFFFFH。
c) 发射功率:00H为低功率;01H为高功率。
d) 工作频率:433 MHz频段,信道间隔100 kHz。
e) 发送数据:发送数据长度不定,最长不超过254字节。
2.2.2 USART初始化
初始化USART操作包括波特率设置、数据格式和UCSRB寄存器设置。USART的波特率寄存器UBRR和降序计数器相连接,一起构成可编程的预分频器或波特率发生器。UBRR值的计算由该公式完成:UBRR=fosc/(16baud)-1,其中Baud为波特率,fosc为系统时钟频率。通过设置UCSRC寄存器,设置数据格式为8位数据位和1位停止位。通过设置UCSRB寄存器,使能串口发送和接收,并响应接收完成中断。
2.2.3 数据发送和接收
数据发送采用查询方式。置位UCSRB寄存器的发送允许位TXEN将使能USART的数据发送,将需要发送的数据加载到发送缓冲区将启动数据发送,加载过程为CPU对UDR寄存器的写操作。发送数据时,按照帧格式在所需发送的数据前加上帧头、帧长、帧标志组帧发送。
数据接收采用中断方式。置位UCSRB寄存器的接收允许位RXEN将启动USART的数据接收器,通过读取UDR寄存器就可以获得接收缓冲器的内容。接收数据时,帧标志有效才能开始接收一帧数据,并根据读出的帧长信息完成接收规定长度的数据。
2.3 SPI接口软件设汁
本设计中SPI配置为主机模式,nRF905为从设备。SPI波特率最高可设置为1/2系统时钟,系统时钟为8 MHz,因此SPI速率可达4 MHz。此外,正确选择SPI的工作模式对SPI数据传输非常重要,AT-mega16的SCK的相位和极性有4种组合,SPI工作模式由CPOL、CPHA设置,根据nRF905的SPI读写时序,ATmega16的SPI工作模式应设置为模式0。
ATmega16与nRF905同时进行双向数据传输。ATmega16配置为SPI主机时,SPI接口不自动控制SS引脚,由用户软件来控制。ATmega16通过将从机的CSN引脚置低实现与从机的同步。SPI时钟由写入到SPI发送缓冲寄存器的数据启动,SPI MOSI引脚上的数据发送次序由寄存器SPCR的DORD位控制,置位时数据的LSB(最低位)首先发送,否则数据的MSB(最高位)首先发送。我们选择先发送MSB,同时接收到的数据传送到接收缓冲寄存器,CPU进行右对齐从接收缓冲器中读取接收到的数据。
应该注意,当需要从nRF905中读取多个数据时,即使nRF905并不需要ATmega16串行输出的数据,每读取一个数据前都要向SPI发送缓冲器写一个数据以启动SPI接口时钟。由于SPI系统的发送方向只有1个缓冲器,而在接收方向有2个缓冲器,所以在发送时一定要等到移位过程全部结束后,才能对SPI数据寄存器执行写操作;而在接收数据时,需要在下一个字节移位过程结束之前通过访问SPI数据寄存器读取当前接收到的数据,否则第1个数据丢失。
2.4 nRF905配置及收发流程
对nRF905寄存器的操作是一个很关键的问题,nRF905的所有配置都是通过SPI接口进行的。nRF905的SPI接口只有在掉电模式和standby模式是激活的。当CSN为低时,SPI接口开始等待一条指令,任何一条新指令均由CSN由高到低的转换开始。
nRF905发送模式工作过程如下:
a) 当ATmega16发送数据时,将接收设备地址和所要发送的数据通过SPI接口写入nRF905,SPI传输速率由初始化设置。
b) 置位TRX_CE、TX_EN,激活nRF905发送模式。
c) nRF905自动完成数据打包(加入前导码和CRC),包经过GFSK调制以100 kbit/s发送,当传输完毕DR置位。
d) 如果将AUTO_RETRAN位置高,nRF905将连续发送数据包,直至将TRX_CE引脚复位。
e) 当TRX_CE引脚被设置为低时,nRF905结束发送模式,并进入standby模式。
nRF905接收模式工作过程如下:
a) 将TRX_CE置位,TX_EN复位后650μs,nRF005进入接收模式等待数据到来。
b) 当nRF905在接收信号检测到载波,则CD(carrier detect)引脚置位;然后,如果接收到有效地址则AM(address match)置位,最后将接收到的有效数据包去掉前导码、地址,CRC正确后,将DR(data ready)引脚置位。
c) CPU复位TRX_CE引脚,使nRF905进入空闲模式,然后通过SPI接口读取数据。
d) 数据接收完毕后,nRF905 DR和AM引脚复位并准备进入下一个工作模式。
应该注意的是,在数据发送过程中无论将TRX_CE、TX_EN怎样设置,nRF905都会完成此次发送而不受影响,此后,进八所设置的工作模式。而在接收数据包的过程中TRX_CE或TX_EN状态改变,则nRF905会立即改变工作模式,丢失数据。
2.5 主程序流程
主程序流程图如图4所示。
3 结束语
我们采用 nRF905射频收发芯片和ATmega16微控制器设计了短距离无线数据传输设备,完成硬件电路和系统软件调试后,进行了无线数据收发实验。实验结果表明,在300 m通信距离,该无线传输设备工作稳定,能实现数据的高速有效传输,具有低功耗、抗干扰能力强等优点。