基于单片机的红外数据通信全双工编解码器设计

2013-01-05 06:45郑红菱郑郁正
成都信息工程大学学报 2013年2期
关键词:全双工红外分组

郑红菱, 张 杰, 郑郁正

(1.成都信息工程学院计算机学院,四川成都610225;2.成都信息工程学院通信工程学院,四川成都610225)

0 引言

对于红外IrDA1.0标准的应用,一般设备都采用集成的红外收发器[1]。如图1所示的RPM851A,基带数据信号必须经过IrDA1.0标准编解码器与红外收发器连接,才能实现红外数据通信。有些串行通信芯片或者智能处理器的串行通信部件都集成了IrDA1.0编解码器,但独立使用IrDA1.0编解码器还占了很大一部分,其中有TI公司的TIR1000、HP公司的HSDL-7000、Zilog公司的ZHX1010、MicroChip公司的MCP21XX系列红外编解码器。

从集成的红外收发器结构来看,所有编解码器与这类的红外收发器连接工作时,都只能以半双工模式工作。对于要以全双工模式工作的设备来说,如果想将有线通信方式改为红外无线通信方式,将很难找到现成的解决方案。

因此,选用高性价比的MCS51单片机,成本不足人民币2元,设计了一个IrDA1.0标准协议栈控制器;采用软件缓冲技术,利用红外数据通信的半双工信道,实现了透明全双工通信。同时,对IrDA1.0的编解码做了改进,采用了时长编码,将传输速度提高了一倍,实现了115200bps全双工通信。

图1 集成红外数据收发器RPM851A

1 红外IrDA1.0标准编码分析

根据IrDA1.0标准对红外发光管的要求,发送器的工作时间介于1.6μ s到30μ s之间,一般情况下不超过20μ s;接收器能接收的最短光脉冲时间为1.6μ s,超过1.6μ s的光脉冲会被截短为1.6μ s,输出 Tout=1.5μ s的接收脉冲,其前沿时间 Tup≤75ns,后沿时间 Tdown≤500ns;所以可以计算出接收一个脉冲时间 TR为:

TR=Tup+Tout+Tdown≤75ns+1.5μ s+500ns=2075ns现有的IrDA1.0编码器只对基带信号0进行编码发送,而信号1则不发送。一位信号0被分成16个时间片,形成“7+3+6”的3/16占空脉宽调制编码结构,其中只用3个时间片发送红外脉冲。因此,假设通信速率为Rb,则每位发送脉冲的时间为;而一个比特的总时长为

根据上述公式,当通信速率为115200bps时:

发送脉冲的时间为:Ts115200=

当通信速率为9600bps时:

从上面计算结果看,通信速率在 9600bps到了115200bps,红外发送脉冲时间为1.6μ s~20μ s,符合红外收发器的时序要求。但是从接收器给出的性能看,当发送脉冲时间超过1.6μ s时,超过的部分不仅消耗功率,而且还导致电路容易损坏。

2 红外时长编码

根据现有IrDA1.0编码器的工作原理[2-3],可以知道红外信道的传输速率与数据传输速率相同,而且采用3/16脉宽调制编码时最高速率只能达到115200bps半双工通信。因此,为了能实现115200bps的全双工通信,采用两个发送脉冲之间的时间构造编码,即“时长编码”,用于改进红外传输的编码。以下对时长编码的编码方法进行具体说明。

由于红外信道是半双工模式,收发转换要开销一些时间,因此为提高传输效率,将数据字节分组传输,形成红外信道分组,其分组模式为:

开始标志+分组长度+数据+校验

除“开始标志”外,其他内容都是按半字节数据通信,编码时先高4位,后低4位,校验是所有字节的累加和补码。为传输这些数据设计时长编码格式为:

Tr+Tw+Tf+Ti+Tc

其中,红外接收器输出前沿时间为 Tr,输出信号时间为 Tw,输出后沿为 Tf,填充时间 Ti,编码单位时长定义为 Tc,半个字节(即4bit数据)的二进制编码作为编码长度。即采用一个脉冲表示编码的开始,其时间为 Tr+Tw+Tf;再使用Ti时间隔离编码标志脉冲和数据以避免数据和标志脉冲混叠[4-6],同时不同的Ti时间也用于区分数据分组类型;最后用Dc×Tc时间来表示传输的信息;这就是时长编码方法。

为进一步分析时长编码的性能,假设单片机的主频为OSC=22.1184MHz,所以单片机系统基本时间单位为To=1/OSC=1/22.1184μ s≈45.2ns,在单片机中编码时间都应该是基本时间单位 To的整数倍。则编码标志脉冲宽带为 Tr+Tw+Tf,根据红外IrDA1.0标准它的时长应该接近1.6μ s;所以在当前的单片机时钟条件下采用36个基本时间单位即 Tr+Tw+Tf=36×To≈1.63μ s刚好符合要求;填充时间 Ti必须要保证足够的时间才能正确识别两个连续脉冲数据,根据式3的要求在115200bps条件下最小一个比特的时间应该不小于8.68μ s,红外管才能正确识别,因此(Tr+Tw+Tf)+Ti≥8.68μ s。根据这一要求我们设计 Ti有两种取值,当 Ti=12×15×To≈8.14μ s同时 Tc=0时,表示该编码为一个分组的“开始标志”,而 Ti=12×16×To≈8.68μ s时,则为分组其它内容的时长编码分组。每一时长编码可以传输4位二进制数,用Dc×Tc时间来表示数据,其中一个 Tc设计为取8个 To时间;所以,当 Dc=0时 Tc×Dc=0的编码时间最短,为1.63μ s+8.68μ s=10.31μ s;Dc=15时编码时间最长,为1.63μ s+8.68μ s+15×8×To=15.74μ s。编码时间越长,传输速率就越低,按Dc=15的时间来算,传输一个字节的时间最长为15.74μ s×2=31.48μ s。而按 IrDA1.0的编码方式用最高速度115200bps传送,传送一个字节的时间为:依据速率,时长编码的最低速率是IrDA1.0的86.8/31.48≈2.76倍,可转换传输速率为如果按Dc=0最快速率算,时长编码的速率是IrDA1.0的:86.8/(10.31×2)≈4.2倍。

现在对上述编码可靠性进行分析。只要是接收可靠性,分析主要是基于 To的精度和稳定性。由于采用的时钟源是来自晶体,晶体的标值精度一般都可以达到千分之一的水平,也就是10-3等级,而晶体的稳定性一般可达到万分之一的水平,所以稳定性相对精度来说,对接收没有影响,可忽略不计[7]。

接收时,采用前沿 Tr计时长,而 Tr最大为 75ns,To为45.2ns,相位判断时最多相差2个 To,按 Dc=15时的最长编码时间算,其有(36+12×16+8×15)=348个 To时间,而收发两方的精度在348 To内还没有超过一个To的时间,累加下来最大判时误差不超过3个 To,而Tc时长是以8个 To为间隔设置的,这样最大误差造成的采样相位误差为=37.5%<50%,所以时长编码有足够的容差保证接收不会出错[8]。

3 单片机实现方案

选用的单片机应具有一个全双工的UART通信接口,实现与数据终端设备DTE(Data Terminal Equipment)的通信互连[9-11],另外有一个脉冲宽度调制PWM输出接口,用于产生红外调制编码信号,还应具有一个信号捕获接口,用于接收红外信号,完成红外信号解调。完整的硬件原理图如图2所示。

软件分成 4个部分:UART接收,UART发送,红外调制发送,红外接收解调。UART发送实时性要求较低,可以放在主程序以查询方式发送;UART接收的实时性要求较高性,必须保证不丢失每个数据,所以采用中断方式实现;而红外信号的接收与发送是交替进行、半双工模式,也就是说发送时肯定不会接收,而接收时一定不能发送。红外的收发都是针对信号波形处理,时间要求极其严格,不能错过一个 To周期,所以红外收发的实时性要求最高。

对于UART的接收和发送两部分,是一般性的串行通信口收发问题,在此不作深入的论述。下面将红外发送和接收分别进行论述。

图2 单片机红外数据全双工时长编解码器硬件结构

3.1 红外发送的算法

首先描述单片机中PWM模块的一种适合本文编码的工作方式[12]:信号翻转方式。单片机中有一个16位增一定时计数器C16,当启动工作时其对应的PWM输出信号为0,第一个时钟 To自动对C16加一,达到最大值0xFFFF后再加一变为0,实现循环计数定时;另外有一个16位比较寄存器M16,当C16的值与M16的值相等时,PWM输出信号取反一次,同时产生中断请求。中断服务程序中必须及时修改M16的值,这样就可以让输出信号在设定的时间发生变化,实现信号调制编码。

最长变化时间为65536个 To;最短取决中断的响应时间,MCS51单片机不允许中断响应的情况下,一般不超过6个 To时间,再加以设置M16耗费的8个 To时间,共14个 To时间。文中时长编码最长时间为(12×16+8×15)=312个 To,而最短为36个To,都在可操作时间范围内,所以单片机完全可实现实时编码。

将要发送的分组先编制成为时间数据放在数组中,尽可能减少发送时的编码耗费时间,最后发送过程按如下步骤操作即可。

(1)停止C16,设C16=0xFFFF,M16=0,PWM 输出为0,定时一个 16位变量N16,并设N16初值为36,设置该PWM中断为最高优先级,然后启动C16。

(2)PWM中断服务程序。将N16赋给M16,即M16=N16(在汇编语言中该语句不影响中断现场,可以及时修改M16的值);保护中断现场;如果还有分组时间数据,则赋给N16,否则关停C16和PWM;恢复中断现场;中断返回即可。

3.2 红外接收的算法

首先描述单片机中捕获模块的基本原理。所谓捕获就是记录一个信号的变化时刻,当单片机捕获模块对应输入引脚上信号发生上升或下降变化时,就将定时计数器C16的值自动锁存入M16,同时产生中断,这样记录下每次信号变化时产生的M16值,就可以测量信号变化的时间长度,从而实现解码。本方案中只要记录信号变化的前沿时刻,将当前时刻值减前一时刻值,即可测量本次时长码的时间。

前面构造时长码时,有一个分组“开始标志”,定义时间长度为12×15个 To,而其他的编码时长最短为12×16个 To,前面讨论过晶体精度带来一定误差,设每次测量得到的码时长为 Tx,则分组“开始标志”的 Tx应满足:

12×15-6 ≤Tx≤12×15+6

从前面分析得知晶体精度,接收码字Dc的Tx可变为:

12×16+Dc×8-3≤Tx≤12×16+Dc×8+3

上式可变换成下式:

Dc×8+1≤Tx-12×16+4≤Dc×8+7

显然(Tx-12×16+4)整除以8即可求得Dc原码。

3.3 信道管理

由于红外信道是半双工模式,而相对于DTE又是透明全双工模式,这样红外通信双方就不可避免发生冲突。解决方案是在发送前检测是否有接收信号,如果没有就自动延时后退一个随机时间,再次检测是否有接收信号,如果没有就开始发送,否则重复该过程。

另一方面,由于改为时长编码后的通信速率较高,增加了检错重发机制,保证了数据的完整和正确无误。

4 结束语

用STC12C5A60S2单片机和RPM851A集成红外收发器构造了硬件测试平台,红外距离两米,两台PC以串行数据全速对发、以及随机分组数据和随机间隔对发,经长时间测试统计,没有发生误码。文中技术改造了大量的气象通信设备,实现光电隔离防雷,经过3年多时间工作,证明性能稳定可靠。

[1] 郑郁正.单片机原理及应用[M].成都:四川大学出版社,2003.

[2] 施文娟.基于ARM920T的红外通信系统的设计[J].微型机与应用,2010,(24):59-61.

[3] 李晓雷.基于MSP430单片机的无线以及红外通信设计[J].伺服控制,2011,(7):71-75.

[4] 叶辉.红外通讯协议在嵌入式系统中的实现[J].电子技术应用,2004,30(7):68-71.

[5] 邱磊,肖兵.基于IrDA协议栈的红外通信综述[J].无线通信技术,2004,13:28-32.

[6] 王成义,郭秀梅,丛晓燕.一种可靠的红外通信协议设计与实现[J].激光与红外,2009,10:1070-1073.

[8] 许继彦,杜钦生.红外通信模块的设计与实现[J].长春大学学报,2009,10:49-51.

[9] 林苗青,翁武坤,周如梅,等.自动气象站防雷工作中的问题及应对措施[J].2011,9:110-113.

[10] 程程,洪龙.一种实用的红外通信装置设计及实现[J].电力自动化设备,2009,9:129-132.

[11] 张鹤,李斌,杨永强.一种基于AT 89S52单片机的红外通信接口的设计[J].成都大学学报,2008,6:141-143.

[12] 王芳,吴谨.基于凌阳SPCE061A的红外通信接口设计[J].电子技术,2009,9:16-18.

猜你喜欢
全双工红外分组
网红外卖
闪亮的中国红外『芯』
TS系列红外传感器在嵌入式控制系统中的应用
分组搭配
怎么分组
RLS算法在同时同频全双工系统中的自干扰抑制性能分析
分组
基于快速递推模糊2-划分熵图割的红外图像分割
基于GRT平台的全双工WiFi设计与实现
同频同时全双工数字自干扰抵消算法