金 璐
(東軟醫(yī)療系統(tǒng)股份有限公司,遼寧 沈陽 110011)
目前在超聲系統(tǒng)設(shè)備上鍵盤設(shè)計(jì)中,往往采用鍵盤專用芯片作為主控芯片,這種方式的優(yōu)點(diǎn)是設(shè)計(jì)簡單,不用進(jìn)行軟件編程[1]。但在臨床醫(yī)生日常使用過程中,往往會(huì)出現(xiàn)按鍵失靈、硬件設(shè)備不識(shí)別等故障[2],在山區(qū)或者鄉(xiāng)鎮(zhèn)也會(huì)出現(xiàn)無法正常使用的現(xiàn)象。當(dāng)出現(xiàn)這種情況,售后服務(wù)人員也無法判斷問題點(diǎn),進(jìn)而導(dǎo)致后期維修成本的增加。所以,設(shè)計(jì)一款可編程、可維護(hù)的超聲臺(tái)車控制面板是必要的。
超聲臺(tái)車的控制面板由小鍵盤、軌跡球、鍵位控制面板等模塊構(gòu)成。鍵位控制面板模塊由2 塊STM32嵌入式芯片完成按鍵掃描、滑塊掃描、旋鈕掃描及鍵值發(fā)送等功能。同時(shí),控制面板在軟件編程中嵌入FreeRTOS 開源操作系統(tǒng)來確保按鍵的實(shí)時(shí)性和可靠性[3]。在控制面板驅(qū)動(dòng)中,采用了按鍵過濾功能,進(jìn)一步保證了主機(jī)Host 所接收的信號(hào)是按鍵所在的實(shí)時(shí)位置,避免由于數(shù)據(jù)阻塞造成Host 端響應(yīng)延遲的問題。
控制面板的工作流程:例如當(dāng)醫(yī)生期望調(diào)節(jié)TGC時(shí)會(huì)滑動(dòng)滑塊,這時(shí)滑塊的鍵值信息會(huì)發(fā)送至Host 主機(jī)端,驅(qū)動(dòng)端截獲當(dāng)前的鍵值數(shù)據(jù)解析后,會(huì)發(fā)送Windows 可識(shí)別的ISY message 信號(hào),在Host 端的上位機(jī)輪詢到這個(gè)message 信號(hào)就可以做出相對(duì)應(yīng)的滑塊動(dòng)作,并將信息傳遞給圖像Image 單元,以圖像的方式反饋給醫(yī)生。
控制面板的組件主要包括鍵位控制面板、小鍵盤、軌跡球等外設(shè)。鍵位控制面板選用的單片機(jī)型號(hào)為STM32F103,工作溫度為-40 ℃~85 ℃基本滿足日常使用情況[4]。具體配置情況:時(shí)鐘配置見圖1,系統(tǒng)時(shí)鐘是72M,USB 的時(shí)鐘是48M。
圖1 鍵位控制面板時(shí)鐘配置
基礎(chǔ)配置見圖2,嵌入FreeRTOS 操作系統(tǒng),具體優(yōu)點(diǎn)如下:(1) FreeRTOS 是免費(fèi)的,要做產(chǎn)品的話,免費(fèi)的FreeRTOS 操作系統(tǒng)就是個(gè)不錯(cuò)的選擇。(2) 簡單、小巧、易用,通常情況下內(nèi)核占用4 k~9 k 字節(jié)的空間。(3) 相比于while 輪詢的好處在于不會(huì)因?yàn)楣δ艿奶砑釉斐晒δ荛g的時(shí)延且后期功能添加,代碼移植方便簡單。
圖2 鍵位控制面板基礎(chǔ)配置
由于本設(shè)計(jì)中采用了FreeRTOS 操作系統(tǒng),所以采用了任務(wù)輪詢的方式進(jìn)行鍵位檢測,即不同類型的鍵值在不同的任務(wù)中進(jìn)行邏輯處理。
2.3.1 Button 任務(wù)
Button 按鍵部分主要采用的是7*7 矩陣掃描檢測,見圖3。
圖3 Button 按鍵7*7 矩陣掃描原理圖
2.3.2 Encode 任務(wù)
Encode 按鍵采用的編碼器型號(hào)為EC21A154040 1,輸出波形的相序,見圖4。
圖4 輸出波形相序圖
2.3.3 TGC 任務(wù)
ADC 采集方式為單通道采集,采集不同Channel數(shù)據(jù),進(jìn)行了多次采集,并軟件濾波。
由于采集的數(shù)據(jù)是32 位,而TGC 滿量程是0~255,所以需要移位處理。
2.3.4 小鍵盤功能
鍵盤設(shè)備類是HID 類,同樣是一款STM32F103嵌入式單片機(jī),在時(shí)鐘配置上與鍵位控制面板的配置基本一致?;A(chǔ)配置上與鍵位控制面板略有區(qū)別,只有一個(gè)USB Device 的設(shè)備類,這樣對(duì)于Host 主機(jī)識(shí)別來講,會(huì)將小鍵盤當(dāng)做HID 類設(shè)備,無需驅(qū)動(dòng)即可使用。
2.3.5 輔助功能
鍵位控制面板輔助功能包括軌跡球、光傳感等。
軌跡球是一個(gè)Hub 類的USB 外設(shè),可以直接連接到Host 端的Hub 上就可以在Host 主機(jī)端的設(shè)備管理器中看到。
光傳感器采用的芯片為APDS-9960 RGB 紅外手勢傳感,主要用于LED 燈息亮設(shè)計(jì),該傳感器的靠近感應(yīng)功能支持大概10 cm 范圍,超出10 cm 范圍后感應(yīng)數(shù)值都為0。
根據(jù)WDK 可以創(chuàng)建一個(gè)Sample 代碼,其中各個(gè)模塊的工程如下:
2.4.1 驅(qū)動(dòng)入口
USB 驅(qū)動(dòng)的函數(shù)入口為DriverEntry,也是微軟唯一指定的驅(qū)動(dòng)函數(shù)入口點(diǎn)。
2.4.2 設(shè)備添加函數(shù)
當(dāng)設(shè)備連接Host 主機(jī)后,驅(qū)動(dòng)端會(huì)進(jìn)行PNP 的電源枚舉,如果電源狀態(tài)為E0 時(shí),會(huì)調(diào)用設(shè)備添加函數(shù)OsrFxEvtDeviceAdd 進(jìn)行設(shè)備添加操作,在pnpPowerCallbacks 函數(shù)里注冊(cè)一系列的回調(diào)函數(shù),其中就包括設(shè)備添加函數(shù)。
2.4.3 隊(duì)列函數(shù)
隊(duì)列函數(shù)包括手動(dòng)隊(duì)列和串行隊(duì)列,這里添加了一個(gè)手動(dòng)隊(duì)列WdfIoQueueDispatchManual,目的是為了響應(yīng)STM32 發(fā)送過來的中斷信號(hào),進(jìn)而解析鍵值信息。
2.4.4 創(chuàng)建wdf 設(shè)備
當(dāng)調(diào)用函數(shù)WdfDeviceCreate 時(shí)就創(chuàng)建了wdf 設(shè)備,在此之前所有的配置參數(shù)都會(huì)綁定到這個(gè)wdf 設(shè)備上。
2.4.5 USB 中斷傳輸
USB 中斷傳輸不是真正意義上的中斷,而是采用Host 輪詢的方式來模擬中斷,其實(shí)是一個(gè)偽中斷[5]。既然是輪詢操作,就會(huì)涉及到一個(gè)輪詢頻率的問題,即多少時(shí)間需要輪詢一次。這個(gè)時(shí)間值被定義在中斷端口的端口描述符中,由硬件定義,并由總線驅(qū)動(dòng)參照?qǐng)?zhí)行。
2.4.6 連續(xù)讀操作
Continuous Reader 這個(gè)概念是wdf 框架較wdm框架的區(qū)別之一,這種設(shè)計(jì)方式簡化了開發(fā)人員的開發(fā)難度。
對(duì)應(yīng)的函數(shù)為WDF_USB_CONTINUOUS_READER_CONFIG,具體實(shí)現(xiàn)方式如下,這個(gè)函數(shù)有兩個(gè)參數(shù)需要注意:
TransferLength:表示每次從中斷端口讀取數(shù)據(jù)的最大長度,設(shè)置為最大包的長度是比較安全的。
NumPendingReads:多個(gè) IRP 形成隊(duì)列,排隊(duì)等侯總線驅(qū)動(dòng)從USB 設(shè)備中斷端口讀取有效數(shù)據(jù)。
2.4.7 鍵值數(shù)據(jù)處理
當(dāng)連續(xù)讀回調(diào)函數(shù)被執(zhí)行的時(shí)候,從Buffer 內(nèi)存句柄中獲取內(nèi)存緩沖指針,部分?jǐn)?shù)據(jù)處理方式如下:
2.4.8 鍵值解析部分
鍵值解析主要包括按鍵選定、按鍵釋放和長時(shí)按鍵,部分實(shí)現(xiàn)代碼如下:
為了驗(yàn)證設(shè)計(jì)的正確性,Host 端編寫簡單的測試Demo 程序。具體功能如下:
(1) 根據(jù)GUID 創(chuàng)建一個(gè)驅(qū)動(dòng)句柄。
(2) 創(chuàng)建一個(gè)線程,其功能是檢測鍵值輸入信息,并提取有效數(shù)據(jù)段,發(fā)送ISY message 至Host 主機(jī)。
(3) 以DeviceIoControl 函數(shù)向驅(qū)動(dòng)發(fā)送一些控制指令,比如點(diǎn)燈,獲取設(shè)備信息等功能。
經(jīng)Demo 測試后,確認(rèn)可以正常獲取鍵值信息且Host 主機(jī)正確做出響應(yīng)?,F(xiàn)已在超聲產(chǎn)品NeuEcho10和NeuEcho15 投產(chǎn)使用,見圖5,目前并沒有出現(xiàn)按鍵失靈、硬件設(shè)備不識(shí)別等故障,整體來看效果不錯(cuò)。
圖5 NeuEcho15 展示圖