摘要:針對一種基于USB的無線觸摸鼠標板的設計與實現方法,給出了較為詳細的設計和實現過程。該設計結合了USB和無線設備的優點,將手持端的鼠標觸摸板控制信息通過無線發送到接收端并通過USB接口與主機PC實現交互通信。整個系統主要由PIC16FB77A單片機,PDIUSBDl2芯片,CC2420無線模塊,PS/2鼠標觸摸板實現。
隨著IT技術的發展,多媒體教學已經在學校得到廣泛的應用。但傳統的多媒體教學存在互動性不強等缺點,不利于師生的交流和溝通,基于這種情況,我們設計和實現了一種基于USB的無線觸摸鼠標板,使得教師在學生座位旁依然可以像站在講臺那樣自由控制電腦。
1系統組成
本系統可以大致分為兩個部分,其中一端是手持設備終端,提供PS/2接口供鼠標觸摸板接入使用;另一端是PC接入端,通過USB接口與主機相連,二者之間通過無線傳輸協議聯系在一起。整體構架圖如圖1所示。
圖1整體構架圖
因為設計所選用的CC2420集成了發送和接收功能在同一芯片中,故在手持終端和接入設備部分的無線收發器可復用同一模塊,無需重新設計。而在PC端,為了實現設計的普遍適用性以及即插即用的特性,對接人設備采用了HID類設計從而使PC端無需增加任何軟件,即可使用操作系統提供的設備驅動程序。
本設計的實驗開發板由筆者自行設計實現,不僅包括了本設計所需要的功能,還有調試功能以及擴展功能,供日后有需要時使用。
2 硬件設計與實現
2.1手持端硬件設計與實現
在手持端,主要包括的模塊有MCU控制模塊,無線發送模塊,PS/2接口模塊和調試模塊等。各模塊的功能示意圖如圖2所示:
圖2手持端模塊圖
2.1.1 MCU PIC整體控制模塊
MCU控制著整個系統的運行,包括軟件的觸發、運行,以及各個部分的協調工作。整個系統的軟件都是存儲并運行在MCU當中,在觸摸板事件響應方面采用的是中斷觸發。而PS/2接口實際上只需兩條IO線,也就是說其只占用了MCU兩個管腳資源,其中一個為普通IO口,另一個則是中斷口,考慮到中斷12的可能沖突,可以通過跳線方式自行選擇。在CC2420方面,亦采用電平跳變中斷檢測其SFD及FIFOP的中斷請求,而其數據通信則是使用芯片集成的SPI接口中的RCA(SO)、RC5(si)、rico(CS-N)、RC3(SCK)等4條線來實現。
2.1.2串口模塊
由于USB的數據信息在其未被主機正確識別之前無法得到,并且在無線傳輸方面也需將數據及控制信息等傳回主機以供調試,所以在開發板上另外設計一個串口調試模塊,方便設計過程中的調試需要。
RS232規范使用12V供電,而開發板上使用的電壓為3.3V,這樣如果直接將數據線直接連到RS232接口上會將實驗板上的元件燒毀。為了實現不同電壓之間的連接,采用了RS232電平轉換芯片MAX3232.利用這個芯片我們可將12V電壓的數據傳輸轉換為3V,這樣就可以達到將數據與主機進行交互的目的。在數據傳輸線路上,由于PICl6F877A內置了串口接口,所以只需使用RC6、RC7這兩根線就可以實現數據的傳輸,經過MAX3232的電平變換到達主機。
2.1.3無線傳輸模塊
考慮到工藝問題,靠手工無法完成,所以采用模塊購買的方式來獲得CC2420的使用,購買的模塊僅有非常簡單的外圍器件,以及12根控制引腳外引(包括電源和地),這樣我們就可以通過MCU利用這12根引腳控制CC2420的工作了。根據該模塊的外接引腳,在實際的電路設計中設計了一個兩排12根線的接口,可以直接接到MCU控制接口,因為MCU和CC2420都是采用3.3V的電壓,所以不會有電壓過高的問題。
在CC2420的電路設計過程中發現,對于控制引腳SFD、FIFOP這兩個用于檢測中斷接受數據的接口尤其重要,如果在這兩條線路出現了干擾的話,在軟件的實現方面將產生很多不必要的軟件開銷,例如去除干擾等。所以在PCB設計的時候要對這兩條線加寬,不要橫跨電源和地,這樣會產生很大的干擾。
2.2 PC接入端硬件設計與實現
此部分將介紹接人設備的硬件設計與實現,在串口調試部分采用和手持端同樣的硬件設計,而在無線接受模塊,因為CC2420集合接收發送功能在同一芯片中,而應用電路也采用同樣電路,故在接入設備部分可以使用相同模塊。所以在這里將主要介紹USB模塊的設計與實現。
在USB接IZl方面,為了使用上的方便,將設備設計成標準的HID類鼠標,這樣可以直接使用操作系統自帶的驅動程序而無需安裝任何的驅動軟件。在供電方面使用標準USB接口提供的5V電源為USB芯片供電,接人端的主要硬件架構可用圖3所示:
圖3接入端硬件構架圖
在USB接口芯片的連接上,采用了與MCU控制器的INT0外部中斷的方式連接,這樣可以保證USB數據傳輸的實時性,而其他的控制接El使用一般的數據IO口,其8位數據傳輸口使用PICl6F877A的RD口連接。
3 系統軟件設計與實現
在本部分,主要將介紹本設計的軟件實現,其中包括接入端和手持端兩大部分。
3.1整體設計方案的設計與實現環境
本次設計采用的控制芯片為PIC16F877A。
由于程序是在PC上設計,需要將程序下載到單片機上運行和測試,所以需要一個程序下載工具,本次設計所采用的程序燒錄器為TOP WIN2004,該燒錄器自身提供有一個下載軟件,使用也非常方便,安裝按照軟件目錄下的README一步步操作即可。
本設計中的軟件均是在單片機內實現,運行在MCU內的軟件控制著整個設計所要實現的模塊。
但是由于MCU與傳統Pc有著巨大的差別,必須考慮存儲空間、運行速度、外界干擾等因素。在實現此次設計的過程中,除了首先要保證硬件環境的設計正確和優質之外,軟件方面的嚴謹設計也是必不可少的一個重要部分。
本設計的軟件總體框架圖可如圖4所示,為了使兩端達到速度及任務的均衡,一些軟件處理將在手持端完成,然后以接收端可以識別的格式打包發送過去,由圖4也可以看出兩端的任務處理基本處于均衡狀態。
圖4軟件總體框架圖
3.2手持端軟件的設計與實現
在本部分將介紹手持終端的軟件設計過程,以及各個模塊部分的具體實現。軟件的運行流程圖如圖5所示。
圖5手持端軟件流程
對于事件發生的獲取是采用中斷模式,也就是在有鼠標觸摸板事件發生的時候,將喚醒MCU進行數據的采集處理,然后將采集到的PS/2數據進行一定規則的轉換,然后將其打包發送。若沒有數據需要處理,則進入睡眠狀態以節省功耗。
3.2.1芯片初始化
在芯片初始化階段,主要是芯片的內部工作的時鐘的設置、IO口的初始化設置、以及CC2420的初始化。
在芯片的初始化階段需要注意對每個IO口的數據方向進行設置,并且要準確設置時鐘以及串口的傳輸數率,否則在調試階段無法獲取數據。不用的IO口全部設置成輸出端口,這樣可減少端口不必要的干擾。
3.2.2鼠標觸摸板事件的信息采集
首先要對觸摸板進行初始化,其初始化序列請參照PS/2協議的命令序列。初始化成功后,該觸摸板將正常工作,只要有觸摸事件發生,將產生連續三幀的數據發送,而按鍵事件發生,則在按下產生三幀數據發送,彈起產生三幀數據發送。我們需要做的工作就是在觸摸板發送數據的時候對其進行采集。采集過程也非常簡單,在熟悉PS/2協議的基礎上,中斷產生后,按照時序對數據進行采集,一定要在讀完一幀的基礎上再讀下一幀,讀取完三幀數據后就馬上進行數據轉換和打包發送,然后再次等待中斷事件發生。所選擇的MCU在速度處理上完全可以滿足一般鍵盤鼠標數據包發送的間隔時間,也就是說在讀取完一個數據包后,就處理該數據包而不需要完全讀取完一次事件產生的數據堆。
3.2.3 CC2420數據發送
在CC2420的數據發送階段,MCU將數據發送命令傳送給CC2420之后,可以通過SFD引腳來判斷其發送過程。該引腳會有一個由低電平向高電平跳變的過程,其過程如圖6所示。
圖6發送過程示意圖
控制器向CC2420發送了發送數據的命令之后,并不能馬上把數據發送出去,而是要經過12個時鐘周期之后發送器才啟動,之后將數據添加了其實序列和幀頭之后,才能開始數據發送進程。在數據發送完畢之前,SFD引腳將一直為高電平,這樣在MCU就可以根據此引腳的變化來跟蹤發送過程,發送過程具體的軟件實現,可用圖7表示。
圖7 CC2420發送實現過程
在CC2420的數據發送階段,發射校正和添加起始序列和幀頭可以由硬件自動完成,但是幀的長度需要在軟件中計算得到再寫入幀中,并且需要將數據寫入發送器的發送緩沖區之后向CC2420發送發送啟動命令。
3.3接入端軟件的設計與實現
接入設備部分的軟件設計,主要是分為兩部分:CC2420的接收和USB數據傳輸。CC2420由于是發送和接收集成在同一模塊中,所以其初始化可采用發送端的設計。而在USB數據傳輸部分,則采用HID的協議與主機進行通信,這樣在軟件設計上可以減少復雜度。
3.3.1無線數據接收
無線數據接收的軟件實現,使用RB5端口的電平中斷觸發接收進程。當CC2420發現有幀傳輸過來時其引腳會產生相應的變化,MCU通過檢測這些引腳的變化可以得知CC2420所在的接收階段與狀態。在接收過程中,有3根引腳可以檢測出CC2420的狀態,其數據接收的變化示意圖限于篇幅,在此略去。
當CC2420收到有符合其起始序列的時候,其自動接收幀頭和幀的長度,并且SFD、FIFO、FIFOP這3根輸出引腳分別輸出上圖所示電平。當接收到幀的目的地址時候,CC2420自動進行地址匹配,若地址匹配成功,則接收進程繼續進行,如果地址匹配不成功,則馬上停止接收過程,并把3根輸出引腳都置為低電平。MCU在控制時可以通過檢測這3根輸出引腳的電平來判斷接收過程的狀態。
如果地址匹配成功且接收完整個幀,則可以啟動數據讀取進程。
在數據讀取階段,CC2420提供了幀的正確接收的初始判斷,由此可以知道該幀是否被正確接收,以決定是讀取該幀還是放棄該幀。按照CC2420的規定,當一個幀接收完畢之后,如果出現FIFOP=l并且FIFO=0的情況,則說明該幀錯誤接收,應當向其連續寫人兩個CC2420_SFLUSHRX命令將數據沖刷。如果沒有出現這種情況,則按照幀發送的相反過程從接收緩沖中讀取數據。
3.3.2 USB設備HID類設計與實現
USB數據傳輸的軟件設計,主要是集中在USB芯片的初始化以及協議的初始化、以及之后的枚舉過程,在成功枚舉并被主機正確識別之后,只需將數據寫入發送緩沖即可將數據發送到主機。在協議的初始化時,需要將協議中規定的各個參數設定都按照設計的要求設定,并且將各種描述符,包括配置描述符、端點描述符、接口描述符、報告描述符等初始完畢,以供枚舉過程使用。
USB芯片的初始化過程的最后一步是將其SoftConnect功能打開,從這時起,主機才能開始檢測到設備的接入,也從這個時候起,USB芯片才真正開始與主機通信并開始設備枚舉過程。在枚舉過程中,主機首先向設備發送啟動信號,設備在接收到這個信號之后向主機發送回送的協議數據以供主機識別,當識別到這個信號之后,主機則開始向設備獲取描述符等信息,進而完成設備枚舉過程。
初始化完成之后,主循環實際上不再參與USB通信。每次PDIUSBDl2接口芯片檢測到USB總線上主機發給這個設備的信號時候就觸發一次單片機的外部中斷。中斷處理子程序要做的工作就是首先D12讀取中斷信息,查看D12收到了什么樣的封包,然后根據主機的不同要求做出響應,中斷處理程序流程如圖8所示。
圖8中斷處理程序流程
本系統設備中,固件程序只須處理端點0的輸出和輸入要求就可以完成設備的正常配置和基本工作。
在圖8中,SOF包處理程序是自定義的部分,是為了更好地配合設備工作而添加的代碼,與設備的實質沒有太大關系,而結束狀態改變引起的中斷在這里不需要做處理。由于USB的數據傳輸都是由D12自動完成,端點1和2的輸出/輸入中斷處理就沒有什么實質內容。
4結束語
本設計所實現的基于USB的無線觸摸鼠標板除了具有無線空中鼠標的所以功能外,且成本低廉,容易實現,無線傳輸距離遠(20 m),無指向性,適應性強,能廣泛應用于現有的多媒體教室。
評論