基于A(yíng)RM的分布式干擾機控制單元設計
在圖形界面編程中,多數時(shí)候需要對某些“事件”進(jìn)行處理。例如,當用戶(hù)點(diǎn)擊某個(gè)按鈕時(shí),應用程序便開(kāi)始執行某種操作。在Qt開(kāi)發(fā)中,通過(guò)一種被稱(chēng)為“信號和槽”的機制來(lái)實(shí)現對象間的通訊。信號和槽機制,即當一個(gè)特定事件發(fā)生時(shí),一個(gè)或幾個(gè)被指定的信號就被發(fā)射;槽即一個(gè)返回值為void的函數,如果存在一個(gè)或幾個(gè)槽和該信號相連接,那么在該信號被發(fā)射后,這個(gè)(些)槽(函數)就會(huì )立刻被執行。
本文引用地址:http://dyxdggzs.com/article/201609/303796.htm由于設計的控制單元采用大尺寸觸摸屏,而觸摸屏性能的調試是個(gè)重要問(wèn)題,因為電磁噪聲的緣故,觸摸屏容易存在點(diǎn)擊不準確、抖動(dòng)等問(wèn)題。因此一般都要移植一個(gè)tslib來(lái)配合,在用戶(hù)層對觸摸屏的數據進(jìn)行濾波和矯正,同時(shí)也可給應用程序一個(gè)統一接口。tslih能為觸摸屏驅動(dòng)獲得的采樣提供諸如濾波、去抖、校準等功能,通常作為觸摸屏驅動(dòng)的適配層,為上層的應用提供了一個(gè)統一接口。在PC端的界面設計完成后,后期修改流程如圖6所示。

經(jīng)過(guò)上述步驟,將編譯好的可執行文件拷貝至開(kāi)發(fā)板的opt/Qtopia/bin目錄下,將.desktop桌面文件拷貝至opt/Qtopia/apps/Application目錄下。重啟開(kāi)發(fā)板,就可以在ARM觸屏的桌面應用上看到編寫(xiě)的應用程序圖標,點(diǎn)擊運行就可以初步看到效果。
3 軟件功能設計
通過(guò)以上工作,可以在ARM開(kāi)發(fā)板上看到整體的界面效果,但要實(shí)現該ARM控制單元的功能,還需要在界面程序中添加和修改代碼。
3.1 參數設置及數據的發(fā)送
首先對所要發(fā)送的數據進(jìn)行采集并打包。在發(fā)送數據之前,還需對已開(kāi)發(fā)成功的SPI做配置。在SPI發(fā)送數據時(shí),有4種模式可供選擇:(1)CPOL=0,CPHA=0。(2)CPOL=0,CPH A=1。(3)CPOL=1,CPHA=0。(4)CPOL=1,CPHA=1。4種情況分別為MODE0、MODE1、MODE2、MODE3,其中CPOL指時(shí)鐘信號的極性,表示當時(shí)鐘信號空閑時(shí),其電平值為低電平0或高電平1。CPOL=0,時(shí)鐘空閑時(shí)為低電平,所以當時(shí)鐘信號有效時(shí),即為高電平;CPOL=1,時(shí)鐘空閑時(shí)為高電平,所以當時(shí)鐘信號有效時(shí),即為低電平。CPHA指時(shí)鐘信號的相位,對應著(zhù)數據采樣是在第幾個(gè)邊沿(edge),是第一個(gè)邊沿還是第二個(gè)邊沿,0對應第一個(gè)邊沿,1對應第二個(gè)邊沿。

在本干擾機控制單元通信協(xié)議中,是采用模式MODE3。除了要對SPI發(fā)送數據的模式設置之外,還要設置SPI模式可寫(xiě)可讀、SPI的bit/word可寫(xiě)可讀、SPI的波特率可寫(xiě)可讀等。將參數設置完成后,按照通信協(xié)議的約定,將界面信息對應成相應的數據,每8 bit為一組,每個(gè)word共16 bit進(jìn)行發(fā)送即可。
3.2 SD卡存儲功能的設計
分布式干擾機在實(shí)際使用中,有時(shí)需要對設置的某些重要信息進(jìn)行保存,所以利用Qt中的兩個(gè)易于合并使用的類(lèi):QFile和QDataStrcam。QFile對象表示磁盤(pán)上可讀取和寫(xiě)入的文件。QFile是代表多種不同設備且應用更廣的QIODevice類(lèi)的子類(lèi)。QDataStream對象用于按順序排列二進(jìn)制數據,以便儲存在QIODevice中并供以后檢索。讀取或寫(xiě)入QIOD evice就如同打開(kāi)數據流,然后讀取或寫(xiě)入一樣簡(jiǎn)單,只是參數為不同的設備。
3.3 定時(shí)功能的設計
對于實(shí)際使用中的干擾機控制單元,需要發(fā)送干擾數據時(shí),在界面上進(jìn)行相應設置,即可直接發(fā)送。但是更多時(shí)候需要做的是讀取并顯示干擾機從環(huán)境中測到的數據,可以通過(guò)點(diǎn)擊界面上的更新按鈕,但是無(wú)法實(shí)時(shí)更新,所以這里設計一個(gè)能夠定時(shí)自動(dòng)更新界面信息功能是必要的。定時(shí)功能主要利用Qt中的QTimmer類(lèi),其核心程序如下:

除此之外,在整個(gè)程序中的某些功能函數中,還要加上internalTimer→stop();這行令定時(shí)器關(guān)閉的代碼,原因是在有些界面參數進(jìn)行設置后或讀取并顯示后,暫時(shí)無(wú)需定時(shí)讀取功能,所以就需關(guān)閉定時(shí)功能,待需要時(shí)再通過(guò)internalTimer→start(autostartTime)打開(kāi)定時(shí)器即可。

當整個(gè)程序的功能全部設計完成后,進(jìn)行整體測試,流程如圖8所示,開(kāi)機后,ARM會(huì )自動(dòng)啟動(dòng)干擾機控制單元界面,并開(kāi)始計時(shí)。當定時(shí)時(shí)間到,ARM單元會(huì )讀取FPGA中的主從裝置標志位并進(jìn)行顯示,若讀到從機,則將FPGA中的信息顯示到界面中;若為主機,直接讀取FPGA延遲量更新標志位。若為更新,則表示FPGA有新信息,需要點(diǎn)擊設置將當前界面更新為最新參數,然后開(kāi)始重新計時(shí)。
3.4 運行測試
對設計好的分布式干擾機控制單元進(jìn)行測試,按照與FPGA的通信協(xié)議,ARM界面信息轉化為數據后,每8位一組,兩組為一個(gè)信息單元進(jìn)行傳送。反之,當FPGA對ARM發(fā)送數據時(shí)同理對數據進(jìn)行解析。利用FPGA的邏輯分析儀對發(fā)送與接收的數據進(jìn)行采樣,結果如下圖9所示。

圖9中,SCLK_BUF為時(shí)鐘信號,每8個(gè)時(shí)鐘脈沖為一個(gè)時(shí)鐘周期;SDI為ARM發(fā)送的數據,SD0為ARM接收的數據;ADDR_SPI與DATA_SPI為ARM發(fā)送數據的低8位與高8位。從圖中可以看出,ARM端發(fā)送的數據依次為00h,00h,01h,00h,02h,00h,03h,00h……。在FPGA一端,收到的數據同樣是00h,00h,01h,00h,02h,00h,03h,00h……,其中ADDR_ SPI的數據就是收到數據的奇數項,其中DATA_SPI的數據就是收到數據的偶數項。同時(shí),在第3個(gè)有效脈沖周期到達時(shí),ARM控制單元接收到來(lái)自FPGA的數據,這個(gè)數據解析后反映到ARM界面即為裝置屬性選項,界面會(huì )自動(dòng)響應將裝置屬性選項設置為主裝置。
評論