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