田玉周,楚建安
(西安工程大學,西安710048)
基于STM32的以太網數據采集系統設計
田玉周,楚建安
(西安工程大學,西安710048)
提出了一種以太網數據采集系統,該系統核心處理器和數據采集器件為STM32F103ZE,以太網控制芯片是DM9000A。分別介紹了采集器的硬件和軟件設計,詳細分析了模擬量數據采集、分析、傳送的各模塊軟硬件設計,詳細介紹了UIP1.0協議棧的移植。此以太網數據采集器可以用于遠程監控系統的數據采集模塊。
數據采集;STM32芯片;DM9000A芯片;UIP1.0協議
隨著互聯網技術、以太網技術的發展,遠程監控越來越成為研究和應用的熱點。作為遠程監控的重要組成部分,數據采集及傳送模塊也顯得尤為重要。遠程監控系統的發展對于數據采集的精確性、實時性和安全性都有了更高要求。
傳統數據采集由于儲存空間小和通訊接口的局限,存在精度不高、采集信息量小的缺點,已經不能滿足遠程監控系統中對數據的精度和信息量的需求。針對這種情況設計了基于STM32的以太網數據采集器,由于用到了以Cext-M3為核心的STM32芯片,該芯片有豐富的片上資源,大大節約了外圍硬件。同時芯片上16通道的12位ADC模數轉換模塊[1],也使數據采集的精確度顯著提高。基于以太網的數據傳輸協議的運用,解決了通訊中通訊協議轉換的問題。實現了無縫信息集成。
本數據采集系統主要包含數據采集模塊、通訊模塊,整體設計如圖1所示。所要采集的模擬信號經過前端模擬調理模塊的調節,使之處于A/D轉換能夠轉換的電壓范圍內,再利用STTM32的片內ADC模塊實現A/D轉換,采集過的數據經STM32系統內核處理后由DM9000A發送給上位機。

圖1 系統總體框圖
3.1 數據采集
數據采集模塊主要包括數據的調理和采集,其主要硬件是STM32。基于ARM Cortex-M3的STM32由意法半導體公司生產,其數據總線寬度為32bit、最大時鐘頻率72MHz、具有256KB程序存儲器、64KB數據RAM、80個可編程輸入/輸出端、10個定時器、工作電源電壓2V~3.6V以及12位的ADC、FSMC。STM32數據采集有18個通道,可以測量16個外部模擬量和2個內部模擬量,各通道的A/D轉換可以單次、連續、掃描或間斷模式執行。ADC的結果可以左對齊或右對齊方式存儲在16位數據寄存器中。其結構示意圖如圖2示。

圖2 A/D模塊示意圖
3.2 數據處理和傳輸
數據處理和傳輸模塊硬件主要由STM32微控制器和DA9000A以太網驅動芯片構成。DM9000A集成了10/100M物理層接口,內部帶有16K字節SRAM作為數據收發的FIIO緩存,其中3k作為發送包緩沖區,剩下的作為接收包緩沖區。支持8/16 bit兩種主機工作模式,本系統中用的是16bit工作模式。同時支持802.3以太網傳輸協議。
STM32與DM9000A連接電路如圖3所示。

圖3 硬件連接
DA9000A中只有兩個地址端口經過處理器STM32直接訪問,一個是INDEX端口,另一個是DATA端口。而訪問哪個端口處理器是由CMD決定的。當引腳CMD=0時,處理器STM32訪問INDEX端口寄存器,當引腳CMD=1時,處理器STM32訪問DATA端口。INDEX端口的內容為DATA端口的寄存器地址。在訪問任何寄存器之前,寄存器地址都必須保存在INDEX端口中。因此在讀寫DM9000A寄存器時,先將其地址寫入INDEX,再通過DATA端口讀寫數據。
4.1 STM32數據采集程序
數據采集模塊程序的設計中,首先是對模擬量采集程序初始化。意法半導體公司提供了ADC模塊的固件庫函數,通過對固件庫函數的調用,用戶可以輕松實現對ADC模塊的設置,本程序中,ADC的設置如下[2-3]:
1)對模擬量采集端口的設計,我們設計為模擬輸入模式,GPIO_Mode_AIN。
2)設置ADC工作模式為對立模式,ADC_Mode_Independent。
3)使能ADC掃描。
4)設置ADC轉換工作為連續模式,ADC_ContinuousConvMode=ENABLE。
5)ADC觸發方式為軟件觸發
6)設置轉換所得到的數據右對齊
7)設置順序進行規則轉換的ADC通道數目。
8)設置采樣順序和采樣時間。
通過以上設置,ADC模塊連續采樣并轉化各個模擬量,并且把所得數據儲存到16位數據儲存器中,等待其通過以太網向上位機傳輸。在這個過程中,UIP1.0提供的UIP_APPCALL(),將是我們對數據處理程序與UIP連接的一個重要函數。
4.2 DM9000A驅動程序
作為底層驅動程序,對DM9000A驅動程序的編寫主要有三個方面:驅動初始化、數據發送、數據接收。
4.2.1 驅動器初始化
通過驅動器初始化,可以啟動以太網控制器DM9000A,使之處于數據收發狀態,我們調用函數DM9000A_int(void):


完成以上設計后就可以使以太網控制器正常啟動,接收和發送數據包。
4.2.2 數據發送
DM9000A有16K的SRAM作為數據發送和接收緩沖區。其中3K作為發送緩沖區,發送器的起始地址為0x00H,緩沖區可以保存index1、intex2兩個數據包,在軟件或硬件復位后,默認的數據發送包為index1,首先將發送數據包長度寫入長度寄存器中,然后置位發送控制寄存器的bit-0位,則DM9000A開始發送index1數據包。在index1數據包發送結束之前,數據發送包index2被移入TX SRAM中。在index1數據包發送結束后,將index2數據字節長度寫入長度寄存器中,然后,置位發送控制寄存器的bit-0位,則index2數據包開始發送。在這里我們用到函數DM9000_send(void)。
4.2.3 數據接收
DM9000A的數據接收緩沖區是一個環形數據結構[4]。在軟件或硬件復位后,RX SRAM的起始地址為0X0C00。每個接收數據包都包含有CRC校驗域,數據域,以及緊跟其后的4字節包頭域。4字節包頭格式為:01h(是否接收到數據包)、狀態(確認接收包是否正確)、BYTE_COUNT低、BYTE_COUNT高(接收包的長度)。接收函數為DM9000_read(void)。
4.3 UIP1.0協議棧的移植
系統軟件設計中需要移植UIP1.0協議棧,uip是瑞典計算機科學學院開發的,它去掉了完整的TCP/IP協議中不常用的功能,簡化了通訊流程,但是保留了必要的協議,重點放在了IP/TCP/ICMP/UDP/ARP這些網絡層和傳輸層協議上,保證了代碼的通用和結構的穩定。Uip協議棧主要提供了三個函數讓底層調用,它們是:uip_int()用于協議棧初始化,uip_intput()用于處理上位機傳過來的數據包,uip_periodic()用于處理uip內部時鐘事件。同時提供UIP_APPCALL()用于應用程序接口。
IP1.0協議棧,首先會通過uip_int()對協議棧進行初始化,然后設置IP地址、網關、掩碼設置,以及監聽端口,最后進入主循環對數據處理。其數據處理過程如圖4所示。

圖4 uip數據處理流程圖
當底層函數接收到數據包時會放在uip_buff,先檢測數據包是否為0,不為0則說明收到數據包,再判斷該數據包是ip包還是ARP報文,若是ip包,經過去以太網結構更新ARP表后,將數據包交由uip_input()處理,再把其返回值發送到以太網。若是ARP報文,是ARP回應就更新ARP表,是ARP請求則構造回應包做出回應。同時uip還會定時對各個連接進行輪詢[5]。
4.4 應用程序接口
高級應用程序UIP_APPCALL()是數據傳輸的關鍵,當底層接收到上位機傳來的數據時,會通過uip_input,調用UIP_APPCALL()函數,從而讓高級應用程序去處理數據,uip_int返回時會將輸出的數據賦值給uip_buff,數值長度賦值給uip_len,然后通過底層函數DM9000_send將獲得數據從以太網發出。
高級應用程序如下所示,主要是檢測上位機發送過來的獲取電壓命令,根據不同命令將獲取的不同電壓值通過uip_int以返回值的形式傳輸給底層驅動函數,由驅動函數發送到以太網上去。


程序在keil uvision4上用C語言編寫,編寫完成后經Jlink下載到STM32。系統上電后,打開TCP&UDP測試工具,新建連接,設置目標IP為192.168.1.10,目標監聽端口4001。打開連接,在發送端口輸入獲取指令,就可以獲得采集到的電壓數據,如圖所示,上傳速度達到10K/S以上。

圖5 調試結果
該系統設計并移植了UIP1.0協議棧,用到STM32和DM9000A芯片。設計的以太網數據采集器能夠直接將模擬數據采集并傳給上位機,12位的STM32使數據精確度大大提高,經過調試達到了設計要求。本系統減少了芯片數量,使電路板設計小巧,能夠用于教學實驗和工業領域。
[1] 意法半導體(中國)投資有限公司.STM32F10xxx參考手冊[EB/OL].[2011-5].http://www.st.com/mcu/.
[2] 孟強,徐慧,萬青苗.基于STM32的數據采集及顯示系統的設計[J].計算機知識與技術,2013,13(9):3184-3186.
[3] 郝雯,沈金鑫,梅成.基于STM32單片機的儲存市數據采集系統[J].電子設計工程,2013,17(21):80-82.
[4] 施勇,溫陽東.基于DM9000A的嵌入式以太網接口設計與實現[J].合肥工業大學學報,2011,34(4):519-521.
[5] 張磊,周一帆.基于uip協議的生產設備數據采集系統設計[J].濟南大學學報,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-),男,河南濮陽人,碩士研究生,主研方向:電力電子與電力傳動。
2014-04-25