- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
新型便携式数据采集检测系统的实现
摘 要: 介绍了一种新型便携式数据采集检测系统,该系统的数据采集设备采用USB接口传输数据,基于Lab Windows CVI的简易虚拟示波器能显示数据和控制数据采集设备。重点阐述了系统软件实现的技术细节。测试结果表明,该系统结构简单、可靠性高、应用灵活、易于扩展,具有广泛的应用前景。
关键词: 通用串行总线;虚拟示波器;Lab Windows CVI;MAX1247;PDIUSBD12
数据采集检测系统早已广泛应用于工业生产及信息监测等领域。目前市面上的产品都存在这样或那样的不足,如体积庞大不利于携带,价格昂贵难以推广,采用RS-232接口传输速率低,安装在计算机内部受计算机插槽数量、地址、中断资源的限制,不利于操作。本数据采集检测系统采用USB接口传输数据,具有较高的传输速率,且可靠性高,数据不易丢失,抗干扰性强;采用基于PC的虚拟示波器检测采样对象,进行数据显示、分析处理,很好地解决了上述问题。
1 系统总体设计方案
数据采集检测系统的总体结构如图1所示。
USB设备芯片PDIUSBD12是NXP公司在USB1.1协议设备端使用最多、技术最成熟的芯片之一,片内集成了高性能的串行接口引擎和3个端点的FIFO缓冲区,其中端点2具有64 B的双缓冲区,适合数据传输量较大的场合应用。PDIUSBD12与NXP公司的8位MCU P89C58x2FN实现数据交换简单可靠。MAXIM公司的12位4通道A/D转换器MAX1247,有较快的转换速率(7.5 μs),在软件控制下能实现对正负电压信号量的读取。
本系统主要由基于PC(USB Host)的虚拟示波器和数据采集设备(USB Device)两部分组成。A/D转换器MAX1247可最多连接4路模拟电压信号量,转换为数字量后通过其片上SPI接口传输给主控制器P89C59x2FN。主控制器将采集的数据包传输给USB接口芯片PDIUSBD12,数据将按照USB协议被传输给USB主机(PC),通过USB设备驱动,动态链接库,数据最后在虚拟示波器中显示并进行相关的处理。数据采集设备通过USB电缆线连接到PC后即上电,它将以初始采样频率采集数据,并传输到虚拟示波器中。
2 系统软件的设计
2.1 虚拟示波器软件设计
虚拟示波器使用Lab Windows CVI 8.0开发,运行界面如图2所示。
虚拟示波器的主要功能是显示数据,进行数据处理,发出命令,设置数据采集设备的工作状态。数据的读取由封装在动态链接库中的读端点2函数(unsigned long_stdcall ReadPort2(unsigned char*pData,unsigned long iLen))实现,读取的数据被存放到显示数组(static double measureData[BUFFER_SIZE])中。为了保持显示数据的波形是连续的、缓和的,显示数组的容量(512 B)8倍于读端点2数据包的容量(64 B),在每次将读取的数据存放到显示数组的首部前,要将显示数组的数据向尾部移动64 B,其过程如图3所示。数据经坐标化处理后,通过Lab Windows CVI控件函数即可显示。显示原则是先接收到的数据先显示。
从虚拟示波器发出的控制指令通过写端点2函数(unsigned long_stdcall WritePort2(unsigned char*pData, unsigned long iLen))传输给数据采集设备。修改数据采集设备的采样频率时,实际传输给数据采集设备的是定时器T1的中断计数初值,该初值是在虚拟示波器中由采样频率值计算得出。这种处理可以节省单片机处理时间。
A/D芯片MAX1247的精度为12位,数据采集设备以单字节方式将数据传输到虚拟示波器中,数据包中相邻两字节为一个有效的样点。而数据在虚拟示波器中以有效样点为处理单元。在软件上使用联合体变量实现两个单字节数据到双字节数据的转换。定义的联合体adata包括两个成员,其中char类型的成员PortBuf[64]接收数据包,与其同首地址的short int类型成员PortBuf2[32]用于虚拟示波器中对采样数据的处理,这样处理效率高。
2.2 USB设备驱动和动态连接库
USB设备驱动程序D12TEST.SYS是用Win DDK 开发的,EasyD12.dll动态连接库是用VC++开发的,D12TEST.SYS和EasyD12.dll是连接虚拟示波器和USB数据采集设备的桥梁。D12TEST.SYS把虚拟示波器发出的读/写命令变成规范的USB请求包传给USB数据采集设备。EasyD12.dll中封装了PDIUSBD12的端点2的读/写函数,通过这两个函数实现从虚拟示波器到数据采集设备的端到端数据交换。
2.3 数据采集设备软件设计
数据采集设备软件使用Keil C51开发,软件结构采用前后台系统,后台程序流程如图4所示,它是一个无限循环,循环中不断检测USB的连接状态。如果连接正常,就检测数据发送允许位是否有效,如有效,将数据传送到PDIUSBD12的端点2的FIFO缓冲区中。
前台程序由中断服务程序组成,主要包括两个部分:(1)基于PDIUSBD12的USB协议相关的中断服务程序,中断源是P89C58x2FN的外部中断INT0。由PIDUSBD12主动发起的任何与P89C58x2FN的信息交换都是通过外部中断INT0来实现。单片机读取PDIUSBD12的中断寄存器后,执行相应的中断服务子程序。(2)数据采集的中断服务程序。数据采集中断服务程序流程如图5所示,数据采集使用定时器T1实现定时中断采样,每中断一次采集一次样点。进入中断服务程序就对定时器T1的计数初值进行处理,这样由采样频值计算计数初值时,就不用加入修正值。否则,单片机执行中断服务程序的耗时在计算计数初值时是不能忽略的。在主程序中A/D初始化时完成了写A/D控制字,在中断服务程序中,先读取A/D转换结果,然后再写A/D控制字,启动A/D转换,这样处理使A/D在输出结果前有充足的时间来完成模拟量到数字量的转换。
2.4 A/D采样转换程序设计
A/D采用具有片上SPI接口的MAX1247芯片, P89C58x2FN片上没有SPI接口,在A/D采样转换程序设计中,采用软件模拟SPI主机模式。MAX1247的外部时钟模式转换时序如图6所示。A/D转换控制原理是,在每个外部时钟脉冲的上升沿,将控制字的一位写入MAX1247,写入控制字(一个字节)后转换启动,在每个外部时钟脉冲的下降沿,将一位的转换结果从MAX1247中读出。这样写入一个控制字需要8个外部时钟脉冲,读出一个转换结果需要16个时钟脉冲,其中前12个时钟脉冲读出有效的转换结果。
对A/D的控制频繁地使用了位操作,采用汇编语言编程具有明显的效率优势。写控制字和读采样转换结果程序流程如图7所示,数据采集设备的主程序采用C语言编写,在C语言中调用汇编语言子程序实现主控制器对A/D的控制。
写控制字和读采样转换结果分属两个不同的汇编子程序模块,C语言程序调用汇编子程序模块,需要在汇编模块前做PUBLIC声明,使用伪指令使CODE选项有效,并声明为可再定位段类型,再选择为当前段,函数名大。然后在C主程序中对函数进行外部声明,就可以像调用普通的extern函数一样调用汇编语言子程序模块。
3 数据采集检测系统的测试
香农采样定理规定采样频率必须是信号频率的2倍以上,才能完整保留原始信号的信息。对于复杂的规律性强的信号,只有采样频率远高于信号频率时,信号才能在虚拟示波器中连续、稳定地显示,并得到有效、可靠的检测结果。如图8所示是采样频率为1 000 Hz、正弦波信号频率为10 Hz的显示效果。
在本数据采集检测系统中,嵌入各种算法软件模块,可以很方便地对该数据进行相关的测试与分析。
将位置式PID算法和增量式PID算法的软件代码嵌入到虚拟示波器中,测试结果如图9和图10所示。为了达到良好的测试视觉效果,这两种算法的相关参数设置不同。
通过理论计算,数据采集设备的最高采样频率约为13 kHz。经过测试,数据采集设备采集电压信号量的频率在500 Hz以下,规律性、复杂性强的电压信号量的数据波形能够在虚拟示波器中连续地、稳定地显示出来,数据经计算处理后能达到很好的检测效果。电压信号量频率过高,则虚拟示波器检测的数据波形稳定性差,检测效果难以保证。
本数据采集检测系统可以方便、简单地应用于被控对象频率不高的采集检测领域,并且采样实时性好、显示稳定、容易嵌入各种数据分析算法。与其他数据采集检测系统相比,有体积小、使用方便、即插即拔、采用USB总线供电等优点。本数据采集检测系统在信号测试和系统监测等瞬态信号的实时采集检测场合有广泛的应用前景。
参考文献
[1] 周立功.PDIUSBD12 USB固件编程与驱动开发[M].北京:北京航空航天大学出版社,2003.
[2] 马伟.计算机USB系统原理及其主/从机设计[M].北京:北京航空航天大学出版社,2004.
[3] 高美珍,洪家平.基于USB接口和嵌入式芯片总线的数据采集系统[J].仪表技术与传感器,2005(8):51-53.
[4] 邢微,刘开华.数据采集系统USB2.0接口设计[J].电子测量技术,2006,29(1):12-13.
[5] 熊健民,胡长晖,宋庭新.USB数据采集卡的研制[J].湖北工业大学学报,2007,22(3):6-9.
[6] 姜伟,郑青,季行健,等.嵌入式USB数据采集系统[J].仪表技术与传感器,2008(2):45-46.
上一篇:21世纪人工智能的发展趋势
下一篇:基于FPGA的B超成像系统
像采集的原理和实现