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