无线遥控设计 一、总体概述: 本系统有六大部分组成分PS/2电脑键盘控制部分、双单片机控制部分、无线数字收发部分、摄相头采集部分、高频放大发射部分、电视观察接收信号图像部分。 二、 题目分析及方案论证: 本题中要求发射大于10米,且多通道。所以可采用高频无线数字收发模块。如NRF 系列数字收发模块。可选用单片机给数字模块进行控制和配置寄存器,及用SPI给数字模块发送数据。 1 、NRF系列数字收发模块选择方案论证 1.1 NRF401可以达到题目要求 所设计的无线数传模块由单片射频收发芯片nRF401、AT89C52微控制器和MAX3316接口芯片构成,工作在433.92/434.33MHz频段; nRF401是北欧集成电路公司(NORDIC)的产品,是一个为433MHz ISM频段设计的真正单片UHF无线收发芯片,满足欧洲电信工业标准(ETSI)EN300200-1 V1.2.1。它采用FSK调制解调技术,最高工作速率可以达到20K,发射功率可以调整,最大发射功率是+10dBm。nRF401的天线接口设计为差分天线,以便于使用低成本的PCB天线。它要求非常少的外围元件(约10个),无需声表滤波器、变容管等昂贵的元件,只需要便宜且易于获得的4MHz晶体,收发天线合一。无需进行初始化和配置,不需要对数据进行曼彻斯特编码,有两个工作频宽(433.92/434.33MHz),工作电压范围可以从2.7-5V,还具有待机模式,可以更省电和高效。
nRF401无线收发芯片的结构框图如图1所示:内部结构可分为发射电路、接收电路、模式和低功耗控制逻辑电路及串行接口几部分。发射电路包含有:射频功率放大器、锁相环(PLL),压控振荡器(VCO),频率合成器等电路。基准振荡器采用外接晶体振荡器,产生电路所需的基准频率。
其主要特性如下:
●工作频率为国际通用的数传频段
●FSK调制,抗干扰能力强,特别适合工业控制场合;
●采用PLL频率合成技术,频率稳定性极好;
●灵敏度高,达到-105dBm(nRF401);
●功耗小,接收状态250 A,待机状态仅为8 A(nRF401);
●最大发射功率达 +10dBm ;
●低工作电压(2.7V),可满足低功耗设备的要求;
●具有多个频道,可方便地切换工作频率 ;
●工作速率最高可达20Kbit/s(RF401);
●仅外接一个晶体和几个阻容、电感元件,基本无需调试;
●因采用了低发射功率、高接收灵敏度的设计,使用无需申请许可证,开阔地的使用距离最远可达1000米 (与具体使用环境及元件参数有关)。
TX与RX之间的切换
当从RX切换到TX模式时,数据输入脚(DIN)必须保持为高至少1ms才能收发数据。当从TX切换到RX时,数据输出脚(DOUT)要至少3ms以后有数据输出。
Standby与RX之间的切换
从待机模式到接收模式,当PWR_UP输入设成1时,经过tSR时间后,DOUT脚输出数据才有效。对 nRF401来说,tST最长的时间是3ms。
从待机模式到发射模式,所需稳定的最大时间是tST。
Power Up与TX间的切换
从加电到发射模式过程中,为了避免开机时产生干扰和辐射,在上电过程中TXEN的输入脚必须保持为低,以便于频率合成器进入稳定工作状态。当由上电进入发射模式时,TXEN必须保持1ms以后才可以往DIN发送数据。
从上电到接收模式过程中,芯片将不会接收数据,DOUT也不会有数据输出,直到电压稳定达到2.7V以上,并且至少保持5ms。如果采用外部振荡器,这个时间可以缩短到3ms。
在实际应用中,微控制器采用Atmel公司的AT89C52,分别用单片机的P1口各管脚控制nRF401的DIN、DOUT、TXEN、PWRUP、CS这五个脚即可。 接口芯片采用美信公司的RS232转换芯片MAX3316,完成单片机和计算机RS232接口的电平转换及数据发送、接收、请求、清除功能。在nRF401芯片使用时,设定好工作频率,进入正常工作状态后,通过单片机根据需要进行收发转换控制,发送/接收数据或进行状态转换。在设计程序时,要注意各状态转换的时延。nRF401的通讯速率最高为20kbit/s,发送数据之前需将电路置于发射模式;接收模式转换为发射模式的转换时间至少为1ms;可以发送任意长度的数据;发射模式转换为接收模式的转换时间至少为3ms。在待机模式时,电路进入待机状态,电路不接收和发射数据。待机模式转换为发射模式的转换时间至少为4ms;待机模式转换为接收模式的转换时间至少为5.0ms。这里给出系统和程序的工作流程图 1.2 单片射频收发器nRF905也可达到要求 nRF905是挪威Nordic VLSI公司推出的单片射频收发器,工作电压为1.9~3.6V,32引脚QFN封装(5由频率合成器、接收解调器、功率放大器、晶体振荡器和调制器组成,不需外加声表滤波器, ShockBurstTM工作模式,自动处理字头和CRC(循环冗余码校验),使用SPI接口与微控制器通信,配置非常方便。此外,其功耗非常低,以-10dBm的输出功率发射时电流只有11mA,工作于接收模式时的电流为12.5mA,内建空闲模式与关机模式,易于实现节能。nRF905适用于无线数据通信、无线报警及安全系统、无线开锁、无线监测、家庭自动化和玩具等诸多领域。NRF905比NRF401先进多了。能充分满足题目要求。 2. 芯片结构、引脚介绍及工作模式 nRF905片内集成了电源管理、晶体振荡器、低噪声放大器、频率合成器功率放大器等模块,曼彻斯特编码/解码由片内硬件完成,无需用户对数据进行曼彻斯特编码,因此使用非常方便。nRF905的详细结构如图1所示。 2.2引脚介绍 表1:nRF905引脚 file:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gif nRF905有两种工作模式和两种节能模式。两种工作模式分别是ShockBurstTM接收模式和ShockBurstTM发送模式,两种节能模式分别是关机模式和空闲模式。nRF905的工作模式由TRX_CE、TX_EN和PWR_UP三个引脚决定,详见表2。file:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image002.gif 2.1ShockBurstTM模式 与射频数据包有关的高速信号处理都在nRF905片内进行,数据速率由微控制器配置的SPI接口决定,数据在微控制器中低速处理,但在nRF905中高速发送,因此中间有很长时间的空闲,这很有利于节能。由于nRF905工作于ShockBurstTM模式,因此使用低速的微控制器也能得到很高的射频数据发射速率。在ShockBurstTM接收模式下,当一个包含正确地址和数据的数据包被接收到后,地址匹配(AM)和数据准备好(DR)两引脚通知微控制器。在ShockBurstTM发送模式,nRF905自动产生字头和CRC校验码,当发送过程完成后,数据准备好引脚通知微处理器数据发射完毕。由以上分析可知,nRF905的ShockBurstTM收发模式有利于节约存储器和微控制器资源,同时也减小了编写程序的时间。下面具体详细分析nRF905的发送流程和接收流程。 2.2发送流程 典型的nRF905发送流程分以下几步: 接口的速率在通信协议和器件配置时确定; B. 微控制器置高TRX_CE和TX_EN,激发nRF905的ShockBurstTM发送模式; C. nRF905的ShockBurstTM发送: l 数据打包(加字头和CRC校验码); 2 发送数据包; 3 当数据发送完成,数据准备好引脚被置高; D. AUTO_RETRAN被置高,nRF905不断重发,直到TRX_CE被置低; E. 当TRX_CE被置低,nRF905发送过程完成,自动进入空闲模式。 ShockBurstTM工作模式保证,一旦发送数据的过程开始,无论TRX_EN和TX_EN引脚是高或低,发送过程都会被处理完。只有在前一个数据包被发送完毕,nRF905才能接受下一个发送数据包。 2.3接收流程 A. 当TRX_CE为高、TX_EN为低时,nRF905进入ShockBurstTM接收模式; B. 650us后,nRF905不断监测,等待接收数据; C. 当nRF905检测到同一频段的载波时,载波检测引脚被置高; D. 当接收到一个相匹配的地址,地址匹配引脚被置高; E. 当一个正确的数据包接收完毕,nRF905自动移去字头、地址和CRC校验位,然后把数据准备好引脚置高 F. 微控制器把TRX_CE置低,nRF905进入空闲模式; G. 微控制器通过SPI口,以一定的速率把数据移到微控制器内; H. 当所有的数据接收完毕,nRF905把数据准备好引脚和地址匹配引脚置低; I. nRF905此时可以进入ShockBurstTM接收模式、ShockBurstTM发送模式或关机模式。 当正在接收一个数据包时,TRX_CE或TX_EN引脚的状态发生改变,nRF905立即把其工作模式改变,数据包则丢失。当微处理器接到地址匹配引脚的信号之后,其就知道nRF905正在接收数据包,其可以决定是让nRF905继续接收该数据包还是进入另一个工作模式。 2.4节能模式 nRF905的节能模式包括关机模式和节能模式。 在关机模式,nRF905的工作电流最小,一般为2.5uA。进入关机模式后,nRF905保持配置字中的内容,但不会接收或发送任何数据。 空闲模式有利于减小工作电流,其从空闲模式到发送模式或接收模式的启动时间也比较短。在空闲模式下,nRF905内部的部分晶体振荡器处于工作状态。nRF905在空闲模式下的工作电流跟外部晶体振荡器的频率有关。 2.5 器件配置 所有配置字都是通过SPI接口送给nRF905。SIP接口的工作方式可通过SPI指令进行设置。当nRF905处于空闲模式或关机模式时,SPI接口可以保持在工作状态。 2.6SPI接口配置 SPI接口由状态寄存器、射频配置寄存器、发送地址寄存器、发送数据寄存器和接收数据寄存器5个寄存器组成。状态寄存器包含数据准备好引脚状态信息和地址匹配引脚状态信息;射频配置寄存器包含收发器配置信息,如频率和输出功能等;发送地址寄存器包含接收机的地址和数据的字节数;发送数据寄存器包含待发送的数据包的信息,如字节数等;接收数据寄存器包含要接收的数据的字节数等信息。 2.7射频配置 射频配置寄存器和内容如表3所示: 表3:射频配置寄存器file:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg 射频寄存器的各位的长度是固定的。然而,在ShockBurstTM收发过程中,TX_PAYLOAD、RX_PAYLOAD、TX_ADDRESS和RX_ADDRESS 4个寄存器使用字节数由配置字决定。nRF905进入关机模式或空闲模式时,寄存器中的内容保持不变。 2.8 应用电路 file:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image005.gif nRF905在使用中,根据不同需要,其电路图不尽相同,图2所示为典型的应用原理图,该电路天线部分使用的是50Ω单端天线。在nRF905的电路板设计中,也可以使用环形天线,把天线布在PCB板上,这可减小系体积。 file:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image006.gif 3. NRF2401芯片是2.4G高频无线数字收发模块 nRF2401是单片射频收发芯片,工作于2.4~2.5GHz ISM频段,芯片内置频率合成器、功率放大器、晶体振荡器和调制器等功能模块,输出功率和通信频道可通过程序进行配置。芯片能耗非常低,以-5dBm的功率发射时,工作电流只有10.5mA,接收时工作电流只有18mA,多种低功率工作模式,节能设计更方便。其DuoCeiverTM技术使nRF2401可以使用同一天线,同时接收两个不同频道的数据。nRF2401适用于多种无线通信的场合,如无线数据传输系统、无线鼠标、遥控开锁、遥控玩具等。nRF2401无线收发一体芯片和蓝牙一样,都工作在2.4GHz自由频段,能够在全球无线市场畅通无阻。nRF2401支持多点间通信,最高传输速率超过1MBit/S,而且比蓝牙具有更高的传输速度。它采用SoC方法设计,只需少量外围元件便可组成射频收发电路。与蓝牙不同的是,nRF 2401没有复杂的通信协议,它完全对用户透明,同种产品之间可以自由通信。更重要的是,nRF 2401比蓝牙产品更便宜。所以nRnRF 2401是业界体积最小、功耗最少、外围元件最少的低成本射频系统级芯片。 3.1. 芯片结构、引脚说明 file:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image008.gif nRF2401内置地址解码器、先入先出堆栈区、解调处理器、时钟处理器、GFSK滤波器、低噪声放大器、频率合成器,功率放大器等功能模块,需要很少的外围元件,因此使用起来非常方便。QFN24引脚封装,外形尺寸只有5×5mm。nRF2401的功能模块如图1所示。 file:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image009.gif
3.2芯片结构 作模式工 nRF2401有工作模式有四种:收发模式、配置模式、空闲模式和关机模式。nRF2401的工作模式由PWR_UP 、CE、TX_EN和CS三个引脚决定,详见表2。 表2:nRF2401工作模式 file:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image011.jpg
3.3 收发模式 nRF2401的收发模式有ShockBurstTM收发模式和直接收发模式两种,收发模式由器件配置字决定,具体配置将在器件配置部分详细介绍。 3.4.ShockBurstTM收发模式 ShockBurstTM收发模式下,使用片内的先入先出堆栈区,数据低速从微控制器送入,但高速(1Mbps)发射,这样可以尽量节能,因此,使用低速的微控制器也能得到很高的射频数据发射速率。与射频协议相关的所有高速信号处理都在片内进行,这种做法有三大好处:尽量节能;低的系统费用(低速微处理器也能进行高速射频发射);数据在空中停留时间短,抗干扰性高。nRF2401的ShockBurstTM技术同时也减小了整个系统的平均工作电流。 在ShockBurstTM收发模式下,nRF2401自动处理字头和CRC校验码。在接收数据时,自动把字头和CRC校验码移去。在发送数据时,自动加上字头和CRC校验码,当发送过程完成后,数据准备好引脚通知微处理器数据发射完毕。 3.4.1 ShockBurstTM发射流程
接口引脚为CE,CLK1,DATA
A. 当微控制器有数据要发送时,其把CE置高,使nRF2401工作;
B. 把接收机的地址和要发送的数据按时序送入nRF2401;
C. 微控制器把CE置低,激发nRF2401进行ShockBurstTM发射;
D. nRF2401的ShockBurstTM发射
2 给射频前端供电;
2 射频数据打包(加字头、CRC校验码);
2 高速发射数据包;
2 发射完成,nRF2401进入空闲状态。
3.4.2 ShockBurstTM接收流程
接口引脚CE、DR1、CLK1和DATA(接收通道1)
A. 配置本机地址和要接收的数据包大小;
B. 进入接收状态,把CE置高;
C. 200us后,nRF2401进入监视状态,等待数据包的到来;
D. 当接收到正确的数据包(正确的地址和CRC校验码),nRF2401自动把字头、地址和CRC校验位移去;
E. nRF2401通过把DR1(这个引脚一般引起微控制器中断)置高通知微控制器;
F. 微控制器把数据从nRF2401移出;
G. 所有数据移完,nRF2401把DR1置低,此时,如果CE为高,则等待下一个数据包,如果CE为低,开始其它工作流程。 3.5.1直接收发模式
在直接收发模式下,nRF2401如传统的射频收发器一样工作。 3.5.2直接发送模式
接口引脚为CE、DATA
A. 当微控制器有数据要发送时,把CE置高;
B. nRF2401射频前端被激活;
C. 所有的射频协议必须在微控制器程序中进行处理(包括字头、地址和CRC校验码)。
3.5.3直接接收模式
接口引脚为CE、CLK1和DATA
A. 一旦nRF2401被配置为直接接收模式,DATA引脚将根据天线接收到的信号开始高低变化(由于噪声的存在);
B. CLK1引脚也开始工作;
C. 一旦接收到有效的字头,CLK1引脚和DATA引脚将协调工作,把射频数据包以其被发射时的数据从DATA引脚送给微控制器;
D. 这头必须是8位;
E. DR引脚没用上,所有的地址和CRC校验必须在微控制器内部进行。 3.5.4配置模式 在配置模式,15字节的配置字被送到nRF2401,这通过CS、CLK1和DATA三个引脚完成,具体的配置方法请参考本文的器件配置部分。 3.5.5空闲模式 nRF2401的空闲模式是为了减小平均工作电流而设计,其最大的优点是,实现节能的同时,缩短芯片的起动时间。在空闲模式下,部分片内晶振仍在工作,此时的工作电流跟外部晶振的频率有关,如外部晶振为4MHz时工作电流为12uA,外部晶振为16MHz时工作电流为32uA。在空闲模式下,配置字的内容保持在nRF2401片内。 3.5.6 关机模式 在关机模式下,为了得到最小的工作电流,一般此时的工作电流小于1uA。关机模式下,配置字的内容也会被保持在nRF2401片内,这是该模式与断电状态最大的区别。 3.6. 器件配置 nRF2401的所有配置工作都是通过CS、CLK1和DATA三个引脚完成,把其配置为ShockBurstTM收发模式需要15字节的配置字,而如把其配置为直接收发模式只需要2字节的配置字。由上文对nRF2401工作模式的介绍,我们可以知道,nRF2401一般工作于ShockBurstTM收发模式,这样,系统的程序编制会更加简单,并且稳定性也会更高,因此,下文着重介绍把nRF2401配置为ShockBurstTM收发模式的器件配置方法。 ShockBurstTM的配置字使nRF2401能够处理射频协议,在配置完成后,在nRF2401工作的过程中,只需改变其最低一个字节中的内容,以实现接收模式和发送模式之间切换。ShockBurstTM的配置字可以分为以下四个部分:
数据宽度:声明射频数据包中数据占用的位数。这使得nRF2401能够区分接收数据包中的数据和CRC校验码;
地址宽度:声明射频数据包中地址占用的位数。这使得nRF2401能够区分地址和数据;
地址:接收数据的地址,有通道1的地址和通道2的地址;
CRC:使nRF2401能够生成CRC校验码和解码。 当使用nRF2401片内的CRC技术时,要确保在配置字中CRC校验被使能,并且发送和接收使用相同的协议。nRF2401配置字的各个位的描述如表3所示。 file:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image012.gif 在配置模式下,注意保证PWR_UP引脚为高电平,CE引脚为低电平。配置字从最高位开始,依次送入nRF2401。在CS引脚的下降沿,新送入的配置字开始工作。 3.7. 应用电路 图2为nRF2401的应用电路,由图可知,其只需要14个外围元件。nRF2401应用电路一般工作于3V,它可用多种低功耗微控制器进行控制。在设计过程中,设计者可使用单鞭天线或环形天线,上图为50欧姆单鞭天线的应用电路。在使用不同的天线时,为了得到尽可能大的收发距离,电感电容的参数应适当调整。 file:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image013.gif 3.6. PCB设计 PCB设计对nRF2401的整体性能影响很大,所以PCB设计在nRF2401收发系统的开发过程中主要的工作之一,在PCB设计时,必须考虑到各种电磁干扰,注意调整电阻、电容和电感的位置,特别要注意电容的位置。 nRF2401的PCB一般都是双层板,底层一般不放置元件,为地层,顶层的空余地方一般都敷上铜,这些敷铜通过过孔与底层的地相连。直流电源及电源滤波电容尽量靠近VDD引脚。nRF2401的供电电源应通过电容隔开,这样有利于给nRF2401提供稳定的电源。在PCB中,尽量多打一些通孔,使顶层和底层的地能够充分接触。 4.三种方案比较论证 nRF401工作速率最高达20Kbit/s应用时偏低。 接口芯片采用美信公司的RS232转换芯片MAX3316,完成单片机和计算机RS232接口的电平转换及数据发送、接收、请求、清除功能。在nRF401芯片使用时,设定好工作频率,进入正常工作状态后,通过单片机根据需要进行收发转换控制,发送/接收数据或进行状态转换。在设计程序时,要注意各状态转换的时延。通信协议的设计nRF401是程序繁杂难以在短时间内调试好。平时大多数情况下应处于关闭状态,由于无线部分硬件上是不具备自动唤醒功能的,为了达到节能的目的,必须通过软件方式采用合理的通信协议以保证节能同时不丢失数据。接收模式转换为发射模式的转换时间至少为1ms;可以发送任意长度的数据;发射模式转换为接收模式的转换时间至少为3ms。在待机模式时,电路进入待机状态,电路不接收和发射数据。待机模式转换为发射模式的转换时间至少为4ms;待机模式转换为接收模式的转换时间至少为5.0ms。延时问题也需要程序弥补不好调试。 nRF905工作速率最高达100Kbit/s,频道之间的转换时间小于650us。与射频数据包有关的高速信号处理都在nRF905片内进行,数据速率由微控制器配置的SPI接口决定,数据在微控制器中低速处理,但在nRF905中高速发送,因此中间有很长时间的空闲,这很有利于节能。与nRF401相比与相当大的改进。当微控制器有数据要发送时,通过SPI接口,按时序把接收机的地址和要发送的数据送传给nRF905,SPI接口的速率在通信协议和器件配置时确定;微控制器置高TRX_CE和TX_EN,激发nRF905的ShockBurstTM发送模式;射频寄存器自动开启;数据打包(加字头和CRC校验码);发送数据包;当数据发送完成,数据准备好引脚被置高;当数据发送完成,数据准备好引脚被置高当TRX_CE被置低,nRF905发送过程完成,自动进入空闲模式。ShockBurstTM工作模式保证,一旦发送数据的过程开始,无论TRX_EN和TX_EN引脚是高或低,发送过程都会被处理完。只有在前一个数据包被发送完毕,nRF905才能接受下一个发送数据包。 nRF2401芯片内置频率合成器、功率放大器、晶体振荡器和调制器等功能模块,输出功率和通信频道可通过程序进行配置。芯片能耗非常低,以-5dBm的功率发射时,工作电流只有10.5mA,接收时工作电流只有18mA,多种低功率工作模式,节能设计更方便。其DuoCeiverTM技术使nRF2401可以使用同一天线,同时接收两个不同频道的数据。nRF2401内置地址解码器、先入先出堆栈区、解调处理器、时钟处理器、GFSK滤波器、低噪声放大器、频率合成器,功率放大器等功能模块,需要很少的外围元件,因此使用起来非常方便。该器件有125个频点,能够实现点对点、点对多点的无线通信,同时可采用改频和跳频来避免干扰。nRF2401最大传输速率可达1Mbit/s,其最大发射功率为-5dBm,在比较理想环境中,其室内传输距离可达50~90米,室外传输距离可达100-200米。nRF2401的灵敏度为-90dBm,工作电压为1.9V~3.3,工作温度范围为-40~+80℃。在ShockBurstTM收发模式下,nRF2401自动处理字头和CRC校验码。在接收数据时,自动把字头和CRC校验码移去。在发送数据时,自动加上字头和CRC校验码,当发送过程完成后,数据准备好引脚通知微处理器数据发射完毕。 1 ShockBurstTM发射流程
接口引脚为CE,CLK1,DATA
A. 当微控制器有数据要发送时,其把CE置高,使nRF2401工作;
B. 把接收机的地址和要发送的数据按时序送入nRF2401;
C. 微控制器把CE置低,激发nRF2401进行ShockBurstTM发射;
D. nRF2401的ShockBurstTM发射
1 给射频前端供电;
2 射频数据打包(加字头、CRC校验码);
3 高速发射数据包;
4 发射完成,nRF2401进入空闲状态。 2 ShockBurstTM接收流程
接口引脚CE、DR1、CLK1和DATA(接收通道1)
A. 配置本机地址和要接收的数据包大小;
B. 进入接收状态,把CE置高;
C. 200us后,nRF2401进入监视状态,等待数据包的到来;
D. 当接收到正确的数据包(正确的地址和CRC校验码),nRF2401自动把字头、地址和CRC校验位移去;
E. nRF2401通过把DR1(这个引脚一般引起微控制器中断)置高通知微控制器;
F. 微控制器把数据从nRF2401移出;有空闲模式降低功耗,发送数据打包,
G. 所有数据移完,nRF2401把DR1置低,此时,如果CE为高,则等待下一个数据包,如果CE为低,开始其它工作流程。 3.直接发送模式
接口引脚为CE、DATA
A. 当微控制器有数据要发送时,把CE置高;
B. nRF2401射频前端被激活;
C. 所有的射频协议必须在微控制器程序中进行处理(包括字头、地址和CRC校验码)。
4.直接接收模式
接口引脚为CE、CLK1和DATA
A. 一旦nRF2401被配置为直接接收模式,DATA引脚将根据天线接收到的信号开始高低变化(由于噪声的存在);
B. CLK1引脚也开始工作;
C. 一旦接收到有效的字头,CLK1引脚和DATA引脚将协调工作,把射频数据包以其被发射时的数据从DATA引脚送给微控制器;
D. 这头必须是8位;
E. DR引脚没用上,所有的地址和CRC校验必须在微控制器内部进行。
nRF2401通过ShockBurstTM收发模式进行无线数据发送,收发可靠度高。 总结:nRF401电路焊接多、程序繁杂,调试不好实现,发送频率低,频道转换时间长,容易丢数据包,出错率高。所以不选用nRF401。nRF905 发送频率可以,由微控制口SPI写发送数据,ShockBurstTM发送模式;射频寄存器自动开启;数据打包(加字头和CRC校验码);发送数据包;当数据发送完成,数据准备好引脚被置高;当数据发送完成,数据准备好引脚被置高当TRX_CE被置低,nRF905发送过程完成,自动进入空闲模式。可是nRF905的微控制器配置的SPI及寄存器配置繁杂给系统调试带来麻烦。射频寄存器的各位的长度是固定所有信息都有SPI来实现。所以不选用nRF905。nRF2401发射功率大,本身功耗低,灵敏度高,并且有nRF905的所有优越性的无线数字收发性能,且使我们的系统调试更加快速。也是与整个系统匹配的最佳选择。它的直接发送模式和直接接收模式是优于其它模块的特色。所以最终选择nRF2401。 结果也证明了nRF2401确实是实现无线数字收发的可靠选择。 四、硬件系统设计: 1、硬件控制系统PS/2电脑键盘 file:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image014.giffile:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image014.giffile:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image014.gif 因为整个系统需要控制的键许多。十六个通道,两个电机控制,发送数据等控制键很多,所以不用单键及小键盘,通过键盘编码传给89S52单片机,然后89S52与89C2051经过Max232实现单片机与单片机串行通信。如图示:
这样设计增加控制键又省去了不必要的设计麻烦。 file:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image015.gif 2、微控制系统单片机之间实现串行通信 file:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image017.gif 选择89S52是因为它可通过Max232与电脑通信可观测单片机发送的数据,可以对设计串行通信发送的数据分析和改进程序。就是因为89S52这些功能才使整个系统可以应用PS/2电脑键盘。 利用两个单片机是因为两个CPU可以提高工作效率。另外NRF2401的工作电压小于单片机的工作电压而89C2051可低电压工作。所以用89C2051实现微控制对NRF2401控制及传送数据。同时也降低了功耗,串行通信的程序中有校验程序,从而避免了错码,使NRF2401发送的数据完全正确。只有无错码才能达到无线遥控的操作正确,这样才能提高整个系统的性能。 file:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image019.jpg file:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image021.jpg file:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image023.jpg 3、无线数字发射系统 file:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image024.jpg 利用89C2051对NRF2401传送数据和对NRF2401寄存器配置,以及对NRF2401的控制。从而实现无线数字发射 4、无线数字接受系统 与无线数字发射系统相似用NRF2401接受数据包传给89C2051,再由89C2051与89S52 串行通信传递数据,经89S52解码后选择相应通道。 如图所示: file:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image025.gif
5通道显示系统 显示用大型号发光二极管显示。 file:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image027.gif
6摄相头采集系统 file:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image028.gif
file:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image030.jpg file:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image032.jpg file:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image034.jpg 电机驱动芯片 此功能是无线遥控拓展,是实现更好的无线遥控必然趋势。由此项高级功能才能完备整个系统的安全、无误的进行工作。 7监控系统设计 利用小电视机对摄相头采集、发射的图象进行接受。如图示: file:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image035.gif | | | | | | | | | file:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image036.gif | | | file:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image037.gif | | | file:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image038.gif | | file:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image039.gif | |
8时钟显示系统 无论工作在什么地方都需要有时间显示,在本系统中电子钟是本系统的辅助单元。可以使整个大的系统更有合理的应用价值。为操作者提供舒适环境。本系统用单片机控制,七位共阳极数码管显示有74LS04,74LS07进行驱动,且可调时等功能。 9 总结;整个的系统可用下列图示说明: 发射部分: file:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image040.gif
接受部分 file:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image041.giffile:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image042.gif
五、软件系统设计: 本系统主要是三大部分:单片机与单片机串行通信程序,对PS/2键盘编码及译码程序,单片机对nRF2401的控制及传递数据程序。 1单片机与单片机串行通信程序 2对PS/2键盘编码及译码程序 3单片机对nRF2401的控制及传递数据程序。 file:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image044.jpg file:///C:/Users/chang/AppData/Local/Temp/msohtmlclip1/01/clip_image046.jpg 六、功能测试及结果分析: 七、参考书目: 黄智伟 编著 《无线数字收发电路设计》——电路原理与应用实例 周立功 等编著速成与实践》——增强型80C51单片机 黄智伟 等编著 《训练教程》——全国大学生电子设计竞赛 附录:部分程序 1. 1单片机对nRF2401的控制及传递数据程序 <发射程序> #include<At89x051.h> //脚的定义 #define RxD P3_0 #define TxD P3_1 #define TxLED P3_4 #define RxLED P3_5 #definePWR_UP P1_7 #define CE P1_6 #define CS P1_2 #define CLK1 P3_2 #define DR1 P1_1 #define DATA P1_0 //测试用nRF2401寄存器数据 const unsignedtest_config[18]={ 0x8e,0x08,0x1e, 0x08,0x08, 0xaa,0xbb,0xcc,0xdd,0xee, 0xaa,0xbb,0xcc,0xdd,0xee, 0xa3,0x2f, 0x64 }; //RF2401寄存器数据 const unsignedconfigbyte[18]={ 0x8e,0x08,0x1c, 0x08,0x08, 0xaa,0xbb,0xcc,0xdd,0xee, 0xaa,0xbb,0xcc,0xdd,0xee, 0xa3,0x6f, 0x64 }; unsigned charrx_data_buf[1]; unsigned charincrease_data; unsigned chartask_switch; unsigned charget_tx_data_for_pc(); voidsystem_init(void); voidwrite_spi_one_byte(unsigned char data_buf); voidconfig_2401(void); voidconfig_test(void); voiddelay_ms(unsigned int delay_counter); voidsend_data(unsigned input_data); void send_data_rf(void); voidtransmit_mode(void); void main(void); //系统初始化 voidsystem_init(void) { unsigned char i; PWR_UP=0; CE=0; CS=0; CLK1=0; DATA=0; for(i=0;i<8;i++) rx_data_buf=0; config_2401(); delay_ms(2); TxLED=0; RxLED=1; TMOD=0x20; SCON=0x50; TH1=0xfd; TL1=0xfd; TR1=1; EA=0; } //对RF2401写数据函数 voidwrite_spi_one_byte(unsigned char data_buf) { unsigned char i; unsigned char j; j=0x80;//0b10000000 while(j>0) { i=data_buf&j; if(i==0) DATA=0; else DATA=1; CLK1=1; j>>=1; CLK1=0; } } //对RF2401寄存器写数据 voidconfig_2401(void) { unsigned char i; PWR_UP=1; delay_ms(5); CE=0; CS=1; i=1; while(i--); for(i=0;i<18;i++) write_spi_one_byte(configbyte); CS=0; DATA=0; CE=1; } //系统测试 voidconfig_test(void) { unsigned char i; PWR_UP=1; delay_ms(5); CE=0; CS=1; i=1; while(i--); for(i=0;i<18;i++) write_spi_one_byte(test_config); CS=0; DATA=0; CE=1; } //延时函数 voiddelay_ms(unsigned int delay_counter) { unsigned int i; while(delay_counter--) { i=81; while(i--); } } //发射数据函数 voidsend_data(unsigned input_data) { unsigned char i; PWR_UP=1; delay_ms(5); CE=1; i=1; while(i--); write_spi_one_byte(0xaa); write_spi_one_byte(0xbb); write_spi_one_byte(0xcc); write_spi_one_byte(0xdd); write_spi_one_byte(0xee); for(i=0;i<1;i++) write_spi_one_byte(input_data); CE=0; i=50; while(i--); PWR_UP=0; } //从串行获的数据 unsigned char get_tx_data_for_pc() { unsigned char chuanh=0x00; while(RI==0); chuanh=SBUF ; RI=0; return(chuanh); } //从RF2401发射数据 voidsend_data_rf(void) { increase_data=get_tx_data_for_pc(); TxLED=0; send_data(increase_data); delay_ms(1); TxLED=1; delay_ms(1); } //主函数 void main(void) { system_init(); while (1) { send_data_rf(); } } 2单片机对nRF2401的控制及传递数据程序 <接收程序> #include<At89x051.h> //脚的定义 #define RxD P3_0 #define TxD P3_1 #define TxLED P3_4 #define RxLED P3_5 #definePWR_UP P1_7 #define CE P1_6 #define CS P1_2 #define CLK1 P3_2 #define DR1 P1_1 #define DATA P1_0 //测试 const unsignedtest_config[18]={ 0x8e,0x08,0x1e, 0x08,0x08, 0xaa,0xbb,0xcc,0xdd,0xee, 0xaa,0xbb,0xcc,0xdd,0xee, 0xa3,0x2f, 0x64 }; //2401寄存器数据 const unsignedconfigbyte[18]={ 0x8e,0x08,0x1c, 0x08,0x08, 0xaa,0xbb,0xcc,0xdd,0xee, 0xaa,0xbb,0xcc,0xdd,0xee, 0xa3,0x6f, 0x65 }; unsigned charrx_data_buf[1]; unsigned charincrease_data; void system_init(void); voidwrite_spi_one_byte(unsigned char data_buf); voidconfig_2401(void); voidconfig_test(void); voidreceive_data(unsigned payload_length); unsigned charread_spi_one_byte(void); voiddelay_ms(unsigned int delay_counter); void receive_mode(void); void main(void); //系统初始化 voidsystem_init(void) { unsigned char i; PWR_UP=0; CE=0; CS=0; CLK1=0; DATA=0; for(i=0;i<8;i++) rx_data_buf=0; config_2401(); delay_ms(2); TxLED=0; RxLED=1; TMOD=0x20; SCON=0x50; TH1=0xfd; TL1=0xfd; TR1=1; EA=0; } //从串行传数据 voidsend_rx_data_to_pc(unsigned char payload_length) { TI=0; SBUF=rx_data_buf[0]; while(TI==0); } //对寄存器写数据 voidwrite_spi_one_byte(unsigned char data_buf) { unsigned char i; unsigned char j; j=0x80;//0b10000000 while(j>0) { i=data_buf&j; if(i==0) DATA=0; else DATA=1; CLK1=1; j>>=1; CLK1=0; } } //对RF2401写寄存器数据 voidconfig_2401(void) { unsigned char i; PWR_UP=1; delay_ms(5); CE=0; CS=1; i=1; while(i--); for(i=0;i<18;i++) write_spi_one_byte(configbyte); CS=0; DATA=0; CE=1; } //测试 voidconfig_test(void) { unsigned char i; PWR_UP=1; delay_ms(5); CE=0; CS=1; i=1; while(i--); for(i=0;i<18;i++) write_spi_one_byte(test_config); CS=0; DATA=0; CE=1; } //接收数据 voidreceive_data(unsigned payload_length) { unsigned char i; for(i=0;i<payload_length;i++) rx_data_buf=read_spi_one_byte(); } //对RF2401写数据 unsigned charread_spi_one_byte(void) { unsigned char j; unsigned char data_buf; j=0x80; while(j>0) { DATA=1; data_buf<<=1; if(DATA==1) data_buf|=0x01; CLK1=1; j>>=1; CLK1=0; } return data_buf; } //延时 voiddelay_ms(unsigned int delay_counter) { unsigned int i; while(delay_counter--) { i=81; while(i--); } } //接收数据 voidreceive_mode(void) { //change_rf_txrx_mode(1); //Change the RF to the receive mode while(START_SW!=0) { if(DR1==1) { RxLED=0; receive_data(8); delay_ms(50); RxLED=1; send_rx_data_to_pc(8); } } } //主函数 void main(void) { system_init(); while (1) { receive_mode(); } }
|