红外通信的设计与实现
扫描二维码
随时随地手机看文章
在电子消费领域当中,红外产品的使用较为普遍,它多用于简单的近距离控制,如家电,玩具,各种抄表系统。本文以Freescale 8位高性能、低功耗单片机MC9S08GT60为载体,详细介绍红外通信的硬件和软件设计过程及通信协议的使用。
HCS08系列的MCU是Freescale半导体公司最新推出的8位单片机,具有多种低功耗模式,更高的工作频率,并集成了片上调试器,而且资源丰富,因此采用了该系列的MC9S08GT60作为载体详细讨论了一个简单实用的红外通信开发系统。
红外通信过程主要由红外发射和红外接收两个过程,首先将数字信号送给红外发射电路,经该电路的调制转变成红外光信号在空中传输,然后红外接收电路收到该红外光信号,经过该电路的解调,将此红外光信号还原成可被单片机处理的信号,由单片机内部处理得到原来的数据编码。
2 红外通信协议
协议的目的是给收发双方一个约定,使其能够进行同步,并正确的收发数据。本设计使用了类同步协议。当红外接收器未收到信号时,不产生定时操作,否则,首先接收起始位‘0’,并触发中断,启动定时器接收数据,然后判断是否为起始位,如果是,则继续接收数据,否则将定时器复位,重新检测起始位,在接收第二个停止位时,会触发一次中断来检测第一次接收的停止位是否正确,如果不正确,则复位定时器,重新接收,否则已经正确接收该数据段。
3 红外通信的原理分析
红外通信在空中传输的是载波信号,当有载波通过时,接收端输出数字信号‘0’,反之,输出数字信号‘1’。因此在发射电路发送的功能指令码,一般采用多位二进制串行码。本文中,红外通信数据采用脉冲编码,就是将每位数据信号用一个脉冲来表示,脉宽为526 μs,两个这样的脉冲周期表示‘1’,一个这样的脉冲周期表示‘0’。这样的脉冲信号都调制在频率为38 kHz的载波上再发送出去,调制后在空中传输的信号就是具有一定时间间隔的载波信号,其占空比由数据编码决定。在红外接收端,数据处理的过程正好相反,在接收红外光信号之后,会经过整形、放大、滤波、调制等一系列处理,然后在其输出端输出一系列的单片机能够处理的数据信号。
4 红外通信硬件设计原理
4.1 发送电路的硬件设计
HCS08GT60单片机内部有两个TPM模块,每个模块有两个通道,可以用任意一个通道的PWM功能,输出38 kHz的载波信号,本文编程设计根据实验条件的要求采用了TPM1通道1中心脉宽输出功能产生38 kHz红外载波信号。而PTA7口作为普通的输入输出口,产生一定脉宽的方波信号,作为数据编码信号输入。硬件原理图如图1所示。
500)this.style.width=500;" border="0" />
原理图中,电气节点CODE跟PTA7口相连,产生数据编码;电气节点CLK跟TPM1通道1相连,产生38 kHz红外载波信号。三极管基极串接的电阻和R5起到限流保护的作用,三极管本身则具有信号放大的功能,另外两个三极管级联将编码调制在38 kHz的载波上通过红外发射器发射出去。当编码为‘1’时,Q1,Q2截止,红外发射器上无电流通过,发射低电平信号,当编码为‘0’时,Q1,Q2导通,此时载波信号通过Q2放大在发射器上体现出38 kHz的载波信号。因此在PTA7端口输入不同的数据编码,通过该发送电路,在发射器上会出现具有一定间隔的38 kHz载波信号,经发射器将该载波信号转化成光信号发射出去。载波脉冲调制信号的时序图如图2所示。
500)this.style.width=500;" border="0" />
4.2 接收电路的硬件设计
红外接收电路中使用了HS0038A接收器,HS0038A的内部逻辑框图如图3所示。
500)this.style.width=500;" border="0" />
由此可看出该接收器内部实现了红外接收、放大、滤波及解调功能,当收到红外载波光信号时,红外接收器输出低电平,反之红外接收器输出高电平,从而可以将时断时续的红外光信号调制成连续的方波信号,经单片机内部处理可以将其转换成原来的数据。
硬件原理图如图4所示。
500)this.style.width=500;" border="0" />
由于HS0038A内置滤波并且采用环氧塑封,可以作为红外滤波器,因此电路中不需要另外增加滤波器,并且HS0038A具备较强的抗干扰能力。
红外接收器输出引脚RevData连接在TPM2通道0,使用了TPM的输入捕捉功能,在上升沿时发生输入捕捉,比较两次捕捉发生时通道寄存器TPM2C0V的值,可以得到一个周期脉冲的宽度,根据发射数据的时序图,就可知道不同的脉冲宽度对应的数据是什么,由此就可将原数据还原出来。
5 红外通信的软件设计
5.1 38 kHz红外载波设计
MC9S08GT60使用了外部4 MHz的晶振频率,通过配置ICG1=0x78,ICG2=0x30,将总线频率控制为20 MHz。MC9S08GF60内部有定时/脉冲输出模块,将TPM1的状态控制寄存器的位CPWMS置1,则TPM1工作在中心脉宽输出模式;将TPM1通道0的状态控制寄存器的ELS0B:ELS0A设置为10,控制发生输出比较时将脉冲信号置高或置低。为使TPM1C1输出38 kHz频率的载波信号,就要对20 MHz的总线频率进行526分频,即526个20 MHz的方波周期产生一个38 kHz的方波周期,因为是中心脉宽输出模式,输出脉冲宽度是通道值寄存器TPM1C1V中值的2倍,输出脉冲周期是通道预置寄存器TPM1M0D中值的2倍,因此令TPM1C1V=131,TPM1M0D=263,启动定时器后,定时器1的计数器TPM1CNTL在自增1计数时,当该值跟通道值寄存器TPM1C1V中值匹配时,将脉冲输出信号拉低,定时器1的计数器TPMlCNTL在计数值开始进行自减1操作时,当下降到跟通道寄存器TPMlClV时,将脉冲输出信号拉高。中心脉宽输出的时序图如图5所示。从此通道输出的方波频率通过示波器查看为37.9 kHz或38 kHz。
500)this.style.width=500;" border="0" />
5.2 数据编码的设计
MC9S08GT60单片机有36个端口,大部分端口都具有双重功能,本文使用端口PTA7,配置该端口的方向寄存器PTADD_PTADD7为1,即PTA7为输出,根据脉冲编码的规则,进行不同的延时操作,使该端口输出一定宽度的数据脉冲,通过示波器查看该端口,可看到稳定的脉冲序列。
5.3 接收端信号的输入捕捉设计
将TPM2的状态控制寄存器的位CPWMS置0,则TPM2可以工作在输入捕捉模式、输出比较模式、边沿脉冲输出模式;为使TPM2通道0工作在输入捕捉方式,需要进一步设置TPM2通道0状态控制寄存器,将TPM2C0SC的模式选择位MS0B:MS0A设置为00,选择了输入捕捉方式,此外,要设置捕捉发生在什么条件下,那么需要设置TPM2COSC中的极性选择位ELS0B:ELS0A,使其为01,目的是在该引脚出现上升沿时发生捕捉。在发生捕捉时,通道值寄存器会将定时寄存器的值进行锁存,因此比较两次输入捕捉时,通道值寄存器的内容,根据编码规则,可知道该值对应的编码是‘1’或‘0’。此外通道值寄存器是16位的,如果希望通过串口调试窗口查看比较结果,因为串口接收数据缓冲寄存器是8位的,那么可以将其分解为两个8位的数据通过串口发送。
以下是输入捕捉的中断子程序:
程序功能描述:将捕捉的数据发往串口查看,这样不管用什么发射器,都可以通过观察串口数据得到识别码,完成不同的功能。
500)this.style.width=500;" />
6 结语
红外通信一般用在低数据速率,并且短距离的场合中,因此需要低功耗的运行要求。而Freescale的这款单片机工作电压可达到1.8 V,在单片机空闲方式下,通过设置SOPT和SPMSC两个寄存器来设计不同的停止低功耗模式,或者执行一条WAIT指令,使单片机进入等待的低功耗模式,这里就不再详细讲述其实现过程。MC9S08GT60单片机与其他低电压、低功耗的单片机不同之处在于,它并非是以牺牲性能为代价来换取1.8 V的低电压。因此本文使用该单片机讨论了发送和接收红外电路的设计过程及通信协议的运用,该系统的设计切实可行,对红外控制开发者有一定的帮助。