基于Linux 以太网的远程数据采集系统
扫描二维码
随时随地手机看文章
摘要:本文所研究的数据采集系统结合了以太网Socket 技术,USB 技术、嵌入式技术(ARM+Linux )等,开发了一套数据采集系统。采集的信号,经过CPU 处理后通过USB 总线传输到Arm-Linux 平台或者本地PC 机,实现本地监测。又可以通过以太网传输采集的数据量到远程PC 机,实现远端用户通过Internet 对数据采集卡进行访问与监测。
引言
我们生活在一个五彩缤纷的模拟世界,而在数字化高速发展的今天,如何将模拟的信号 转化到数字领域显得尤其重要,这就需要数据采集技术。随着网络技术的发展,以太网越来 越能够满足工业应用的需要。现场总线的通信功能完全可由以太网较好地完成。最近几年, 交换式以太网技术的出现大大地提高了以太网的确定性,这同时也使以太网技术在工业领域 的使用更加广泛。
1. 远程数据采集系统的总体设计
本文以太网的数据采集系统的设计目标是系统能够采集 0~2.5V 的电压信号量,然后通 过USB 接口将处理了的采样信号传输到嵌入式平台,并且可以通过以太网传输到用户。 一个良好的高速数据采集系统受很多方面的制约,例如采样的频率、AD 的精度、传输 的速度和平台通用性等等,本系统主要依靠采用高性能AD 和改变采集卡CPU 对采样的控 制方式和采样信号的处理方式来解决。设计中使用了CYPRESS 公司的EZ-USB FX2 系列芯 片CY7C68013。这款芯片有GPIF(General ProgrammableInterface)模式,可以提供高速的数 字逻辑信号给外围设备(这里给AD),该模式不受CPU 控制,是独立于CPU 存在的。这就 克服了CPU 对于高速采样的瓶颈约束,提高了对采样频率的控制能力。对于高性能AD, 文中采用了Analog devices 公司的AD7492,该芯片采样可以达到1MSPS,是12 位并行的 持续逼近型高速模数转换芯片,系统总体框图如图1。
图1 总体框图
2. 数据采集卡设计
该数据采集卡完成的不仅仅是一个数据采集的功能,而在于为以后的设计提供详细的设 计基础和平台,这些功能都可以方便的移植到以后的仪表设计中。数据采集卡的总体框图如 图2 所示,输入信号是0~2.5V 的电压信号量,需要经过限压、滤波等处理,然后直接输入 到ADC 的IN 引脚(板上的IN 引脚端子)。AD 转换的启停等控制由CPU 完成,转换时序由 GPIF 控制器控制。CPU 的GPIF 方式以查询的形式检测ADC 的BUSY 引脚,向GPIF 控制 器报告信号采集的状态。为了达到改变采样频率的目的,利用定时器按照采样频率要求控制 CPU 的IO 端口,进而控制GPIF 流程的启停。一次采集流程结束后会自动保存采集上来的 数据到寄存器中,然后CPU 处理寄存器中的数据并送到USB 输出缓冲区便可输出至USB 端口。
图 2 数据采集卡的总体框图
2.1AD 转换部分硬件设计
该设计中使用了 AD7492 作为主采样器件,AD7492 很容易与微处理器或DSP 接口。输 入信号从CONVST 的下降沿开始被采样,转换也从此点启动。AD 的输入为0-2.5V 单极性 电压。REFOUT 引脚接有最小100nF 的电容,REFOUT 引脚接有最小100nF 的电容,以稳 定内部参考电压值。CPU 负责控制AD 的启动、停止和读取采集数据等工作。设计中使用 了GPIF 模式,由AD 的连接图可以看出,68013 的CTL 引脚、RDY 引脚和AD 直接连接, 对AD 的时序进行控制。CONVST 脚接到PA7 ( 68013 的IOA^7 )用于控制采样的启停,从 而可以控制采样频率,CTL, RDY 引脚的行为由GPIF 控制,其电路图如图3 所示。
图 3 ADC 外围接线图
2.2CPU 与EEPROM 的接口电路
CY7C68013 芯片本身不带ROM,所以扩展一片64Kbit 的I2C 串行E2PROM 存储程序 代码。该芯片为低功耗应用而开发,可以充分利用FX2 的I2C 接口而不用占用其它IO 接口。 E2PROM 的连接决定了采集卡作为USB 设备上电枚举的过程。如果上电没有检测到 E2PROM 的存在,则会采用默认PID, VID。枚举;上电如果检测到连接有E2PROM 时,loader: 读E2PROM 的第一个字节来决定如何枚举,电路图如图4 所示。
图 4 EEPROM 外围接线图
2.3CPU 与键盘、显示的接口电路
由于 56 引脚的68013 只有PA, PB, PD 三组IO,对于12 位的AD,使用了PB, PD 的第 二功能,配置为FD(Fifo Data)。这样就只剩下PA 口8 个引脚可用,不足以完成键盘、显示、 测试预留等功能。所以采用了PCF8574 I2C 转I0 口的方式进行扩展。这样也可以留出足够 的IO 口用于扩展和测试,连接如图5。
图 5 CPU I/O 扩展
3.系统应用软件设计
软件设计主要涉及到三个方面:一是对用CY7C68013 做CPU 的数据采集卡的固件设计 和应用程序设计。CYPRESS 公司为其旗下的产品做了很好的技术支持,例如对该款芯片提 供了完善的固件架构。用户的应用只要在此固件基础上开发即可。二是针对数据采集卡设计 基于ARM-LINUX 的USB 设备驱动程序。三是基于ARM-LINUX 平台,为提供给用户可视 化界面设计应用程序及远程PC 上通过以太网采集的应用程序的设计。
3.1 USB 数据采集卡驱动程序
编写一个 USB 设备的驱动程序,首先需要把驱动程序的对象注册到USB 子系统中,然后再使用厂商标识和设备标识来判断是否已经安装了硬件。注册是在USB 驱动程序模块初
始化代码中完成。例如在初始化代码中有这样的语句:
usb register(&sample_driver);[!--empirenews.page--]
这句话调用了usb register 这个函数,将struct sample_driver{}注册到USB 核心。
USB 核心如何识别一个驱动适合该设备呢,就要靠usb_device id 结构体完成。struct usbse_device id 结构体提供了一列不同类型的该驱动程序支持的USB 设备。USB 核心使用该列表来判断对于一个设备该使用哪一个驱动程序,热插拔脚本使用它来确定当一个特定的 设备插入到系统时该自动装载哪一个驱动程序。本例中实现了这样一个结构:
static struct usb_device_id sample_id_table[]={
{USB_DEVICE(USB_Sample_VENDOR_ID,
USB_Sample_PRODUCT_ID) },{} };
MODULE_DEVICE_TABLE (usb, sample_id_table);
USB_DEVICE ( vendor,product)这个宏仅和指定的制造商和产品ID 值相匹配,该宏常用于需要一个特定驱动程序的uss 设备。
int usb_bulk_msg(struct usb_device *usb_dev, unsigned int pipe,
void *data, int len, int *actual_length,int timeout);
该函数传递bulk 数据到驱动中的缓冲区*data,如果传递完成之后再复制到用户区供用户使用。
int usbes_control_msg(struct usb device *dev, unsigned int pipe,_u8 request,_u8 requesttype,
_u16 value,_u16 index,void *data,_u16 size, int timeout);
该函数允许驱动程序发送和接收USB 控制消息。例如本例中实现的采样频率的变换就是通过该命令在用户和数据采集卡硬件之间传递的。
下面以读设备数据 sample read 为例介绍驱动对硬件的操作过程,流程如图6 所示。
图 6 sample read 函数流程
内核空间和用户空间有所不同,驱动程序属于内核空间,普通的应用程序属于用户空间, 两个空间的数据不能直接互访,必须要借助copy_fromes users()、copy_to_user()两个函数在 两个空间中传递数据。
3.2 PC 机客户端的设计
PC 机客户端使用Delphi 开发。主要完成以下功能:作为Client 和服务器连接、请求并接 收Serve:发来的采集到的数据并在本地客户端上以波形形式显示出来。本设计中使用了两个 定时器完成这些功能,定时器1 负责向Serve:发送“请求数据”的请求,并将返回的数据放 入缓存。定时器2 负责将定时器1 接收来的数据以波形的形式显示出来,其中,用到了ActiveX 控件VtChart,客户端收到采集正弦波形如图7 所示。
图7 网络采上来的正弦波
4.结论
本文创新点:本文研究、设计了基于以太网技术、USB 技术、嵌入式技术的数据采集 系统,将先进的技术融合到工厂自动化的最前端,提高了采样的精度、速度和可靠性。该数 据采集卡完成的不仅仅是一个数据采集的功能,而在于为以后的设计提供详细的设计基础和 平台,这些功能都可以方便的移植到以后的仪表设计中,可以作为二次开发的平台。