歡迎您光臨本站 登入註冊首頁

概述

紅外遙祝控系統原理及編解碼程序分析紅外遙祝控系統原理及編解碼程序分析1、紅外遙控系統      通用紅外遙控系統由發射和接收兩大部分組成。應……
紅外遙祝控系統原理及編解碼程序分析

紅外遙祝控系統原理及編解碼程序分析


1、 紅外遙控系統


       通用紅外遙控系統由發射和接收兩大部分組成。應用編/解碼專用集成電路晶元來進行控制操作,如圖1所示。發射部分包括鍵盤矩陣、編碼調製、LED紅外發送器;接收部分包括光、電轉換放大器、解調、解碼電路。

 


 

圖1 紅外線遙控系統框圖

 

2 、遙控發射器及其編碼

 

       遙控發射器專用晶元很多,根據編碼格式可以分成兩大類,這裡我們以運用比較廣泛,解碼比較容易的一類來加以說明,現以日本NEC的uPD6121G組成發射電路為例說明編碼原理(一般家庭用的DVD、VCD、音響都使用這種編碼方式)。當發射器按鍵按下后,即有遙控碼發出,所按的鍵不同遙控編碼也不同。這種遙控碼具有以下特徵:


       採用脈寬調製的串列碼,以脈寬為0.565ms、間隔0.56ms、周期為1.125ms的組合表示二進位的“0”;以脈寬為0.565ms、間隔1.685ms、周期為2.25ms的組合表示二進位的“1”,其波形如圖2所示。

 

圖2 遙控碼的“0”和“1” (註:所有波形為接收端的與發射相反)


       上述“0”和“1”組成的32位二進位碼經38kHz的載頻進行二次調製以提高發射效率,達到降低電源功耗的目的。然後再通過紅外發射二極體產生紅外線向空間發射,如圖3所示。

 

圖3 遙控信號編碼波形圖


       UPD6121G產生的遙控編碼是連續的32位二進位碼組,其中前16位為用戶識別碼,能區別不同的電器設備,防止不同機種遙控碼互相干擾。該晶元的用戶識別碼固定為十六進位01H;后16位為8位操作碼(功能碼)及其反碼。UPD6121G最多額128種不同組合的編碼。


       遙控器在按鍵按下后,周期性地發出同一種32位二進位碼,周期約為108ms。一組碼本身的持續時間隨它包含的二進位“0”和“1”的個數不同而不同,大約在45~63ms之間,圖4為發射波形圖。

 

圖4 遙控連發信號波形

 

       當一個鍵按下超過36ms,振蕩器使晶元激活,將發射一組108ms的編碼脈衝,這108ms發射代碼由一個引導碼(9ms),一個結果碼(4.5ms),低8位地址碼(9ms~18ms),高8 位地址碼(9ms~18ms),8位數據碼(9ms~18ms)和這8位數據的反碼(9ms~18ms)組成。如果鍵按下超過108ms仍未鬆開,接下來發射的代碼(連發碼)將僅由起始碼(9ms)和結束碼(2.25ms)組成。

 

                    圖5 引導碼                                                    圖6連發碼

 

3 、遙控信號接收

 

       接收電路可以使用一種集紅外線接收和放大於一體的一體化紅外線接收器,不需要任何外接元件,就能完成從紅外線接收到輸出與TTL電平信號兼容的所有工作,而體積和普通的塑封三極體大小一樣,它適合於各種紅外線遙控和紅外線數據傳輸。

       接收器對外只有3個引腳:Out、GND、Vcc與單片機介面非常方便,如圖7所示。

 

   圖 7

       ① 脈衝信號輸出接,直接接單片機的IO 口。

       ② GND接系統的地線(0V);

       ③ Vcc接系統的電源正極(+5V);

 

4 遙控信號的解碼

 

       下面是一個對51實驗板配套的紅外線遙控器的解碼程序,它可以把紅外遙控器每一個按鍵的鍵值讀出來,並且通過實驗板上P1口的8個LED顯示出來,在解碼成功的同時並且能發出“嘀嘀嘀”的提示音。

     


    ;=================================================

    ; 紅外遙控接收   

    ;=================================================

    ORG 0000H

    

    MAIN:

        JNB    P2.2,IR        ;遙控掃描

        LJMP   MAIN           ;在正常無遙控信號時,一體化紅外接收頭輸出是高電平,程序一直在循環。

    

    ;=================================================

    ;   解碼程序

    IR:

        ;以下對遙控信號的9000微秒的初始低電平信號的識別,波形見圖5。

        MOV    R6,#10

    IR_SB:

        ACALL DELAY882        ;調用882微秒延時子程序

        JB     P2.2,IR_ERROR  ;延時882微秒后判斷P2.2腳是否出現高電平如果有就退出解碼程序

        DJNZ   R6,IR_SB       ;重複10次,目的是檢測在8820微秒內如果出現高電平就退出解碼程序

    

        ;識別連發碼,和跳過4.5ma的高電平。

        JNB     P2.2, $       ;等待高電平避開9毫秒低電平引導脈衝

        ACALL  DELAY2400

        JNB     P2.2,IR_Rp    ;這裡為低電平,認為是連發碼信號,見圖6。

        ACALL  DELAY2400      ;延時4.74毫秒避開4.5毫秒的結果碼

    

        ;以下32數據碼的讀取 ,0和1的識別 請看圖2

        MOV     R1,#1AH        ;設定1AH為起始RAM區

        MOV     R2,#4

    IR_4BYTE:

        MOV     R3,#8

    IR_8BIT: 

        JNB     P2.2,$         ;等待地址碼第一位的高電平信號

        LCALL  DELAY882        ;高電平開始後用882微秒的時間尺去判斷信號此時的高低電平狀態

        MOV    C,P2.2          ;將P2.2引腳此時的電平狀態0或1存入C中

        JNC     IR_8BIT_0      ;如果為0就跳轉到IR_8BIT_0

        LCALL  DELAY1000

    IR_8BIT_0:

        MOV    A,@R1           ;將R1中地址的給A

        RRC    A               ;將C中的值0或1移入A中的最低位

        MOV    @R1,A           ;將A中的數暫時存放在R1中

        DJNZ   R3,IR_8BIT      ;接收地址碼的高8位

        INC    R1              ;對R1中的值加1,換下一個RAM

        DJNZ   R2,IR_4BYTE     ;接收完16位地址碼和8位數據碼和8位數據,

                               ;存放在1AH/1BH/1CH/1DH的RAM中

        ;解碼成功

        JMP    IR_GOTO

    

    IR_Rp:

        ;這裡為重複碼執行處

        ;按住遙控按鍵時,每過108ms就到這裡來

        JMP    IR_GOTO

    

    IR_ERROR:

        ;錯語退出

        LJMP   MAIN ;退出解碼子程序

    

    ;=================================================

    ;遙控執行部份

    IR_GOTO:

        ;這裡還要判斷1AH和1BH 兩個系統碼或用戶碼,用於識別不同的遙控器

        ;MOV   A,1AH

        ;CJNE  A,#xxH,IR_ERROR   ;用戶碼1不對則退出

        ;MOV   A,1BH

        ;CJNE  A,#xxH,IR_ERROR   ;用戶碼2不對則退出

    

    

    

        ;判斷兩個數據碼是否相反

        MOV    A,1CH

        CPL    A

        CJNE   A,1DH,IR_ERROR    ;兩個數據碼不相反則退出

        ;遙控執行部份

        ;MOV   A,1DH             ;判斷對應按鍵

        ;CJNE  A,#xxH,$+6

        ;LJMP  -à跳到對應按鍵執行處

        ;CJNE  A,#xxH,$+6

        ;LJMP  -à跳到對應按鍵執行處

        ;.

    

        MOV     P1,1DH         ;將按鍵的鍵值通過P1口的8個LED顯示出來!

        CLR     P2.3          ;蜂鳴器鳴響-嘀嘀嘀-的聲音,表示解碼成功

        LCALL  DELAY2400

        LCALL  DELAY2400

        LCALL  DELAY2400

        SETB   P2.3          ;蜂鳴器停止

    

        ;清除遙控值使連按失效

        MOV    1AH,#00H

        MOV    1BH,#00H

        MOV    1CH,#00H

        MOV    1DH,#00H

        LJMP   MAIN

    ;=================================================

    ; 延時子程序

    ;=============================882

    DELAY882: ;1.085x ((202x4)+5)=882

        MOV R7,#202

    DELAY882_A:

        NOP

        NOP

        DJNZ   R7,DELAY882_A

    RET

    

    ;=============================1000

    DELAY1000: ;1.085x ((229x4)+5)=999.285

        MOV R7,#229

    DELAY1000_A:

        NOP

        NOP

        DJNZ   R7,DELAY1000_A

    RET

    ;=============================2400

    DELAY2400: ;1.085x ((245x9)+5)=2397.85

        MOV R7,#245

    DELAY2400_A:

        NOP

        NOP

        NOP

        NOP

        NOP

       NOP

        NOP

        DJNZ   R7,DELAY2400_A

    RET

    END



[admin via 研發互助社區 ] 紅外遙祝控系統原理及編解碼程序分析已經有4658次圍觀

http://cocdig.com/docs/show-post-37097.html