基于51单片机的无线信号编解码技术研究
随着微电子、计算机信息技术的迅速发展,由单片机和无线传输模块组成的无线数据通信系统在石油、电力、水文、冶金、安防等行业的无线控制、数据采集、故障报警等诸多领域中得到越来越广泛的应用。而数据的编解码对于无线传输可靠性的影响举足轻重。目前编解码方式主要有硬件编解码和软件编解码两种。本文在对已有硬件及软件编解码技术研究的基础上,设计并通过STC89C516RD+单片机实现了一种以软件方式对传输数据编解码的方法。
1 现有的编解码技术
1.1 硬件编解码技术
目前有多种用于编码和解码的专用芯片,PT2262/PT2272是比较常用的一种。在通常的使用中,一般采用8位地址码和4位数据码,这时编码芯片PT2262和解码芯片PT2272的第1~8脚为地址设定脚。有三种状态可供选择:悬空、接正电源和接地,38为6 561,所以地址编码不重复度为6 561组,只有发射端PT2262和接收端PT2272的地址编码完全相同时,才能配对使用。当编码启动端TE接低电平时,PT2262就将从数据输入端D0~D3输入的数据经过编码后从DOUT引脚串行输出[1],数据帧的高8位为地址,低4位为数据,发送时以先高位、后低位的顺序逐次发送。每一帧发送4次,每帧数据中间由同步码隔开。PT2272只有在连续2次检测到相同的地址码和数据码时才会把数据码中的“1”驱动相应的数据输出端为高电平和驱动VT引脚同步为高电平[2],将VT引脚反向后接入单片机的外部中断输入引脚,通过触发中断来通知单片机接收到数据了。
PT2262/PT2272芯片功耗低、外部元器件少、工作电压范围宽。但这两个芯片在应用中必须对地址统一编码,配对使用,而且需要通过改变硬件电路才能重新设置芯片地址;该编码芯片的帧格式是固定的,不能随意改动,而且编码的脉冲宽度需要调节外接振荡电阻大小才能改变。这些都给用户的使用带来了极大的不便。
1.2 软件编解码技术
在利用单片机和无线传输模块进行无线数据传输的过程中,使用软件编解码时通常会采用定时采样的方式。总体设计思想如下:发送端通过定时器延时产生不同宽度的脉冲或脉冲组合来实现对数据“0”和“1”的编码。接收端对接收到的脉冲信号进行定时采样,然后通过计算识别出对应的数据信号。通过定时采样的方式进行解码时,对采样频率具有比较严格的要求。根据奈奎斯特理论,只有采样频率高于发射信号最高频率的2倍时,才能把数字信号准确还原[3]。但是中断的响应与返回以及数据的判断都会造成时间延迟,因此,发射信号的频率不能太高,否则容易导致数据丢失。同时定时采样需要多次调用中断服务程序,增加了额外的时间开销。这些都会降低无线数据传输的速率。
2 改进的编解码技术
2.1 软件编码原理及程序流程
编码就是用不同形式的码型来表示二进制的“1”和“0”。本文采用的编码方式为脉冲—间隙编码,即在下一脉冲前的暂停持续时间t表示二进制符号“1”,而下一脉冲前的暂停持续时间2t表示二进制符号“0”[4],脉冲—间隙编码如图1所示。发送端的信号分为同步信号、数据信号以及校验和信号,无线发射电路如图2所示。经过编码后的信号由单片机的P1.7引脚输出到无线发射模块,然后无线发射模块将基带信号经高频载波电路调制后,通过天线向空间辐射。
在发送端对数据进行编码时,由于对发送的数据位、位数的判断以及校验和的生成所产生的延迟时间不超过70T,其中T为机器周期,因此,定义100T的高电平脉冲代表“1”,而200T的高电平脉冲代表“0”。在接收端进行解码时,由INT1引脚上的下降沿触发中断并停止定时器计数,进而识别数据信号,此过程中断服务程序的延迟时间不超过50T。因此,设置数据位之间的低电平脉冲宽度为70T。为了不与数据信号混淆,将同步位定义为300T的高电平脉冲。本实验采用的石英晶体的晶振频率为12 MHz,因此一个机器周期为1 μs,故一个字节的传输速率最快为5 882 b/s,最慢为3 703 b/s。
软件编码程序流程图如图3所示,采用定时器0工作在方式1,即16位定时器工作方式,根据不同的输出脉冲宽度需求向计数寄存器TH0和TL0中装入不同的初始值。标志位flags_0用来区分高电平脉冲和低电平脉冲,当标志位flags_0为0时输出两个数据位之间的低电平脉冲,不为0时输出高电平脉冲。标志位flags_1用来区分数据位和同步位,当flags_1为0时输出数据位高电平脉冲,为1时输出同步位高电平脉冲。在发送的过程中,每发送一个字节,就将该字节累加到校验和中,当所有的数据发送完后就发送校验和。
2.2 软件解码原理及程序流程
解码是用特定方法把数码还原成它所代表的内容,或将电脉冲信号转换成它所代表的信息、数据等过程。本文采用定时器与外部中断相结合的方法对接收到的脉冲信号进行解码,并利用接收到的校验和进行校验。
将单片机的模式控制寄存器TMOD的门控位GATE置1,当TR1=1时,外部中断INT1直接控制定时器1的启动、停止,即INT1由0变为1电平时,启动计数;当INT1由1变为0电平时,停止计数。这种情况常用来测量在INT1引脚上出现的正脉冲的宽度[5]。无线接收电路如图4所示,无线接收模块将接收到的信号进行解调、放大和整形,恢复出基带信号,由引脚2输出到单片机的INT1引脚上。设置外部中断1为下降沿触发方式,定时器/计数器1为16位定时器工作方式。当INT1引脚上出现由高到低的负跳变时触发中断,定时器1停止计数[6],读取计数寄存器TL1和TH1中的值来判断脉冲宽度,从而解码接收到的数据信号。
- 关于RTX51 TINY的分析与探讨(05-30)
- 浅析8051模块化编程技巧(05-28)
- 基于DSP和单片机通信的液晶显示设计方案(07-20)
- 锁相环控制及初始化简析(08-27)
- 基于MSP430自动胀管控制器的研究(09-07)
- 嵌入式C实现延时程序的不同变量的区别(03-01)