2008年12月30日星期二

单片机系统中红外通信接口的设计

单片机系统中红外通信接口的设计

在许多基于单片机的应用系统中,系统需要实现遥控功能,而红外通信则是被采用较多的一种方法。一般市场上的遥控器协议简单、保密性不强、抗干扰能力较弱。这里,我们介绍一种基于字节传输的红外遥控系统,可以适合于各种复杂的应用场合。

  红外通信的基本原理

  红外通信的基本原理是发送端将基带二进制信号调制为一系列的脉冲串信号,通过红外发射管发射红外信号。常用的有通过脉冲宽度来实现信号调制的脉宽调制(PWM)和通过脉冲串之间的时间间隔来实现信号调制的脉时调制(PPM)两种方法。本系统采用的为脉时调制方法。数据比特的传送仿照不带奇偶校验的 RS232通信,首先产生一个同步头,然后接着8位数据比特,如图1所示。

  硬件电路设计

  复费率电能表系统可分为手持遥控器和复费率电能表两部分。手持遥控器为发射部分,其基本电路如图2所示。采用塑封的SE303ANC-C发射二极管,波长为940nm。CPU按照协议规定导通或截止发射二极管,从而产生特定频率的发射信号,这里选用的频率为38.9kHz。复费率电能表红外接收部分的基本电路如图3所示。接收管采用日本光电子公司的PIC-12043,其接收频率为37.9kHz,它直接将37.9kHz的调制信号解调为基带信号,提供给接收CPU。该芯片接收灵敏度高,性能稳定。其基本工作过程为:当接收到37.9kHz信号时,输出低电平,否则输出为高电平。电能表部分采用的是51系列单片机,以中断方式检测接收信号。这里的非门对接收信号起整形作用。

  软件设计

  发射部分的程序相对来说非常简单,主要是产生不同时间间隔的37.9kHz脉冲串信号去控制发射管的通断。在发射端,CPU不断扫描键盘,一旦发现有键按下,即启动发射子程序将相应的数值发送出动。在我们的设计中,采用的是4×4的小键盘,正好和0~F编码对应,为了提高可靠性,采用最简单的纠错编码——将每位数重复发送一次,即和键盘数字对应的编码为 00~FF。这样,一个键值要发送8比特。接收端接收满8比特信号后,再进行纠错处理,不正确的编码认为无效。收足规定的号码后,即调用号码分析程序进行处理。当每收到一个脉冲串信号后即启动一个定时器。下次中断发生时,通过定时器的计数值判断是0还是1。如果定时器溢出,则清除本次接收的号码,恢复到接收初始状态。接收部分的基本程序流程如图4所示。

  在程序设计时,应该注意MCU的中断方式采用下边沿触发;接收端通过T0计数值来判断发送比特,一般采用硬判决,即取0和1比特时宽的平均值为判决门限A,当T0值大于A时判接收信号为0,小于A时判为1。

  复费率电能表中的红外接收程序如下(MCU为Intel 8052,采用C语言编写):

#include
#include
#include
#pragma OPTIMIZE(5,SPEED)
sbit RECV=P3^3;
bdata unsigned char SIGN, RECVBYTE;
sbit RECVBG=SING^0;
sbit US1AT=SIGN^6;
sbit RECVBITO=RECVBYTE^0;
unsigned char RECVBIT;
//-------------------------------------

timer0() interrupt 1 //entrance: 8*n+3=0Bh;
{
IE=0×8d; //1(EA)0(X)0(X)0(X)_1(ET1)1(EX1)0(ET0)1(EX0)
Recvbg=0;
}
//--------------------------------------
EX_INT1() interrupt 2 //接收红外信号
{
TCON=0×45; //0(TF1)1(TR1)0(TF0)1(TR0)_0(IE1)1(IT1)0(IE0)1(IT0)
If(RECVBG==0) {RECVBG=1;
RECVBIT=8;
}
else{ RECVBYTE=RECVBYTE<<1;
if(TH0<=4)RECVBIT0=1;
else RECVBIT0=0;
RECVBIT--;
if(RECVBIT==0) { RECVBG=0;
US1AT=1;
}
}
TH0=0;
TL0=0;
TCON=0×55; //0(TF1)1(TR1)0(TF0)1(TR0)_0(IE1)1(IT1)0(IE0)1(IT0)
IE=0×8f; //Enable the timer0 interrupt
}
//----------------------------------------------------
void main() {
RECVBYTE=0;
SIGN=0;
TMOD=0×11;
TCON=0×55;//0(TF1)1(TR1)0(TF0)1(TR0)_0(IE1)1(IT1)0(IE0)1(IT0)
IP=0×00;
IE=0×8d; //1(EA)0(X)0(X)0(X)_1(ET1)1(EX1)0(ET0)1(EX0)
//基本循环程序
while(1){
·
·(略)
·
if(US1AT==1) { //红外接收处理
·
·(略)
·
}
}
}

  结语

  以上设计方案在复费率电能表中应用后,效果良好,达到了设计要求。整个系统外围元件少,调试方便;软件工作量也较小。如果应用来传送大量数据时,还可以根据需要改变相应的编码形式,提高数据传送速率。



------------------------------
多费率电能表中基于单片机串行口红外通信的设计
摘要:利用单片机的串行口、定时器/计数器T0、定时器/计数器T1、红外发射管和红外接收管等简单的软硬件就可靠地实现了多费率电能表的红外通信功能。本设计详细介绍了串行口红外通信的软硬件设计方法,并给出了具体的电路原理图、波形图和51单片机程序。
关键词: 红外通信 串行接口 电能表 SSU7301单片机
0 引言
多费率电能表是我国目前节约用电和计划用电政策下不可缺少的电能计量产品,多费率电能表的通信接口一般兼有红外接口和RS485接口。红外通信具有直观、操作简便、可靠性高等优点,是电能表中使用最为普遍的一种通信方式,是电能表和掌机之间实现抄表、编程、校时、数据管理等功能的有效手段。采用新茂单片机 SSU7301(51系列)、日本光电子公司的红外发射管SE303和红外接收管PIC12043,以及单片机串行口、2个定时器/计数器可以有效地实现红外通信功能。
1 红外通信原理
红外通信是利用波长为900nm~1000nm的红外波作为信息的载体,发射装置把二进制信号经过高频调制后发送出去,接收装置把接收的红外高频信号进行解调为原来信息的一种通信传输方式。其中调制方式有脉宽调制(通过改变脉冲宽度调制信号PWM)和脉时调制(通过改变脉冲串之间时间间隔调制信号PPM)两种,本文采用PPM脉时调制方式。
2 串行口红外通信硬件设计
多费率电能表的红外发射和红外接收电路主要包括新茂单片机SSU7301、日本光电子公司的红外发射管SE303和红外接收管PIC12043,以及驱动三极管8550、电阻和电容,红外通信硬件原理图见图1。
2.1 红外发射硬件设计
红外发射是利用单片机SSU7301的串行数据发送口TXD(P3.1)控制驱动三极管BG1进行二进制数据“0”和“1”的传输(数据由串行发送缓冲器 SBUF中送出),以及利用P3.4口控制驱动三极管BG2进行高频38.4kHz调制(高频驱动信号由定时器/计数器T0的方式2自动重装模式产生),从而可靠地实现了红外发射管D1在传输数据“0”时进行高频红外发射和数据“1”时被截止的发射功能。状态关系见表1,波形见图2。
2.2 红外接收硬件设计
红外接收是利用红接收管PIC12034收到高频信号输出低电平确定为数据“0”,而没收到高频信号输出高电平确定为数据“1”的方式经过解调,把数据通过单片机SSU7301的串行数据接收口RXD(P3.0)进行串行方式接收(接收数据存储在串行口缓冲器SBUF中)。
3 红外通信软件设计
DL/T645-1997《多功能电能表通信》中规定电能表的红外载波频率为38kHz±1kHz;初始速率为1200 bps;通信的字节格式为8位二进制码D0~D7,传输时加上一个起始位(0),一个偶校验位P和一个停止位(1),共11位,传输时先传低位,后传高位,传输序列见图3。根据以上要求,本设计中红外载波频率采用38.4kHz,波特率为1200bps,串行口采用模式3为9位异步通信方式,加1位起始位和1位结束位,传送一个字节数据为11位。
3.1 红外载波和定时器/计数器T0设置
红外载波频率f2为38.4kHz,当定时器/计数器T0模式控制器TMOD中C/T=0和M1M0=10时,SSU7301的定时器/计数器T0设置成模式2方式。此时,TL0和TH0预置成1个可以自动重装的8位的定时器/计数器。用软件将TL0和TH0预置相同的初值后,当TL0计数值增1溢出时,一方面使TF0置1,申请中断;另一方面产生的溢出脉冲将TH0的数据值自动打入到TL0中去,不需要用软件对TL0重新置初值。系统的晶振f1为 11.0592MHz,则TL0和TH0的初值计算如下:
f2=38.4kHz 得T=1/f2=1/38.4k≈26×10-6=26 μs
所以高频调制反转的周期TC=T/2=26/2=13μs
即定时器/计数器T0的初值TL0=TH0=28-(TC×f1)/12=256-(13×10-6×11.0592×106)/12=256-11.9808≈244=0F4H
在定时器/计数器T0的中断服务程序中只用两条指令即可实现高频调制,即 CPL P3.4和RETI。
3.2 串行口和定时器/计数器T1波特率发生器设置
串行口采用模式3为9位异步通信方式,波特率为1200bps。由串行口控制寄存器SCON的操作模式选择位SM0、SM1都置1设置为模式3,当定时器 /计数器T1模式控制器TMOD中C/T=0和M1M0=10时,SSU7301的定时器/计数器T1设置成模式2方式作为波特率发生器,其波特率表示为:
波特率=(T1的溢出率)/ n
当SMOD=0时,n=32;当SMOD=1时,n=16,(本设计中SMOD=0)则
波特率=(T1的溢出率)×2SMOD / 32
T1的溢出率=(f1/12)/(28-T1初值)
得:波特率=(T1的溢出率)×2SMOD / 32
=[(f1/12)/(28- T1初值)] ×2SMOD / 32
得:定时器/计数器T1初值
TL1=TH1=28-(f1×2SMOD )/(12×32×波特率)
=256-(11.0592×106)/( 12×32×1200)
=256-24=232=0E8H
3.3 程序设计
根据以上两点参数的设置,51系列单片机SSU7301的汇编语言程序设计如下:
;以下为参数设置程序
MOV TMOD, #22H ;定时器/计数器T0方式2自动重装模式用于PWM38.4KHZ调
;制用 , 定时器/计数器T1方式2自动重装模式用于串行口通讯波特率发生器
MOV TH1,#0E8H ;波特率1200时,定时器/计数器T1自动重装初值
MOV TL1,#0E8H
MOV TH0,#0F4H ;38.4KHz高频频调制时, 定时器/计数器T0自动重装初值
MOV TL0,#0F4H
SETB ET0 ; 定时器/计数器T0溢出中断允许位
SETB TR1 ; 定时器/计数器T1开始定时控制位
SETB TR0 ; 定时器/计数器T0 开始定时控制位
MOV PCON,#00H ;SMOD为0不倍增模式
MOV SCON,#0D0H ;串行口设置为模式3,允许接收
SETB ES ;串行口允许中断
SETB EA ;开总中断允许位
;以下为定时器/计数器T0中断溢出服务程序
ORG 000BH; 定时器/计数器T0中断入口地址
T0SERVE:CPL P3.4 ; 定时器/计数器T0定时取反P3.4口进行高频调制
RETI ;中断返回
;以下为串行口中断服务程序,以接收一个字节数据为例,多字节以此类推
ORG 0023H;串行口中断入口地址
SENDSERVE:NOP
NOP
MOV A,SBUF ;把接收缓冲器的数据送到A寄存器
… ;进行数据处理及其它功能操作
RETI ;中断返回
;以下为串行口发送程序,以发送一个字节数据为例, 多字节以此类推
COMSEND: MOV A,#DATAH ;把数据送到A寄存器
MOV C,P ;根据A中数据产生的偶校验位送到进位标志位
MOV TB8,C ;送偶校验位到发送的第9位数据
MOV SBUF,A ;送数据到发送缓冲器
JNB TI,$ ;以查询方式等待发送结束
CLR TI ;清发送中断标志位
… ;继续发送或其它功能操作
RET 子程序返回
4 结束语
本设计的最大特点在于省略了脉冲振荡器,而仅仅利用多费率电能表上所带单片机的串行口和2个定时器/计数器,这不仅使多费率电能表在硬件设计上更加简单、成本更加低廉,而且在软件上也更加方便、可靠。同时这种红外通信方式也可以应用在带串行口和定时器/计数器的单片机应用领域。

没有评论:

发表评论