新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機用作通用紅外遙控接收器的設計

        單片機用作通用紅外遙控接收器的設計

        作者: 時間:2013-09-30 來源:網絡 收藏
        紅外線遙控是目前使用最廣泛的一種通信和遙控手段。由于紅外線遙控裝置具有體積小、功耗低、功能強、成本低等特點,因而,繼彩電、錄像機之后,在錄音機、音響設備、空凋機以及玩具等其它小型電器裝置上也紛紛采用紅外線遙控。工業設備中,在高壓、輻射、有毒氣體、粉塵等環境下,采用紅外線遙控不僅完全可靠而且能有效地隔離電氣干擾

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

        2 遙控發射器及其編碼
        遙控發射器專用芯片很多,現以日本NEC的UPD6121G.htm" target="_blank" title="uPD6121G貨源和PDF資料">uPD6121G組成發射電路為例說明編碼原理。當發射器按鍵按下后,即有遙控碼發出,所按的鍵不同遙控編碼也不同。這種遙控碼具有以下特征:
        采用脈寬調制的串行碼,以脈寬為0.565ms、間隔0.56ms、周期為1.125ms的組合表示二進制的“0”;以脈寬為0.565ms、間隔1.685ms、周期為2.25ms的組合表示二進制的“1”,其波形如圖2所示。

        上述“0”和“1”組成的32位二進制碼經38kHz的載頻進行調制,提高發射效率,達到降低電源功耗的目的。然后,再通過紅外發射二極管進行二次調制,產生紅外線向空間發射,如圖3所示。UPD6121G產生的遙控編碼是連續的32位二進制碼組,其中前16位為8位用戶識別碼及其反碼,能區別不同的電器設備,防止不同機種遙控碼互相干擾。該芯片的用戶識別碼固定為十六進制01H;后16位為8位操作碼(功能碼)及其反碼。UPD6121G最多額128種不同組合的編碼。

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

        3 及解碼
        TSOP1738是VISHAY公司推出的一體化紅外線,集紅外線接收和放大于一體,不需要任何外接元件,就能完成從紅外線接收到輸出與TTL電平信號兼容的所有工作,而體積和普通的塑封三極管大小一樣,其功能如圖1所示的虛線部分。它適合于各種紅外線遙控和紅外線數據傳輸。

        解碼就是識別二進制碼“0”和“1”以及遙控信號起始位。由8051對脈沖間隔計數,由計數值的大小區別脈沖間隔的時間,從而識別出二進制碼“0”、“1”和遙控信號起始位。如前所述,的32位二進制串行碼是脈寬調制的,脈沖寬度固定(0.56ms),而脈沖的間隔不同。因此,只要設法測出脈沖隔時間,即可判斷是二進制的“0”還是“1”??紤]到適當的容差,可把脈沖間隔為0.256~0.768ms的判為“0”,脈沖間隔為1.28~1.792ms的判為“1”。

        3.1 解碼系統配置及接口
        解碼系統由8051、TSOP1739和74LS00等組成,接口電路如圖5所示。TSOP1738的輸出端通過74LS00的兩個反相電路接至解碼8051的INT0和INT1,作為輸入接口。8051解碼單片機通過P0口作為輸出接口,傳送解碼所得的指令控制碼去控制電器設備。8051單片機的TCON中有一個控制位,該位由軟件設置為“1”,設置INT0和INT1為下降沿觸發中斷,其相應的定時/計數器0就可以測量對應的INT引腳上正脈沖的寬度。利用這一特點,用定時器T0來測量INT1引腳上正脈沖的寬度,即前后兩脈沖的間隔時間,據此可判斷它對應于二進制的是“1”還是“0”。

        由圖5可知,TSOP1738送往8051解碼單片機INT0和INT1兩引腳上的波形相反,由INT0引腳上脈沖的下降沿所觸發的中斷服務程序完成啟動計數器T0,以測量INT1引腳上正脈沖的寬度。由INT1引腳上脈沖的下降沿所觸發的中斷服務程序完成關計數器T0,并根據計數值來判斷是對應于二進制的“0”還是“1”。

        3.2 軟件設計
        解碼單片機8051的軟件包括主程序、INT0中斷服務程序和INT1中斷服務程序等3部分。在8051單片機內部RAM區建立的工作單元和標志位。

        *BUF0~BUF3——接收緩沖移位寄存器單元(32bit),每次由INT1中斷服務程序解出的存于CY的二進制位,通過累加器連同CY的右移操作,傳送到BUF0——BUF3內。
        *LENG——碼長計數器,用于計數器解出的二進制位數。

        *(29H).0——碼間隔標志位,當收到碼組間隔時該標志被置位。

        *(29H).1——用戶識別碼標志位,當收到一組碼的前8位為01H時該標志被置位
        。
        以下是主程序的設計要點:
        *正確地解碼必須從一組碼的起始進行。為此程序在初始化后,首先檢測碼間隔標志(29H).0,如果為1,表明是一組碼的開始,程序就將碼長計數器清零,以例從頭開始計數。

        *為防止其它遙控碼的干擾,當接收到前8位碼后,要檢查它的值是否為01H。如果是,則置位用戶碼標志(29H).1。只有用戶碼標志為1時,收到的后8位碼才作為有效操作碼處理。

        *為了得到正確的解碼結果,要檢查32位遙控編碼中用戶碼和操作碼各自的反相一致性。正極性的用戶碼留在BUF3中,負極性的用戶碼留在BUF2中;正極性的操作碼留在BUF1中,負極性的操作碼留在BUF0中。然后比較BUF3和BUF2中的內容,比較BUF1和BUF0中的內容,如果都滿足反相一致才進入下一步,否則,作無效碼處理。

        以上所述方法非常簡單地實現了紅外遙控信號的接收解碼,極大地節約了硬件實現的資源開銷。只要修改匯編代碼的部分參數,就可以適用于多種紅外遙控器信號的接收和解碼。

        萬能遙控器相關文章:萬能遙控器代碼


        塵埃粒子計數器相關文章:塵埃粒子計數器原理
        紅外遙控器相關文章:紅外遙控器原理
        脈寬調制相關文章:脈寬調制原理


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 大埔县| 泰顺县| 兴义市| 江北区| 侯马市| 德昌县| 南投市| 安塞县| 奉新县| 吉木萨尔县| 保康县| 淮南市| 子长县| 白沙| 航空| 额尔古纳市| 鸡西市| 马鞍山市| 响水县| 遂昌县| 郁南县| 六安市| 瑞昌市| 永宁县| 武宣县| 松阳县| 茂名市| 宽甸| 雅安市| 右玉县| 花垣县| 阿克陶县| 来宾市| 克东县| 凯里市| 潼关县| 保亭| 乐东| 中阳县| 微博| 普兰店市|