基于STM32的以太网数据采集系统设计
2015-08-07田玉周楚建安
田玉周,楚建安
(西安工程大学,西安710048)
基于STM32的以太网数据采集系统设计
田玉周,楚建安
(西安工程大学,西安710048)
提出了一种以太网数据采集系统,该系统核心处理器和数据采集器件为STM32F103ZE,以太网控制芯片是DM9000A。分别介绍了采集器的硬件和软件设计,详细分析了模拟量数据采集、分析、传送的各模块软硬件设计,详细介绍了UIP1.0协议栈的移植。此以太网数据采集器可以用于远程监控系统的数据采集模块。
数据采集;STM32芯片;DM9000A芯片;UIP1.0协议
1 引 言
2 系统总体方案
随着互联网技术、以太网技术的发展,远程监控越来越成为研究和应用的热点。作为远程监控的重要组成部分,数据采集及传送模块也显得尤为重要。远程监控系统的发展对于数据采集的精确性、实时性和安全性都有了更高要求。
传统数据采集由于储存空间小和通讯接口的局限,存在精度不高、采集信息量小的缺点,已经不能满足远程监控系统中对数据的精度和信息量的需求。针对这种情况设计了基于STM32的以太网数据采集器,由于用到了以Cext-M3为核心的STM32芯片,该芯片有丰富的片上资源,大大节约了外围硬件。同时芯片上16通道的12位ADC模数转换模块[1],也使数据采集的精确度显著提高。基于以太网的数据传输协议的运用,解决了通讯中通讯协议转换的问题。实现了无缝信息集成。
本数据采集系统主要包含数据采集模块、通讯模块,整体设计如图1所示。所要采集的模拟信号经过前端模拟调理模块的调节,使之处于A/D转换能够转换的电压范围内,再利用STTM32的片内ADC模块实现A/D转换,采集过的数据经STM32系统内核处理后由DM9000A发送给上位机。
图1 系统总体框图
3 系统硬件设计
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 系统软件设计
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以返回值的形式传输给底层驱动函数,由驱动函数发送到以太网上去。
5 系统调试
程序在keil uvision4上用C语言编写,编写完成后经Jlink下载到STM32。系统上电后,打开TCP&UDP测试工具,新建连接,设置目标IP为192.168.1.10,目标监听端口4001。打开连接,在发送端口输入获取指令,就可以获得采集到的电压数据,如图所示,上传速度达到10K/S以上。
图5 调试结果
6 结束语
该系统设计并移植了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