单片机与红外遥控技术原理

来源:百度文库 编辑:神马文学网 时间:2024/03/28 17:06:17

浅谈单片机与红外遥控技术原理

李文龙

(广东海洋大学 热能与动力工程 热能1073班,湛江524088)

 

摘要:   内自然界中,光线都是由电磁波构成的,红外线也不例外。属于不可见光线中的一种,由德国科学家霍胥尔在1800年首次发现。至今为此,100多年的历史,让红外技术运用相当广泛。如测量,通信,遥控等方面,如今,在家电遥控器里面,因红外线的稳定性,抗干扰,无电磁污染,几乎都是利用红外技术。下面我主要对红外的传送协议与单片机的解码进行讲解,了解这方面的知识,在面对出现故障的遥控器,希望读都知道如何下手修理

关键词:     红外遥控;单片机;

 

引言红外遥控是单工的红外通信方式,整个通信中,需要一个方射端和一个接收端。发送端将二进制信号调制成一串脉冲信号,可能通过红外发射管在空间发射出去。接收端则将会接收到的发射端传来的红外信号并解调成二进制信号,再送往微处理器处理,这就是整个遥控过过程的简单的原理。调制:为了使其在无线传输过程中免受其他信号的干扰,通常都是先将其调制在特定的载波频率上,这样的过程我们称之为调制。

解调:接收装置滤除有意加上的载波与杂波,只接收该特定频率的信号并将其还原成我们所要接收的信号,这个过程也就是解调。

   红外信号发射器的简介

目前我手里有一个TC9012芯片的红外编码编码遥控器,是一个比较经典的芯片,我就以它为例子向大家讲解一下,它的发射原理与接受控制。TC9012 是一块用于东芝系列红外遥控系统中的专用发射集成电路,它可外接32 个按键,提供8种用户编码,另外还具有3 种双重按键功能。是一个比较通用常见的红外编码芯片。如图1

图1

芯片上的引脚KI0~KI3四个引脚是键盘扫描输出脚 ,K00~K07八个引脚是键盘扫描输入脚 ,所以,根据矩阵键盘的组合,可以组合4*8=32个按键,足够我们用户电器使用了。

OSCO,OSCI是芯片455KHZ晶振输入.红外遥控常用的载波频率约为38KHZ,这是由晶振来决定的,常用到455KHZ晶振进行整数分频,分频系数一般取12,所以455/12=37.9KHZ约了38KHZ.

REM为输出,带载波的遥控信号输出端,即红外信号输出端。

LM为电源指示灯,     VDD为电源正端(2~4V),    VSS为电源负端,接地.,

SEL为编码引脚,用户可自行与K00~K07任一个接。

 图2

芯片通过按键扫描,检测到按键,并通过按键编码,码调制电路,再由红外发光二极管输出,一帧红外数据信号。TC9012 的一帧数据中含有32 位码,包含两次8 位用户码,8 位数据码和8 位数据码的反码及最后位的同步位。引导码由4.5ms 的载波和4.5ms 的载波关断波形所构成,以作为用户码、数据码以及他们的反码的先导。同步位(SY)是标志最后一位编码是“0”或“1”的标识位,它只有0.56ms的有载波信号构成。发射码的格式如下图3所示:这些信号的时间特征正是用来区分数据 “0” , “1” 解码也正是利用这个特征。

图3

发射码中的用户码一共有8种组合,是用SEL引脚与K00~K07的不同引脚连接来区分的,

用户码的结构如下表格

S0

S1

S2

S3

S4

S5

S6

S7

S0 S1 S2 三位就是用SEL与K00~07来的连接来区分如上电路图:引脚SEL与K00连接在一起,则S0 S1 S2为000;

更多相关的内容请看芯片资料。S3固定了1,S4,S5,S6,S7固定为0;

数据码共有32种组合,它的数据是由4*8的按键组成,用于我们按键的区别。

1.1    红外输出信号波形

当按下一键时,发射器发射一信号串,除引导码外,其它全由1或0构成的二进制信号。脉宽调制的红外信号与脉冲调制的信号,在结构上不同。这里主要讲常用的脉宽调制信号,如下图所示的是0与1的信号结构;

数据0是由0.56ms的高低电平组成的,总时间为1.125秒,而数据1比数据0时间上多了1ms;接收时,正是利用这个时间不同来区分0和1的。

引导码是用来确认红外信号到来的,给我们做一个接收的准备,如果检测到了9ms的引导码,就可确认接收数据了。

1.2    红外数据的接收

 

一体化红外线接收头如图4

一体化红外线接收头外型如一只小型三极管,着色为黑色,可以避免乱光干拢,它将红外发光二极管,低噪音放大器,限幅器,带通滤波器,解调器,,以及整形驱动电路等集成在一起.一体化红外线接收头体积小,灵敏度高,外接元件少,抗干扰能力强,使用十分方便,运用很广泛。

               

图4 红外一体外接收头                                   图5  红外接收头通常接法

图5为接收头常用的接法,红外接收头接收到红外光后,直接解调后输出我们需要的高低电平,可送往处理器直接处理,但值的注意的一点是,接收到的数据刚好与发射的信号电平相反。例如图6:

           图5 发射的信号与接收到刚好相反

因此,由信号结构可以知道,1与0,和引导码的信号由发射时的高电平到低电平的顺序变为接收时的低电平到高电平,第一个信号开头都会有一个下降沿,这样我们可以用单片机的外部中断来感应每一个信号的到来。

 

   程序设计

程序设计思路:利用定时器与外部中断来接收红外信号的,并把接收函数放进中断函数里面。下面的是结构图

接收到的引导码,和数据“0”与“1”是由先低后高的电平组成的,单片机外部中断设置为下降沿中断,即每当引导码和数据0与1到来时,都会产生一个中断,中断后,启动定时器计时,并等待下一个中断到来。因此,二个中断之间的时间差就可以由定时器算出,如果判断后得中断时间差为9MS,则可知道收到的是引导码;如果时间差为1.125ms,则这个数据为0;如果时间差为2.25,则这个数据为1;如果这个时间差不在这个范围,我们定义了接收错误,或者为光干拢。取消接收并等待下一指令。

由于单片机的晶振的误差,和程序上的指令运行时间的不精准,接收数据的时间差不一定是刚好9ms,1.125或为2.25.所以程序上采用了相对精准的时间差。例如:

单片机选用的是16位记数器,即采用高8位对其。例如:单片机晶振为12MHZ,定时器每记一个数为1us. 引导码的时间差了9ms=9000us,在定时器里的值为00100011|00101000。在接收引导码时,如果定时器的高8位是等于00100011时,我们就可以粗略当它为9ms的时间差,那它为引导码。这样可以避免单片机时间上的误差而导致接收上的误判。0与1的接收时间上的简化也类似。下面是接收的程序,只附上外部中断的程序。

void OutIR() interrupt 0

  TR0=0;//停止计数器

  th=TH0;//中断来了以后,立急停止计数器,并把TH0数据赋值给th;

  TH0=0;TL0=0;TR0=1;//收到数据后,立及启动计数器继续计数;

if((count==1)&&(th<=0x25)&&(th>=0x20)) //判断高8位的数据,即是不是引导码?

{   ok=1; }//OK是用来检测是不是引导码,成功K=1

  if(ok==1)//如果引导码成功,才进行下面的数据接收。

{     if((1

         { 

    if((0x03<=th)&&(th<=0x04))//如果时间差th的值在03~33之间,表示数据为0        

           {  date[(count-2)/8]=(date[(count-2)/8]<<1)&0xfe; //通过算法,给date移位赋值。Date是一个数组,用来装收到四个字节的数           

      else

     if((0x07<=th)&&(th<=0x09))//如果时间差th值在这个范围,则表示数据为1                 

                  date[(count-2)/8]=(date[(count-2)/8]<<1)|0x01;   }        

 }

count++;//每接成功一次,这个数自加一次

if(count>33)//如果计数大于33了,则表示接收玩了,要进行对数据初始化了

{    count=0;TR0=0;ok=0;    }

if(ok==0)//这句是用来检测上面的接收是否成功,如果不成功,刚K=0.在这里进行数据复位

{   if(count!=1) count=0;}

}

 

   结束语

此红外遥控装置,在电路设计上非常简单。代码编程上稍有难度,只有直正了解整个红外传送的格式,才能设计程序,要想装置的接收稳定性好,还应该多注意时间上的误差。这文章从浅入手,详细讲了原理,希望能对你们初学者了解红外遥控方面有一定帮助。此文章版权由本人所有,未经同意,请否投搞。