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