红外遥控器工作原理

电子常识

2637人已加入

描述

  目前,人们的物质文化生活水平日益提高,各种各样的家用电器走进了千家万户,其中,大多数的家用电器都有各自不同的遥控器,人们常常为了控制某台电器而到处寻找其对应的遥控器,这样,就给人们的生活带来了很多不便。为了解决这个问题,本文提出一个多功能遥控器的设计方案:该遥控器可以通过自学习而拥有对多台电器的遥控功能,即省时、又省力,从而使人们免除同时面对功能众多遥控器的烦恼。

  红外遥控器原理

  遥控器由红外接收及发射电路、信号调理电路、中央控制器8031.程序及数据存储器、键盘及状态指示电路组成。

  遥控器有两种状态:学习状态和控制状态。当遥控器处于学习状态时,使用者每按一个控制键,红外线接收电路就开始接收外来红外信号,同时将其转换成电信号,然后经过检波、整形、放大,再由CPU定时对其采样,将每个采样点的二进制数据以8位为一个单位,分别存放到指定的存储单元中去,供以后对该设备控制使用。

  当遥控器处于控制状态时,使用者每按下一个控制键,CPU从指定的存储单元中读取一系列的二进制数据,串行输出(位和位之间的时间间隔等于采样时的时间间隔)给信号保持电路,同时由调制电路进行信号调制,将调制信号经放大后,由红外线发射二极管进行发射,从而实现对该键对应设备功能的控制。

  1. 原理

  红外遥控器是利用一个红外发光二极管,以红外光为载体来将按键信息传递给接收端的设备。红外光对于人眼是不可见的,因此使用红外遥控器不会影响人的视觉(可以打开手机摄像头,遥控器对着摄像头按,可以看到遥控器发出的红外光)。

  2. 调制

  日常生活环境中有很多红外光源,太阳、蜡烛火光、白炽灯、甚至是我们的身体。这些红外光源都可能会对我们的接收设备产生干扰,为了屏蔽干扰,只接收有效信息,我们就需要用到调制。调制是我们使需要的信号区别于噪音方法。通过调制我们可以使红外光以特定的频率闪烁。红外接收器会适配这个频率,其它的噪音信号都将被忽略。你可以认为这种闪烁是引起接收器“注意”的方法,正如我们人类特别容易被黄色的灯光引起注意一样,甚至在白天。

  红外遥控器

  上图左边,调制信号通过驱动放大由红外 LED 发射;上图右边,信号通过接收器检测输出。

  在串行通讯里,我们经常谈及‘ mark’和‘ space’标记。‘ space’是个默认信号,是指发射管关闭状态,在‘ space’期间,红外光不被发射。反之在‘ mark’状态期间,红外光以特定的频率脉冲形式发射。在消费类电子产品里,脉冲频率普遍采用 30KHz 到 60KHz 这个频段,红外遥控器一般使用的是38KHz。

  在接收端,一个‘ space’信号以高电平方式重现输出。反之一个‘ mark’信号便是以低电平方式重现。请注意,这里的‘ mark’和‘ space’不是我们需要发送的状态 1 和 0。‘ mark’和‘ space’以及 1和 0 之间的真正关系取决于被应用的协议。

  3. 协议

  NEC协议

  8 位地址码, 8 位命令码

  完整发射两次地址码和命令码,以提高可靠性

  脉冲时间长短调制方式

  38KHz 载波频率

  位时间 1.12ms 或 2.25ms

  引导吗:

  下图为一个引导码的调制波形:

  红外遥控器

  引导码 由“9ms mark + 4.5ms space”构成,表示一组 键码 的开始。

  逻辑0和1:

  下图为逻辑0和逻辑1的调制波形:

  红外遥控器

  逻辑“1”由“560us mark + 1690 space”组成,symbol period 为2.25ms;逻辑“0”由“560us mark + 560us space”组成,symbol period 为 1.12ms。

  完整的一组键码:

  下图位NEC 协议的典型脉冲链:

  红外遥控器

  协议规定低位首先发送,如上图所示的情况,发送的地 址码为“59”,命令码为“16”,总的码值为 0x59A616E9。

  重复码:

  下图为重复码的调制波形:

  红外遥控器

  重复码由 “9ms mark + 2.25ms space”组成,symbol period 为 11.25ms,重复码表示一个重复按键,当按键按着不松时,会先发一个完整的键码,接着每 110ms 发送一个重复码,直到松开按键,如下面的波形图所示:

  红外遥控器

  接收端输出:

  在接收端,一个 mark 对应一个低电平输出,一个 space 对应一个高电平输出,因此起始码、逻辑0 1、重复码等在接收端的输出波形如下图所示:

  红外遥控器

  协议解码程序片段:

  [cpp] view plain copytypedef struct ir_symbol_s

  {

  unsigned short mark_period;

  unsigned short symbol_period;

  } ir_symbol_t;

  typedef struct ir_key_s

  {

  unsigned int value;

  int state;

  }ir_key_t;

  int NEC_Decode(ir_symbol_t symbol_buf[], int symbol_num, ir_key_t *ir_key)

  {

  unsigned int key_value;

  if(symbol_num == 33) //解析键值,设定300us的容错范围

  {

  key_value = 0;

  //引导码判断

  if ( (symbol_buf[0].symbol_period 》 (13500 - 300)) && (symbol_buf[0].symbol_period 《 (13500 + 300))

  && (symbol_buf[0].mark_period 》 (9000 - 300)) && (symbol_buf[0].mark_period 《 (9000 + 300)) )

  {

  for(i = 0; i 《 (symbol_num-1); i ++)

  {

  //无效的符号位

  if( (symbol_buf[i].symbol_period 《 (1120-300)) || (symbol_buf[i].symbol_period 》 (2250+300)) )

  {

  printf(“symbol %d, is invalid\n”, i);

  return -1;

  }

  else

  {

  key_value 《《= 1;

  //逻辑1判断

  if( (symbol_buf[i].symbol_period 》 (2250-300)) && (symbol_buf[i].symbol_period 《= (2250+300)) )

  {

  key_value |= 1;

  }

  }

  }

  ir_key-》value = key_value;

  ir_key-》state = KEY_STATE_PRESS;

  }

  }

  else if(symbol_num == 2) //NEC协议的重复键

  {

  ir_key-》value = 0;

  ir_key-》state = KEY_STATE_REPEAT;

  }

  else

  {

  ir_key-》value = 0;

  ir_key-》state = KEY_STATE_NONE;

  }

  return 0;

  }

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
jf_43941445 2022-03-14
0 回复 举报
收起回复

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分