李 楠,宋曉梅,鞏學芳
(西安工程大學 電子信息學院,陜西 西安 710048)
工業生產和科研研究等行業中,常需要利用工控機或PC機對溫度、電壓、壓力、電流等各種數據進行采集處理.數據采集系統的任務是對生產現場各種參數進行采集,送入計算機,由計算機根據需要進行相應的計算和處理,得到所需數據,同時根據需求對數據進行處理[1].現存的多數數據采集系統通常只有一種通信傳輸端口[2-6],如文獻[2]中的系統采用CAN總線端口,文獻[3-4]中的系統采用USB端口,文獻[5-6]中的系統采用以太網端口.由于上述系統缺乏對多種端口與不同工作模式的支持,從而限制了其更廣泛地應用.另外,考慮到USB和以太網通信端口是工業應用中與PC機連接常用的端口,為此,本文提出了一種基于雙C8051F340處理器架構可支持USB和以太網端口的數據采集器.該數據采集器特點是支持多種工作模式,同時可將采集數據傳輸給PC機GUI軟件進行直觀顯示.
提出的數據采集器可將采集的數據通過USB和以太網端口傳輸給PC機GUI軟件進行直觀顯示,并具有多種工作模式.考慮到不同通信端口在啟動時間、緩存大小、傳輸速率等方面有較大差異,為了在不同工作模式下既實現最大采樣頻率與傳輸速率,又防止數據丟失,設計了如下3種工作模式:(1)USB傳輸模式,A/D采樣頻率為200kHz,一幀數據長度為1 500字節;(2)以太網傳輸模式,A/D采樣頻率為75kHz, 一幀數據長度為320字節;(3)USB和以太網混合傳輸模式,A/D采樣頻率為70kHz, 一幀數據長度為320字節.
數據采集器的原理框圖如圖1所示,包括PC機GUI軟件模塊和數據采集、傳輸模塊.采用LabVIEW編寫的GUI軟件可通過USB和以太網端口獲取采集數據并直觀顯示;數據采集與傳輸模塊實現數據采集、控制和傳輸,包括USB傳輸子模塊和以太網傳輸子模塊,且兩個子模塊之間采用SPI總線進行互聯通信;USB傳輸子模塊包括信號的采集、工作模式選擇、數據USB傳輸以及數據SPI發送,以太網傳輸子模塊實現數據采樣,帶鎖定按鍵1、2實現工作模式選擇,模式控制方式如下:若鍵1按下,為USB傳輸模式,采集數據由USB端口直接經PC機USB傳給GUI軟件;若鍵2按下,為以太網傳輸模式,采集數據采用SPI通信傳給以太網子模塊,C8051F340(2)通過并口控制以太網控制器CP2200,經RJ45集成以太網接口HR911175A傳給PC機GUI軟件;若鍵1,2均按下,則為USB和以太網混合傳輸模式.

圖1 數據采集器原理框圖
數據采集器硬件主要涉及數據采集與傳輸模塊,該模塊又可細分為C8051F340單片機最小系統子模塊、USB傳輸子模塊、以太網傳輸子模塊、SPI通信子模塊,考慮到C8051F340最小系統參考文獻較多,文中不再贅述,下面主要給出其他子模塊的硬件連接關系.如圖2所示,USB傳輸子模塊中經調理電路處理過的信號由C8051F340(1)的P2.0引腳輸入,利用片上A/D進行采樣,P0.5、P0.7引腳接按鍵,鍵1、鍵2分別對應USB傳輸和以太網傳輸選擇鍵.USB為C8051F340(1)和C8051F340(2)提供5V電壓,均經各自REGIN引腳進入片上電壓調節器生成工作所需的3.3V電壓.以太網傳輸子模塊中C8051F340(2)包括P3、P4在內的一些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 數據采集器主要器件硬件連接關系
數據采集器軟件設計包括單片機程序和PC機GUI軟件程序2部分.其中,單片機程序實現工作模式選擇、SPI通信、數據采集并通過USB或以太網端口向GUI軟件傳輸數據;GUI軟件從USB和以太網端口獲取采集數據并進行圖形化顯示.
單片機程序設計包括C8051F340(1)程序和C8051F340(2)程序2部分.其中,C8051F340(1)程序需實現工作模式選擇、數據采集、數據SPI發送及USB傳輸;C8051F340(2)需通過SPI從C8051F340(1)獲取采集數據并實現以太網傳輸.

圖3 C8051F340(1)主程流程圖
3.1.1 C8051F340(1)程序設計 C8051F340(1)程序主要包括A/D采樣程序、SPI主機程序、USB傳輸程序3部分,其主流程圖如圖3所示.C8051F340上電復位進行初始化設置,包括USB和單片機初始化,單片機初始化實現對晶振,I/O、定時器、內部中斷、A/D和SPI初始化.然后,掃描鍵1,2的值確定工作模式,若分別為1,0,則為USB工作模式,將采集的一幀數據經SPI端口傳給PC機;若分別為0,1,則為以太網工作模式,通過SPI通信方式將一幀數據發送給以太網傳輸子模塊,由其與PC機進行以太網傳輸;若分別為1,1,則表示選擇USB和以太網混合傳輸模式.
(1) A/D采樣程序設計.設置A/D的參考電壓為VDD(3.3V),采用8位單端采樣,模擬輸入為P2.0引腳,由定時器2確定A/D采樣頻率(200kHz、75kHz、70kHz).每完成一次數據采樣,觸發A/D中斷,將采樣數據存儲到片上RAM中設置的存儲區,當存儲區采集數據長度為一幀(1 500、320、320字節)時,根據需要將該幀數據通過相應方式向外傳輸.另外,為了實現不間斷采樣,采用“乒乓”制實現兩存儲區交替完成數據采集和傳輸的任務.
(2) SPI主機程序設計.SPI采用四線單主機連接SPI0工作方式,主機只發送,從機只接收,這種狀態下從器件接收數據的最大傳輸速率為系統時鐘頻率(48MHz)的1/4.經驗證,本設計中8M為最大傳輸速率,下面為SPI主機向從機寫數據函數:
void SPI-Write(uchar dat)
{
while(TXBMT==0);//等待發送緩沖存器為空
SPI0DAT=dat;//向數據寄存器寫數據
while(SPIF==0);//等待SPI寫完成
SPIF=0;//清除完成中斷標志位
}
(3) USB傳輸程序設計.在設計USB傳輸程序時,直接調用Silicon Labs公司為C8051F340的USB功能開發的API函數,如USB-Suspend()、Block-Write()等,可使USB通信更易于實現.USB通信基本流程為:調用USB-Clock-Start(),初始化USB總線時鐘,調用USB-Init()使能USB總線,調用USB-Int-Enable()使能API中斷,調用Block-Write()向PC機GUI軟件寫采樣數據,完成通信后,調用USB-Suspend()掛起USB中斷.
3.1.2 C8051F340(2)程序設計 C8051F340(2)程序主要包括以太網傳輸程序、SPI從機程序,其主流程為單片主程序完成以太網傳輸的初始化設置,包括單片機初始化和以太網芯片初始化.建立網絡連接后,通過SPI口接收從USB傳輸子模塊傳來的一幀數據,該幀數據接收完后,通過以太網接口將該幀數據傳輸給PC機.
(1) 以太網傳輸程序設計.在設計以太網傳輸程序時,考慮到UDP協議傳輸速度快,不必在每次傳輸數據時建立連接,因此采用UDP通信.另外,直接調用Silicon Labs公司為以太網控制芯片CP2200開發的TCP/IP庫函數,使UDP通信程序的設計簡單方便.其基本流程為:調用mn-init()完成UDP協議棧初始化,調用establish-network-connection()建立網絡連接,調用mn-open()打開一個數據幀包,調用mn-send()發送一個數據幀包,調用mn-abort()關閉網絡連接.
(2) SPI從機程序設計.SPI從機接收從主機傳來的采樣數據,下面是SPI從機從主機讀數據函數:
uchar SPI-Read(void)
{
uchar dat;
while(SPI0CFG & 0x01);//等待接收到數據
dat=SPI0DAT;//讀數據寄存器接收到新數據
while(SPIF==0);//等待SPI完成數據接收
SPIF=0;//清除傳輸完成中斷標志位
return(dat);//從機返回一個隨機數據
}
此外,有兩點需要說明:第一,同一信號多次采樣值不可能完全相同,所以只由C8051F340(1)上A/D進行采樣,然后根據需要將采集數據傳給PC機或以太網子模塊,保證任何傳輸模式中數據的一致性;第二,C8051F340片上USB傳輸速率可達12Mb/s,只進行USB傳輸時,設A/D采樣速率為最大值200ksps;當進行以太網傳輸時,考慮到A/D采樣、SPI通信、以太網傳輸三者所用時間影響到采樣數據的準確傳輸,所以對各自使用時間進行測試,具體測試方法如下:使用C8051F340(1)上P1.0口產生方波方式測得通過SPI通信發送一幀(320字節)數據所用時間T(spi)=0.66ms,測試代碼為do{P10=1;SPI-Wdata();P10=0; SPI-Wdata();}while(1);同理,使用C8051F340(2)上P14口產生方波,測得通過以太網發送一幀數據所用時間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),滿足系統正常工作需求.
LabVIEW編寫的PC機GUI軟件可將采集數據以圖形方式直觀顯示,包括USB傳輸子模塊和以太網傳輸子模塊2部分.LabVIEW開發程序分為前面板和程序面板兩部分,前面板是圖形化人機界面,主要將采集數據以圖形方式顯示,可直接獲得數據幅值和頻率信息;程序面板完成邏輯功能,主要實現PC機與C8051F340(1)的USB通信以及和C8051F340(2)的以太網通信功能.由于前面板較簡單,故文中只對程序面板進行說明.
USB傳輸子模塊程序面板主要完成GUI軟件和C8051F340(1)之間USB通信,為了方便程序的編寫,直接調用Silicon LabS公司提供的USBxpress套件中USB主機API函數[7].其基本流程為:調用SI-GetNumDevices()獲取輸入USB器件相關信息,SI-SetTimerouts()設置USB總線讀延遲,SI-Open()打開USB器件,SI-Read()讀USB器件采集數據,SI-close()關閉USB器件,完成整個通信過程.
以太網傳輸子模塊軟件程序面板主要完成GUI軟件和C8051F340(2)以太網通信.為了提高編程效率,直接調用LabVIEW軟件中UDP通信包內的子VI.其基本流程為:調用UDP OPEN打開UDP端口,調用UDP Read從端口讀取數據,調用UDP Close關閉UDP端口,若通信過程中出現錯誤,則General Error Handler給出錯誤警告.
為了驗證本文提出的數據采集器的可行性,設計了2個實驗,實驗一用于驗證USB端口傳輸,實驗二用于驗證以太網端口傳輸.信號源產生的信號經調理電路處理后,由C8051F340(1)上P2.0引腳輸入,根據所需傳輸方式按下相應按鍵,完成系統連接及操作過程.
輸入峰峰值為3.3V,頻率為15kHz的正弦信號,其實驗結果如圖4(a),因為A/D參考電壓為3.3V,采用8位采樣,采樣幅值結果應為255滿格,但因參考電壓存在一定誤差,連接線路存在一定衰減,所以采樣得到的結果為252格(3.26V),由頻域波形圖可直觀得到其ω/2π為0.075,Ω=2πf(其中ω為數字域頻率,Ω為模擬角頻率,T為采樣時間間隔,f為輸入信號頻率),計算得f為15kHz,與實際輸入相符.
輸入峰峰值為3.3V,頻率為6kHz的正弦信號,其實驗結果如圖4(b)所示,采樣幅值結果為252格,頻域波形圖中ω/2π值為0.08.同理,經計算得采樣信號幅值和頻率分別為3.26V和6kHz,可判斷采樣結果和實際輸入相符合.因此,實驗證明本設計方案具有可行性.

圖4 不同實驗GUI前面板實驗結果圖
本文提出了一種支持USB和以太網端口的數據采集器,該采集器采用雙C8051F340架構,實現2種傳輸方式及3種工作模式,3種工作模式切換可通過按鍵選擇實現,可方便應用于更多場合;采用PC機LabVIEW編寫的GUI軟件方便采集數據直觀顯示,實驗表明本文提出的設計方法合理可行且適用于15kHz以下低頻信號.
參考文獻:
[1] 孫偉超,尹德強,汪定國,等.基于C8051F040的環境數據采集系統設計[J].電子測量技術,2011,34(10):91-95.
[2] 馬訓鳴,林曉煥.CAN總線在多通道電液力協調加載系統中的應用[J].西安工程大學學報,2009,23(1):59-62.
[3] 袁寶紅,付奎,張德祥.基于FPGA和LabVIEW的USB數據采集與傳輸系統[J].儀表技術與傳感器,2013(9):24-27.
[4] 張青春.基于LabVIEW和USB接口數據采集器的設計[J].儀表技術與傳感器,2012(12):32-34.
[5] 王長清,張素娟,蔣景紅.基于以太網幀的嵌入式數據傳輸方案及實現[J].計算機工程與設計,2011,32(6):1952-1956.
[6] 朱磊,薛謙,石教雄.基于LabVIEW的以太網接口數據采集器設計[J].計算機測量與控制,2009,17(4):788-790.
[7] 朱磊,劉東.C8051F340與LabView基于API的USB通信[J].單片機與嵌入式系統應用,2007,11(1): 35-37.