江帆,孫立,尹華山
(南京航空航天大學(xué)理學(xué)院,江蘇南京211100)
應(yīng)用現(xiàn)代電子信息技術(shù)改進(jìn)傳統(tǒng)實(shí)驗(yàn),適應(yīng)大學(xué)專業(yè)物理實(shí)驗(yàn)課程創(chuàng)新發(fā)展的需求,研制具有全數(shù)字化、接口兼容性強(qiáng)、可實(shí)時測試監(jiān)控、實(shí)時數(shù)據(jù)處理與存儲、符合網(wǎng)絡(luò)化技術(shù)規(guī)范,經(jīng)過全面技術(shù)升級的新型實(shí)驗(yàn)工作平臺。不僅是通用性的實(shí)驗(yàn)平臺,適應(yīng)不同物理參數(shù)測試的需求;而且具備個性化特點(diǎn),適合特殊性物理參數(shù)測試需求。全篇以數(shù)字化壓力測量的實(shí)例作為個案來展開,具體描述硬件與軟件的設(shè)計與研制。
Qt作為系統(tǒng)開發(fā)的環(huán)境,具有不可替代的優(yōu)勢。Qt提供的C++應(yīng)用程序開發(fā)框架,可以輕松實(shí)現(xiàn)“一次編寫,隨處編譯”的跨平臺解決方案,編寫的應(yīng)用程序能完美運(yùn)行于從windows 98到windows 7,從Mac OSX到Linux,從Solaris,HP-UX到其他基于X11的眾多Unix平臺上。這讓編寫的應(yīng)用程序可以運(yùn)行在不同的系統(tǒng),方便移植[1]。Qt設(shè)計師是強(qiáng)大的跨平臺GUI布局和格式構(gòu)建器[2]。
傳感器將各種物理參數(shù)轉(zhuǎn)化為電信號,經(jīng)由分析儀的放大處理與采樣轉(zhuǎn)換成為數(shù)字信息,再經(jīng)過儀器的串口與上位機(jī)的通信傳輸,從而實(shí)現(xiàn)上位機(jī)對分析儀的實(shí)時有效控制以及對各種數(shù)據(jù)的計算處理。在這個過程中,分析儀擁有監(jiān)控、報警、顯示、閥值設(shè)定和人機(jī)交互等功能。上位機(jī)軟件擁有數(shù)據(jù)采集、糾錯、制表、畫圖、串口調(diào)試、打印和存儲等功能。在數(shù)據(jù)的傳輸過程中避免了人為造成的誤差,使測量更精確,操作更簡便和人性化。系統(tǒng)構(gòu)架圖如圖1所示。
圖1 系統(tǒng)架構(gòu)圖Fig.1 System construction chart
在大多數(shù)情況下,測試參數(shù)為非電量的物理參量,傳感器將其轉(zhuǎn)化成對應(yīng)的電壓或電流的參量,測量系統(tǒng)必須具有兼容性強(qiáng)、適應(yīng)性廣的前置電路。傳感器輸出的電信號與采樣電路輸入的電信號之間,電路參數(shù)匹配、電氣性能對接,在前置電路設(shè)計時需要做到3點(diǎn):
1)電流輸出型傳感器與電壓輸出型傳感器不同,用電子程控型多路選擇器完成對傳感器類型的智能識別與輸入切換;
2)電壓值是后續(xù)處理基礎(chǔ)性變量,必須把電流輸出型傳感器輸出的電流變量轉(zhuǎn)變?yōu)殡妷鹤兞浚?/p>
3)各種類型傳感器輸出變量存在很大差異,為了符合后續(xù)采樣電路正常工作時電壓值的需要,設(shè)計一個程序控制型的放大器來完成微小信號的放大或者是大信號的衰減處理。
設(shè)計一個智能型前置電路來完成,具備自動識別、多路切換與程控放大的特點(diǎn),其工作原理如圖2所示。
圖2 智能型前置電路Fig.2 Intelligent front circuit
為保持系統(tǒng)的高精度性能,設(shè)計采用16位的高精度低頻模數(shù)轉(zhuǎn)換器AD7705。它利用Σ-Δ轉(zhuǎn)換技術(shù)[3]實(shí)現(xiàn)了16位無丟失代碼性能。選定的輸入信號被送到一個基于模擬調(diào)制器的增益可編程專用前端。片內(nèi)數(shù)字濾波器處理調(diào)理。SPI接口串行輸出,節(jié)省了I/O口的使用。具有差分輸入端口,對模擬輸入具有緩沖功能,0.003%非線性可以滿足系統(tǒng)的要求。
選擇STC公司生產(chǎn)的STC89C52型單片機(jī),具有低功耗、高性能CMOS8位微控制器,40腳雙排直列式。最高運(yùn)作頻率35 MHz,6T/12T可選。8 K在系統(tǒng)可編程Flash存儲器。使用經(jīng)典的MCS-51內(nèi)核,但做了很多的改進(jìn)使得芯片具有傳統(tǒng)51單片機(jī)不具備的功能。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。具有以下標(biāo)準(zhǔn)功能:8k字節(jié)Flash,512字節(jié)RAM,32位I/O口線,看門狗定時器,內(nèi)置4KB EEPROM,MAX810復(fù)位電路,3個16位定時器/計數(shù)器,4個外部中斷,一個7向量4級中斷結(jié)構(gòu)(兼容傳統(tǒng)51的5向量2級中斷結(jié)構(gòu)),全雙工串行口。另外,具有可降至0 Hz靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工作。在掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個中斷或硬件復(fù)位為止。
單片機(jī)的控制與計算處理程序內(nèi)容很多,舉例說明其中的設(shè)計之一:
直接顯示A/D轉(zhuǎn)換的數(shù)字信號[4]的話,可以觀察到顯示數(shù)字的不停跳變。為了保持穩(wěn)定,不僅在A/D芯片中加了模擬濾波調(diào)理,防止外界的干擾信號影響。同時在軟件的算法上采用多次采樣求平均值的處理算法,可保持0.001 MPa位穩(wěn)定,比實(shí)驗(yàn)室現(xiàn)有的儀器提高了將近10倍。
static uchar n=0;
adc[n++]=ad;
if(n==16)//數(shù)字濾波法運(yùn)算取平均值
{
uchar i;
unsigned long int sum=0;
n=0;
for(i=0;i<16;i++)
{
sum+=adc[i];
}
ad=sum>>4;
transadc(ad);
}
除了以上硬件電路外,系統(tǒng)需要相應(yīng)的輔助配套電路,用以完成特定的控制功能,如I/O擴(kuò)展接口電路、液晶顯示驅(qū)動電路、串口通訊電路、各類時鐘電路及各種電源電路等。
1)通用功能:啟動程序、登陸界面、使用提示、錯誤提示、菜單欄、工具欄等。
2)實(shí)驗(yàn)功能:學(xué)生信息數(shù)據(jù)庫,網(wǎng)絡(luò)上傳,實(shí)驗(yàn)原理預(yù)習(xí),選擇負(fù)載模式(以數(shù)字化壓力測量0.6Mp或6Mp為例),數(shù)據(jù)分析、顯示和存儲等。
3)分析儀的控制功能:串口通信,數(shù)據(jù)采集,數(shù)據(jù)糾錯等。
在Qt Creator中新建工程,在Qt C++項(xiàng)目中的Gui應(yīng)用為用戶提供了各種界面基類。Qt Creator提供的默認(rèn)基類只有QMainWindow、QWidget和QDialog這3種。QMainWindow是帶有菜單欄和工具欄的主窗口類,QDialog是各種對話框的基類,全都繼承自QWidget[2]。其實(shí)所有的窗口部件都繼承自QWidget。本軟件選擇QMainWindow。
Qt Creator的設(shè)計模式即Qt Designer,使用了與應(yīng)用程序中將要使用的相同部件,因此可以使用屏幕上的格式快速設(shè)計、創(chuàng)建部件以及對話框。具有使用拖放功能快速設(shè)計用戶界面,定制部件或從標(biāo)準(zhǔn)部件庫中選擇部件,以本地外觀快速預(yù)覽格式,通過界面原型生成C++或Java代碼等優(yōu)勢[2]。對于界面設(shè)計,也可以使用純代碼編寫程序。拖放一個QPushButton部件的操作和QPushButton pushbutton(this);語句效果相同。兩種方法綜合應(yīng)用可以使界面設(shè)計更靈活更有創(chuàng)意。
界面外觀可以通過QStyle(Qt風(fēng)格)、QPalette(調(diào)色板)和Qt Style Sheets(Qt樣式表)[2]進(jìn)行風(fēng)格、色彩、透明度和背景等的美化。整體外觀的布局則通過布局管理器來美化。布局管理可以使部件整齊排列并適應(yīng)界面大小而變化。Qt中主要提供QLayout類及其子類作為布局管理器,通常使用的有基本布局管理器QBoxLayout和柵格布局管理器QGridLayout。
Qt支持現(xiàn)在使用的大多數(shù)語言,所有的輸入部件和文本繪制方式對Qt支持的所有語言都提供了內(nèi)置的支持。同時,Qt對把應(yīng)用程序翻譯為本地語言也提供了很好的支持[2]。在本軟件中通過對所有用戶可見的文本使用QString,對動態(tài)文本使用QString::arg()函數(shù),對所有文字文本使用tr()函數(shù)來實(shí)現(xiàn)國際化。主程序整體界面效果如圖3所示。
圖3 主程序界面Fig.3 Main programinterface
圖4 數(shù)據(jù)處理結(jié)果Fig.4 Data processing result
數(shù)據(jù)的處理分為同步顯示、擬合圖像、制表、存儲數(shù)據(jù)和打印數(shù)據(jù)。制表是在QMainWindow的構(gòu)造函數(shù)中初始化;同步顯示是在采集和計算數(shù)據(jù)的同時在數(shù)據(jù)區(qū)和表格中顯示;擬合和繪圖有專門的函數(shù)在后臺進(jìn)行,這個函數(shù)還包含最小二乘法、計算線性度、計算擬合方程和顯示坐標(biāo)圖的代碼。利用Qt中繪圖控件QPainter[2,5-6],同時利用坐標(biāo)變換translate方法重新定義原點(diǎn),把數(shù)據(jù)通過數(shù)學(xué)計算的方法轉(zhuǎn)化為相對應(yīng)的點(diǎn)繪制出來,這樣就能擬合出曲線,最后將實(shí)驗(yàn)結(jié)果存儲為pdf格式圖片,如圖4所示。
上位機(jī)軟件功能的實(shí)現(xiàn)依靠3種機(jī)制:C++面向?qū)ο缶幊虣C(jī)制,Qt的信號與槽機(jī)制,Qt的事件機(jī)制。
Qt編程是由C++體系實(shí)現(xiàn)[1-2,5-6],面向?qū)ο骩7]的編程方法和Qt豐富的類庫,使用戶能夠更簡單靈活的實(shí)現(xiàn)各種功能。在Qt Creator的幫助模式下,可以查詢所有類的信息。應(yīng)用這種機(jī)制,可以使程序結(jié)構(gòu)靈活,層次感強(qiáng)。軟件架構(gòu)如圖5所示。
Spscreen.cpp為啟動界面,包含軟件的基本信息。Login.cpp是登陸界面,包含學(xué)生信息的填寫,其下屬Experiment.cpp提供實(shí)驗(yàn)原理;另一個下屬Lprompt.cpp是提示學(xué)生填寫錯誤信息的對話框。Mainwindow.cpp是主程序界面,包含各種部件,其下屬Accessport.cpp、Filesave.cpp、Fileprintout.cpp分別提供串口調(diào)試、文件保存、文件打印的功能;另一個下屬Q(mào)extserialbase.cpp為第三方編寫的串口通信的底層驅(qū)動文件。
信號和槽用于兩個對象之間的通信,信號和槽機(jī)制是Qt的核心特征,也是Qt不同于其他開發(fā)框架的最突出特征[2]。比如,點(diǎn)擊按鈕“關(guān)閉窗口”就會發(fā)出一個信號,對應(yīng)的槽函數(shù)close()會被調(diào)用以響應(yīng)這個信號。這種機(jī)制使部件與部件,部件與后臺,部件與其他窗口,窗口與窗口之間可以進(jìn)行交流。
在Qt中,事件作為一個對象,繼承自QEvent類,常見的有鍵盤事件QKeyEvent、鼠標(biāo)事件QMouseEvent和定時器事件QTimerEvent等[2,5-6]。比如,對數(shù)據(jù)進(jìn)行指定刪除,在數(shù)據(jù)區(qū)設(shè)定點(diǎn)擊鼠標(biāo)左鍵事件,使點(diǎn)擊左鍵時顯示標(biāo)簽變紅,后臺的相應(yīng)變量發(fā)生變化。
上位機(jī)和分析儀采用RS232/DB-9串口通信。軟件中控制串口通信的類QextserialPort繼承自Qextserialbase類,適用于各種操作系統(tǒng)。
讀取數(shù)據(jù)時采用查詢模式,上位機(jī)軟件向分析儀發(fā)出信號,如果數(shù)據(jù)準(zhǔn)備好則直接讀取,須注意的是這種讀取方式需要設(shè)定定時器進(jìn)行延時讀取。
系統(tǒng)的軟硬件都可以進(jìn)行升級。比如傳感器、單片機(jī)的算法、串口通信改為USB接口,實(shí)驗(yàn)原理升級為動畫演示、增加數(shù)據(jù)庫和網(wǎng)絡(luò)功能等。
數(shù)據(jù)庫與網(wǎng)絡(luò)功能,對于網(wǎng)絡(luò)規(guī)范化和實(shí)驗(yàn)平臺管理具有重要意義。Qt的QIODevice、QTcpServer、QIOStream等類可以實(shí)現(xiàn)網(wǎng)絡(luò)上傳功能;Qt中的QtSql模塊提供了對數(shù)據(jù)庫的支持[2],不需要SQL[8]知識就可以瀏覽和編輯數(shù)據(jù)庫。
系統(tǒng)具有通用特性,采用的智能接口電路,有很強(qiáng)的兼容性,可適應(yīng)不同種類的傳感器[9]。在一個實(shí)驗(yàn)平臺上,如:溫度、濕度、速度與亮度等物理參量都可以進(jìn)行數(shù)字化的處理與分析。以壓力測試為實(shí)例介紹的系統(tǒng)設(shè)計和實(shí)現(xiàn)的方法,對于其他實(shí)驗(yàn)也適用。Qt強(qiáng)大的GUI設(shè)計功能,可以使界面根據(jù)不同實(shí)驗(yàn)靈活調(diào)整。在Qt環(huán)境下開發(fā)的軟件具有跨平臺性,且人機(jī)界面友好,操作簡便,避免了傳統(tǒng)試驗(yàn)方法繁瑣的記錄和處理的過程,提高了實(shí)驗(yàn)的精度和學(xué)習(xí)的效率。
[1] Blanchette J,Summerfield M.C++GUI Qt4編程[M].2版.北京:電子工業(yè)出版社,2008.
[2] 霍亞飛.Qt Creator快速入門[M].北京:北京航空航天大學(xué)出版社,2012.
[3] 高光天,徐振英.數(shù)模轉(zhuǎn)換器應(yīng)用技術(shù)[M].北京:科學(xué)出版社,2000.
[4] 郭天祥.新概念51單片機(jī)C語言教程[M].北京:電子工業(yè)出版社,2009.
[5] 蔡志明.精通Qt4編程[M].2版.北京:電子工業(yè)出版社,2011.
[6] 成浩,盧紫毅.Linux窗口程序設(shè)計——Qt4精彩實(shí)例分析[M].北京:清華大學(xué)出版社,2008.
[7] 皮德常.C++程序設(shè)計教程[M].北京:機(jī)械工業(yè)出版社,2009.
[8] 史嘉權(quán).數(shù)據(jù)庫系統(tǒng)概論[M].北京:清華大學(xué)出版社,2006.
[9] 王文龍,耿直,喬江輝,等.壓力傳感器靜態(tài)校準(zhǔn)方法改進(jìn)[J].火箭推進(jìn),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.