江帆,孫立,尹華山
(南京航空航天大學理學院,江蘇南京211100)
應用現代電子信息技術改進傳統實驗,適應大學專業物理實驗課程創新發展的需求,研制具有全數字化、接口兼容性強、可實時測試監控、實時數據處理與存儲、符合網絡化技術規范,經過全面技術升級的新型實驗工作平臺。不僅是通用性的實驗平臺,適應不同物理參數測試的需求;而且具備個性化特點,適合特殊性物理參數測試需求。全篇以數字化壓力測量的實例作為個案來展開,具體描述硬件與軟件的設計與研制。
Qt作為系統開發的環境,具有不可替代的優勢。Qt提供的C++應用程序開發框架,可以輕松實現“一次編寫,隨處編譯”的跨平臺解決方案,編寫的應用程序能完美運行于從windows 98到windows 7,從Mac OSX到Linux,從Solaris,HP-UX到其他基于X11的眾多Unix平臺上。這讓編寫的應用程序可以運行在不同的系統,方便移植[1]。Qt設計師是強大的跨平臺GUI布局和格式構建器[2]。
傳感器將各種物理參數轉化為電信號,經由分析儀的放大處理與采樣轉換成為數字信息,再經過儀器的串口與上位機的通信傳輸,從而實現上位機對分析儀的實時有效控制以及對各種數據的計算處理。在這個過程中,分析儀擁有監控、報警、顯示、閥值設定和人機交互等功能。上位機軟件擁有數據采集、糾錯、制表、畫圖、串口調試、打印和存儲等功能。在數據的傳輸過程中避免了人為造成的誤差,使測量更精確,操作更簡便和人性化。系統構架圖如圖1所示。

圖1 系統架構圖Fig.1 System construction chart
在大多數情況下,測試參數為非電量的物理參量,傳感器將其轉化成對應的電壓或電流的參量,測量系統必須具有兼容性強、適應性廣的前置電路。傳感器輸出的電信號與采樣電路輸入的電信號之間,電路參數匹配、電氣性能對接,在前置電路設計時需要做到3點:
1)電流輸出型傳感器與電壓輸出型傳感器不同,用電子程控型多路選擇器完成對傳感器類型的智能識別與輸入切換;
2)電壓值是后續處理基礎性變量,必須把電流輸出型傳感器輸出的電流變量轉變為電壓變量;
3)各種類型傳感器輸出變量存在很大差異,為了符合后續采樣電路正常工作時電壓值的需要,設計一個程序控制型的放大器來完成微小信號的放大或者是大信號的衰減處理。
設計一個智能型前置電路來完成,具備自動識別、多路切換與程控放大的特點,其工作原理如圖2所示。

圖2 智能型前置電路Fig.2 Intelligent front circuit
為保持系統的高精度性能,設計采用16位的高精度低頻模數轉換器AD7705。它利用Σ-Δ轉換技術[3]實現了16位無丟失代碼性能。選定的輸入信號被送到一個基于模擬調制器的增益可編程專用前端。片內數字濾波器處理調理。SPI接口串行輸出,節省了I/O口的使用。具有差分輸入端口,對模擬輸入具有緩沖功能,0.003%非線性可以滿足系統的要求。
選擇STC公司生產的STC89C52型單片機,具有低功耗、高性能CMOS8位微控制器,40腳雙排直列式。最高運作頻率35 MHz,6T/12T可選。8 K在系統可編程Flash存儲器。使用經典的MCS-51內核,但做了很多的改進使得芯片具有傳統51單片機不具備的功能。在單芯片上,擁有靈巧的8位CPU和在系統可編程Flash,為眾多嵌入式控制應用系統提供高靈活、超有效的解決方案。具有以下標準功能:8k字節Flash,512字節RAM,32位I/O口線,看門狗定時器,內置4KB EEPROM,MAX810復位電路,3個16位定時器/計數器,4個外部中斷,一個7向量4級中斷結構(兼容傳統51的5向量2級中斷結構),全雙工串行口。另外,具有可降至0 Hz靜態邏輯操作,支持2種軟件可選擇節電模式。空閑模式下,CPU停止工作,允許RAM、定時器/計數器、串口、中斷繼續工作。在掉電保護方式下,RAM內容被保存,振蕩器被凍結,單片機一切工作停止,直到下一個中斷或硬件復位為止。
單片機的控制與計算處理程序內容很多,舉例說明其中的設計之一:
直接顯示A/D轉換的數字信號[4]的話,可以觀察到顯示數字的不停跳變。為了保持穩定,不僅在A/D芯片中加了模擬濾波調理,防止外界的干擾信號影響。同時在軟件的算法上采用多次采樣求平均值的處理算法,可保持0.001 MPa位穩定,比實驗室現有的儀器提高了將近10倍。
static uchar n=0;
adc[n++]=ad;
if(n==16)//數字濾波法運算取平均值
{
uchar i;
unsigned long int sum=0;
n=0;
for(i=0;i<16;i++)
{
sum+=adc[i];
}
ad=sum>>4;
transadc(ad);
}
除了以上硬件電路外,系統需要相應的輔助配套電路,用以完成特定的控制功能,如I/O擴展接口電路、液晶顯示驅動電路、串口通訊電路、各類時鐘電路及各種電源電路等。
1)通用功能:啟動程序、登陸界面、使用提示、錯誤提示、菜單欄、工具欄等。
2)實驗功能:學生信息數據庫,網絡上傳,實驗原理預習,選擇負載模式(以數字化壓力測量0.6Mp或6Mp為例),數據分析、顯示和存儲等。
3)分析儀的控制功能:串口通信,數據采集,數據糾錯等。
在Qt Creator中新建工程,在Qt C++項目中的Gui應用為用戶提供了各種界面基類。Qt Creator提供的默認基類只有QMainWindow、QWidget和QDialog這3種。QMainWindow是帶有菜單欄和工具欄的主窗口類,QDialog是各種對話框的基類,全都繼承自QWidget[2]。其實所有的窗口部件都繼承自QWidget。本軟件選擇QMainWindow。
Qt Creator的設計模式即Qt Designer,使用了與應用程序中將要使用的相同部件,因此可以使用屏幕上的格式快速設計、創建部件以及對話框。具有使用拖放功能快速設計用戶界面,定制部件或從標準部件庫中選擇部件,以本地外觀快速預覽格式,通過界面原型生成C++或Java代碼等優勢[2]。對于界面設計,也可以使用純代碼編寫程序。拖放一個QPushButton部件的操作和QPushButton pushbutton(this);語句效果相同。兩種方法綜合應用可以使界面設計更靈活更有創意。
界面外觀可以通過QStyle(Qt風格)、QPalette(調色板)和Qt Style Sheets(Qt樣式表)[2]進行風格、色彩、透明度和背景等的美化。整體外觀的布局則通過布局管理器來美化。布局管理可以使部件整齊排列并適應界面大小而變化。Qt中主要提供QLayout類及其子類作為布局管理器,通常使用的有基本布局管理器QBoxLayout和柵格布局管理器QGridLayout。
Qt支持現在使用的大多數語言,所有的輸入部件和文本繪制方式對Qt支持的所有語言都提供了內置的支持。同時,Qt對把應用程序翻譯為本地語言也提供了很好的支持[2]。在本軟件中通過對所有用戶可見的文本使用QString,對動態文本使用QString::arg()函數,對所有文字文本使用tr()函數來實現國際化。主程序整體界面效果如圖3所示。

圖3 主程序界面Fig.3 Main programinterface

圖4 數據處理結果Fig.4 Data processing result
數據的處理分為同步顯示、擬合圖像、制表、存儲數據和打印數據。制表是在QMainWindow的構造函數中初始化;同步顯示是在采集和計算數據的同時在數據區和表格中顯示;擬合和繪圖有專門的函數在后臺進行,這個函數還包含最小二乘法、計算線性度、計算擬合方程和顯示坐標圖的代碼。利用Qt中繪圖控件QPainter[2,5-6],同時利用坐標變換translate方法重新定義原點,把數據通過數學計算的方法轉化為相對應的點繪制出來,這樣就能擬合出曲線,最后將實驗結果存儲為pdf格式圖片,如圖4所示。
上位機軟件功能的實現依靠3種機制:C++面向對象編程機制,Qt的信號與槽機制,Qt的事件機制。
Qt編程是由C++體系實現[1-2,5-6],面向對象[7]的編程方法和Qt豐富的類庫,使用戶能夠更簡單靈活的實現各種功能。在Qt Creator的幫助模式下,可以查詢所有類的信息。應用這種機制,可以使程序結構靈活,層次感強。軟件架構如圖5所示。
Spscreen.cpp為啟動界面,包含軟件的基本信息。Login.cpp是登陸界面,包含學生信息的填寫,其下屬Experiment.cpp提供實驗原理;另一個下屬Lprompt.cpp是提示學生填寫錯誤信息的對話框。Mainwindow.cpp是主程序界面,包含各種部件,其下屬Accessport.cpp、Filesave.cpp、Fileprintout.cpp分別提供串口調試、文件保存、文件打印的功能;另一個下屬Qextserialbase.cpp為第三方編寫的串口通信的底層驅動文件。
信號和槽用于兩個對象之間的通信,信號和槽機制是Qt的核心特征,也是Qt不同于其他開發框架的最突出特征[2]。比如,點擊按鈕“關閉窗口”就會發出一個信號,對應的槽函數close()會被調用以響應這個信號。這種機制使部件與部件,部件與后臺,部件與其他窗口,窗口與窗口之間可以進行交流。
在Qt中,事件作為一個對象,繼承自QEvent類,常見的有鍵盤事件QKeyEvent、鼠標事件QMouseEvent和定時器事件QTimerEvent等[2,5-6]。比如,對數據進行指定刪除,在數據區設定點擊鼠標左鍵事件,使點擊左鍵時顯示標簽變紅,后臺的相應變量發生變化。
上位機和分析儀采用RS232/DB-9串口通信。軟件中控制串口通信的類QextserialPort繼承自Qextserialbase類,適用于各種操作系統。
讀取數據時采用查詢模式,上位機軟件向分析儀發出信號,如果數據準備好則直接讀取,須注意的是這種讀取方式需要設定定時器進行延時讀取。
系統的軟硬件都可以進行升級。比如傳感器、單片機的算法、串口通信改為USB接口,實驗原理升級為動畫演示、增加數據庫和網絡功能等。
數據庫與網絡功能,對于網絡規范化和實驗平臺管理具有重要意義。Qt的QIODevice、QTcpServer、QIOStream等類可以實現網絡上傳功能;Qt中的QtSql模塊提供了對數據庫的支持[2],不需要SQL[8]知識就可以瀏覽和編輯數據庫。
系統具有通用特性,采用的智能接口電路,有很強的兼容性,可適應不同種類的傳感器[9]。在一個實驗平臺上,如:溫度、濕度、速度與亮度等物理參量都可以進行數字化的處理與分析。以壓力測試為實例介紹的系統設計和實現的方法,對于其他實驗也適用。Qt強大的GUI設計功能,可以使界面根據不同實驗靈活調整。在Qt環境下開發的軟件具有跨平臺性,且人機界面友好,操作簡便,避免了傳統試驗方法繁瑣的記錄和處理的過程,提高了實驗的精度和學習的效率。
[1] Blanchette J,Summerfield M.C++GUI Qt4編程[M].2版.北京:電子工業出版社,2008.
[2] 霍亞飛.Qt Creator快速入門[M].北京:北京航空航天大學出版社,2012.
[3] 高光天,徐振英.數模轉換器應用技術[M].北京:科學出版社,2000.
[4] 郭天祥.新概念51單片機C語言教程[M].北京:電子工業出版社,2009.
[5] 蔡志明.精通Qt4編程[M].2版.北京:電子工業出版社,2011.
[6] 成浩,盧紫毅.Linux窗口程序設計——Qt4精彩實例分析[M].北京:清華大學出版社,2008.
[7] 皮德常.C++程序設計教程[M].北京:機械工業出版社,2009.
[8] 史嘉權.數據庫系統概論[M].北京:清華大學出版社,2006.
[9] 王文龍,耿直,喬江輝,等.壓力傳感器靜態校準方法改進[J].火箭推進,2011(3):80-84.WANG Wen-long,GENG Zhi,QIAO Jiang-hui,et al.Improvement of static calibration method for pressure sensors[J].Journal of Rocket Propulsion,2011(3):80-84.