摘 要: 介紹了紅外遙控發(fā)射和接收的原理,,提出了一種用PLD(可編程邏輯器件)進(jìn)行解碼的方案,,并分別用EPROM和GAL實(shí)現(xiàn)。該方案思路新穎,、原理簡(jiǎn)單,、工作可靠,,可用于各種以鍵盤(pán)掃描為輸入方式的智能儀器系統(tǒng)中,。
關(guān)鍵詞: 紅外遙控? 可編程邏輯器件? 遙控解碼? 鍵盤(pá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位碼不隨按鍵的不同而變化,,我們稱(chēng)之為用戶碼,。它是為了表示特定用戶而設(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)一非門(mén)反相后引入計(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端作為74HC595的串行移位輸入端(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,,在2Q產(chǎn)生一個(gè)寬度為80ms的負(fù)脈沖,1Q和2Q相與后作為鎖存信號(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è)外部中斷資源并需編寫(xiě)額外的中斷服務(wù)程序,,顯得比較煩瑣。尤其是當(dāng)儀器系統(tǒng)的軟件不是由自己開(kāi)發(fā)而又要加裝遙控時(shí)更是無(wú)能為力,。因此,,我們想尋求一種不占用儀器CPU的軟、硬件資源而實(shí)現(xiàn)遙控的方法,,使鍵盤(pán)輸入和遙控輸入統(tǒng)一起來(lái),,占用同一個(gè)端口、同一個(gè)中斷,、同一個(gè)中斷服務(wù)程序,。簡(jiǎn)言之,要做到對(duì)CPU是透明的,,似乎只有一個(gè)鍵盤(pán)輸入單元在工作,,只須訪問(wèn)它來(lái)進(jìn)行鍵盤(pán)掃描、鍵碼讀出操作,。但實(shí)際上卻有遙控器與鍵盤(pán)兩套鍵輸入硬件在同時(shí)而獨(dú)立地工作,。
考察一下智能儀器的鍵盤(pán)掃描輸入原理。在這種方式下,,CPU通過(guò)輸出指令使鍵盤(pán)矩陣的行掃描線依次為“0”(低電平),,同時(shí)監(jiān)測(cè)鍵盤(pán)矩陣的列掃描線。若無(wú)鍵按下,,則列掃描線輸出全“1”(高電平),;若有鍵按下,則此鍵所在列線輸出為“0”,,再結(jié)合行掃描線此時(shí)的狀態(tài),,就可具體定位按鍵。
我們?cè)O(shè)想,,可否將遙控接收頭輸出的含有按鍵信息的8位遙控碼通過(guò)某種轉(zhuǎn)換,,并入鍵盤(pán)矩陣電路,當(dāng)遙控器有鍵按下時(shí),,就會(huì)在機(jī)上鍵盤(pán)對(duì)應(yīng)鍵處產(chǎn)生一個(gè)“模擬”按鍵動(dòng)作,,產(chǎn)生一個(gè)鍵碼可供CPU讀取。所謂“模擬”是指并沒(méi)有機(jī)械按鍵動(dòng)作,,但對(duì)于鍵盤(pán)矩陣電路而言卻產(chǎn)生一個(gè)低電平,,效果和機(jī)械按鍵動(dòng)作完全一樣,。這樣就將遙控鍵盤(pán)和本機(jī)鍵盤(pán)統(tǒng)一起來(lái),二者的鍵數(shù)和鍵功能定義都一樣,,一個(gè)相同的鍵在遙控器上按下和在本機(jī)鍵盤(pán)上按下對(duì)CPU而言沒(méi)有任何區(qū)別,,只不過(guò)對(duì)鍵盤(pán)矩陣來(lái)說(shuō)前者是軟接觸,后者是硬接觸,。
根據(jù)遙控器上按鍵與本機(jī)鍵盤(pán)按鍵的一一對(duì)應(yīng)方案,,我們可以導(dǎo)出實(shí)現(xiàn)“模擬”按鍵的邏輯真值表(其中C0~C4為列掃描線),見(jiàn)表2,。
這是一個(gè)12變量輸入5變量輸出的組合邏輯函數(shù),,最小項(xiàng)總數(shù)為16×20=320個(gè)。若用普通邏輯門(mén)電路來(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中寫(xiě)入相應(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ī)鍵盤(pán)按鍵一一對(duì)應(yīng)起來(lái)。需要指出的是,,EPROM的地址譯碼是全譯碼,,而在本方案中占據(jù)地址線A0~A7的8位遙控碼只有20種有效碼值(20個(gè)鍵),,即一頁(yè)(256字節(jié))中只有20個(gè)有效數(shù)據(jù),則應(yīng)將剩余空間填入0FFH,。
由解碼電路圖3可見(jiàn),,EPROM 2732的地址線A0~A7接至8位輸出鎖存移位寄存器74HC595的輸出(即8位遙控碼),A8~A11接至鍵盤(pán)矩陣的行掃描線R0~R3,;2732的8根數(shù)據(jù)線使用了其中的5根D0~D4,,接至鍵盤(pán)矩陣的列掃描線C0~C4,2732的CS(片選端)接地,,OE(讀信號(hào))接至施密特與非門(mén)4093的3腳輸出,,此輸出為雙單穩(wěn)74HC123的1Q、2Q與非的結(jié)果,。
當(dāng)遙控器上沒(méi)有按鍵按下時(shí),,EPROM 2732的OE端為“1”,使得2732的數(shù)據(jù)線D0~D4為高阻態(tài)與鍵盤(pán)矩陣線脫離,,而本機(jī)鍵盤(pán)的掃描與讀出照常進(jìn)行不受影響,,若遙控器上有鍵按下時(shí),經(jīng)紅外發(fā)射,、接收對(duì)應(yīng)的8位遙控碼出現(xiàn)在74HC595的輸出端,,并作為EPROM 2732的A0~A7輸入,此時(shí)的行掃描碼(CPU發(fā)出)作為A8~A11輸入,,2732的OE端為低電平,,讀出A0~A11指定單元的數(shù)據(jù),將其中D0~D4放在鍵盤(pán)矩陣列線上,。D0~D4中只有一位為“0”,,指示著哪一列有鍵按下,這樣就由遙控接收,、解碼電路模擬了一次“按鍵”動(dòng)作,。接下來(lái)CPU對(duì)這個(gè)“按鍵”動(dòng)作的響應(yīng)、處理就和本機(jī)鍵盤(pán)完全一樣了,。
2.3 基于GAL的遙控解碼原理
我們還可以考慮用GAL器件來(lái)實(shí)現(xiàn)解碼功能,。GAL(通用陣列邏輯)也是一種PLD器件,它的與陣列可編程而或陣列固定,。根據(jù)遙控解碼的真值表,,我們要實(shí)現(xiàn)一個(gè)12變量輸入、5變量輸出的組合邏輯函數(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)可將它們化成5個(gè)最簡(jiǎn)與或式,,分別對(duì)應(yīng)著5個(gè)輸出變量,,每個(gè)輸出變量由4個(gè)乘積項(xiàng)相或而得,這樣就可以用GAL20V8來(lái)實(shí)現(xiàn)解碼邏輯了,。據(jù)此可設(shè)計(jì)出GAL邏輯方程如下:
/** Inputs **/
Pin[1..8]=[A7..A0]? ,;定義并行遙控碼的輸入引腳
Pin[9..11,14]=[R0..R3],;定義鍵盤(pán)行掃描線的輸入引腳
Pin[13]=[out_enable]? ,;定義輸出使能引腳
/** Outputs **/
Pin[15..19]=[C0..C4];定義鍵盤(pán)列線的輸出引腳
/** Declarations and Intermidiate Variables **/
Field remote=[A7..A0],;
$define m0'b'11000111,;將20個(gè)鍵的鍵值用
$define ml'b'00010111 ;″m0″,、″m1″…″m19″來(lái)表示
……
$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)行紅外遙控解碼的方案都已在實(shí)際電路中得到驗(yàn)證,,工作穩(wěn)定可靠。而GAL較之EPROM更具有體積小,、功耗低、可加密等優(yōu)點(diǎn),。本文提出的解碼方案基于純硬件原理,,不占用CPU軟、硬件資源,,直接并在鍵盤(pán)掃描矩陣上,,對(duì)CPU是透明的。本方案適用于鍵盤(pán)掃描輸入的智能儀器系統(tǒng)的紅外遙控,,對(duì)其它紅外遙控系統(tǒng)的設(shè)計(jì)應(yīng)用亦具有借鑒意義,。
參考文獻(xiàn)
1 閻 石.數(shù)字電子技術(shù)基礎(chǔ).北京:高等教育出版社,1989
2 蔡 軼.通用搖控解碼電路.電子技術(shù),,1995(1)