李如忠
(中國工程物理研究院 電子工程研究所,四川 綿陽 621900)
目前個人計算機的輸入設備一般為標準的鍵盤和鼠標,鍵盤和鼠標通過電纜與計算機主機相連。在多媒體教室或會議室應用計算機時,授課者或會議報告人必須在計算機旁操作演示文稿,使講授形式受到很大的制約,缺少面對面的交流和活躍的授課氣氛,不便于形成臺上臺下的交流互動。雖然現在有無線接口的鼠標和鍵盤,但在實際操作中不可能把鼠標和鍵盤時刻拿在手上。文獻[1-3]介紹的基于單片機的簡易紅外遙控鍵盤在一定程度上解決了上述問題,但設計的紅外遙控鍵盤是基于PC機的串口或PS/2接口。隨著計算機技術的發展,在PC機上串口和PS/2接口逐漸被淘汰,并且基于串口的鍵盤不支持即插即用,不能通過電纜延長距離。本文利用AVRUSB技術,通過AVR單片機的最小系統和低成本的紅外接收器,實現了成本低廉的紅外遙控鍵盤,該紅外遙控鍵盤為USB接口,支持即插即用,與PC機上原來的鍵盤、鼠標不沖突,還可以通過USB線延長鍵盤接收部分與PC機主機的距離。
USB是一種計算機總線技術,在現代計算機上已經是標準配置,大部分的計算機外部設備都是通過USB接口與計算機相連。USB協議詳細地規定了各種參數以及數據結構格式,使符合USB協議的USB設備都能很好地相互兼容。由于USB協議的復雜性,大部分的USB設備都是采用專用的USB接口芯片來處理USB協議,而AVRUSB技術是利用AVR單片機代替USB專用接口芯片,使用軟件模擬USB專用芯片的功能。由于AVR單片機的速度限制,AVR單片機只能用來模擬低速USB設備,AVRUSB技術中USB的通信端口直接使用單片機的IO口。
在研究AVRUSB技術過程中,很多公司和個人推出一些開源項目,其中比較成功的有Objective公司推出的AVRUSB項目。該項目底層驅動部分采用匯編語言編寫,可以提高處理速度,上層的程序接口用C語言編寫,并提供了幾個簡單的接口函數和一個配置文件,便于移植。AVRUSB項目提供了一個用戶程序框架,該程序框架經過了長期實踐,比較成熟和穩定。在程序框架基礎上,利用接口函數可以很容易地實現USB協議,形成各種USB設備接口。
AVRUSB無需專用的USB接口芯片,只需一個普通的8位AVR單片機,再加幾個無源器件就可以實現USB設備接口。本文利用AVR單片機Atmega 8的最小系統和一個普通的紅外接收傳感器,組成了紅外遙控鍵盤的USB接收器,配合簡單的紅外遙控器構成了一個簡單的紅外遙控鍵盤,可實現多媒體教室和會議室中演示文稿的操作以及其他用途。
本文設計的紅外遙控鍵盤,發射端使用市面上常見的簡單紅外遙控器,如圖1所示。接收端由Atmega 8的最小系統和紅外接收器(VS1838)組成,這些器件可以封裝在類似U盤大小的空間里,紅外遙控鍵盤接收器電路圖如圖2所示。
AVRUSB的硬件非常簡單,主要由Atmega 8位單片機、單片機時鐘電路、穩壓二極管和幾個電阻等構成。單片機時鐘電路由12MHz晶體和兩個22pF電容(C2、C3)組成。

圖1 紅外遙控器
在USB規范中規定,低速USB設備必須在數據線D-與電源之間連接一個1.5kΩ的電阻(R4)。USB的數據線連接在單片機的IO端口上,IO端口可以是任意同名的IO端口,連接的端口名在配置文件中通知底層驅動,本設計中使用的是PB1和PB0端口。數據線D+還需要連接到外部中斷接口上,因為底層驅動程序需要利用中斷處理數據。
圖2中的電阻R2、R3是為了限制USB設備的電流,起到限流保護作用,防止計算機的USB端口被損壞。單片機的電源由計算機的USB端口提供,USB規范中規定數據線上的電平為3.0V~3.6V,而單片機IO端口上的電平與計算機USB端口的電平相同,為5V。由于USB數據線上的電平與單片機IO端口的電平不匹配,會造成USB設備無法被識別。因此,在數據線上的穩壓二極管D1和D2將單片機IO端口的電平限制在3.6V以下,使USB數據線上的電平符合USB規范。

圖2 紅外遙控鍵盤接收器電路圖
紅外接收器上有3個引腳,分別為Vout、GND、Vcc,將Vout接到單片機的任意IO口上,GND接地,Vcc接到+5V上。
上面的硬件就組成了一個USB紅外接收系統,通過軟件處理遙控器發射紅外信號。
紅外遙控器作為發射端需要把二進制脈沖碼調制到特定的頻率上,即載波頻率,通過調制增強了信號的抗干擾能力。紅外發射端發射的是紅外光信號,接收端接收到遙控器發射的紅外信號后,必須把其轉換為電信號,再經放大、濾波、整形和解調,從載波頻率信號中還原出遙控器發射的原始二進制脈沖碼,最后通過單片機的IO端口傳送給單片機處理程序。
遙控器的編碼方式采用NEC協議,NEC協議傳輸的是8位地址碼和8位命令碼,采用脈沖位置調制,載波頻率為38kHz,當二進制碼位為1時,先發射560μs的高電平,接著為1.69ms的低電平,總時間為2.25ms;當二進制碼位為0時,先發射560μs的高電平,接著為560μs的低電平,總時間為1.12ms,如圖3所示。

圖3 邏輯1和邏輯0的定義
一個消息是由一個9ms的高電平開始,隨后有一個4.5ms的低電平,這兩段電平組成引導碼,然后是地址碼和命令碼。地址碼和命令碼傳輸兩次,第二次所有位都取反,可用于對所收到的消息進行校驗。消息傳輸時序圖如圖4所示。

圖4 消息傳輸時序圖
脈沖波形進入一體化接收器以后,因為接收器要進行解碼、信號放大和整形,在沒有紅外信號時,接收頭輸出端為高電平,有信號時為低電平,故其輸出信號電平正好與發射端相反。
AVRUSB軟件設計主要由HID(Human Interface Device-人機接口設備)報告描述符、系統硬件設置定義和USB事件處理3部分組成[4]。
紅外遙控鍵盤接收器作為USB HID設備與PC機通信,HID設備以報告形式與PC機間進行數據傳輸,數據傳輸的組織形式和性質通過報告描述符方式進行定義。在AVRUSB程序框架下,完成HID描述符和報告描述符的枚舉。在AVRUSB相關網站上提供了一些開源的實例作為參考,其中就有HID的實例。
由于AVRUSB是開源項目,并且AVRUSB提供了一個成熟的用戶程序框架,在使用時可以不需改動AVRUSB底層驅動部分,只需要以usbconfig-prototype.h文件為模板生成usbconfig.h文件。該文件描述了系統硬件結構,主要包括硬件IO端口的選擇、USB數據線的定義、設備生產商ID以及產品ID等。
USB事件處理是AVRUSB程序框架的主程序,它由一個固定結構組成,基本不需要過多改動,只需要添加掃描遙控鍵盤信息,如果收到紅外信號并解碼成功,就通過USB中斷消息,發送報告數據給上位機。
紅外掃描解碼軟件主要是對紅外接收器接收到的紅外信號根據其時序進行嚴格的解碼,然后將從編碼脈沖信號中提取出來的功能碼解析為對應普通鍵盤的鍵值,再把按鍵鍵值發送給上位機。該紅外遙控鍵盤如果只用在多媒體教室或會議室時,實際上只實現兩個鍵值反饋就可以了,主要是Pagedown和PageUp鍵。紅外掃描解碼軟件流程見圖5。
由于紅外遙控鍵盤是USB設備,支持即插即用,并且紅外遙控鍵盤為標準的HID鍵盤設備。HID類USB設備是windows操作系統內置驅動支持的USB設備,應用程序可以直接調用操作系統提供的驅動程序。所以,在windows操作系統下,不需要另外安裝驅動程序,并且和計算機上原來的鍵盤、鼠標不發生沖突。

圖5 紅外掃描解碼軟件流程圖
本文所設計的紅外遙控鍵盤接口電路非常簡單,成本低廉,遙控距離遠,安裝容易,無需安裝驅動,支持即插即用,工作穩定,功耗極低,無需外接電源,能很好地滿足使用要求,而且可以根據實際擴充按鍵的個數滿足相應的需求。另外,利用AVRUSB技術的遙控鍵盤設計方法還可以應用在其他USB控制領域。
[1]潘小琴.基于單片機的簡易紅外遙控鍵盤研究[J].寧波職業技術學院學報,2007(2):52-54.
[2]王清輝.基于紅外PS/2鍵盤的設計與實現[J].龍巖學院學報,2008(6):24-27.
[3]洪剛,潘小琴.一種簡易紅外遙控鍵盤的設計[J].重慶科技學院學報,2008(4):103-104.
[4]劉景文.基于AVRUSB的USB小鍵盤設計[J].天津職業院校聯合學報,2012(5):96-98.