阿占文 馮清香
(華中科技大學(xué)機械科學(xué)與工程學(xué)院1,湖北 武漢 430074;華中科技大學(xué)機械科學(xué)與工程學(xué)院2,湖北 武漢 430074)
在工業(yè)控制領(lǐng)域,數(shù)據(jù)采集卡是必不可少的硬件。位移、轉(zhuǎn)速、壓力、電流、電壓轉(zhuǎn)矩等信號一般通過傳感器轉(zhuǎn)化為電壓或電流輸出,由采集卡負(fù)責(zé)進(jìn)行A/D轉(zhuǎn)換并交由計算機處理。采集卡的核心芯片一般為單片機或數(shù)字信號處理器(digital signal processing,DSP),配上外圍元件實現(xiàn)數(shù)據(jù)采集[1-3]。本設(shè)計運用單片機的多任務(wù)操作方式,利用STC12C5A60S2單片機的定時器計數(shù)模式,實現(xiàn)了頻率采集。同時,采用可編程計數(shù)陣列模塊的PWM模式,實現(xiàn)了D/A輸出。最后采用自帶的A/D模塊和一個125 Ω的精密電阻,實現(xiàn)了電壓、電流采集,并由I/O口輸出開關(guān)量。
本文所設(shè)計的采集卡運用在HJD-DJ1型電機試驗臺上,需要完成以下任務(wù)。
①采集電流傳感器JLKT-7和電壓傳感器JLBV-16的信號,輸出分別為0~20 mA電流和0~5 V電壓。
②采集轉(zhuǎn)矩傳感器和轉(zhuǎn)速傳感器ORT-803的信號,輸出為(10±5)kHz(正反雙向測量值)。
③ D/A輸出0~5 V,控制磁粉加力器。
④開關(guān)量輸出控制變頻器通斷。
⑤串口通信,傳回采集數(shù)據(jù),與上位機通信。
多任務(wù)模式如圖1所示。
圖1 多任務(wù)模式示意圖Fig.1 Schematic diagram of the multi-tasking mode
單片機因主頻低、外設(shè)少等原因,在實際運用中必須進(jìn)行代碼優(yōu)化,同時要充分利用其外設(shè)進(jìn)行多任務(wù)模式操作[4-5]。首先對每個任務(wù)規(guī)定一個時間段,由定時器中斷刷新各個任務(wù)狀態(tài)標(biāo)志變量;然后在主函數(shù)中分別查詢每個任務(wù)的狀態(tài)標(biāo)志,若某一任務(wù)預(yù)設(shè)時間到,則執(zhí)行該任務(wù),否則查詢下一任務(wù)。這樣在實際的運行中便呈現(xiàn)出多任務(wù)并發(fā)執(zhí)行[6]。
在單片機程序中,將CPU合理地分配給每個任務(wù)是多任務(wù)操作模式的關(guān)鍵。系統(tǒng)的最小執(zhí)行時間段取決于各個任務(wù)執(zhí)行所需最小時間,以保證每個任務(wù)在時間段內(nèi)執(zhí)行完畢。對采集卡來說,如果設(shè)定時間段太小,則有些功能無法執(zhí)行完;如果太長,則降低了效率。因為最耗時的串口通信和A/D轉(zhuǎn)換已經(jīng)細(xì)分,綜合考慮各個任務(wù)的耗時,最小執(zhí)行時間段確定為5 ms,即定時器每5 ms中斷刷新計時變量,各個任務(wù)預(yù)設(shè)時間必須是5 ms的整數(shù)倍,且互相不可整除。另外,還要確定各個任務(wù)的外設(shè)資源分配情況。預(yù)設(shè)時間和外設(shè)分配如表1所示。
表1 各個任務(wù)預(yù)設(shè)時間表Tab.1 Preset time table of each task
本文設(shè)計的多功能采集卡由單片機最小系統(tǒng)、RC濾波網(wǎng)絡(luò)、D/A輸出的功率放大電路、用于測量電流的125 Ω精密電阻和各個引腳1 kΩ的限流電阻組成[2]。其中,功率放大電路由光耦實現(xiàn)。采集卡連線如圖2所示。
圖2 采集卡連線圖Fig.2 Wirings of the acquisition module
為避免在主函數(shù)中反復(fù)調(diào)用任務(wù)處理函數(shù),定義一個任務(wù)結(jié)構(gòu)體,這也是任務(wù)管理函數(shù)的核心。具體代碼如下。
根據(jù)表1中各個任務(wù)的預(yù)設(shè)時間,按照任務(wù)結(jié)構(gòu)體的運用程序流程圖編寫任務(wù)管理函數(shù)task_manager(),并在主定時器中直接調(diào)用。編寫的任務(wù)處理函數(shù)task_process()用來檢測每個任務(wù)的允許運行變量,并在允許的情況下執(zhí)行任務(wù)。任務(wù)處理函數(shù)流程圖如圖3所示。
圖3 任務(wù)處理函數(shù)流程圖Fig.3 Flowchart of task processing function
對于多任務(wù)操作,每個任務(wù)必須在規(guī)定的時間片完成,所以單個任務(wù)時間不可太長,否則會影響其他任務(wù),使整個程序效率降低。但在數(shù)據(jù)采集中有一些功能耗時比較長,如串口通信和A/D模塊。針對這種問題就要進(jìn)行任務(wù)細(xì)分,一般將一個長任務(wù)劃分為初始化、執(zhí)行、返回等部分,這樣就使得一個耗時比較長的任務(wù)變成多個短任務(wù),保證了多任務(wù)模式的運行。
上位計算機要求采集卡將所采集數(shù)據(jù)傳回時必須做出響應(yīng)。因為多功能采集卡所采集的數(shù)據(jù)較多,若通過串口將數(shù)據(jù)傳回,則受限于串口通信的波特率,難以在短時間內(nèi)完成任務(wù)。為此,通過利用一個巧妙的緩沖發(fā)送結(jié)構(gòu)進(jìn)行細(xì)分,從而解決該問題。具體代碼與下文A/D采集部分類似。
A/D采集部分也以同樣的方式進(jìn)行細(xì)分,具體代碼如下。
在多功能采集實現(xiàn)過程中,采用軟件方式代替外圍硬件來實現(xiàn)大部分功能,具體方案如下。
利用STC12C5A60S2單片機的定時器1作為串口模塊的波特率發(fā)生器,實現(xiàn)串口通信。定時器0則工作在計數(shù)模式,完成頻率采集功能。因為該型號單片機定時器只有兩個,還需要一個主定時器來實時刷新任務(wù)標(biāo)志變量,所以利用可編程計數(shù)陣列模塊組成16位軟定時器實現(xiàn)該功能。普通采集卡進(jìn)行D/A轉(zhuǎn)換時一般通過專用芯片完成,這樣就增加了外圍的元件,本設(shè)計再次利用單片機提供的可編程計數(shù)陣列,以PWM模式輸出PWM波形,通過改變占空比并配合一個簡單的RC低通濾波器實現(xiàn)D/A功能。采用自帶的A/D模塊和一個125 Ω的精密電阻,實現(xiàn)了電壓、電流采集。開關(guān)量可以用來控制變頻器的開關(guān)或LED燈的亮滅等,由I/O口輸出高低電平即可。下面具體討論D/A轉(zhuǎn)換和頻率采集功能的實現(xiàn)。
D/A輸出在工業(yè)現(xiàn)場應(yīng)用十分廣泛,比如電壓控制的變頻調(diào)速、磁粉加力器的力矩控制等。D/A轉(zhuǎn)換的實現(xiàn)方法有兩種:一種是外接專用芯片,另一種是采用軟件實現(xiàn)。本文采用第二種方法,即首先利用STC12C5A60S2單片機的可編程計數(shù)陣列模塊的PWM模式,輸出不同占空比的方波,然后通過低通RC濾波器和功率放大即可實現(xiàn)D/A轉(zhuǎn)換功能[8]。可編程計數(shù)陣列模塊的結(jié)構(gòu)如圖4所示。
圖4 可編程計數(shù)陣列模塊結(jié)構(gòu)圖Fig.4 Structural diagram of the programmable counting array module
PCA模塊輸出的占空與使用的捕獲寄存器[EPCnL,CCAPnL]有關(guān),當(dāng) CL的值小于[EPCnL,CCAPnL]時,輸出為低;反之,則輸出為高。當(dāng)CL溢出時,[EPCnH,CCAPnH]的內(nèi)容裝載到[EPCnL,CCAPnL],從而實現(xiàn)無干擾地更新PWM。
根據(jù)圖4所示結(jié)構(gòu),可編寫實現(xiàn)PWM的代碼如下。
輸出不同占空比的PWM波形后,還不能得到模擬電壓,此時可以由RC網(wǎng)絡(luò)組成低通濾波器,濾波器將消除PWM波形的大部分高頻成分。從時域角度看,RC電路被充電到一個與PWM波形高電平占整個周期百分比(占空比)成正比的電壓電平。為了能得到相對平滑的直流電壓電平,RC濾波器必須有相對低的截止頻率。但是如果RC常數(shù)太大,則RC電壓上升到平滑電平的時間就會過長,在兩者之間進(jìn)行折中,選擇合適的電阻電容值[7-8]。
頻率采集功能和D/A功能一樣,可以由專用芯片完成,本文使用定時器0的計數(shù)模式實現(xiàn)。由P3.4引腳輸入脈沖信號,定時器開始計數(shù);然后在主函數(shù)中用一個規(guī)定的時間間隔來查詢計數(shù)值,根據(jù)計數(shù)值和規(guī)定的時間間隔,可以換算得到當(dāng)前頻率。頻率采集函數(shù)部分代碼如下:
HJD-DJ1型電機試驗臺實際應(yīng)用表明,整個采集卡代碼數(shù)量減少了2/3,且流程清晰,維護(hù)性、可讀性明顯好于普通采集程序,并且降低了硬件成本。當(dāng)工作在極限的情況下,所有任務(wù)一起運行時,因為采集數(shù)據(jù)較多,串口通信稍有延遲,可見所設(shè)計的采集卡適用于大部分一般要求的場合。文獻(xiàn)[4]還用到了一種新的多任務(wù)模式,其任務(wù)切換效率更高,但對開發(fā)者要求較高。該采集卡現(xiàn)已應(yīng)用于HJD-DJ1型電機試驗臺。使用結(jié)果表明,該采集卡的使用使程序的可讀性和可維護(hù)性都有所提高。
[1]郭天祥.新概念51單片機C語言教程:入門、提高、開發(fā)、拓展全攻略[M].北京:電子工業(yè)出版社,2009.
[2]丁向榮.單片微機原理與接口技術(shù):基于STC15系列單片機[M].北京:電子工業(yè)出版社,2012.
[3]陳宏偉,黃永明,章國寶,等.單片機多任務(wù)的時間片方式實現(xiàn)[J].單片機與嵌入式系統(tǒng)應(yīng)用,2012,12(8):73-74.
[4]王輝堂,顏自勇,陳文薌,等.智能安防系統(tǒng)中單片機程序?qū)崿F(xiàn)多任務(wù)機制方法的應(yīng)用[J].低壓電器,2007(4):48-50.
[5]吳允平,蔡聲鎮(zhèn),樂仁昌,等.單片機程序的限時服務(wù)策略及設(shè)計[J].系統(tǒng)工程與電子技術(shù),2004,26(11):1672 -1674.
[6]徐華.51單片機多任務(wù)編程設(shè)計及應(yīng)用[J].軟件,2011,32(3):21-27.
[7]粟兵.基于DSP的數(shù)據(jù)采集卡的研究與設(shè)計[D].武漢:武漢理工大學(xué),2005:20-36.
[8]林錦棠.基于單片機構(gòu)成高精度PWM式12位D/A轉(zhuǎn)換器[J].大眾科技,2008(2):63-65.