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