基于nRf2401和CP2102的USB2.0无线测控网络
0 前言
本文引用地址:http://www.amcfsurvey.com/article/186890.htm现在,越来越多的无线技术被应用到自动控制系统中。nRf2401是挪威Nordic公司推出的单片2.4GHz无线收发一体芯片,支持多点间通信,最高传输速率达到1Mbit/s,可以用于无线网络中。
USB2.0口传输速率是480Mbps,有即插即用和热插拔功能。接口提供内置电源,可以向外设提供5V和最多500mA的电源。因此在以计算机为上位机的控制系统中,USB口比较适合作为计算机与测控网络的接口。
USB接口器件的开发过程比较复杂,开发者需要知道USB协议、USB设备驱动程序开发、主机应用程序开发等知识,使用USB-UART桥接电路CP2102可以避免上述麻烦。
系统的设计思想如图1所示。系统是由 CP2102、nRF2401、单片机等组成。
图1 系统设计思想
nRF2401是业界体积最小、功耗最低、外围元件最少的低成本射频芯片。有125个频道,速率(0~1Mbps)、发射功率和工作频率等所有工作参数可编程设置。每个芯片可以通过软件设置最多40bit地址,而且只有收到本机地址时才会输出数据。内置CRC纠检错硬件电路和协议。nRf2401内置频率合成器、功率放大器、晶体振荡器和调制器等功能模块。工作于2.4~2.5GHz ISM自由频段,采用SoC方法设计,只需少量外围元件便可组成射频收发电路。nRF2401没有复杂的通信协议,它完全对用户透明,同种产品之间可以自由通信。
CP2102是美国Silicon公司生产的高集成度USB-UART桥接电路。它们能够用最简单的外部电路、最少的外部器件简便实现USB2.0到UART的转换。
使用CP2102作为USB接口器件最大的特点是开发方便:①厂商免费提供适用于Windows(含Windows CE)、Linux等操作系统的驱动程序。驱动程序将计算机的USB口虚拟成一个COM口,计算机使用普通操作串口的命令访问虚拟COM口。②内置USB2.0全速功能控制器、USB收发器、48MHz内部晶体振荡器、1KB字节 E2PROM及异步串行数据总线(UART),电路无需任何外部的USB器件。③CP2102的UART接口波特率为300bps~921.6kbps,可以满足无线网络的传输要求。
2硬件电路的实现
上位机系统电路如图2所示。单片机选用ATmega16,是ATMEL公司生产的高性能、低功耗的8 位AVR® 微处理器,采用先进的RISC 结构,数据吞吐率高达1 MIPS/MHz。片内集成有16K 字节可编程Flash、512 字节的E2PROM、1K字节的SRAM、两个可编程 的串行UART和可工作于主机/从机模式的SPI 串行接口。
图2 上位机系统电路
CP2102无需外部电阻和晶体,VBus与REGIN引脚连到USB接口的Vbus端,在REGIN端加1μF的去耦电容。CP2102与单片机接口是标准UART电平,RTX、TXD引脚分别是串口的接收、输出端,与单片机的对应引脚相连。CP2102的USB端与计算机的USB口连接。CP2102的SUSPEND脚是USB口挂起信号端,接到单片机的PC4引脚。
图3 无线收发模块
上位机所有器件均由计算机的USB口提供电源。ATmega16L的电源电压范围为2.7~5.5V,nRF2401的电源电压范围为1.9~3.6V,利用计算机USB口的+5V电源,通过MIC2937A芯片将电压转换为3.3V。
无线收发模块电路如图3所示。nRf2401外围元件很少,可使用单鞭天线或环形天线,电感需要采用高Q高精度的贴片绕线高频电感,晶体需采用高稳定晶体,电容应选用高稳定贴片元件。nRf2401通过SPI接口与单片机进行通讯,ATmega16集成了SPI接口(CLK、MISO、MOSI引脚),与nRf2401的CLK1、DATA相连接。nRf2401的CS是片选端,CE是发送或接收控制端,PWR_UP是电源控制端,分别由单片机的PC5、PC6、PC7引脚控制。nRf2401的DR1为高时表明在接收缓冲区有数据,接单片机的中断引脚。
3 单片机程序设计
3.1单片机对串口的编程
ATmega16集成有串口,使用前需要先对它进行初始化。具体过程如下:①UCSRA=0,异步正常模式;②UBRR=1,设置波特率为500Kbps;③UCR= 0x98,使能接收中断,允许发送;④SREG=0x80;//开中断。
初始化后,可以通过串口与CP2102进行数据交换。采用中断方式接收,当有串口数据到达时单片机产生中断,单片机响应中断从接收缓冲器读入数据。串口接收中断程序如下:
#pragma interrupt_handler uart_rec:8
unsigned char i;
void uart_rec()
{i=UDR;}
串口发送程序如下:①UDR=1,发送数据;②while(!(USR0x40)),等待发送结束;③USR=~0x40,清发送完标志。
3.2单片机对nRf2401的编程
单片机对nRf2401的编程包括对nRf2401进行配置、发送数据、接收数据等程序。
当PWR_UP=1、CE=0、CS=1时nRf2401进入配置工作状态。配置字最高可达18字节,作用是使nRf2401子系统能够处理RF协议。配置字从最高位开始,依次通过SPI接口(CS、CLK1和DATA)送给配置寄存器。本系统配置为ShockBurst方式,配置字分为如下四块:有效数据宽度(DATA2_W和DATA1_W)、地址宽度(ADDR2和ADDR1)、接收频道地址(ADDR_W)、CRC配置(CRC_L和CRC_EN)。其值从高到低分别为8EH, 08H, 1CH, 20H, 50H, 0AH, 0
BH, 0CH, 0DH, 0EH, 0AAH, 28H, 0AH, 0BH, 0CH, 0A3H, 6FH, 65H。配置后nRf2401的通道1数据段长度80bit(其中nRf2401的序列号8byte + 2byte温度数据),地址段长度40bit,通道1硬件地址0AAH, 28H, 0AH, 0BH, 0CH,启用16位片上校验功能,单通道接收,突发传递模式,通信速率1Mbit/s,晶振频率16MHz,工作频段2.450GHz,开始处于接收状态。
当PWR_UP=1、CE=1、CS=0时为收发方式。ShockBurst发送过程如下:①CE=1,nRf2401开始工作;②将接收节点地址写入nRf2401;将需要发射的数据写入nRf2401;③CE=0,激活ShockBurst发送。
通过中断方式接收数据。当有数据需要接收时,nRf2401会将DR1置高产生中断信号,接收完毕后DR1又会被置低。首先配置中断0为上升沿触发方式(ISC01=1, ISC00=1),具体接收过程如下:①校验接收到的RF包的地址和欲接收的RF包中有效数据的长度;②CE=1,激活RX;③经过200μs处理,nRf2401子系统监视启动并等待信号的到来;④当收到一个有效的数据包(正确的地址和CRC),nRf2401子系统移去前缀、地址和CRC位;⑤nRf2401子系统通过把DR1置高,产生中断信号;⑥CE=0,RF设为低功耗方式;⑦单片机取出有效数据,需要注意的是,每接收一个字节需要先写0xff 到nRF2401。
完整的射频数据包由四部分组成:前缀、地址、有效数据和CRC。前缀一般是8位(也可以设置为4位,由地址的首位决定)。如果地址的首位是0,前缀为01010101;如果地址的首位是1,前缀为10101010。ShockBurst方式下,CP2102接收到有效的数据包后,自动移去前缀、地址和CRC,只留有效数据。
4 计算机控制软件的编程
当把CP2102与计算机连接时,系统会提示发现新硬件,并要求安装驱动程序,执行CP2102驱动程序的安装文件即可。驱动程序安装后,在设备管理器中会有CP2102虚拟的COM口(一般是COM3)。
VB开发环境集成有串口控件MSComm,该控件是将RS-232的初级操作予以封装,用高级的Basic语言即可实现串口数据的发送和接收[2]。
首先向工具箱添加MSComm控件,并产生一个串口对象,取对象名为“MSc”。然后编程对MSc进行初始化,步骤如下:①MSc.CommPort=3, 选择安装驱动程序后计算机虚拟的COM3口;②MSc.Settings = 500000,n,8,1,设置通信波特率是500kbps,无校验,8位数据,1位停止位;③MSc.InputMode=1,数据以二进制形式存取;④MSc.RThreshold=1,每收到1个字符都触发接收事件;⑤MSc.PortOpen=True,打开串口。
发送数据只是向控件的Output属性写数据即可,既MSc.Output=输出的数据。
接收数据采取事件驱动方式,程序代码如下:
Public Sub msc_OnComm()
Select Case MSc1.CommEvent
Case comEvReceive
av = MSc.Input '接收数据
……'根据接收的数据进行处理
End S
elect
End Sub
5 结束语
本系统通过CP2102实现USB2.0接口,通过nRf2401通实现无线数据收发,具有开发简单、可靠性高等特点,传输速率可以达到900kbps,在工业控制、消费电子等各个领域都具有广阔的应用前景。本文的创新点:系统使用CP2102芯片实现USB2.0接口,芯片厂商免费提供驱动程序,计算机端程序开发方便。使用nRf2401实现无线数据收发,有内置地址设置、CRC纠检错、工作于自由频段优点。文章给出详细的硬件电路和软件程序。
参考文献
[1] Silicon Laboratories Inc.CP2102 Product Data Sheet, http:// www.silabs.com,2006
[2] 范逸之等.Visual Basic与RS-232串行通信控制.北京:中国青年出版社,2002.1
[3] nRF240x Configurator User Guide. Nordic VLSI document, Nordic Cooperation.
[4] 彭祖林,邓罗根,刘细华.用于测量体温的无线实时监测系统的设计与实现[J].微计算机信息,2005,1:59-61
评论