?

基于ARM的DCS專用工業鍵盤研究與實現

2012-02-28 05:10孫旭華姜鐵梅
網絡安全與數據管理 2012年9期
關鍵詞:描述符端點中斷

蒙 艷,孫旭華,姜鐵梅

(上海自動化儀表股份有限公司技術中心,上海 200072)

隨著工業控制現場中分散控制系統(DCS)的發展,需要特定的DCS操作員鍵盤對系統進行控制。該鍵盤使操作員能對系統的操作更加直觀、操作方法更加簡捷,以降低對操作員的操作技能要求,進一步減少誤操作的可能,從而提高整個生產線的自動化能力。DCS操作員鍵盤正是基于這個目的產生的。該鍵盤在功能上除了兼容標準PC鍵盤的功能外,增加了DCS功能擴展區和用戶自定義擴展區。在該鍵盤按鍵殼體上印刷按鍵功能,如邏輯開、邏輯關、手動、自動、報警、輸出步長等等,一旦有按鍵動作,鍵盤立刻響應并將按鍵編碼發給主機,主機根據接收到的按鍵編碼調用相應的子函數來完成響應功能。同時該鍵盤支持目前廣泛流行的USB接口的標準PC鍵盤通信協議。USB協議專門為人機交互設備提供了接口描述,即HID設備類。用戶可以按照HID設備類的協議設計通用鍵盤,也可以根據自己的需要設計特殊的鍵盤,以滿足不同的應用場合。USB通信協議的設備一旦接入主機USB接口,主機調用底層驅動自動完成USB設備的枚舉,實現方便快捷的即插即用。另外該鍵盤可記掛標準PC鍵盤,即便在DCS操作員鍵盤故障或在高級工程師操作管理模式下,可使用標準PC鍵盤做進一步的操作。在基本功能上與標準PC鍵盤保持一致,可相互控制Capslock狀態。本文描述的正是這樣一個基于ARM的DCS專用工業鍵盤的研究與實現。

1 系統硬件實現

該鍵盤硬件主要由ARM MCU、USB HUB等控制電路以及矩陣式鍵盤組成。

1.1 ARM MCU 控制電路和矩陣式鍵盤

ARM MCU控制電路主要負責與主機的通信,完成USB通信建立、按鍵掃描、鍵碼確認以及發送。ARM其他部分電路包括JTAG調試電路接口、復位模塊、晶振介入電路等常規電路。另外還有一個GPIO端口做指示燈,用于指示鍵盤CAPS鍵。

本設計微處理器選用ST公司的STM32F103R6T6。STM32F103R6T6是ARM公司具有突破性的Cortex-M3內核的STM32系列32 bit閃存微控制器的增強型產品。具有高性能、低功耗、實時應用且具有競爭力價格等多項優點,其工作頻率為72 MHz,1.25 DMIPS/MHz;片上集成了32 KB的Flash代碼存儲器和10 KB的SRAM用戶數據存儲器;通過APB總線連接豐富和增強的外設和I/O;集成3個定時器、51個快速 I/O端口以及SPI、I2C、USART、CAN等多種標準通信接口[1];嵌入了一個支持全速USB2.0總線的USB外設,實現了全速(12 Mb/s)功能接口;可通過軟件配置端點,也可以通過軟件控制掛起/恢復;時鐘來自內部PLL產生的48 MHz專用時鐘源。

該電路主要用于檢測鍵盤矩陣上的按鍵情況,并處理包括特殊功能鍵在內的數據傳輸,具體功能由軟件編程實現。本設計中鍵盤需要支持86個按鍵,接口部分為矩陣式鍵盤,列線通過電阻接正電源,用MCU的11個I/O口做通用輸出口,作為鍵盤掃描信號的輸出口;行線用8個I/O口做通用輸入口,作為鍵盤反饋信號的輸入口。這樣總共使用19個I/O端口即可控制多達11×8=88個按鍵,減少了I/O口的占用,滿足了86個按鍵的需要。將全部列線置低電平輸出,然后讀行線有無低電平出現。當沒有按鍵按下時,所有的輸入端都是高電平,代表無鍵按下;一旦有鍵按下,則輸入線就會被拉低,這樣通過讀入輸入線的狀態就可得知是否有鍵按下。

此外本項目采用IAR System公司為ARM微處理器開發的一個集成開發環境IAR EWARM,需要配套的IAR J-LINK仿真器。J-LINK一端通過PC機USB口與PC連接,另一端通過標準20芯JTAG插頭與目標板連接,并將目標板的電源接上,即可進行應用程序的在線調試。

單片機控制設計電路如圖1所示。

1.2 USB HUB部分

USB HUB控制電路主要是為該鍵盤作冗余,將USB數據分成兩路,一路接收和發送鍵盤的數據,另一路作為獨立的USB口,可與其他的標準USB 2.0設備通信(如標準PC鍵盤),以防工業現場惡劣環境下鍵盤故障。USB HUB芯片采用賽普拉斯的CYC765621,主要接口是 1路和上位機通信的 USB接口(D-、D+),另 2路為HUB分出來的2路USB接口,其中一路作為外接USB口,另一路則接到ARM作為鍵盤通信的數據傳輸口(DD1-DD1+DD2-DD2+)。另有 MIC2026-2YM的電源保護關斷芯片,作為保護電路與CYC765621相連。

1.3 電源部分電路

電源部分電路采用USB供電。USB為5 V供電,通過LM1117MPX-3.3的線性電源芯片轉換為3.3 V電源,為USB HUB和ARM芯片供電。

2 系統軟件設計

本設計中軟件主要是對硬件電路的驅動,實現與USB口的通信以及鍵盤的響應功能。首先對ARM MCU進行系統初始化,包括系統時鐘設置、GPIO口的初始化設置;其次對USB模塊中斷配置與使能,中斷包括USB低優先級中斷、USB喚醒中斷、按鍵控制中斷等,并對USB模塊時鐘設置和使能,然后初始化。對定時器TIM2進行設置,之后進入循環任務函數。循環任務函數有兩個:一是主機枚舉響應;另一個是使用定時器中斷方式實現鍵盤任務。鍵盤主程序流程圖如圖2所示。

圖2 鍵盤主程序流程圖

2.1 USB任務處理設計

USB鍵盤是HID類設備的一種,遵循著USB設備啟動過程。即每次設備接入總線,先進入設備檢測狀態,總線對設備進行總線復位;其次是設備枚舉過程,在這里USB設備將被枚舉為標準的HID類鍵盤。主機通過默認端點0發送SETUP包,得到設備描述符,然后給設備分配新的地址,分配成功后,主機將通過新的設備地址向設備依次發送標準USB請求來獲取設備的配置信息,即獲得設備描述符、配置描述符、接口描述符、端點描述符、HID描述符和報表描述符。通過設備的這些描述符,主機就知道了設備的詳細信息,并根據設備的配置情況對設備的端點進行操作。這些操作包括:初始化端點數目,分配各端點所需使用的Packet Buffer;初始化所使用的端點,配置端點的傳輸類型、傳輸方向、Packet Buffer地址和初始狀態。在需要發送數據或接收數據的時候,使能端點;并在該端點的中斷回調函數中處理數據,如果需要則使能下一次傳輸。以上便是實現USB鍵盤設備的步驟。

USB設備描述符如下:

在實際設計與開發中,由于STM32提供豐富的USB標準函數庫,充分使用該函數庫會加快開發進程。下面是一段對IN端點的初始化和使能以及IN傳輸的關鍵代碼:

2.2 鍵盤任務處理設計

圖3 鍵盤任務處理函數keyboard()流程圖

鍵盤任務處理函數keyboard()流程圖如圖3所示。先對按鍵進行掃描,若無按鍵按下,則每隔10 ms掃描一次。若有按鍵按下,記錄下按鍵所處鍵盤的位置代碼,轉向消抖處理。所按下按鍵若通過消抖處理,則確認其位置代碼,進入到按鍵處理階段,將位置代碼轉換為按鍵HID碼并發送。否則釋放其位置代碼,轉到按鍵掃描處重新掃描。發送完其HID碼的按鍵再進行消抖處理判斷其釋放否。若按鍵未釋放則繼續等待,若已釋放則轉向按鍵掃描處重新掃描。

在具體設計中引入狀態轉移分析法和定時器中斷。將按鍵的所有狀態分為4種:狀態0為按鍵掃描,狀態1為按鍵消抖處理并確認,狀態2為按鍵鍵碼轉換并發送,狀態3為等待按鍵釋放狀態。以上的函數流程實際上是在這4個狀態中轉移,如圖4所示。設置一個狀態標志位key_state來表示按鍵所處的不同狀態,采用多分支結構swich-case,可以很方便地實現。

圖4 按鍵狀態轉移圖

定時器中斷是使MCU的TIM2定時器產生10 ms的定時中斷。主程序每隔 10 ms中斷調用 keyboard()函數一次。當無按鍵按下時,key_state=0,執行case0,即實現了每10 ms執行一次鍵盤掃描。若有按鍵按下,則定位其按下按鍵的位置代碼,并使key_state=1。當10 ms后再次調用 keyboard()函數,這時 key_state=1而進入 case1,在case1中對前面所定位的按鍵位置再次進行確認,若還在,則再次確定其位置代碼,并使key_state=2。如此時按鍵已經釋放,說明為假按鍵,則使key_state=0,返回按鍵掃描。這里巧妙利用了兩次定時中斷的10 ms間隔實現按鍵的消抖處理。若key_state=2,10 ms后再次調用keyboard()函數時則進入 case2,這里將已確認的按鍵位置代碼轉化為按鍵代碼以及最終的HID碼,建立鍵盤報表并發送給主機,然后使key_state=3。當下一個10 ms,key_state=3則進入csae3,等待按鍵釋放狀態,此時再次掃描前面已確定按鍵的位置,若按鍵已釋放,則key_state=0,下一個 10 ms來臨則進入case0重新按鍵掃描;否則仍然key_state=3,繼續等待釋放。這里也巧妙地利用了這10 ms進行按鍵釋放時的去抖動處理。

另外在多鍵(含雙鍵)、特殊功能鍵和復合鍵的實現中,該軟件也設計了比較好的實現方法。譬如多鍵,設置內部緩存器,在逐行掃描中將每個按下按鍵在矩陣鍵盤中的位置代碼存入其中。之后的消抖處理等操作的對象便是緩存器中的按鍵位置代碼值。系統處理的普通鍵數最多為6個,超過則為溢出。對于特殊功能鍵,其形式上是單鍵,實際實現的是多鍵的功能。只要將單鍵在發送前轉換成需要的多鍵HID碼,即可方便實現。對于復合鍵,理論上是兩個以上按鍵同時按下所完成的功能,實際情況很難實現真正的“同時按下”,它們的時間差別可能長達50 ms。譬如對引導鍵SHIFT鍵的設計,需設置專門標志位Shiftkey_flag,有SHIFT按下則 Shiftkey_flag=1,否則為0。在第一次檢測出SHIFT單按鍵時,改變狀態標志位為1。隨后的按鍵掃描中,若再無其他按鍵按下,則key_state=0,直到有其他按鍵按下,key_state=1。這在軟件中實際上是對狀態0的細化。同理,在各個狀態中,因為該鍵的特殊性,也有相應的細化過程。

從以上分析可見,這樣的軟件設計不僅結構清晰,代碼簡潔、實現便捷,而且使得當無按鍵按下,鍵盤每10 ms掃描一次;當有確定非復合按鍵按下(即通過消抖處理),則鍵盤響應速度在30 ms以內,如此的響應速度大大提高了鍵盤的靈敏度。

DCS系統是目前工業控制領域的核心系統,其專用鍵盤是提高整個生產線自動化能力的關鍵一環。該專用鍵盤的設計避免了現有鍵盤電路特殊按鍵實現復雜、軟硬件成本高的情況。本文研究開發的基于ARM的DCS專用工業鍵盤,實現了對多達86個按鍵的控制。采用STM32芯片及有效率的軟件開發大大提高了產品開發的速度。經過實驗結果與實際應用證明,該專用鍵盤易用性、可靠性達到了工業要求,并可產生很大的經濟效益。

[1]王永虹,徐煒,郝立平.STM32系列 ARM Cortex-M3微控制器原理與實踐[M].北京:北京航天航空大學出版社,2008.

[2]馬潮.AVR單片機嵌入式系統原理與應用實踐 [M].北京:北京航天航空大學出版社,2007.

[3]劉榮.圈圈教你玩USB[M].北京:北京航天航空大學出版社,2009.

[4]廖濟林.USB2.0應用系統開發實例精講[M].北京:電子

工業出版社,2006.

猜你喜歡
描述符端點中斷
非特征端點條件下PM函數的迭代根
基于結構信息的異源遙感圖像局部特征描述符研究
基于AKAZE的BOLD掩碼描述符的匹配算法的研究
不等式求解過程中端點的確定
基于深度學習的局部描述符
基于FPGA的中斷控制器設計*
跟蹤導練(二)(5)
千里移防,衛勤保障不中斷
特征聯合和旋轉不變空間分割聯合的局部圖像描述符
基丁能雖匹配延拓法LMD端點效應處理
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合