红外遥控及串口Microsoft Office Word 文档.docx

上传人:b****6 文档编号:5998664 上传时间:2023-01-02 格式:DOCX 页数:45 大小:146.63KB
下载 相关 举报
红外遥控及串口Microsoft Office Word 文档.docx_第1页
第1页 / 共45页
红外遥控及串口Microsoft Office Word 文档.docx_第2页
第2页 / 共45页
红外遥控及串口Microsoft Office Word 文档.docx_第3页
第3页 / 共45页
红外遥控及串口Microsoft Office Word 文档.docx_第4页
第4页 / 共45页
红外遥控及串口Microsoft Office Word 文档.docx_第5页
第5页 / 共45页
点击查看更多>>
下载资源
资源描述

红外遥控及串口Microsoft Office Word 文档.docx

《红外遥控及串口Microsoft Office Word 文档.docx》由会员分享,可在线阅读,更多相关《红外遥控及串口Microsoft Office Word 文档.docx(45页珍藏版)》请在冰豆网上搜索。

红外遥控及串口Microsoft Office Word 文档.docx

红外遥控及串口MicrosoftOfficeWord文档

智能红外遥控开关原理及设计

发布时间:

2010-10-17发布人:

21世纪电子网

0引言

红外遥控是当前使用最为广泛的通信和控制手段之一,由于其结构简单、体积小、功耗低、抗干扰能力强、可靠性高及成本低等优点而广泛应用于家电产品、工业控制和智能仪器系统中。

然而市场上的绝大部分遥控器都是针对各自特定的遥控对象设计的,不能直接应用于通用的智能仪器研发及其更一般的控制场合。

通常情况下,一般家庭所使用的电视机、空调、VCD/DVD等家用电器都使用了红外遥控器,而这些红外遥控器都是针对各自产品所设计的,从而导致了一般家庭中拥有数个遥控器,那么,能否将这些遥控器的功能进行复用,进而减少遥控器的数量,使遥控器的功能更加强大,就显得十分必要了。

电源开关广泛应用于家庭、工厂、仓库、以及办公室等场所。

传统的机械式电源开关存在接触电阻大、易磨损、可靠性低以及寿命短等缺点,特别是当家用电器的遥控器繁多的情况下,如果能借助这些遥控器设计开关用于代替传统的机械式电源开关,不仅节约了成本,而且操作方便。

使用电视机等家用电器的遥控器实现开关操作,安装和代换都很方便,可以用它代换家居中非常普及的墙壁开关,从而提高遥控器在家电领域的实用价值。

1工作原理

智能红外遥控开关主要由红外接收、放大整形、微控制器、开关控制以及降压电源等模块组成,其原理框图如图1所示。

智能红外遥控开关的功能是将常见家用电器的遥控器,如电视机、VCD/DVD等,由用户任意指定一个按键作为这个红外遥控开关的控制键。

使用时,用户按下智能红外遥控开关的“学习”按键,然后再对准遥控开关的红外接收头按下遥控器上指定的这个开关控制按键,遥控器发出的红外编码信号经过红外接收头接收后,再经过放大整形,输入到微控制器,微控制器通过内置的E2PROM记住遥控器这个指定按键的编码。

那么,用户下次使用时,当按下遥控器这个指定按键后,其发出的红外编码信号同样经过红外接收头,放大整形后输入到微控制器,由微控制器发出控制信号控制开关控制模块里面继电器的导通与断开,进而控制输出电压的通断。

为了保证对各种用电器实现遥控开关控制,那么控制信号就一定要稳定、安全。

为此,在传输过程中要使各模块间的通信信号足够强,这就要求电路的电源能够独立给电路各部分供电。

因此,红外遥控开关还必须拥有降压电源模块。

2电路设计

硬件电路设计包括电源电路的设计和解码电路的设计两部分。

电源电路是为解码电路提供电源而设计的,除了要求电压稳定外,还要求其体积小,成本低。

解码电路要求能对红外编码进行可靠地接收,同时要能够稳定地控制继电器的开关。

2.1电源设计

考虑到解码电路的功耗很小,所以电源的设计采用电容降压式电源。

它比变压器电源和开关电源的设计要简单得多,而且体积小、成本低,适合作为遥控开关的电源。

电源设计的原理图如图2所示。

MC2为降压电容器,D1为半波整流二极管,D2在市电的负半周时给MC2提供放电回路,ZD1是5.1V稳压二极管,R1为关断电源后MC2的电荷泄放电阻。

电容降压式电源是利用电容在一定的交流信号频率下产生的容抗来限制最大工作电流。

当交流电压为220V,频率为50Hz的工作条件下,电容器MC2在电路中的容抗Xc(单位:

Ω)为:

流过电容器MC2的充电电流Ic(单位:

mA)为:

通过降压电容MC2向负载提供的电流Io,实际上是流过MC2的充放电电流IC。

显然,电容MC2容量越大,容抗Xc越小,则流经MC2的充、放电电流越大。

当负载电流Io小于MC2的充放电电流时,多余的电流就会流过稳压管。

若稳压管的最大允许电流Idmax

虽然流过电容MC2的电流IC有69.08mA,但在电容器上几乎不产生功耗,这是因为对于一个理想电容,流过电容的电流为虚部电流,它所作的功为无功功率。

可见,电容降压式电源的效率也很高。

经过实验测试,该电源电路通电后输出4.88V的直流电压,交流电压分量小于3mV,输出电流在50mA时,电压不低于4.7V,可以满足解码电路的电源需求。

2.2解码电路设计

智能红外遥控开关的硬件核心部分是微控制器和红外接收部分,其原理图如图3所示。

红外解码电路中的微控制器选用ATmega8L的AVR单片机。

它的工作电压为2.7~5.5V,4MHz(3V,25℃)时功耗,工作模式为3.6mA,空闲模式为1.0mA,掉电模式仅为0.5μA,采用先进的RISC结构,除了拥有8KB的系统内可编程FLASH存储器,还有512B的E2PROM,可用于记忆各类遥控器发射出的各种红外编码信号。

红外接收电路使用集成红外接收器成品,同时实现红外接收、放大、整形的功能,一般不需要任何外接元件就能完成从红外接收到输出TTL电平兼容信号的所有工作。

接收器对外只有3个引脚:

电源Vcc,公共地GND和1个脉冲信号输出OUT。

由图3可以看出,其与单片机接口非常方便。

当按下“记忆”按键S1时,红外接收头SPH开始记录遥控器发出的信号,同时将接收到的信号保存在单片机ATmega8L的E2PROM中。

以后当遥控器发出同样的红外脉冲信号时,通过红外接收头接收并与E2PROM中的数据进行对比,如果一致,就发出控制信号控制开关的通断。

3程序设计

红外遥控接收头解调出的编码是串行二进制码,包含着遥控器按键信息。

但它还不便于CPU读取识别,因此需要先对这些串行二进制码进行解码。

本设计采用的是软件解码方式对接收到的红外信号进行解码。

3.1红外遥控器发射编码简介

目前应用中的各种红外遥控系统的原理都大同小异,区别只是在于各系统的信号编码格式不同。

遥控器所产生的脉冲编码的格式一般为:

其中,引导脉冲为宽度是10ms左右的一个高脉冲和一个低脉冲的组合,用来标识指令码的开始。

识别码、键码、键码的反码均为数据编码脉冲,用二进制数表示。

“O”和“1”均由毫秒量级的高低脉冲的组合代表识别码(即用户码)是对每个遥控系统的标识。

当指令键按下时,指令信号产生电路便产生脉冲编码。

键码后面一般还要有键码的校验码,用来检验键码接收的正确性,防止误动作,增强系统的可靠性。

3.2存储编码程序设计

当按下“记忆”按键S1时,单片机进入存储记忆红外遥控编码的状态。

ATmega8L单片机首先关闭中断,等待遥控器发出的红外遥控编码输入。

当红外遥控编码输入后,单片机将其保存至E2PROM中。

这样,即使断电之后,单片机存储在E2PROM中的信息也不会丢失,可以保证断电后的正常使用。

存储红外信号的编码程序流程图如图4所示。

3.3软件解码程序设计

软件解码则由ATmega8L单片机的外部中断、定时器以及软件构成一个红外遥控接收系统。

定时器用于延时测量两个脉冲串之间的间隔。

外部中断用于当接收到红外脉冲信号时触发定时器进行数据接收。

当红外接收管接收到红外脉冲时,程序首先出发外部中断,由外部中断启动定时器,每个一段时间间隔就采样一次,并将采样到的红外脉冲编码保存到RAM变量中,然后与存储编码程序中所保存的编码进行比较,当

两者相同时则认为是按下了开关按键,进行相应的开关操作,否则程序不执行开关操作。

软件解码程序的流程图如图5所示。

4结语

目前的家用电器,如电视机、VCD、DVD和功放机等一般都配备了遥控器及智能化控制技术,给人们的使用带来了极大的方便。

随之而来的小家电如电灯的控制也在向自动化、智能化操作方面发展,这样才能满足人们的生活需求。

智能红外遥控开关充分利用了现在家用电器繁多的遥控器,实现了遥控器的功能复用,而且在软件解码红外遥控系统中,解码的核心是CPU,电路极为简单无须外围器件,体积小,抗干扰能力强。

经过实验多次测试,该开关可以替换原墙壁开关,不用再增加连线,为安装和使用提供了方便。

把原机械式墙壁换成该遥控开关不仅实用,也很安全经济。

例子一:

本实验采用延迟函数的方法来解码,采用定时器方法一样,本程序对红外遥控解码后通过液晶1602显示出来!

笔者没有写注释的习惯,所以注释较少,望读者见谅,不懂得地方可以给我留言,我们再研究探讨!

//当接收一个字节的最后一个位时,若此位位“1”,则IR的高电平时间会延长

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitRS=P3^3;

sbitRW=P3^4;

sbitE=P3^5;

sbitIR=P3^2;

ucharcodezifu[]="0123456789ABCDEF";

ucharcodemaker[]="10-07-08Jingang";

uchargao,di,addr,datas,addrf,datasf,N;

uinti,j,flag,a;

ucharIRR[4];

ucharnum[8];

voidIR_delay(ucharx)   //x*0.14MS

{

for(x=0;x<0x37;x++);   

}

voiddelay(uintz)//延迟z*1ms

{

  uintx,y;

  for(x=z;x>0;x--)

     for(y=110;y>0;y--);

}

voidwrite_comm(ucharcom)

{

RS=0;

RW=0;

E=0;

P0=com;

delay

(1);

E=1;

delay

(1);

E=0;

}

voidwrite_data(uchardatas)

{

RS=1;

RW=0;

E=0;

P0=datas;

delay

(1);

E=1;

delay

(1);

E=0;

}

voidlcdinit()

{

   delay(15);//掉电15ms

   write_comm(0x38);

   delay(5);

   write_comm(0x38);

   delay(5);

   write_comm(0x38);

   write_comm(0x01);//清屏显示

  

   write_comm(0x0c);

   write_comm(0x04);

   write_comm(0x01);

   write_comm(0x80+0x00);//确定写数据的初始地址

   for(i=0;i<16;i++)

   {

      write_data(maker[i]);

   }

}         

voiddisplay(uchargao,uchardi)

{

write_data(gao);

write_data(di);

write_data(0x20);

}

voidinit_interrupt()

{

  EA=1;//开总中断

  EX0=1;//开外部中断0

}

voidscontr()

{

  while(IR==0);//索引码到来

  while(IR==1);//索引码高电平

    for(i=0;i<4;i++)//准备接收四个字节

    {

      for(j=0;j<8;j++)//接收第一个字节

      {

       while(IR==0);//第一个数据低电平到来到结束

         

                while(IR==1)

      {

      IR_delay

(1);//延迟约0.14ms

      N++;

      if(N>20)//为什么若去掉这两句就只能接收一次数据

        break;

     }

      IRR[i]=IRR[i]>>1;

    if(N>=8)

      {  

             IRR[i]=IRR[i]|0x80;

      }

     N=0;

          }

     }

EX0=1;

}

voidtestdata()

{

   

  if(IRR[1]==0xbf)

    if(IRR[2]=~IRR[3])

   {

         //取遥控发送的地址和键值

     num[0]=IRR[0]/16;

     num[1]=IRR[0]%16;

     num[2]=IRR[1]/16;

     num[3]=IRR[1]%16;

   //以上为遥控发送的地址

     num[4]=IRR[2]/16;

     num[5]=IRR[2]%16;

    //以上为接收到的遥控键值

     num[6]=IRR[3]/16;

     num[7]=IRR[3]%16;

   //以上为接收到的遥控键值取反值

     write_comm(0x80+0x40);

     

     display(zifu[num[0]],zifu[num[1]]);

     display(zifu[num[2]],zifu[num[3]]);

     display(zifu[num[4]],zifu[num[5]]);

     display(zifu[num[6]],zifu[num[7]]);

     a=IRR[2];

     switch(a)//分别赋予各个遥控按键的功能“点亮相应的数码管”

       {

       case0x00:

P2=0xfe;

               break;

     case0x01:

P2=0xfd;

               break;

     case0x02:

P2=0xfb;

               break;

     case0x04:

P2=0xf7;

               break;

       case0x05:

P2=0xef;

               break;

     case0x06:

P2=0xdf;

               break;

     default:

  P2=0x00;

               break;

    }

   }

}

voidmain()

{

   N=0;

   lcdinit();

   init_interrupt();

  while

(1)

   {

  if(flag==1)

    {

   EX0=0;

   flag=0;

   scontr();

   while(IR==0);

   testdata();

  }

  //EX0=1;

}

}            

voidinter0()interrupt0

{

   EX0=0;

  flag=1;

}

 

例子二:

 

红外线遥控器软件解码原理和程序(C)

收录时间:

2010-06-1615:

08:

33 来源:

 作者:

 【大中小】点击:

155

 红外线一开始发送一段13.5ms的引导码,引导码由9ms的高电平和4.5ms的低电平组成,跟着引导码是系统码,系统反码,按键码,按键反码,如果按着键不放,则遥控器则发送一段重复码,重复码由9ms的高电平,2.25ms的低电平,跟着是一个短脉冲,本程序来自网络,版权归源作者所有,仅做学习交流之用!

不得用于商业目的,本程序经过试用,能解大部分遥控器的编码!

#include    "at89x52.h"

#define     NULL       0x00//数据无效

#define     RESET      0X01//程序复位

#define     REQUEST    0X02//请求信号

#define     ACK        0x03//应答信号,在接收数据后发送ACK信号表示数据接收正确,

也位请求信号的应答信号

#define     NACK       0x04//应答信号,表示接收数据错误

#define     BUSY       0x05//忙信号,表示正在忙

#define     FREE       0x06//空闲信号,表示处于空闲状态

#define     READ_IR    0x0b//读取红外

#define     STORE_IR   0x0c//保存数据

#define     READ_KEY   0x0d//读取键值

#define     RECEIVE    0Xf400//接收缓冲开始地址

#define     SEND       0xfa00//发送缓冲开始地址

#define     IR         0x50//红外接收缓冲开始地址

#define     HEAD       0xaa//数据帧头

#define     TAIL       0x55//数据帧尾

#define     SDA        P1_7

#define     SCL        P1_6

unsignedcharxdata*buf1;  //接受数据缓冲

unsignedint  buf1_length;  //接收到的数据实际长度

unsignedcharxdata*buf2;  //发送数据缓冲

unsignedint  buf2_length;  //要发送的数据实际长度

bitbuf1_flag;    //接收标志,1表示接受到一个数据帧,0表示没有接受到数据帧或数据

帧为空

bitbuf2_flag;    //发送标志,1表示需要发送或没发送完毕,0表示没有要发送的数据或

发送完毕

unsignedcharstate1,state2;         //用来标志接收字符的状态,state1用来表示接

收状态,state2用来表示发送状态

unsignedchardata*ir;

union{

    unsignedchara[2];

    unsignedintb;

    unsignedchardata*p1[2];

    unsignedintdata*p2[2];

    unsignedcharxdata*p3;    //红外缓冲的指针

    unsignedintxdata*p4;

}p;

//union{                       //

  //  unsignedchara[2];           //

  //  unsignedintb;

  //  unsignedchardata*p1[2];

  //  unsignedintdata*p2[2];

  //  unsignedcharxdata*p3;

  //  unsignedintxdata*p4;       //地址指针

例子五:

遥控器程序

2008年01月11日23:

23本站原创作者:

本站用户评论(0)

关键字:

遥控解码的原理:

我们知道遥控是采用38KHZ的脉冲通过红外发光二极管调制发送出去的。

我们的主

目的是怎样将从空气中传送来的遥控信息,进行解码。

对于遥控里面的最底层原理,我就不多介绍啦,网

友可以参考相关书籍。

在这里简单的说一下遥控解码的注意事项:

    引导码的时间为:

13.5ms,高电平时间为9ms,低电平时间为4.5ms。

    低电平时间周期为:

用L表示低L=1.125ms

    高电平时间周期为:

用H表示高H=2.25ms

    发送一串数据大约58.5---76.5ms

    遥控码是由:

引导码、用户码、用户反码、键盘码、键盘反码几部分组成。

    

相关源程序:

(C语言版本)

           unsignedcharth1_val=0,th1_old=0;

           unsignedcharc_last=0;

           unsignedcharc_bits=8;

           unsignedcharc_index=0;

           unsignedcharc_code,c_last1,c_last2,c_last3=0;

           bitc_error=0;

           #defineT_100US(F_OSC/12/10000)

           #defineT_ZERO_MIN(T_100US*10)

           #defineT_ZERO_MAX(T_100US*18)

           #defineT_ONE_MIN(T_100US*20)

           #defineT_ONE_MAX(T_100US*28)

           #defineT_REP_MIN(T_100US*110)

           #defineT_REP_MAX(T_100US*120)

           #defineT_START_MIN(T_100US*130)

           #defineT_START_MAX(T_100US*150)

           #defineTH_ZERO_MIN(T_ZERO_MIN>>8)

           #defineTH_ZERO_MAX(T_ZERO_MAX>>8)

           #defineTH_ONE_MIN(T_ONE_MIN>>8)

           #defineTH_ONE_MAX(T_ONE_MAX>>8)

           #defineTH_REP_MIN(T_REP_MIN>>8)

           #defineTH_REP_MAX(T_REP_MAX>>8)

           #defineTH_START_MIN(T_START_MIN>>8)

           #defineTH_START_MAX(T_START_MAX>>8)

           #defineCODE10x0a

           #defineCODE20xf5

           #defineINIT_T0(65536L-(F_OSC/12)/HZ)

           #defineINIT_TH0(INIT_T0>>8)

           unsignedintremocnt=0;

           externbitmenu1flag;

           voidint0_bh(void)

        

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1