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