格力空调红外编码分析
最近一个月一直在弄智能家居的东西,从最底层的硬件开始,找资料,学着用Altium Designer画电路图,PCB打样,再到电子元器件采购和焊接,中间出了些问题,也学到很多东西。不废话了,这里主要分析一下红外编码的问题。
红外遥控器大家肯定都很熟悉,也知道一般的红外信号都是38KHz调制信号,但是红外信号的编码方式有很多很多种,其中空调的最复杂,因为空调遥控每个按钮在不同的情况下发送的信号是不同的,不管按下的哪个按键,遥控器都会发送所有的状态,比如温度,模式,风速等等。要想完整的学习一个空调遥控就要分析每位数据代表的含义。
这里我以手上的格力空调遥控器为例分析一下,遥控器的型号是YB0F2。
格力空调遥控器(YB0F2)红外码组成如下,按解码顺序排列
起始码(S)+35位数据码+连接码(C)+32位数据码
1、各种编码的电平宽度:
数据码由“0”“1”组成:
0的电平宽度为:600us低电平+600us高电平,
1的电平宽度为:600us低电平+1600us高电平
起始码S电平宽度为:9000us低电平+4500us高电平
连接码C电平宽度为:600us低电平+20000us高电平
这里的电平宽度不是我用示波器看的,而是用51单片机测的,所以和实际的时间长短有一些差距,但是不影响功能的实现。
2、数据码的形成机制
常规数据:
35bit: 1001 1100 ,XXXX 0000,0000 0000 , 0000 1010 , 010
32bit: 0000 0000 , 0000 0000 , 0000 1100 , 0000 XXXX
前35位数据码形成如下图所示:
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
X |
X |
X |
X |
0 |
0 |
0 |
0 |
模式标志 |
开关 |
风速 |
扫风 |
睡眠 |
温度数据 |
定时数据 |
|||||||||
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
28 |
30 |
31 |
32 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
定时数据 |
超强 |
灯光 |
健康 |
干燥 |
换气 |
所有按键都是这个值 |
|||||||||
33 |
34 |
35 |
|
|
|||||||||||
0 |
1 |
0 |
|
|
|||||||||||
所有按键都是这个值 |
后32位数据码形成如下图所示:
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
上下扫风 |
所有按键都是这个值 |
左右扫风 |
所有按键都是这个值 |
温度显示 |
|||||||||||
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
28 |
30 |
31 |
32 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
X |
X |
X |
X |
|
|
节能 |
|
校验码 |
上表中,大于两位的数据都是逆序递增的,各数据的意义如下:
自动 |
制冷 |
加湿 |
送风 |
制热 |
|
模式标志 |
000 |
100 |
010 |
110 |
001 |
自动 |
一级 |
二级 |
三级 |
|
风速标志 |
00 |
10 |
01 |
11 |
16度 |
17度 |
18~29度 |
30度 |
|
温度 |
0000 |
1000 |
逆序递增 |
0111 |
校验码的形成机制如下:
校验码 = [(模式 – 1) + (温度 – 16) + 5 +左右扫风+换气+节能]取二进制后四位,再逆序;
例如:如果需要设置一下的状态,模式4,30℃,左右扫风,换气关闭,节能关闭,那么校验码为:
(4 – 1)+(30-16)+5+1+0+0= 15,取低四位为0111,逆序后为1110
校验码 = (温度 -26 )%16 的逆序
为了方便编码,在编码时可以正序,解码端再逆序,解码的时候先解码低字节,再解码高字节的位。另外定时数据对最后的校验码的影响没有测试,因为很少会用到这个功能。