最近一個月一直在弄智能家居的東西,從最底層的硬件開始,找資料,學着用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、數據碼的形成機制
前35位數據碼形成如下圖所示:
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
模式標誌 |
開關 |
風速 |
掃風 |
睡眠 |
溫度數據 |
定時數據 |
|||||||||
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
28 |
30 |
31 |
32 |
|
|
|
|
|
|
|
|
|
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 |
1 |
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 |
|
|
|
|
|
|
|
|
|
|
|
節能 |
|
校驗碼 |
上表中,大於兩位的數據都是逆序遞增的,各數據的意義如下:
|
自動 |
製冷 |
加溼 |
送風 |
制熱 |
模式標誌 |
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
爲了方便編碼,在編碼時可以正序,解碼端再逆序,解碼的時候先解碼低字節,再解碼高字節的位。另外定時數據對最後的校驗碼的影響沒有測試,因爲很少會用到這個功能。