《电子技术应用》
您所在的位置:首页 > 模拟设计 > 设计应用 > 基于nRf2401和CP2102的USB2.0无线测控网络
基于nRf2401和CP2102的USB2.0无线测控网络
摘要: 本系统使用nRf2401和CP2102实现PC-USB2.0-MCU高速无线测控网络。系统通过CP2102实现USB2.0接口,通过nRF2401实现无线数据收发。同时nRf2401厂商免费提供驱动程序,开发方便、快速。本文阐述该系统的工作原理、硬件构成及软件设计方案。
Abstract:
Key words :

  0 前言

  现在,越来越多的无线技术被应用到自动控制系统中。nRf2401是挪威Nordic公司推出的单片2.4GHz无线收发一体芯片,支持多点间通信,最高传输速率达到1Mbit/s,可以用于无线网络中。

  USB2.0口传输速率是480Mbps,有即插即用和热插拔功能。接口提供内置电源,可以向外设提供5V和最多500mA的电源。因此在以计算机为上位机的控制系统中,USB口比较适合作为计算机与测控网络的接口。

  USB接口器件的开发过程比较复杂,开发者需要知道USB协议、USB设备驱动程序开发、主机应用程序开发等知识,使用USB-UART桥接电路CP2102可以避免上述麻烦。

  1系统的设计思想及nRf2401和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 串行接口。

上位机系统电路的串行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(!(USR&0x40)),等待发送结束;③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

此内容为AET网站原创,未经授权禁止转载。