侯繼紅
(廣州科技貿(mào)易職業(yè)學(xué)院,廣東 廣州 511442)
由于紅外遙控其體積小、功耗低、功能強、成本低等特點,在日常的家電(如電視、音響設(shè)備、空調(diào)、電風(fēng)扇等)都采用紅外線遙控[1-2]。在有輻射、高壓、有毒氣體等危險環(huán)境下工作的工業(yè)設(shè)備普遍采用紅外線遙控來完成設(shè)備的操作[3]。紅外線遙控是目前使用最廣泛的一種通信和遙控手段。
近幾年隨著可編程邏輯器件性能的快速提高,它廣泛應(yīng)用于各個電子信息領(lǐng)域的前沿,已經(jīng)由傳統(tǒng)的通信應(yīng)用領(lǐng)域向消費電子、汽車電子、工業(yè)控制等領(lǐng)域發(fā)展,電子工程師對它的認(rèn)知度越來越高[4-5]。因此,采用可編程邏輯器件的開發(fā)語言VHDL語言設(shè)計紅外遙控解碼器,具有一定的應(yīng)用價值。文章分析了由創(chuàng)芯微電子有限公司設(shè)計的用于紅外遙控系統(tǒng)中的專用發(fā)射集成電CX6122的編碼原理,并針對其編碼原理提出用VHDL語言編程設(shè)計解碼電路,該電路已通過綜合驗證,并在 CPLD芯片(EPM3128ATC100)的實驗系統(tǒng)板上通過硬件測試,工作穩(wěn)定,解碼準(zhǔn)確,不會出現(xiàn)誤碼。
CX6122 是一塊用于紅外遙控系統(tǒng)中的專用發(fā)射集成電路。CX6122 所發(fā)射的一幀碼含有一個引導(dǎo)碼,16 位的用戶編碼和8 位的鍵數(shù)據(jù)碼及數(shù)據(jù)碼的反碼構(gòu)成。幀碼的結(jié)構(gòu)如圖1[6]示。
圖1 CX6122發(fā)射的幀碼結(jié)構(gòu)
引導(dǎo)碼由一個 9 ms 的載波波形和4.5 ms 的關(guān)斷時間構(gòu)成,它作為隨后發(fā)射的碼的引導(dǎo)。這樣當(dāng)接收系統(tǒng)是由微處理器構(gòu)成的時候,能更有效地處理碼的接收與檢測及其它各項控制之間的時序關(guān)系。當(dāng)一個鍵按下時間超過36 ms 后,輸出一幀包含引導(dǎo)碼、用戶碼和數(shù)據(jù)碼的幀,超過108 ms 后,輸出連發(fā)碼的數(shù)據(jù)幀。遙控發(fā)射的波形如圖2[6]示。圖2中的第一段波形就是第一幀的數(shù)據(jù)編碼部分的波形;第二段是第一幀完整的波形;第三段是連碼幀的波形。這種遙控編碼也是采用PPM, 以脈寬為0.56 ms、間隔0.565 ms、周期為1.125 ms的組合表示二進制的“0”;以脈寬為0.56 ms、間隔1.69 ms、周期為2.25 ms的組合表示二進制的“1”。如圖3所示[6]。
圖2 CX6122發(fā)射的波形[6]
圖3 CN6122遙控的編碼原理[6]
紅外信號的接收使用的是一體化紅外接收器HS0038,此接收器的功能是完成紅外線的接收、放大及解調(diào)[7],還原成同發(fā)射格式相同,但相位相反的脈沖信號。紅外線一體化接收頭輸出的脈沖信號經(jīng)CPLD的其中一個I/O腳輸入到內(nèi)部由VHDL語言設(shè)計的解碼電路解出數(shù)據(jù)碼。
識別引導(dǎo)碼方法很簡單,只需要兩段延時即可。數(shù)據(jù)解碼的核心是如何識別二進制數(shù)碼“0”和“1”。從上述可知紅外線接收頭輸出的電平信號相位相反,即以0.56 ms的低電平和0.565 ms高電平組合表示“0”;以0.56 ms的低電平跟1.69 ms高電平組合表示“1”,它們都是以0.56 ms的低電平開始,以不同的高電平寬度來區(qū)分“0”和“1”。如果從0.56 ms低電平過后,開始延時0.565 ms,隨后檢測輸入的狀態(tài),若讀到的為低電平,則說明該位為“0”,反之則為“1”,為了可靠起見,延時時間應(yīng)該大于0.565 ms,但不能超過1.125 ms,否則如果該位為“0”,讀到的已是下一位的高電平,因此取(1.125 ms+0.56 ms)/2=0.842 ms最為可靠,一般取0.84左右即可[8]。因此,可以用VHDL語言的有限狀態(tài)機來檢測輸入電平,實現(xiàn)狀態(tài)轉(zhuǎn)換和判斷,并結(jié)合延時電路來識別“0”和“1”。
該控制電路采用VHDL語言的有限狀態(tài)機設(shè)計方法來描述和實現(xiàn),其狀態(tài)轉(zhuǎn)換圖如圖4所示。復(fù)位信號RES有效時,電路進入系統(tǒng)初始狀態(tài)S0,在S0狀態(tài)下時鐘信號CLK,以一定的頻率采樣跟紅外線接收頭輸出相連的CPLD I/O口輸入信號Din,如果采樣到Din=“1”,則沒有接受到紅外信號,即遙控按鍵沒有操作,停留在S0狀態(tài),并繼續(xù)采樣Din輸入信號的狀態(tài),一旦采樣到輸入信號Din= “0”,則遙控信號輸出引導(dǎo)碼低電平部分,并轉(zhuǎn)入S1狀態(tài),在S1狀態(tài)下經(jīng)過9 ms延時轉(zhuǎn)入狀態(tài)S2,在S2狀態(tài)下如果檢測到Din=“1” 則引導(dǎo)碼進入的高電平部分,并轉(zhuǎn)入狀態(tài)S3,在S3狀態(tài)下延時,當(dāng)時間到4.5 ms時轉(zhuǎn)入狀態(tài)S4,從S4開始狀態(tài)機進入數(shù)據(jù)解碼狀態(tài),在S4下檢測到Din=“0”,可知遙控編碼信號輸出正是PPM編碼的0.56 ms的脈寬(0.56 ms載波),然后轉(zhuǎn)入狀態(tài)S5,用S5來判斷0.56 ms的脈寬是否已結(jié)束,如果Din=“1”則脈寬已結(jié)束,轉(zhuǎn)入狀態(tài)S6,在S6狀態(tài)下延時0.84 ms ,然后轉(zhuǎn)入S7狀態(tài),在狀態(tài)S7下判斷該位是“0”,還是“1”,如果Din=“0” 則確定該位是“0”,否則是“1”,并使解碼位數(shù)計數(shù)器CNT32加1,隨后進入S8狀態(tài),在S8下將解出的數(shù)據(jù)移入32位移位寄存器,并通過解碼位數(shù)計數(shù)器CNT32的值判斷遙控信號的32位數(shù)據(jù)是否解碼完,如果CNT32<33則仍未解完,轉(zhuǎn)入S9狀態(tài),在S9下判斷遙控信號PPM編碼的下位0.56 ms的脈寬,當(dāng)Din=“0”時,則是下一位數(shù)據(jù)脈寬,隨即轉(zhuǎn)回狀態(tài)S5,又通過S5、S6、S7、S8、S9狀態(tài)完成數(shù)據(jù)的解碼;如果在S8狀態(tài)下CNT32>33,則32位數(shù)據(jù)已解碼完,轉(zhuǎn)入狀態(tài)S10,在狀態(tài)S10進行解碼數(shù)據(jù)的輸出,并轉(zhuǎn)入狀態(tài)S11,在狀態(tài)S11延時20 ms,然后返回狀態(tài)S0,至此完成一個數(shù)據(jù)幀解碼過程。
圖 4紅外遙控解碼器的狀態(tài)轉(zhuǎn)換
詳細地分析了用VHDL語言有限狀態(tài)機設(shè)計紅外遙控解碼器的原理和方法,并在CPLD器件上通過硬件測試,試驗結(jié)果表明這種解碼方法可靠。隨著FPGA/CPLD器件的性能不斷提高,其應(yīng)用領(lǐng)域也越來越廣泛,這種方法在要求紅外控制的可編程邏輯系統(tǒng)設(shè)計中有一定的應(yīng)用價值。
[1] 張建軍,穆遠祥, 韓江洪. 一種16位碼紅外遙控器解碼方法[J].合肥工業(yè)大學(xué)學(xué)報:自然科學(xué)版,2008(02):171-174.
[2] 錢敏.基于 FPGA/HDL 的紅外遙控接收信號解碼器設(shè)計[J].通信技術(shù),2009,42(08):219-224.
[3] 丁躍華,陳艷峰. 基于 EDA技術(shù)的紅外遙控系統(tǒng)設(shè)計[J].電子元器件應(yīng)用,2006(09):78-80.
[4] 黃如建.紅外遙控器解碼設(shè)計[J]. 電子元器件應(yīng)用,2006(07):90-92.
[5] 廖超平.EDA技術(shù)與 VHDL實用教程[M]. 北京:高等教育出版社,2007.
[6] 無錫創(chuàng)芯電子有限公司.CX6122-001產(chǎn)品手冊. [DB/OL] (2009-05-04)[2009-09-10].http://www.si- core.com/product/remote.htm.
[7] 潘松,黃繼業(yè). EDA技術(shù)與VHDL[M].北京:清華大學(xué)出版社,2005.
[8] 戴培山,馮成德.基于Keilc51的紅外遙控器解碼設(shè)計[J].自動化與儀器儀表, 2003(06):11-13.