田玉周,楚建安
(西安工程大學(xué),西安710048)
基于STM32的以太網(wǎng)數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)
田玉周,楚建安
(西安工程大學(xué),西安710048)
提出了一種以太網(wǎng)數(shù)據(jù)采集系統(tǒng),該系統(tǒng)核心處理器和數(shù)據(jù)采集器件為STM32F103ZE,以太網(wǎng)控制芯片是DM9000A。分別介紹了采集器的硬件和軟件設(shè)計(jì),詳細(xì)分析了模擬量數(shù)據(jù)采集、分析、傳送的各模塊軟硬件設(shè)計(jì),詳細(xì)介紹了UIP1.0協(xié)議棧的移植。此以太網(wǎng)數(shù)據(jù)采集器可以用于遠(yuǎn)程監(jiān)控系統(tǒng)的數(shù)據(jù)采集模塊。
數(shù)據(jù)采集;STM32芯片;DM9000A芯片;UIP1.0協(xié)議
隨著互聯(lián)網(wǎng)技術(shù)、以太網(wǎng)技術(shù)的發(fā)展,遠(yuǎn)程監(jiān)控越來越成為研究和應(yīng)用的熱點(diǎn)。作為遠(yuǎn)程監(jiān)控的重要組成部分,數(shù)據(jù)采集及傳送模塊也顯得尤為重要。遠(yuǎn)程監(jiān)控系統(tǒng)的發(fā)展對于數(shù)據(jù)采集的精確性、實(shí)時(shí)性和安全性都有了更高要求。
傳統(tǒng)數(shù)據(jù)采集由于儲存空間小和通訊接口的局限,存在精度不高、采集信息量小的缺點(diǎn),已經(jīng)不能滿足遠(yuǎn)程監(jiān)控系統(tǒng)中對數(shù)據(jù)的精度和信息量的需求。針對這種情況設(shè)計(jì)了基于STM32的以太網(wǎng)數(shù)據(jù)采集器,由于用到了以Cext-M3為核心的STM32芯片,該芯片有豐富的片上資源,大大節(jié)約了外圍硬件。同時(shí)芯片上16通道的12位ADC模數(shù)轉(zhuǎn)換模塊[1],也使數(shù)據(jù)采集的精確度顯著提高?;谝蕴W(wǎng)的數(shù)據(jù)傳輸協(xié)議的運(yùn)用,解決了通訊中通訊協(xié)議轉(zhuǎn)換的問題。實(shí)現(xiàn)了無縫信息集成。
本數(shù)據(jù)采集系統(tǒng)主要包含數(shù)據(jù)采集模塊、通訊模塊,整體設(shè)計(jì)如圖1所示。所要采集的模擬信號經(jīng)過前端模擬調(diào)理模塊的調(diào)節(jié),使之處于A/D轉(zhuǎn)換能夠轉(zhuǎn)換的電壓范圍內(nèi),再利用STTM32的片內(nèi)ADC模塊實(shí)現(xiàn)A/D轉(zhuǎn)換,采集過的數(shù)據(jù)經(jīng)STM32系統(tǒng)內(nèi)核處理后由DM9000A發(fā)送給上位機(jī)。
圖1 系統(tǒng)總體框圖
3.1 數(shù)據(jù)采集
數(shù)據(jù)采集模塊主要包括數(shù)據(jù)的調(diào)理和采集,其主要硬件是STM32?;贏RM Cortex-M3的STM32由意法半導(dǎo)體公司生產(chǎn),其數(shù)據(jù)總線寬度為32bit、最大時(shí)鐘頻率72MHz、具有256KB程序存儲器、64KB數(shù)據(jù)RAM、80個(gè)可編程輸入/輸出端、10個(gè)定時(shí)器、工作電源電壓2V~3.6V以及12位的ADC、FSMC。STM32數(shù)據(jù)采集有18個(gè)通道,可以測量16個(gè)外部模擬量和2個(gè)內(nèi)部模擬量,各通道的A/D轉(zhuǎn)換可以單次、連續(xù)、掃描或間斷模式執(zhí)行。ADC的結(jié)果可以左對齊或右對齊方式存儲在16位數(shù)據(jù)寄存器中。其結(jié)構(gòu)示意圖如圖2示。
圖2 A/D模塊示意圖
3.2 數(shù)據(jù)處理和傳輸
數(shù)據(jù)處理和傳輸模塊硬件主要由STM32微控制器和DA9000A以太網(wǎng)驅(qū)動(dòng)芯片構(gòu)成。DM9000A集成了10/100M物理層接口,內(nèi)部帶有16K字節(jié)SRAM作為數(shù)據(jù)收發(fā)的FIIO緩存,其中3k作為發(fā)送包緩沖區(qū),剩下的作為接收包緩沖區(qū)。支持8/16 bit兩種主機(jī)工作模式,本系統(tǒng)中用的是16bit工作模式。同時(shí)支持802.3以太網(wǎng)傳輸協(xié)議。
STM32與DM9000A連接電路如圖3所示。
圖3 硬件連接
DA9000A中只有兩個(gè)地址端口經(jīng)過處理器STM32直接訪問,一個(gè)是INDEX端口,另一個(gè)是DATA端口。而訪問哪個(gè)端口處理器是由CMD決定的。當(dāng)引腳CMD=0時(shí),處理器STM32訪問INDEX端口寄存器,當(dāng)引腳CMD=1時(shí),處理器STM32訪問DATA端口。INDEX端口的內(nèi)容為DATA端口的寄存器地址。在訪問任何寄存器之前,寄存器地址都必須保存在INDEX端口中。因此在讀寫DM9000A寄存器時(shí),先將其地址寫入INDEX,再通過DATA端口讀寫數(shù)據(jù)。
4.1 STM32數(shù)據(jù)采集程序
數(shù)據(jù)采集模塊程序的設(shè)計(jì)中,首先是對模擬量采集程序初始化。意法半導(dǎo)體公司提供了ADC模塊的固件庫函數(shù),通過對固件庫函數(shù)的調(diào)用,用戶可以輕松實(shí)現(xiàn)對ADC模塊的設(shè)置,本程序中,ADC的設(shè)置如下[2-3]:
1)對模擬量采集端口的設(shè)計(jì),我們設(shè)計(jì)為模擬輸入模式,GPIO_M(jìn)ode_AIN。
2)設(shè)置ADC工作模式為對立模式,ADC_M(jìn)ode_Independent。
3)使能ADC掃描。
4)設(shè)置ADC轉(zhuǎn)換工作為連續(xù)模式,ADC_ContinuousConvMode=ENABLE。
5)ADC觸發(fā)方式為軟件觸發(fā)
6)設(shè)置轉(zhuǎn)換所得到的數(shù)據(jù)右對齊
7)設(shè)置順序進(jìn)行規(guī)則轉(zhuǎn)換的ADC通道數(shù)目。
8)設(shè)置采樣順序和采樣時(shí)間。
通過以上設(shè)置,ADC模塊連續(xù)采樣并轉(zhuǎn)化各個(gè)模擬量,并且把所得數(shù)據(jù)儲存到16位數(shù)據(jù)儲存器中,等待其通過以太網(wǎng)向上位機(jī)傳輸。在這個(gè)過程中,UIP1.0提供的UIP_APPCALL(),將是我們對數(shù)據(jù)處理程序與UIP連接的一個(gè)重要函數(shù)。
4.2 DM9000A驅(qū)動(dòng)程序
作為底層驅(qū)動(dòng)程序,對DM9000A驅(qū)動(dòng)程序的編寫主要有三個(gè)方面:驅(qū)動(dòng)初始化、數(shù)據(jù)發(fā)送、數(shù)據(jù)接收。
4.2.1 驅(qū)動(dòng)器初始化
通過驅(qū)動(dòng)器初始化,可以啟動(dòng)以太網(wǎng)控制器DM9000A,使之處于數(shù)據(jù)收發(fā)狀態(tài),我們調(diào)用函數(shù)DM9000A_int(void):
完成以上設(shè)計(jì)后就可以使以太網(wǎng)控制器正常啟動(dòng),接收和發(fā)送數(shù)據(jù)包。
4.2.2 數(shù)據(jù)發(fā)送
DM9000A有16K的SRAM作為數(shù)據(jù)發(fā)送和接收緩沖區(qū)。其中3K作為發(fā)送緩沖區(qū),發(fā)送器的起始地址為0x00H,緩沖區(qū)可以保存index1、intex2兩個(gè)數(shù)據(jù)包,在軟件或硬件復(fù)位后,默認(rèn)的數(shù)據(jù)發(fā)送包為index1,首先將發(fā)送數(shù)據(jù)包長度寫入長度寄存器中,然后置位發(fā)送控制寄存器的bit-0位,則DM9000A開始發(fā)送index1數(shù)據(jù)包。在index1數(shù)據(jù)包發(fā)送結(jié)束之前,數(shù)據(jù)發(fā)送包index2被移入TX SRAM中。在index1數(shù)據(jù)包發(fā)送結(jié)束后,將index2數(shù)據(jù)字節(jié)長度寫入長度寄存器中,然后,置位發(fā)送控制寄存器的bit-0位,則index2數(shù)據(jù)包開始發(fā)送。在這里我們用到函數(shù)DM9000_send(void)。
4.2.3 數(shù)據(jù)接收
DM9000A的數(shù)據(jù)接收緩沖區(qū)是一個(gè)環(huán)形數(shù)據(jù)結(jié)構(gòu)[4]。在軟件或硬件復(fù)位后,RX SRAM的起始地址為0X0C00。每個(gè)接收數(shù)據(jù)包都包含有CRC校驗(yàn)域,數(shù)據(jù)域,以及緊跟其后的4字節(jié)包頭域。4字節(jié)包頭格式為:01h(是否接收到數(shù)據(jù)包)、狀態(tài)(確認(rèn)接收包是否正確)、BYTE_COUNT低、BYTE_COUNT高(接收包的長度)。接收函數(shù)為DM9000_read(void)。
4.3 UIP1.0協(xié)議棧的移植
系統(tǒng)軟件設(shè)計(jì)中需要移植UIP1.0協(xié)議棧,uip是瑞典計(jì)算機(jī)科學(xué)學(xué)院開發(fā)的,它去掉了完整的TCP/IP協(xié)議中不常用的功能,簡化了通訊流程,但是保留了必要的協(xié)議,重點(diǎn)放在了IP/TCP/ICMP/UDP/ARP這些網(wǎng)絡(luò)層和傳輸層協(xié)議上,保證了代碼的通用和結(jié)構(gòu)的穩(wěn)定。Uip協(xié)議棧主要提供了三個(gè)函數(shù)讓底層調(diào)用,它們是:uip_int()用于協(xié)議棧初始化,uip_intput()用于處理上位機(jī)傳過來的數(shù)據(jù)包,uip_periodic()用于處理uip內(nèi)部時(shí)鐘事件。同時(shí)提供UIP_APPCALL()用于應(yīng)用程序接口。
IP1.0協(xié)議棧,首先會通過uip_int()對協(xié)議棧進(jìn)行初始化,然后設(shè)置IP地址、網(wǎng)關(guān)、掩碼設(shè)置,以及監(jiān)聽端口,最后進(jìn)入主循環(huán)對數(shù)據(jù)處理。其數(shù)據(jù)處理過程如圖4所示。
圖4 uip數(shù)據(jù)處理流程圖
當(dāng)?shù)讓雍瘮?shù)接收到數(shù)據(jù)包時(shí)會放在uip_buff,先檢測數(shù)據(jù)包是否為0,不為0則說明收到數(shù)據(jù)包,再判斷該數(shù)據(jù)包是ip包還是ARP報(bào)文,若是ip包,經(jīng)過去以太網(wǎng)結(jié)構(gòu)更新ARP表后,將數(shù)據(jù)包交由uip_input()處理,再把其返回值發(fā)送到以太網(wǎng)。若是ARP報(bào)文,是ARP回應(yīng)就更新ARP表,是ARP請求則構(gòu)造回應(yīng)包做出回應(yīng)。同時(shí)uip還會定時(shí)對各個(gè)連接進(jìn)行輪詢[5]。
4.4 應(yīng)用程序接口
高級應(yīng)用程序UIP_APPCALL()是數(shù)據(jù)傳輸?shù)年P(guān)鍵,當(dāng)?shù)讓咏邮盏缴衔粰C(jī)傳來的數(shù)據(jù)時(shí),會通過uip_input,調(diào)用UIP_APPCALL()函數(shù),從而讓高級應(yīng)用程序去處理數(shù)據(jù),uip_int返回時(shí)會將輸出的數(shù)據(jù)賦值給uip_buff,數(shù)值長度賦值給uip_len,然后通過底層函數(shù)DM9000_send將獲得數(shù)據(jù)從以太網(wǎng)發(fā)出。
高級應(yīng)用程序如下所示,主要是檢測上位機(jī)發(fā)送過來的獲取電壓命令,根據(jù)不同命令將獲取的不同電壓值通過uip_int以返回值的形式傳輸給底層驅(qū)動(dòng)函數(shù),由驅(qū)動(dòng)函數(shù)發(fā)送到以太網(wǎng)上去。
程序在keil uvision4上用C語言編寫,編寫完成后經(jīng)Jlink下載到STM32。系統(tǒng)上電后,打開TCP&UDP測試工具,新建連接,設(shè)置目標(biāo)IP為192.168.1.10,目標(biāo)監(jiān)聽端口4001。打開連接,在發(fā)送端口輸入獲取指令,就可以獲得采集到的電壓數(shù)據(jù),如圖所示,上傳速度達(dá)到10K/S以上。
圖5 調(diào)試結(jié)果
該系統(tǒng)設(shè)計(jì)并移植了UIP1.0協(xié)議棧,用到STM32和DM9000A芯片。設(shè)計(jì)的以太網(wǎng)數(shù)據(jù)采集器能夠直接將模擬數(shù)據(jù)采集并傳給上位機(jī),12位的STM32使數(shù)據(jù)精確度大大提高,經(jīng)過調(diào)試達(dá)到了設(shè)計(jì)要求。本系統(tǒng)減少了芯片數(shù)量,使電路板設(shè)計(jì)小巧,能夠用于教學(xué)實(shí)驗(yàn)和工業(yè)領(lǐng)域。
[1] 意法半導(dǎo)體(中國)投資有限公司.STM32F10xxx參考手冊[EB/OL].[2011-5].http://www.st.com/mcu/.
[2] 孟強(qiáng),徐慧,萬青苗.基于STM32的數(shù)據(jù)采集及顯示系統(tǒng)的設(shè)計(jì)[J].計(jì)算機(jī)知識與技術(shù),2013,13(9):3184-3186.
[3] 郝雯,沈金鑫,梅成.基于STM32單片機(jī)的儲存市數(shù)據(jù)采集系統(tǒng)[J].電子設(shè)計(jì)工程,2013,17(21):80-82.
[4] 施勇,溫陽東.基于DM9000A的嵌入式以太網(wǎng)接口設(shè)計(jì)與實(shí)現(xiàn)[J].合肥工業(yè)大學(xué)學(xué)報(bào),2011,34(4):519-521.
[5] 張磊,周一帆.基于uip協(xié)議的生產(chǎn)設(shè)備數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)[J].濟(jì)南大學(xué)學(xué)報(bào),2014,28(1):65-67.
Design of Ethernet Data Acquisition System Based on STM32
Tian Yuzhou,Chu Jian'an
(Xi’an Polytechnic University,Xi’an 710048,China)
An Ethernet data acquisition system is introduced in this paper,and STM32F103ZE is used as the core processor and data acquisition device and DM9000A as Ethernet controller chip.The hardware and software design of the acquisition device,the analog data acquisition,analysis and transfer are described in details,and the transplant of UIP1.0 protocol stack is proposed as well.The ethernet data acquisition system can be used for remotemonitoring system data acquisition module.
Data acquisition;STM32 Chip;DM9000A Chip;UIP1.0 agreement
10.3969/j.issn.1002-2279.2015.01.020
TP23
A
1002-2279(2015)01-0072-04
田玉周(1989-),男,河南濮陽人,碩士研究生,主研方向:電力電子與電力傳動(dòng)。
2014-04-25