李 楠,宋曉梅,鞏學芳
(西安工程大學 電子信息學院,陜西 西安 710048)
工業(yè)生產(chǎn)和科研研究等行業(yè)中,常需要利用工控機或PC機對溫度、電壓、壓力、電流等各種數(shù)據(jù)進行采集處理.數(shù)據(jù)采集系統(tǒng)的任務是對生產(chǎn)現(xiàn)場各種參數(shù)進行采集,送入計算機,由計算機根據(jù)需要進行相應的計算和處理,得到所需數(shù)據(jù),同時根據(jù)需求對數(shù)據(jù)進行處理[1].現(xiàn)存的多數(shù)數(shù)據(jù)采集系統(tǒng)通常只有一種通信傳輸端口[2-6],如文獻[2]中的系統(tǒng)采用CAN總線端口,文獻[3-4]中的系統(tǒng)采用USB端口,文獻[5-6]中的系統(tǒng)采用以太網(wǎng)端口.由于上述系統(tǒng)缺乏對多種端口與不同工作模式的支持,從而限制了其更廣泛地應用.另外,考慮到USB和以太網(wǎng)通信端口是工業(yè)應用中與PC機連接常用的端口,為此,本文提出了一種基于雙C8051F340處理器架構可支持USB和以太網(wǎng)端口的數(shù)據(jù)采集器.該數(shù)據(jù)采集器特點是支持多種工作模式,同時可將采集數(shù)據(jù)傳輸給PC機GUI軟件進行直觀顯示.
提出的數(shù)據(jù)采集器可將采集的數(shù)據(jù)通過USB和以太網(wǎng)端口傳輸給PC機GUI軟件進行直觀顯示,并具有多種工作模式.考慮到不同通信端口在啟動時間、緩存大小、傳輸速率等方面有較大差異,為了在不同工作模式下既實現(xiàn)最大采樣頻率與傳輸速率,又防止數(shù)據(jù)丟失,設計了如下3種工作模式:(1)USB傳輸模式,A/D采樣頻率為200kHz,一幀數(shù)據(jù)長度為1 500字節(jié);(2)以太網(wǎng)傳輸模式,A/D采樣頻率為75kHz, 一幀數(shù)據(jù)長度為320字節(jié);(3)USB和以太網(wǎng)混合傳輸模式,A/D采樣頻率為70kHz, 一幀數(shù)據(jù)長度為320字節(jié).
數(shù)據(jù)采集器的原理框圖如圖1所示,包括PC機GUI軟件模塊和數(shù)據(jù)采集、傳輸模塊.采用LabVIEW編寫的GUI軟件可通過USB和以太網(wǎng)端口獲取采集數(shù)據(jù)并直觀顯示;數(shù)據(jù)采集與傳輸模塊實現(xiàn)數(shù)據(jù)采集、控制和傳輸,包括USB傳輸子模塊和以太網(wǎng)傳輸子模塊,且兩個子模塊之間采用SPI總線進行互聯(lián)通信;USB傳輸子模塊包括信號的采集、工作模式選擇、數(shù)據(jù)USB傳輸以及數(shù)據(jù)SPI發(fā)送,以太網(wǎng)傳輸子模塊實現(xiàn)數(shù)據(jù)采樣,帶鎖定按鍵1、2實現(xiàn)工作模式選擇,模式控制方式如下:若鍵1按下,為USB傳輸模式,采集數(shù)據(jù)由USB端口直接經(jīng)PC機USB傳給GUI軟件;若鍵2按下,為以太網(wǎng)傳輸模式,采集數(shù)據(jù)采用SPI通信傳給以太網(wǎng)子模塊,C8051F340(2)通過并口控制以太網(wǎng)控制器CP2200,經(jīng)RJ45集成以太網(wǎng)接口HR911175A傳給PC機GUI軟件;若鍵1,2均按下,則為USB和以太網(wǎng)混合傳輸模式.
圖1 數(shù)據(jù)采集器原理框圖
數(shù)據(jù)采集器硬件主要涉及數(shù)據(jù)采集與傳輸模塊,該模塊又可細分為C8051F340單片機最小系統(tǒng)子模塊、USB傳輸子模塊、以太網(wǎng)傳輸子模塊、SPI通信子模塊,考慮到C8051F340最小系統(tǒng)參考文獻較多,文中不再贅述,下面主要給出其他子模塊的硬件連接關系.如圖2所示,USB傳輸子模塊中經(jīng)調(diào)理電路處理過的信號由C8051F340(1)的P2.0引腳輸入,利用片上A/D進行采樣,P0.5、P0.7引腳接按鍵,鍵1、鍵2分別對應USB傳輸和以太網(wǎng)傳輸選擇鍵.USB為C8051F340(1)和C8051F340(2)提供5V電壓,均經(jīng)各自REGIN引腳進入片上電壓調(diào)節(jié)器生成工作所需的3.3V電壓.以太網(wǎng)傳輸子模塊中C8051F340(2)包括P3、P4在內(nèi)的一些I/O引腳與CP2200對應引腳相連,它們之間是并行通信,CP2200其他引腳如TX-、TX+等與HR911175A對應引腳相連.兩子模塊之間采用SPI通信,采用四線單主機方式,C8051F340(1)(SPI主機)上P0.0~P0.3分別與C8051F340(2)(SPI從機)上P0.0~P0.2,P0.4相連.
圖2 數(shù)據(jù)采集器主要器件硬件連接關系
數(shù)據(jù)采集器軟件設計包括單片機程序和PC機GUI軟件程序2部分.其中,單片機程序?qū)崿F(xiàn)工作模式選擇、SPI通信、數(shù)據(jù)采集并通過USB或以太網(wǎng)端口向GUI軟件傳輸數(shù)據(jù);GUI軟件從USB和以太網(wǎng)端口獲取采集數(shù)據(jù)并進行圖形化顯示.
單片機程序設計包括C8051F340(1)程序和C8051F340(2)程序2部分.其中,C8051F340(1)程序需實現(xiàn)工作模式選擇、數(shù)據(jù)采集、數(shù)據(jù)SPI發(fā)送及USB傳輸;C8051F340(2)需通過SPI從C8051F340(1)獲取采集數(shù)據(jù)并實現(xiàn)以太網(wǎng)傳輸.
圖3 C8051F340(1)主程流程圖
3.1.1 C8051F340(1)程序設計 C8051F340(1)程序主要包括A/D采樣程序、SPI主機程序、USB傳輸程序3部分,其主流程圖如圖3所示.C8051F340上電復位進行初始化設置,包括USB和單片機初始化,單片機初始化實現(xiàn)對晶振,I/O、定時器、內(nèi)部中斷、A/D和SPI初始化.然后,掃描鍵1,2的值確定工作模式,若分別為1,0,則為USB工作模式,將采集的一幀數(shù)據(jù)經(jīng)SPI端口傳給PC機;若分別為0,1,則為以太網(wǎng)工作模式,通過SPI通信方式將一幀數(shù)據(jù)發(fā)送給以太網(wǎng)傳輸子模塊,由其與PC機進行以太網(wǎng)傳輸;若分別為1,1,則表示選擇USB和以太網(wǎng)混合傳輸模式.
(1) A/D采樣程序設計.設置A/D的參考電壓為VDD(3.3V),采用8位單端采樣,模擬輸入為P2.0引腳,由定時器2確定A/D采樣頻率(200kHz、75kHz、70kHz).每完成一次數(shù)據(jù)采樣,觸發(fā)A/D中斷,將采樣數(shù)據(jù)存儲到片上RAM中設置的存儲區(qū),當存儲區(qū)采集數(shù)據(jù)長度為一幀(1 500、320、320字節(jié))時,根據(jù)需要將該幀數(shù)據(jù)通過相應方式向外傳輸.另外,為了實現(xiàn)不間斷采樣,采用“乒乓”制實現(xiàn)兩存儲區(qū)交替完成數(shù)據(jù)采集和傳輸?shù)娜蝿?
(2) SPI主機程序設計.SPI采用四線單主機連接SPI0工作方式,主機只發(fā)送,從機只接收,這種狀態(tài)下從器件接收數(shù)據(jù)的最大傳輸速率為系統(tǒng)時鐘頻率(48MHz)的1/4.經(jīng)驗證,本設計中8M為最大傳輸速率,下面為SPI主機向從機寫數(shù)據(jù)函數(shù):
void SPI-Write(uchar dat)
{
while(TXBMT==0);//等待發(fā)送緩沖存器為空
SPI0DAT=dat;//向數(shù)據(jù)寄存器寫數(shù)據(jù)
while(SPIF==0);//等待SPI寫完成
SPIF=0;//清除完成中斷標志位
}
(3) USB傳輸程序設計.在設計USB傳輸程序時,直接調(diào)用Silicon Labs公司為C8051F340的USB功能開發(fā)的API函數(shù),如USB-Suspend()、Block-Write()等,可使USB通信更易于實現(xiàn).USB通信基本流程為:調(diào)用USB-Clock-Start(),初始化USB總線時鐘,調(diào)用USB-Init()使能USB總線,調(diào)用USB-Int-Enable()使能API中斷,調(diào)用Block-Write()向PC機GUI軟件寫采樣數(shù)據(jù),完成通信后,調(diào)用USB-Suspend()掛起USB中斷.
3.1.2 C8051F340(2)程序設計 C8051F340(2)程序主要包括以太網(wǎng)傳輸程序、SPI從機程序,其主流程為單片主程序完成以太網(wǎng)傳輸?shù)某跏蓟O置,包括單片機初始化和以太網(wǎng)芯片初始化.建立網(wǎng)絡連接后,通過SPI口接收從USB傳輸子模塊傳來的一幀數(shù)據(jù),該幀數(shù)據(jù)接收完后,通過以太網(wǎng)接口將該幀數(shù)據(jù)傳輸給PC機.
(1) 以太網(wǎng)傳輸程序設計.在設計以太網(wǎng)傳輸程序時,考慮到UDP協(xié)議傳輸速度快,不必在每次傳輸數(shù)據(jù)時建立連接,因此采用UDP通信.另外,直接調(diào)用Silicon Labs公司為以太網(wǎng)控制芯片CP2200開發(fā)的TCP/IP庫函數(shù),使UDP通信程序的設計簡單方便.其基本流程為:調(diào)用mn-init()完成UDP協(xié)議棧初始化,調(diào)用establish-network-connection()建立網(wǎng)絡連接,調(diào)用mn-open()打開一個數(shù)據(jù)幀包,調(diào)用mn-send()發(fā)送一個數(shù)據(jù)幀包,調(diào)用mn-abort()關閉網(wǎng)絡連接.
(2) SPI從機程序設計.SPI從機接收從主機傳來的采樣數(shù)據(jù),下面是SPI從機從主機讀數(shù)據(jù)函數(shù):
uchar SPI-Read(void)
{
uchar dat;
while(SPI0CFG & 0x01);//等待接收到數(shù)據(jù)
dat=SPI0DAT;//讀數(shù)據(jù)寄存器接收到新數(shù)據(jù)
while(SPIF==0);//等待SPI完成數(shù)據(jù)接收
SPIF=0;//清除傳輸完成中斷標志位
return(dat);//從機返回一個隨機數(shù)據(jù)
}
此外,有兩點需要說明:第一,同一信號多次采樣值不可能完全相同,所以只由C8051F340(1)上A/D進行采樣,然后根據(jù)需要將采集數(shù)據(jù)傳給PC機或以太網(wǎng)子模塊,保證任何傳輸模式中數(shù)據(jù)的一致性;第二,C8051F340片上USB傳輸速率可達12Mb/s,只進行USB傳輸時,設A/D采樣速率為最大值200ksps;當進行以太網(wǎng)傳輸時,考慮到A/D采樣、SPI通信、以太網(wǎng)傳輸三者所用時間影響到采樣數(shù)據(jù)的準確傳輸,所以對各自使用時間進行測試,具體測試方法如下:使用C8051F340(1)上P1.0口產(chǎn)生方波方式測得通過SPI通信發(fā)送一幀(320字節(jié))數(shù)據(jù)所用時間T(spi)=0.66ms,測試代碼為do{P10=1;SPI-Wdata();P10=0; SPI-Wdata();}while(1);同理,使用C8051F340(2)上P14口產(chǎn)生方波,測得通過以太網(wǎng)發(fā)送一幀數(shù)據(jù)所用時間T(udp)=3.3ms,測試代碼為do{P14=~P14;status2=mn-send(socket-no2,send-data-buff1,SEND-DATA-BUFF-LEN);P14=~P14;status2=mn-send(socket-no2, send-data-buff2,SEND-DATA-BUFF-LEN);}while(1),此時設AD采樣速率為75ksps,則采樣時間T(ad)=4.27ms,此時 T(spi)+T(udp)< T(ad),滿足系統(tǒng)正常工作需求.
LabVIEW編寫的PC機GUI軟件可將采集數(shù)據(jù)以圖形方式直觀顯示,包括USB傳輸子模塊和以太網(wǎng)傳輸子模塊2部分.LabVIEW開發(fā)程序分為前面板和程序面板兩部分,前面板是圖形化人機界面,主要將采集數(shù)據(jù)以圖形方式顯示,可直接獲得數(shù)據(jù)幅值和頻率信息;程序面板完成邏輯功能,主要實現(xiàn)PC機與C8051F340(1)的USB通信以及和C8051F340(2)的以太網(wǎng)通信功能.由于前面板較簡單,故文中只對程序面板進行說明.
USB傳輸子模塊程序面板主要完成GUI軟件和C8051F340(1)之間USB通信,為了方便程序的編寫,直接調(diào)用Silicon LabS公司提供的USBxpress套件中USB主機API函數(shù)[7].其基本流程為:調(diào)用SI-GetNumDevices()獲取輸入USB器件相關信息,SI-SetTimerouts()設置USB總線讀延遲,SI-Open()打開USB器件,SI-Read()讀USB器件采集數(shù)據(jù),SI-close()關閉USB器件,完成整個通信過程.
以太網(wǎng)傳輸子模塊軟件程序面板主要完成GUI軟件和C8051F340(2)以太網(wǎng)通信.為了提高編程效率,直接調(diào)用LabVIEW軟件中UDP通信包內(nèi)的子VI.其基本流程為:調(diào)用UDP OPEN打開UDP端口,調(diào)用UDP Read從端口讀取數(shù)據(jù),調(diào)用UDP Close關閉UDP端口,若通信過程中出現(xiàn)錯誤,則General Error Handler給出錯誤警告.
為了驗證本文提出的數(shù)據(jù)采集器的可行性,設計了2個實驗,實驗一用于驗證USB端口傳輸,實驗二用于驗證以太網(wǎng)端口傳輸.信號源產(chǎn)生的信號經(jīng)調(diào)理電路處理后,由C8051F340(1)上P2.0引腳輸入,根據(jù)所需傳輸方式按下相應按鍵,完成系統(tǒng)連接及操作過程.
輸入峰峰值為3.3V,頻率為15kHz的正弦信號,其實驗結果如圖4(a),因為A/D參考電壓為3.3V,采用8位采樣,采樣幅值結果應為255滿格,但因參考電壓存在一定誤差,連接線路存在一定衰減,所以采樣得到的結果為252格(3.26V),由頻域波形圖可直觀得到其ω/2π為0.075,Ω=2πf(其中ω為數(shù)字域頻率,Ω為模擬角頻率,T為采樣時間間隔,f為輸入信號頻率),計算得f為15kHz,與實際輸入相符.
輸入峰峰值為3.3V,頻率為6kHz的正弦信號,其實驗結果如圖4(b)所示,采樣幅值結果為252格,頻域波形圖中ω/2π值為0.08.同理,經(jīng)計算得采樣信號幅值和頻率分別為3.26V和6kHz,可判斷采樣結果和實際輸入相符合.因此,實驗證明本設計方案具有可行性.
圖4 不同實驗GUI前面板實驗結果圖
本文提出了一種支持USB和以太網(wǎng)端口的數(shù)據(jù)采集器,該采集器采用雙C8051F340架構,實現(xiàn)2種傳輸方式及3種工作模式,3種工作模式切換可通過按鍵選擇實現(xiàn),可方便應用于更多場合;采用PC機LabVIEW編寫的GUI軟件方便采集數(shù)據(jù)直觀顯示,實驗表明本文提出的設計方法合理可行且適用于15kHz以下低頻信號.
參考文獻:
[1] 孫偉超,尹德強,汪定國,等.基于C8051F040的環(huán)境數(shù)據(jù)采集系統(tǒng)設計[J].電子測量技術,2011,34(10):91-95.
[2] 馬訓鳴,林曉煥.CAN總線在多通道電液力協(xié)調(diào)加載系統(tǒng)中的應用[J].西安工程大學學報,2009,23(1):59-62.
[3] 袁寶紅,付奎,張德祥.基于FPGA和LabVIEW的USB數(shù)據(jù)采集與傳輸系統(tǒng)[J].儀表技術與傳感器,2013(9):24-27.
[4] 張青春.基于LabVIEW和USB接口數(shù)據(jù)采集器的設計[J].儀表技術與傳感器,2012(12):32-34.
[5] 王長清,張素娟,蔣景紅.基于以太網(wǎng)幀的嵌入式數(shù)據(jù)傳輸方案及實現(xiàn)[J].計算機工程與設計,2011,32(6):1952-1956.
[6] 朱磊,薛謙,石教雄.基于LabVIEW的以太網(wǎng)接口數(shù)據(jù)采集器設計[J].計算機測量與控制,2009,17(4):788-790.
[7] 朱磊,劉東.C8051F340與LabView基于API的USB通信[J].單片機與嵌入式系統(tǒng)應用,2007,11(1): 35-37.