1. 原理
红外遥控器是利用一个红外发光二极管,以红外光为载体来将按键信息传递给接收端的设备。红外光对于人眼是不可见的,
因此使用红外遥控器不会影响人的视觉(可以打开手机摄像头,遥控器对着摄像头按,可以看到遥控器发出的红外光)。
2. 调制
日常生活环境中有很多红外光源,太阳、蜡烛火光、白炽灯、甚至是我们的身体。这些红外光源都可能会对我们的接收
设备
产生干扰,为了屏蔽干扰,只接收有效信息,我们就需要用到调制。
调制是我们使需要的信号区别于噪音方法。通过调制我们可以使红外光以特定的频率闪烁。红外接收
器会适配这个频率,
其它的噪音信号都将被忽略。
你可以认为这种闪烁是引起接收器“注意”的方法,正如我们人类特别容易被黄色的灯光
引起注意一样,
甚至在白天。
在串行通讯里,我们经常谈及‘ mark’和‘ space’标记。‘ space’是个默认信号,是指发射管关闭状态,
在‘ space’期间,
红外光不被发射。反之在‘ mark’状态期间,红外光以特定的频率脉冲形式发
射。在消费类
电子产品里,脉冲频率普遍采用 30KHz
到 60KHz 这个频段,红外遥控器一般使用的是38KHz。
3. 协议
NEC协议
- 8 位地址码, 8 位命令码
- 完整发射两次地址码和命令码,以提高可靠性
- 脉冲时间长短调制方式
- 38KHz 载波频率
- 位时间 1.12ms 或 2.25ms
引导吗:
下图为一个引导码的调制波形:
逻辑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。
重复码:
下图为重复码的调制波形:
协议解码程序片段:
typedef 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;
}
红外遥控器采用8位地址码和8位命令码,发射时为提高可靠性会完整发送两次。其调制方式为脉冲时间长短,载波频率为38KHz,位时间为1.12ms或2.25ms。解码程序对于实现遥控器功能至关重要。
2877

被折叠的 条评论
为什么被折叠?



