一種基于DDS和Qt的“所見即所得”波形發(fā)生器
信號/槽機制是Qt的一個中心特征,用于對象間的通訊。繪圖事件(paintEvent)采用雙緩沖機制。雙緩沖技術(shù)是一種GUI編程技術(shù),它指的是在一個不在屏幕上的位圖上渲染一個物件并把此位圖拷貝到屏幕上,常用于消除閃爍和提供一個快速用戶界面。該程序采用了Qpixmap類來實現(xiàn)雙緩沖。
2.3 驅(qū)動程序設(shè)計
Linux設(shè)備驅(qū)動程序是系統(tǒng)內(nèi)核的一部分,運行于內(nèi)核態(tài)。其可以以兩種方式被編譯和加載:直接編譯進Linux內(nèi)核和編譯成一個可加載和刪除的模塊,通過modprobe/insmod和rmmod來加載和卸載驅(qū)動模塊。該系統(tǒng)即采用字符設(shè)備驅(qū)動。在系統(tǒng)內(nèi)部,I/O設(shè)備的存/取通過一組固定的入口點來進行,具體到Linux系統(tǒng),設(shè)備驅(qū)動程序所提供的這組入口點由一個文件操作結(jié)構(gòu)file_operation來向系統(tǒng)進行說明。該系統(tǒng)的驅(qū)動函數(shù)需要提供3個函數(shù)調(diào)用,read函數(shù)用于讀取DDS運行狀態(tài),write函數(shù)用于向DDS寫入?yún)?shù)和波形數(shù)據(jù),ioctl函數(shù)用于復位/啟動/停止DDS。另外還需要打開(open)和關(guān)閉設(shè)備函數(shù)(close)。File_operatio的定義如下:
驅(qū)動程序在wave_ioctl,wave_wirte,wave-read等幾個函數(shù)中具體實現(xiàn)。所需的波形參數(shù)和數(shù)據(jù)通過Qt程序打包,調(diào)用write函數(shù)(對應驅(qū)動程序中的wave_wrtie函數(shù))一次性寫入DDS模塊。最終將驅(qū)動程序編譯為模塊文件(*.ko),通過命令modprobe和rmmod來加載和卸載驅(qū)動模塊。
3 系統(tǒng)操作及測試
(1)設(shè)置波形參數(shù),包括繪圖模式,時間軸刻度,輸出延時等。
(2)繪制波形,并作相應的修改,最終完成波形繪制。在松開觸摸筆之后Qt程序根據(jù)所選擇的波形繪制模式對波形進行處理和優(yōu)化并重新顯示出來。
(3)點擊單次觸發(fā)模式或重復(循環(huán))觸發(fā)模式,此時Qt程序提取時間軸刻度參數(shù),轉(zhuǎn)換為DDS中可控分頻器的分頻參數(shù),并將這些參數(shù)和處理后的波形數(shù)據(jù)打包傳輸給DDS模塊,輸出延時完畢則啟動DDS,即產(chǎn)生與所繪波形相同的實際電信號,達到“所見即所得”的效果,如圖5所示(時間刻度為100μs)。
4 結(jié)語
任意波形發(fā)生器是現(xiàn)代電子技術(shù)的一個新發(fā)展,本文給出了一種基于DDS和Qt的任意波形發(fā)生器的整體設(shè)計方案,分析了DDS在FPGA中的實現(xiàn)和Linux下Qt程序的設(shè)計。該設(shè)計最大的特點是“所見即所得”,即繪制何種波形就可立即產(chǎn)生何種波形,非常直觀,從而以滿足各種電路測試,通信等領(lǐng)域快速產(chǎn)生任意波形信號的要求。
評論