摘 要: 介紹了紅外遙控發(fā)射和接收的原理,提出了一種用PLD(可編程邏輯器件)進(jìn)行解碼的方案,并分別用EPROM和GAL實現(xiàn)。該方案思路新穎、原理簡單、工作可靠,可用于各種以鍵盤掃描為輸入方式的智能儀器系統(tǒng)中。
關(guān)鍵詞: 紅外遙控? 可編程邏輯器件? 遙控解碼? 鍵盤掃描
紅外遙控技術(shù)已經(jīng)在日常家用電器中得到了廣泛應(yīng)用,其使用方便、功耗低、抗干擾能力強的優(yōu)點也越來越在智能儀器系統(tǒng)中受到重視。市場上的各種家電紅外遙控系統(tǒng)技術(shù)成熟、成本低廉,但都是針對各自的遙控對象(彩電、冰箱、空調(diào)等),不能直接用于智能儀器。本文探討了如何借鑒家電紅外遙控系統(tǒng)的原理,自行設(shè)計解碼電路,使智能儀器具有遙控功能。
1 紅外遙控原理
一般的紅外遙控系統(tǒng)是由紅外遙控信號發(fā)射器、紅外遙控信號接收器和微控制器及其外圍電路等三部分構(gòu)成的,如圖1所示。
遙控信號發(fā)射器用來產(chǎn)生遙控編碼脈沖,驅(qū)動紅外發(fā)射管輸出紅外遙控信號,遙控接收頭完成對遙控信號的放大、檢波、整形、解調(diào)出遙控編碼脈沖。遙控編碼脈沖是一組組串行二進(jìn)制碼,對于一般的紅外遙控系統(tǒng),此串行碼輸入到微控制器,由其內(nèi)部CPU完成對遙控指令解碼,并執(zhí)行相應(yīng)的遙控功能。
在紅外遙控系統(tǒng)中,解碼的核心是CPU。它接收解調(diào)出的串行二進(jìn)制碼,在內(nèi)部根據(jù)本系統(tǒng)的遙控信號編碼格式將串行碼對應(yīng)成遙控器上的按鍵。顯然,這種在CPU內(nèi)部解碼出的遙控指令是不便我們利用的,而且我們也不需要獲取它。我們只需利用一般紅外遙控系統(tǒng)中的遙控發(fā)射器、遙控接收頭,自行設(shè)計解碼電路直接對遙控接收頭解調(diào)出的遙控編碼脈沖進(jìn)行解碼,就可以得到原始的按鍵信息。
2 紅外遙控編碼
目前應(yīng)用中的各種紅外遙控系統(tǒng)的原理都大同小異,區(qū)別只是在于各系統(tǒng)的信號編碼格式不同。下面我們就以本文采用的紅外遙控系統(tǒng)為例說明它的編碼體制。
紅外遙控發(fā)射器以TC9012為核心組成了鍵掃描、編碼、發(fā)射電路。當(dāng)按下遙控器上任一按鍵時,TC9012即產(chǎn)生一串脈沖編碼如圖2所示。
TC9012形成的遙控編碼脈沖對40kHz載波進(jìn)行脈沖幅度調(diào)制(PAM)后便形成遙控信號,經(jīng)驅(qū)動電路由紅外發(fā)射管發(fā)射出去。紅外遙控接收頭接收到調(diào)制后的遙控信號,經(jīng)前置放大、限幅放大、帶通濾波、峰值檢波和波形整形,從而解調(diào)出與輸入遙控信號反相的遙控脈沖。
在圖2中,一次按鍵動作的遙控編碼信息為32位串行二進(jìn)制碼。對于二進(jìn)制信號“0”,一個脈沖占1.2ms;對于二進(jìn)制信號“1”,一個脈沖占2.4ms,而每一脈沖內(nèi)低電平均為0.6ms。從起始標(biāo)志到32位編碼脈沖發(fā)完大約需80ms,此后遙控信號維持高電平。若按鍵未釋放,則從起始標(biāo)志起每隔108ms發(fā)出3個脈沖的重復(fù)標(biāo)志。
在32位的編碼脈沖中,前16位碼不隨按鍵的不同而變化,我們稱之為用戶碼。它是為了表示特定用戶而設(shè)置的一個辨識標(biāo)志,以區(qū)別不同機種和不同用戶發(fā)射的遙控信號,防止誤操作。后16位碼隨著按鍵的不同而改變,我們就是要讀取這16位按鍵編碼,經(jīng)解碼得到按鍵鍵號,轉(zhuǎn)而執(zhí)行相應(yīng)控制動作。
那么,不同的按鍵編碼脈沖是怎樣和遙控器上不同的按鍵一一對應(yīng)的呢?我們借助于邏輯分析儀記錄下來遙控器上每一個按鍵的編碼脈沖序列,破譯出了各按鍵的編碼。表1是解碼后得到的紅外遙控器上各鍵的編碼(前16位用戶碼均為0000001011111101,表1只列出后16位鍵碼)。
由表1按鍵編碼可看出,后16位鍵碼的前8位與后8位互為補碼,這樣加大編碼的冗余度是為了增強遙控系統(tǒng)的抗干擾能力。實際上,我們只須截取16位鍵碼的8位(比如后8位)就可達(dá)到識別按鍵的目的。當(dāng)然,要加強遙控系統(tǒng)的抗干擾能力,還需接收全16位鍵碼甚至16位用戶碼加以識別。
3 紅外遙控解碼
紅外遙控接收頭解調(diào)出的編碼是串行二進(jìn)制碼,包含著遙控器按鍵信息。但它還不便于CPU讀取識別,因此需要先對這些串行二進(jìn)制碼進(jìn)行解碼。本文的紅外遙控信號解碼電路如圖3所示,它主要包括遙控編碼脈沖串并轉(zhuǎn)換電路與PLD解碼電路。
3.1 遙控編碼脈沖的串并轉(zhuǎn)換
紅外遙控接收頭解調(diào)出的遙控編碼脈沖經(jīng)一非門反相后引入計數(shù)器4020的復(fù)位端(RST),4020的腳10(CP)端引入1MHz計數(shù)脈沖。遙控信號(已反相)中每一正脈沖到來時其高電平對4020復(fù)位,經(jīng)過0.6ms遙控信號變?yōu)榈碗娖剑?020復(fù)位結(jié)束,開始以1MHz的頻率計數(shù),直到下一個正脈沖到來時為止。二進(jìn)制碼“0”每一脈沖周期低電平時間為0.6ms,二進(jìn)制碼“1”每一脈沖周期低電平時間為1.8ms,4020的Q11端即可以區(qū)分二進(jìn)制碼“0”或“1”。每一遙控編碼正脈沖上升沿到來時,若Q11端為“1”,說明前一位遙控碼為“1”;若Q11端為“0”,說明前一位遙控碼為“0”。
將4020的Q11端作為74HC595的串行移位輸入端(SER),便可在每一個遙控編碼脈沖上升沿到來時并在4020復(fù)位之前,將74HC595中的數(shù)據(jù)沿Q0到Q7方向依次移一位,且4020的Q11端數(shù)據(jù)移入74HC595的Q0端。對于一組遙控編碼脈沖,共有33次上升沿(包括起標(biāo)志),而74HC595僅為8位移位寄存器,所以移位的最終結(jié)果,只有遙控編碼脈沖的最后8位保留在74HC595中。
當(dāng)一組遙控編碼脈沖(反相后)來到時,其起始標(biāo)志的上跳沿觸發(fā)了雙單穩(wěn)74HC123的1B,在1Q上產(chǎn)生了一個寬度為120ms的正脈沖。1Q同時又觸發(fā)了74HC123的2B,在2Q產(chǎn)生一個寬度為80ms的負(fù)脈沖,1Q和2Q相與后作為鎖存信號送至74HC595的RCLK端,即一組遙控編碼脈沖到來80ms后,產(chǎn)生一個鎖存信號。此時74HC595已經(jīng)移過了一組遙控碼,芯片中保留的是最后8位遙控碼,鎖存信號將這最后8位遙控碼鎖存。
3.2 基于EPROM的遙控解碼原理
經(jīng)過串并轉(zhuǎn)換,我們得到了8位并行遙控碼。為了讓CPU讀取這個并行遙控碼,通常的方法是在轉(zhuǎn)換完成后產(chǎn)生一個中斷,通知CPU來讀取遙控信息。但這樣做要占用CPU一個外部中斷資源并需編寫額外的中斷服務(wù)程序,顯得比較煩瑣。尤其是當(dāng)儀器系統(tǒng)的軟件不是由自己開發(fā)而又要加裝遙控時更是無能為力。因此,我們想尋求一種不占用儀器CPU的軟、硬件資源而實現(xiàn)遙控的方法,使鍵盤輸入和遙控輸入統(tǒng)一起來,占用同一個端口、同一個中斷、同一個中斷服務(wù)程序。簡言之,要做到對CPU是透明的,似乎只有一個鍵盤輸入單元在工作,只須訪問它來進(jìn)行鍵盤掃描、鍵碼讀出操作。但實際上卻有遙控器與鍵盤兩套鍵輸入硬件在同時而獨立地工作。
考察一下智能儀器的鍵盤掃描輸入原理。在這種方式下,CPU通過輸出指令使鍵盤矩陣的行掃描線依次為“0”(低電平),同時監(jiān)測鍵盤矩陣的列掃描線。若無鍵按下,則列掃描線輸出全“1”(高電平);若有鍵按下,則此鍵所在列線輸出為“0”,再結(jié)合行掃描線此時的狀態(tài),就可具體定位按鍵。
我們設(shè)想,可否將遙控接收頭輸出的含有按鍵信息的8位遙控碼通過某種轉(zhuǎn)換,并入鍵盤矩陣電路,當(dāng)遙控器有鍵按下時,就會在機上鍵盤對應(yīng)鍵處產(chǎn)生一個“模擬”按鍵動作,產(chǎn)生一個鍵碼可供CPU讀取。所謂“模擬”是指并沒有機械按鍵動作,但對于鍵盤矩陣電路而言卻產(chǎn)生一個低電平,效果和機械按鍵動作完全一樣。這樣就將遙控鍵盤和本機鍵盤統(tǒng)一起來,二者的鍵數(shù)和鍵功能定義都一樣,一個相同的鍵在遙控器上按下和在本機鍵盤上按下對CPU而言沒有任何區(qū)別,只不過對鍵盤矩陣來說前者是軟接觸,后者是硬接觸。
根據(jù)遙控器上按鍵與本機鍵盤按鍵的一一對應(yīng)方案,我們可以導(dǎo)出實現(xiàn)“模擬”按鍵的邏輯真值表(其中C0~C4為列掃描線),見表2。
這是一個12變量輸入5變量輸出的組合邏輯函數(shù),最小項總數(shù)為16×20=320個。若用普通邏輯門電路來實現(xiàn)這樣的功能將是十分麻煩的,用PLD(可編程邏輯器件)來做就要簡單得多。EPROM就是一種與陣列固定、或陣列可編程的邏輯器件。如果把EPROM的輸入地址A0,A1,……AN視為輸入邏輯變量,同時把輸出數(shù)據(jù)D0,D1,……DM視為一組多輸出邏輯變量,那么輸出與輸入之間也就是一組多輸出的組合邏輯函數(shù)。而且,EPROM地址譯碼器的輸出包含了全部輸入變量的最小項,每一位數(shù)據(jù)輸出又都是這些最小項之和,因而任何形式的組合邏輯函數(shù)均能通過向EPROM中寫入相應(yīng)的數(shù)據(jù)來實現(xiàn)。不難推想,具有N位輸入地址和M位數(shù)據(jù)輸出的EPROM可以獲得一組(最多為M個)任何形式的N變量組合邏輯函數(shù)。
根據(jù)這個原理,選用4K×8 EPROM 2732,可以實現(xiàn)任意12變量輸入、8變量輸出的組合邏輯函數(shù)。在本機遙控系統(tǒng)中,利用了EPROM的D0~D4五根數(shù)據(jù)線和全部12根地址線,通過向2732中固化上表所示的邏輯真值表,從而實現(xiàn)了關(guān)鍵的遙控解碼,使遙控器上按鍵與本機鍵盤按鍵一一對應(yīng)起來。需要指出的是,EPROM的地址譯碼是全譯碼,而在本方案中占據(jù)地址線A0~A7的8位遙控碼只有20種有效碼值(20個鍵),即一頁(256字節(jié))中只有20個有效數(shù)據(jù),則應(yīng)將剩余空間填入0FFH。
由解碼電路圖3可見,EPROM 2732的地址線A0~A7接至8位輸出鎖存移位寄存器74HC595的輸出(即8位遙控碼),A8~A11接至鍵盤矩陣的行掃描線R0~R3;2732的8根數(shù)據(jù)線使用了其中的5根D0~D4,接至鍵盤矩陣的列掃描線C0~C4,2732的CS(片選端)接地,OE(讀信號)接至施密特與非門4093的3腳輸出,此輸出為雙單穩(wěn)74HC123的1Q、2Q與非的結(jié)果。
當(dāng)遙控器上沒有按鍵按下時,EPROM 2732的OE端為“1”,使得2732的數(shù)據(jù)線D0~D4為高阻態(tài)與鍵盤矩陣線脫離,而本機鍵盤的掃描與讀出照常進(jìn)行不受影響,若遙控器上有鍵按下時,經(jīng)紅外發(fā)射、接收對應(yīng)的8位遙控碼出現(xiàn)在74HC595的輸出端,并作為EPROM 2732的A0~A7輸入,此時的行掃描碼(CPU發(fā)出)作為A8~A11輸入,2732的OE端為低電平,讀出A0~A11指定單元的數(shù)據(jù),將其中D0~D4放在鍵盤矩陣列線上。D0~D4中只有一位為“0”,指示著哪一列有鍵按下,這樣就由遙控接收、解碼電路模擬了一次“按鍵”動作。接下來CPU對這個“按鍵”動作的響應(yīng)、處理就和本機鍵盤完全一樣了。
2.3 基于GAL的遙控解碼原理
我們還可以考慮用GAL器件來實現(xiàn)解碼功能。GAL(通用陣列邏輯)也是一種PLD器件,它的與陣列可編程而或陣列固定。根據(jù)遙控解碼的真值表,我們要實現(xiàn)一個12變量輸入、5變量輸出的組合邏輯函數(shù),其全部最小項有16×20=320個。而GAL20V8的輸出最多可有8個,每個輸出由8個乘積項相或而得,總共可包含8×8=64個乘積項,似乎不夠用于實現(xiàn)解碼邏輯。但是注意到320個最小項并不是互不相關(guān)的,通過化簡可將它們化成5個最簡與或式,分別對應(yīng)著5個輸出變量,每個輸出變量由4個乘積項相或而得,這樣就可以用GAL20V8來實現(xiàn)解碼邏輯了。據(jù)此可設(shè)計出GAL邏輯方程如下:
/** Inputs **/
Pin[1..8]=[A7..A0]? ;定義并行遙控碼的輸入引腳
Pin[9..11,14]=[R0..R3];定義鍵盤行掃描線的輸入引腳
Pin[13]=[out_enable]? ;定義輸出使能引腳
/** Outputs **/
Pin[15..19]=[C0..C4];定義鍵盤列線的輸出引腳
/** Declarations and Intermidiate Variables **/
Field remote=[A7..A0];
$define m0'b'11000111;將20個鍵的鍵值用
$define ml'b'00010111 ;″m0″、″m1″…″m19″來表示
……
$define m19'b'00011111
/** Logic Equations **/
!C0=!R0&remote:m0? ;第0條列線的輸出方程
#!R1&remote:m5
#!R2&remote:m10
#!R3&remote:m15;
!C1=!R0&remote:m1? ;第1條列線的輸出方程
#!R1&remote:m6
#!R2&remote:m11
#!R3&remote:m16;
!C2=!R0&remote:m2? ;第2條列線的輸出方程
#!R1&remote:m7
#!R2&remote:m12
#!R3&remote:m17;
!C3=!R0&remote:m3;第3條列線的輸出方程
#!R1&remote:m8
#!R2&remote:m13
#!R3&remote:m18;
!C4=!R0&remote:m4;第4條列線的輸出方程
#!R1&remote:m9
#!R2&remote:m14
#!R3&remote:m19;
[C0..C4].oe=!out_enable;所有列線輸出均帶使能
采用EPROM和GAL器件進(jìn)行紅外遙控解碼的方案都已在實際電路中得到驗證,工作穩(wěn)定可靠。而GAL較之EPROM更具有體積小、功耗低、可加密等優(yōu)點。本文提出的解碼方案基于純硬件原理,不占用CPU軟、硬件資源,直接并在鍵盤掃描矩陣上,對CPU是透明的。本方案適用于鍵盤掃描輸入的智能儀器系統(tǒng)的紅外遙控,對其它紅外遙控系統(tǒng)的設(shè)計應(yīng)用亦具有借鑒意義。
參考文獻(xiàn)
1 閻 石.數(shù)字電子技術(shù)基礎(chǔ).北京:高等教育出版社,1989
2 蔡 軼.通用搖控解碼電路.電子技術(shù),1995(1)