波特率自动检测的识别方法及无线数据传输模块的设计及应用

电子说

1.3w人已加入

描述

1、 模块总体结构

基于nRF401无线数据传输器件的数传模块总体硬件结构如图1所示,主要由微控制器和蓝牙芯片及其相应的外围电路组成,能自动完成波特率识别,并进行数据的编码处理,给用户提供了一个透明的数据接口。微控制器选用Atmel公司推出的可在线编程的单片机AT89S51,便于以后软件的升级。通过对发送数据是否需要曼彻斯特编码、所需外围元件的数量、功耗及发射功率等方面的因素综合比较,选用nRF40l作为无线数传器件。

nRF401是单片无线收发器件,采用蓝牙核心技术设计,内部集成高频发射、高频接收、PLL合成、FSK调制、FSK解调、多频道切换等诸多功能和外围部件协议,是目前集成度最高的无线数传产品,也是唯一可以直接连接微控制器串口进行异步数据传输且无需曼彻斯特编码的无线收发器。nRF401发射功率最大为10 mW,工作电压为2.7 V~5 V,发射电流为8 mA~30 mA,接收电流约10 mA,待机电流为8 μA,灵敏度为-105 dBm,采用20引脚8 mmx7 mm的SOIC封装。所需外部元件很少,仅外接一个晶体和几只阻容、电感元件,无需调试,传输速率最高达19.2 kb/s,工作频段为433/434 MHz,有两个信道,调制方式为FSK。

nRF401有5个端口与微控制器相关:DIN和DOUT用于异步串行通信,DIN的数据方向为微控制器到nRF40l,DOUT相反;CS选择工作频段,CS=0时频段为433.92 MHz,CS=1时为434.33 MHz,在该模块中将CS引脚引出,方便用户控制,在一个频段无法工作时,可以设置为另一个工作频段,提高了系统的抗干扰能力;PWR_UP用于节电控制。PWR_UP=0时为掉电(节电)模式,PWR_UP=1时为上电(工作)模式,在该模块中同样将其引出,在不需要无线发射和接收时,用户可将器件设置为节电模式以降低系统的功耗;TXEN选择发射或接收状态,TXEN=0时为接收,TXEN=1时为发送。

PCB布局和电源去耦设计对于RF射频电路获得较好的性能是必要的,电路板采用1.6mm厚FR4板材的两层PCB,底层覆铜面,并在元件层空白区覆铜,多打通孔连接上下层,铜面与地线相连,天线下底层不覆铜,VSS直接与铜层连接,并保证关键元件充分接地。所有开关数字信号和控制信号都不能经过PLL环路滤波器元件和VCO电感附近。直流供电在离VDD引脚尽可能近的地方用高性能的电容去耦,去耦使用一只小电容(0.01μF)和一只大电容(2.2μF)并联,避免较长的电源走线。

无线

2 、硬件设计及软件实现

2.1 微控制器与nRF401接口设计

图2为微控制器ATr89S51与nRF401的接口电

无线

路,nRF401只需10个左右的元件即可实现数据收发,应用极其方便。其PSEN为数据收发选择端,当设定为发送模块时,PSEN接为高电平,同时,DIN引脚与微控制器的TX端相连,微控制器的RXD端作为预留接口与外部主控单片机的TXD相连:若设计为接收模块,则PSEN接低电平,同时,DOUT引脚与微控制器的RX端相连,RXD引脚与外部微控制器的TXD引脚相连。模块与外部单片机的通讯波特率为自动检测方式,受nRF401通讯速率的限制。该模块可以工作在1 200 b/s~19.2 kb/s之间。模块上预留ICSP接口,可以系统在线编程。方便程序升级。还同时具有良好的防窃密功能,不易破解。

2.2 串口模拟及波特率自适应的实现

对于模块上的片上主控单片机AT89S51而言,既要控制nRF401完成与外界的数据交换。同时自身又必须受控于模块外部的主控单片机,因此。AT89S51必须能同时与nRF401及片外主控单片机通讯,但AT89S51只有一个UART,无法满足要求,为解决这一矛盾,通常的方法是扩展一片8251或8250通用同步/异步接收发器(USART),但需额外占用单片机I/O资源,增加了系统的成本,同时也增大了PCB板的布局面积。本系统则采用单片机普通I/O口模拟串行口,利用该方法还可扩展多个外部串行端口,实现多机通信。

利用普通I/O口模拟串口,必须首先确定串口的通信速率即波特率,在本系统中,该模块设计是波特率为1 200 b/s~19.2 kb/s自适应式的通信模块,使自身的波特率随主控单元的 调整而自动调整,系统适应性更强,更具智能化,因此首先必须解决好波特率自动检测与识别的问题。

2.2.1 波特率自动检测识别的实现

常用的波特率自动检测方法主要有两种:

(1)标准波特率穷举法。

标准法特率穷举法适用于主机侧的波特率必须在有限的几个固定数值之间变化。如300b/s~9.6 kb/s之间的标准值;且从机侧的工作振荡频率已知且稳定。从机启动通信程序后,逐个尝试以不同的波特率接收主机发出的特定字符,直到能正确接收为止。因此,该方法的运用具有一定的局限性。

(2) 码元宽度实时检测法。

该方法是先通过单片机的定时器测量RX引脚上输人数据的码元宽度,即机器周期的计数值,之后用软件计算出波特率发生寄存器的值。该方法由于适用范围广、操作灵活,因而应用较为普遍。

本系统首先用码元宽度实时检测法确定主机的波特率,之后从机自身进行相应设置。就理论而言,只要能够测出一个码元的宽度就能确定数据传输的波特率,但在实际测量过程中,为保证测量的准确性,通常采取测量连续8个码元宽度的方法。这里采用了较为常用的异步串行通信数据格式,即1个起始位、8个数据位、无校验、1个停止位。发送时低位数据在前,高位在后,因此连续8个码元宽度的时间可以通过在主机侧发0x80H的方式实现,其波形如图3所示。起始位加7个码元宽度的低电平,恰好构成8个脉宽的低电平。单片机采用串口中断的方式接收数据,当有数据到达时,打开定时器,同时不断查询接收引脚的状态,当RXD变为高电平后停止计数,这样单片机就可以测量出低电平持续的宽度。

无线

设主机侧的波特率为BPS,其值未知,则此时连续8个码元的宽度计算公式为:

无线

设模块内AT89S51单片机的工作频率为fosc,用定时器1方式2常数自动装入方式产生波特率,串行口工作在方式1,此时串口的波特率由定时器T1的溢出率和SMOD位同时决定。即:

无线

当T1用作波特率发生器时,TL1用作计数器,而自动重装的值放在TH1内,设初始值为X,则每“256-X”个机器周期,定时器T1就会产生一次溢出。为了避免因溢出而产生不必要的中断,此时禁止T1中断。AT89S51内部机器周期为振荡周期的12分频,因此,定时器T1的溢出周期为:

无线

将式(3)代入式(2)得出此时的波特率为:

无线

设此时模块的波特率与主机侧的波特率相等,即:

无线

设AT89S51内部定时器T1测连续8个码元计数值为M,由于是对其内部的机器周期计数,且机器周期是内部振荡周期的12分频,所以,总数为M的机器周期代表的实际时间是:

无线

很明显,式(6)与式(7)应相等,因此有如下公式成立:

无线

由上式则可得出,单片机定时器T1初值在波特率自适应情况下的计算公式:

无线

由式(9)可以看出,其初值不依赖于单片机的工作频率,因此,只要单片机的工作频率相对稳定即可,对具体数值无要求。

另外,需要说明的是,对于串行异步通信而言,通信双方的波特率不必严格相等,只要双方的差别在一定的范围之内,就可实现准确通信。

2.2.2 软件模拟串口的实现

当波特率确定以后,即可用软件模拟实现串行口。对单片机而言,要实现模拟串口的关键是必须解决好时序问题,不能造成通信过程中的数据丢失,为此,采用单片机的外部中断0口的下降沿触发功能,模拟串口数据接收线RXD,P1.2口模拟串口数据发送线TXD,定时器0以确定中断方式对接收码元采样或发送数据流,实现一个软件的串口。

对于软件模拟串口而言,关键是必须解决好时序问题。本系统充分利用了nRF40l器件半双工通信的特点,即数据发送和接收不同时进行,成功实现了一个软件串行口。串行数据发送的实现相对较为简单,只需利用定时器让发送出去的码元维持一定的时间宽度即可,实现异步串行接收的关键是起始位的检测和信息位的准确提取。任何时候数据传送都可能发生,故要求接收方必须能够及时准确地接收数据,而通信过程中没有同步信号,因此,串行数据的提取相对而言具有一定的难度。所以,文中采用AT89S51的外部中断0口模拟RXD,并设置其中断方式为边沿触发,平常保持为高电平,起始位为低电平,因此,当有数据到达时产生中断,根据波特率设置的定时时间间隔进行数据采样,即可实现串行数据的接收。

3结束语

本文设计的无线数据传输模块已成功运用于“磁栅式浮动检测仪”项目中,经实践检验,系统工作稳定可靠,具有一定的工程实用价值。

责任编辑:gt

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

全部0条评论

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

×
20
完善资料,
赚取积分