基于USB-6281的高速数据采集系统的设计
2010-03-26孙玲
孙玲
(江苏信息职业技术学院电子信息工程系,江苏无锡214153)
数据采集在现代工业生产及科学研究中的重要地位日益突出,在信号测量、图像处理、音频信号处理等测量中,都要求进行高速、高精度的数据采集。这就对数据采集系统的设计提出了2方面的要求:1)要求接口简单灵活且有较高的数据传输率;2)由于数据量通常较大,要求主机能够对数据做出快速反应,并及时进行分析和处理。常用的数据采集卡一般是PCI卡或是ISA卡,这些采集卡存在诸多缺点,比如安装不方便,传输速度慢,受计算机插槽数量、地址、中断等资源的限制,可扩展性差等。而通用串行总线(Universal Serial Bus,简称USB)具有高传输速度、易扩展、热插拔和即插即用等特点,很好地克服了数据采集卡的缺点,容易实现低成本、高可靠性、多点的数据采集[1-2]。
USB-6281是National Instruments推出的一款USB高精度多功能M系列数据采集(DAQ)板卡,在高采样率下也能保持高精度。USB-6281是专为移动应用或空间上有限制的应用设计的,其即插即用的安装最大程度降低了配置和设置时间,同时它直接与螺丝端子相连,从而降低了成本并简化信号的连接。NI-DAQmx驱动程序和测量服务软件提供了简单易用的配置和编程界面,以USB-6281为硬件平台,借助其提供的USB接口和NI-DAQmx驱动软件,采用VC++高级语言编程,完成数据高速采集系统。
1 系统结构设计
1.1 USB-6281简介[3-5]
USB-6281适用于地质监测、材料分析、环境感知、光学、光谱学、结构测量及气体探测,还包括医疗设备仪器,如心率监测等仪器测试等领域。其主要特性如下:1)包含18位A/D转换器,相比传统16位设备其分辨率提高4倍,同时还提供了增强型模拟输出通道,能够实现量程及偏移量可编程设定;2)集成了NI-PGIA 2自定义放大器和NI-MCal自校准来缩短校准时间,提高精度。板载的低通滤波器能够通过编程消除高频噪声,从而进一步提高测量精度。在±10 V范围内分辨力可达980 μV,在±100 mV范围内可达28 μV;3)NI信号读写实现USB上的双向高速数据流;4)具有16条单端或8条差分的模拟输入通道,2条模拟输出通道及24位数字I/O通道(DIO),提供高达625 kS/s的18位模拟输入(扫描时速度为500 kS/s)、速度为833 kS/s的16位模拟输出;5)包含NI-DAQmx驱动软件和NI LabVIEW SignalExpress LE。NIDAQmx驱动具有节省开发时间的特点,能够实现LabVIEW图形化开发环境及基于文本语言(如ANSI C/C++、C#、Visual Basic.NET及Visual Basic 6.0)的代码生成,包含超过3 000种测量实例、仿真设备及接线图。
1.2 系统构成
基于USB-6281的高速数据采集系统结构如图1所示。
图1 基于USB-6281的高速数据采集系统结构图Fig.1 Diagram of high speed data acquisition system based on USB-6281
采用NI的USB-6281数据采集卡以400 kHz的采样频率对被测信号进行波形数据采集,然后对采集数据进行正弦波拟合,通过提取出正弦信号的幅度、频率等参数,计算出拟合正弦曲线。测量数据与拟合曲线模型对应点的偏差值作为相应点波形失真测量值,然后计算出测量序列的失真有效值,进而最终获得被测信号总失真度的测量值。
目前测量信号失真度的原理大致分为2类:基波剔除法和频谱分析法。本文采用频谱分析法,即通过计算出各次谐波的大小来计算失真度。测量方法采用数字化方法,先通过将信号数字化并送入计算机,再由计算机计算出失真度。失真度的计算方法采用快速傅里叶变换法(FFT),快速傅里叶变换比直接傅里叶变换(DFT)在计算量上要小得多。采用FFT对量化后的被测信号处理,获得基波和各次谐波的电压,从而计算出失真度。这种方法实现起来比较简单,而且通过一些补偿算法可以有效减少误差[6]。
计算机通过高速数字采集卡采集被测信号,经A/D转换后读入计算机,由计算机对采集的信号进行FFT变换,形成被测信号的二维幅度—频率数组。计算机显示出信号的幅度—频率特性曲线,同时,对数组计算得到基波系数和各次谐波系数,最后,由基波和各次谐波系数计算出失真度。谐波失真是谐波分量的幅值和基波幅值的相对量[7],假如基波的幅值是A1,而二次谐波的幅值是A2,三次谐波的幅值是A3,N次谐波的幅值是AN,总谐波失真THD为
2 系统软件设计
利用NI-DAQmx驱动软件和VC++,设计本系统数据采集流程图如图2所示,并给出主要部分程序代码。
图2 系统流程Fig.2 Flow chart of system
//设置波形发生任务
DAQmxErrChk(DAQmxCreateTask(“”,&taskHandleVo));
DAQmxErrChk(DAQmxCreateAOVoltageChan(taskHandleVo,
“Dev1/ao0”,“”,-1.5,1.5,DAQmx_Val_Volts,NULL));DAQmxErrChk(DAQmxCfgSampClkTiming(taskHandleVo,“”,OUTFREQ,
DAQmx_Val_Rising,DAQmx_Val_ContSamps,OUTOUNT));
DAQmxErrChk(DAQmxRegisterDoneEvent(taskHandleVo,0,DoneCallback,NULL));
//把波形数据送到采集卡
DAQmxErrChk(DAQmxWriteAnalogF64(taskHandleVo,OUTCOUNT,0,10.0,
DAQmx_Val_GroupByChannel,dataout,&write,NULL));
//设置采样任务
DAQmxErrChk(DAQmxCreateTask(“”,&taskHandleVi));
DAQmxErrChk(DAQmxCreateAIVoltageChan(taskHandle-Vi,“Dev1/ai0”,“”,
DAQmx_Val_Cfg_Default,-10.0,10.0,DAQmx_Val_Volts,NULL));
DAQmxErrChk(DAQmxCfgSampClkTiming(taskHandleVi,“”,SCANFREQ,
DAQmx_Val_Rising,DAQmx_Val_FiniteSamps,SCANCOUNT));
//开始产生正弦波形
DAQmxErrChk(DAQmxStartTask(taskHandleVo));
//开始采样任务
DAQmxErrChk(DAQmxStartTask(taskHandleVi));
//从采集卡读取测量到的数据
DAQmxErrChk(DAQmxReadAnalogF64(taskHandleVi,-1,10.0,
DAQmx_Val_GroupByChannel,datain,SCANCOUNT,&read,NULL));
//输出幅度(峰峰值)
Vout.SetTestResult(j,0,(maxvalue-minvalue));
Vout.SetTestResult(j,0,sqrt(rms/SCANCOUNT)*2.828);
//作FFT变换
FftConvert(datain,SCANCOUNT);
//计算失真度(10个谐波)后,关闭设备
DAQmxStopTask(taskHandleVi);
DAQmxStopTask(taskHandleVi);
DAQmxStopTask(taskHandleVo);
Error:
if(DAQmxFailed(error))
{
DAQmxGetExtendedErrorInfo(errBuff,2048);
MessageBox(NULL,errBuff,NULL,0);
}
//结束波形采样任务
DAQmxStopTask(taskHandleVi);
DAQmxClearTask(taskHandleVi);
//结束波形输出任务
DAQmxStopTask(taskHandleVo);
DAQmxClearTask(taskHandleVo);
if(DAQmxFailed(error)){}
//printf(“DAQmx Error:%s\n”,errBuff);
//printf(“End of program,press Enter key to quit\n”);
DAQmxErrChk(status);
Error:
if(DAQmxFailed(error))
DAQmxGetExtendedErrorInfo(errBuff,2048);
DAQmxClearTask(taskHandle);
printf(“DAQmx Error:%s\n”,errBuff);
//FFT函数调用
void FftConvert(float64 xrt[],int npoint)
//计算旋转因子
void Calculcf()
//数据作蝶形排列
void ChangeOrder(float64 xr[],float64 xi[],int N)
//FFT函数实现
void Fft(float64 xr[],int npoint)
3 测试结果
实际应用中对正弦信号进行数据采集,对一个1 kHz的正弦波,用400 kHz的采样频率,采样点数为4 096、单通道情况下进行数据采集。图3是采集数据的图形显示,频率为0.976 kHz,说明本采样系统能够精确采样。
4 结束语
图3 采集数据的图形显示Fig.3 Graphical display of data acquisition system
本系统采用NI的USB-6281作为高速数据采集系统的硬件平台,以NI-DAQmx驱动软件和VC++为编程语言,实现了高速数据采集。USB总线接口使用方便,热插拔,即插即用,节省系统资源,成本低,性能可靠,在高采样率下也能保持高精度。NI-DAQmx驱动程序和测量服务软件提供了简单易用的配置和编程界面,系统的扩展性和通用性好,应用面广,可实现对工业生产中诸如温度、压力等各种物理量的测量和显示。
[1]赵鹏,罗文广,王伍成.基于USB2.0的高速数据采集系统设计与实现[J].电子测量技术,2009,32(10):136-139,142.
ZHAO Peng,LUO Wen-guang,WANG Wu-cheng.Design and implementation of the high speed data acquisition system based on USB2.0[J].Electronic Measurement Technology,2009,32(10):136-139,142.
[2]李朋勃,张洪平.基于USB2.0的高速数据采集系统[J].电子技术应用,2009,35(10):109-112.
LI Peng-bo,ZHANG Hong-ping.High-speed data acquisition system based on USB2.0[J].Application of Electronic Technique,2009,35(10):109-112.
[3]美国国家仪器公司.NI推出高精度多功能USB接口数据采集设备[EB/OL].(2008-05-04)[2009-07-20].http://www.gkong.com/co/ni/news_detail.asp?news_id=21419.
[4]叶果,李威,王禹桥,等.基于PCI-1716的高速数据采集系统设计[J].微计算机信息,2009,25(4):86-88.
YE Guo,LI Wei,WANG Yu-qiao,et al.A design for high speed data acquisition system based on PCI-1716[J].Microcomputer Information,2009,25(4):86-88.
[5]周承仙,李仰军,武锦辉,等.基于LabWindows/CVI的多路高速数据采集系统设计[J].电子测量技术,2007,30(12):66-69.
ZHOU Cheng-xian,LI Yang-jun,WU Jin-hui,et al.Design for multi-channel high speed data acquisition system based on LabWindows/CVI[J].Electronic Measurement Technology,2007,30(12):66-69.
[6]应怀樵.波形和频谱分析与随机数据处理[M].北京:中国铁道出版社,1983.
[7]胡朝炜.数据采集设备的失真度测试方法研究[J].电子测量技术,2009(1):137-139,150.
HU Chao-wei.Study on methods of distortion measurement of data acquisition equipment[J].Electronic Measurement Technology,2009(1):137-139,150.