摘要:針對目前使用的RS232接口數字化B超鍵盤存在PC主機啟動時不能設置BIOS,提出一種PS2鍵盤的設計方法。基于W78E052D單片機,采用8通道串行A/D轉換器設計了8個TGC電位器信息采集電路,電位器位置信息以鍵盤掃描碼序列形式發送,正交編碼器信號通過XC9536XL轉換為單片機可接收的中斷信號,軟件接收到中斷信息后等效處理成按鍵。結果表明,在滿足開機可設置BIOS同時,又可實現超聲特有功能,不需要專門設計驅動程序,接口簡單,成本低。
關鍵詞:RS232;單片機;PS2;鍵盤
早期B超產品設計大多采用單片機和可編程器件(CPLD)來控制整個系統,鍵盤直接由主控單片機掃描處理,或專門用單片機處理鍵掃并經RS232接口與主控單片機通訊。隨著B超數字化技術的誕生,需要大量控制數據存儲并可下傳給超聲模塊,主控單片機逐漸被計算機取代。在B超數字化過程中,RS232接口的鍵盤存在需要設計驅動程序,且存在PC啟動時無法進入BIOS設置的問題,而且串口有逐漸被取消的趨勢。如果直接采用PS2或USB標準鍵盤,則需要另行設計超聲特有的功能模塊、該模塊與主機的接口及其驅動程序,而且PC鍵盤的外觀會影響B超整體造型設計。
本文提出了一種用單片微機實現PS2超聲鍵盤的設計方法,鍵盤包括字母數字按鍵和超聲功能模塊,設計兼顧BIOS設置,直接可使用操作系統(Windows)提供的驅動程序。
1 接口協議
PS2接口協議是現在大多數鍵盤、鼠標與PC機通訊的標準協議。鍵盤與鼠標在傳輸協議上,只是傳輸數據內容不一樣。
充分理解該接口協議,可以幫助設計者自主開發專用的多功能鍵盤。
PS2接口協議是一種雙向同步串行協議,換句話說,PS2設備可以發送數據到主機,而主機也可以發送數據到設備,但主機總是在總線上有優先權,它可以在任何時候抑制來自于設備的通訊——即把時鐘拉低。
從設備發送到主機的數據在時鐘信號的下降沿被讀取,從主機發送到設備的數據在上升沿被讀取。不管通訊的方向怎樣,設備總是產生時鐘信號,如果主機要發送數據它必須首先告訴設備開始產生時鐘信號。最大時鐘頻率是33 kHz,而且大多數設備工作在10~20 kHz。
PS2連接器、發送或接收數據的細節、命令集在《PS/2技術參考》一文中有詳細描述。
2 掃描碼
鍵盤處理器獲得有鍵按下、釋放或按住的信息,信息最終以掃描碼的形式發給計算機。
標準計算機上的每個按鍵都有唯一的通碼和斷碼,所有這些通斷碼組成了掃描碼集。掃描碼集一共有3套,分別對應3種鍵盤,現代鍵盤默認的是第二套掃描碼集。
1)掃描碼分通碼和斷碼。根據掃描碼的不同,可將按鍵分為3種;
2)通碼為1字節,斷碼為0xF0+通碼形式;
3)通碼為2字節,0xE0+0xXX形式,斷碼為0xE0+0xF0+0xXX形式;
特殊按鍵,有兩個,Pause和Print screen。
掃描碼個數是固定的,無法隨意增加,自行設計PS2鍵盤就是要靈活運用第二套掃描碼集。B超鍵盤用到了數字字符鍵,這一部分跟計算機鍵盤基本相同。除數字字符鍵外的標準鍵盤按鍵和預留按鍵的掃描碼就當作功能操作調節時的信息代碼。
3 鍵盤方案及硬件設計
3.1 鍵盤方案設計
數字化B超鍵盤由字母數字(Alphanumeric)鍵、功能鍵、功能調節編碼器、總增益調節編碼器、八段TGC(時間增益補償,Time Gain Compensation)調節電位器等幾部分組成,如圖1所示。
按鍵總數為88個,且需今后擴充,故采用行列結構,字母數字鍵的掃描碼參照標準鍵盤設計,功能鍵則直接使用字母數字鍵除外的掃描碼,這樣B超鍵盤相當于在標準鍵盤的基礎上增加編碼器處理和TGC電位器數據采集兩個模塊。
編碼器輸出具有A相、B相的方波正交信號,而且二者相序取決于編碼器的正反轉方向,文獻中對原理及處理方法有詳細描述。不同的是,只用鑒相器,兩個編碼器正轉時產生的脈沖信號分別輸出至,反轉時分別輸出至
。
8個TGC電位器以前采用8通道并行ADC或單通道ADC+8選1模擬開關完成模擬量到數字量的轉換,占用單片機I/O口較多,電路接口復雜,現采用串行8通道ADC,控制簡單,跟MAX111相比不需要轉換時間,而且集成度更高。
3.2 硬件設計
鍵盤硬件電路由單片機W78E052D、串行AD轉換器TLC0838、可編程器件XC9536XL和兩片3-8譯碼器74HC138等組成,如圖2所示。
W78E052D是臺灣新唐科技(Nuvoton)推出的一款寬電壓(2.4-5.5 V)低功耗CMOS8位單片機,指令系統與8052完全兼容。PLCC44封裝的W78E052D片內含8KB的可編程的Flash只讀程序存儲器,256字節RAM,4個8位雙向、可位尋址的I/O口,一個附加的4位I/O口P4,3個16位定時/計數器,一個硬件看門狗定時器及一個串行口。比傳統8051增加了兩個外中斷,可滿足接入4個外中斷信號的需求。
TLC0838是TI公司生產的8位逐次逼近模數轉換器。具有輸入可配置的多通道多路器和串形輸入輸出方式。由于TLC0838采用的是串行輸入結構,因此封裝體積小,可節省51系列單片機I/O資源,價格也較適中。因8個通道全部使用,故其多路器由軟件配置為單端輸入。
編碼器輸出正交的信號經CPLD(XC9636XL)作倍頻鑒相轉換成單片機能接收的脈沖信號,單片機的處理工作得以簡化。兩個編碼器共輸出4路信號,以此作為單片機的外部中斷源。在CPLD中還擴展了6個輸出口用于指示Depth、Zoom、Focus、LP、A-Pwr調節功能是否可用及圖像是否處于凍結狀態。
鍵盤按鍵以行列形式排成16x8矩陣,輸出列線16根,輸入檢測行線8根,最多支持128鍵,每個行列線交叉處設置一個按鍵。為了減少I/O的占用,采用兩片3-8譯碼器(74HC138)實現4-16譯碼,給A11-A8依次輸出0000、0001、0010、0011、0100、1000、1001、1010、1011、1100、1101、1110、1111,即可依次拉低列線S00-S015,同時讀取行線P1口,行線為低代表當前拉低的列線與該行線交叉處的按鍵被按下。比采用接口芯片,成本更低。
4 軟件設計
4.1 主程序設計
軟件設計部分的主程序流程如圖3所示。
主程序完成初始化后,進人命令查詢處理,不斷查詢有沒有來自計算機的命令,有則應答并處理,接著檢查鍵掃標志,有鍵掃標志(即=1)則進行鍵盤處理,否則繼續查詢命令。
鍵盤處理流程如下:在實時狀態,對TGC電位器進行AD采樣,并與上一次結果比較,有變化則發送給計算機,凍結狀態跳過TGC處理;接著判斷掃描編碼器旋轉標志位,有則以鍵碼形式發送給主機;然后掃描鍵盤陣列,有鍵按下或釋放,則以查表方式取得掃描碼,并發給計算機。
鍵盤掃描采用定時器0中斷方式,晶體頻率為24 MHz按方式1工作,最大定時時間為32.768ms,定時器中實現計數3次,可定時98.3ms,以此作鍵盤處理周期,定時間到則將鍵盤掃描標志置為1。
4.2 外中斷程序設計
新增的2個中斷,其中斷信號由P4口輸入,中斷功能/狀態通過XICON寄存器控制,P4和XICON不是標準80C52的寄存器,需預先定義——在源文件頭上加入以下兩行:
P4 EQU 0D8H
XICON EQU 0C0H
中斷服務程序只完成置編碼器旋轉標志位的處理,主程序中根據標志位以按鍵鍵碼的形式發送信息。中斷服務程序源代碼如下:
4.3 初始化及命令查詢處理
初始化過程是設計過程中需要注意的。計算機啟動過程跟主板有關,因為主機在總線上有優先權,通信過程發生異常,將禁用設備,而且目前找不到介紹計算機啟動過程中對鍵盤操作細節的描述,所以本部分的設計是難點。
經過試驗發現,上電后,鍵盤完成白檢即發送代碼0AAH給計算機,計算機在啟動過程中可以進行復位、讀ID、停止鍵掃、使能鍵掃、控制LED狀態等操作,而且有時計算機會拉低時鐘信號——抑制通訊,在整個過程中,只要主機認為設備異常,將抑制通訊導致鍵盤無法使用而且不能進入操作系統。
每個由計算機發送到鍵盤的數據都能從鍵盤獲得一個0FAH應答的回應,唯一例外的是鍵盤對Resend和Echo命令的回應。在發送下一個字節給鍵盤之前,主機要等待應答。鍵盤作為從設備,無法預先知道什么時候主機會發送控制命令,一旦主機發送命令給設備,設備沒有回應,主機即將該設備掛起,除非重新開機。
針對命令集,設計了專門的應答子程序,根據設備收到的命令,作出相應的回答和處理。
經邏輯分析儀測試、分析和反復驗證,發現在主程序中插入命令查詢處理程序,既能滿足初始化的要求,還可以保證鍵盤及時接收和處理來自主機的信息,維持鍵盤設備正常工作,命令查詢處理程序流程如圖4所示。這部分概括起來就是空出360μs的等待時間(15μsx20),作查詢,如果在這段時間內,數據線和時鐘線同時變為低電平,表示鍵盤有命令需發送,設備產生時鐘以接收命令,并根據收到的命令做相應的處理。
4. 4 TGC數據處理
TGC數據發送實質上是一個掃描碼的序列,如第一個TGC增益數據為80,依次向計算機發送0x14 0x16 0x3E0x45 0xF0 0x14,對應鍵“L Ctrl”按下、鍵“1”按下、鍵“8”按下、鍵“0”按下、鍵“L Ctrl”釋放的動作,超聲系統軟件實現解析。實踐證明,發送每個序列數據過程中兩個數據間至少應延時1.06 ms。
上述組合不會引起計算機異常,此前嘗試過其他組合,在沒進入超聲軟件時調節TGC易引起誤操作。
特別要注意的是:
1)開機時ADC采樣使能標志清0,禁止采集TGC;
2)鍵盤上電完成初始化后開啟定時器1,聯合應用定時器和計數器,定時5 s,時間到則ADC采樣使能標志置1,可以采集TGC數據,TGC數據有變化則發送給計算機;
3)設立轉換通道標志碼,實時狀態每次鍵掃時根據標志碼只進行相對應的一個電位器的模數轉換,轉換后將轉換標志碼指向下一通道。
采用上述措施旨在解決因開機過程中鍵盤發送TGC數據和正常工作時TGC數據頻繁發送導致鍵盤死機問題,頻繁發送數據以至主機認為鍵盤異常而禁用鍵盤。
4.5 狀態同步處理
標準鍵盤上有Num Lock,Caps Lock和Scroll Lock3個LED指示燈,為了實現主機與鍵盤的狀態同步,采用了如下解決方案:鍵盤只發送Num Lock、Caps Lock、Scroll Lock按下或者釋放的代碼;根據按鍵情況,主機發送專門用于指示鍵盤上Num Lock、Caps Lock和ScrollLo-ck3個LED狀態的指令;鍵盤處理器收到指令后刷新指示燈。
設計中凍結鍵使用Scroll Lock以保持狀態同步。
Depth、Zoom、Focus、I.P、A-Pwr與功能調節編碼器組合使用,5個按鍵中每次只有1個激活,激活時led指示燈亮,按鍵狀態則由鍵盤MCU寄存和切換控制,不同功能激活時調節編碼器產生不同的鍵碼,如:Depth激活時編碼器左旋產生“KP-”按下的代碼,右旋則產生“KP +”按下代碼;Zoom激活時編碼器左旋產生“Page Up”按下的代碼,右旋則產生“Page Down”按下代碼。該方法成功解決了狀態同步問題。
5 結論
對基于W78E052D單片機設計的PS2鍵盤方案、硬件和軟件設計做了詳細闡述,命令查詢、TGC和狀態同步處理對自行設計非標PS2鍵盤有借鑒意義,在整個設計過程中,通過不斷改進硬件和調試軟件,得到了預期的效果。相對于采用多片MCU分別處理幾個模塊最終通過USB集線器同PC主機通訊的方案,接口更簡單,成本更低,而且不需要專門開發鍵盤驅動程序。在需要3個以上編碼器的應用中,編碼器處理方案有待于進一步改進。