第二课 数据采集

LabVIEW的数据采集(Data Acquisition)程序库包括了许多NI公司数据采集(DAQ)卡的驱动控制程序。通常,一块卡可以完成多种功能 - 模/数转换,数/模转换,数字量输入/输出,以及计数器/定时器操作等。用户在使用之前必须DAQ卡的硬件进行配置。这些控制程序用到了许多低层的DAQ驱动程序。本课程需要一块安装好的DAQ卡以及LabVIEW开发系统。

DAQ系统的基本任务是物理信号的产生或测量。但是要使计算机系统能够测量物理信号,必须要使用传感器把物理信号转换成电信号(电压或者电流信号)。有时不能把被测信号直接连接到DAQ卡,而必须使用信号调理辅助电路,先将信号进行一定的处理。总之,数据采集是借助软件来控制整个DAQ系统 – 包括采集原始数据、分析数据、给出结果等。

img2.1.1.jpg

上图中描述了插入式DAQ卡。另一种方式是外接式DAQ系统。这样,就不需要在计算机内部插槽中插入板卡,这时,计算机与DAQ系统之间的通讯可以采用各种不同的总线,如USB,并行口或者PCMCIA等完成。这种结构适用于远程数据采集和控制系统。

当采用DAQ卡测量模拟信号时,必须考虑下列因素:输入模式(单端输入或者差分输入)、分辨率、输入范围、采样速率,精度和噪声等。

单端输入以一个共同接地点为参考点。这种方式适用于输入信号为高电平(大于一伏),信号源与采集端之间的距离较短(小于15英尺),并且所有输入信号有一个公共接地端。如果不能满足上述条件,则需要使用差分输入。差分输入方式下,每个输入可以有不同的接地参考点。并且,由于消除了共模噪声的误差,所以差分输入的精度较高。

输入范围是指ADC能够量化处理的最大、最小输入电压值。DAQ卡提供了可选择的输入范围,它与分辨率、增益等配合,以获得最佳的测量精度。

img2.1.2.jpg

分辨率是模/数转换所使用的数字位数。分辩率越高,输入信号的细分程度就越高,能够识别的信号变化量就越小。下图表示的是一个正弦波信号,以及用三位模/数转换所获得的数字结果。三位模/数转换把输入范围细分为23或者就8份。二进制数从000到111分别代表每一份。显然,此时数字信号不能很好地表示原始信号,因为分辩率不够高,许多变化在模/数转换过程中丢失了。然而,如果把分辩率增加为16位,模/数转换的细分数值就可以从8增加到216即65536,它就可以相当准确地表示原始信号。

增益表示输入信号被处理前放大或缩小的倍数。给信号设置一个增益值,你就可以实际减小信号的输入范围,使模数转换能尽量地细分输入信号。例如,当使用一个3位模数转换,输入信号范围为0到10伏,上面的图显示了给信号设置增益值的效果。当增益=1时,模/数转换只能在5伏范围内细分成4份,而当增益=2时,就可以细分成8份,精度大大地提高了。但是必须注意,此时实际允许的输入信号范围为0到5伏。一但超过5伏,当乘以增益2以后,输入到模/数转换的数值就会大于允许值10伏。

img2.1.3.jpg

总之,输入范围,分辩率以及增益决定了输入信号可识别的最小模拟变化量。此最小模拟变化量对应于数字量的最小位上的0,1变化,通常叫做转换宽度(Code width)。其算式为:输入范围/(增益*2^分辩率)。

例如,一个12位的DAQ卡,输入范围为0到10伏,增益为1,则可检测到2.4mV的电压变化。而当输入范围为-10到10伏(20伏),可检测的电压变化量则为4.8mV。

采样率决定了模/数变换的速率。采样率高,则在一定时间内采样点就多,对信号的数字表达就越精确。采样率必须保证一定的数值,如果太低,则精确度就很差。下面的图表示了采样率对精度的影响。

img2.1.4.jpg

根据耐奎斯特采样理论,你的采样频率必须是信号最高频率的两倍。例如,音频信号的频率一般达到20KHz,因此其采样频率一般需要40KHz。

平均化。噪声将会引起输入信号畸变。噪声可以是计算机外部的或者内部的。要抑制外部噪声误差,可以使用适当的信号调理电路,也可以增加采样信号点数,再取这些信号的平均值以抑制噪声误差,这样误差可以减小到乘以下面的系数:

img2.1.5.jpg

例如,如果以100个点来平均,则噪声误差将减小1/10。

LabVIEW的DAQ程序包括模拟输入、模拟输出、计数器操作、或者数字输入、输出等。你可以在框图程序窗口下选择Data Acquisition。再在此子模板下,可以看到6个子模板:Analog Input, Analog Output, Digital I/O, Counter, Calibration and Configuration和Signal Conditioning。

img2.2.1.jpg

在上述6个子模板下,每个子模板又分成Easy I/O Vis, Intermediate Vis, Utility Vis和Advanced Vis。下面我们以Analog Input子模板为例进行解释。如图所示,在其顶层是简单模拟量输入VI程序(Easy AI),中间层是中级模拟量输入VI程序(Intermediate AI),然后下面是两个图标,一个用于调用模拟输入应用程序(Utility AI),一个调用高级模拟量输入程序(Advanced AI)。在本教材中,我们主要讲述简单和中级程序。高级程序涉及到与DAQ驱动程序的低层接口,而通用应用程序是中级程序的组合。

简单I/O程序仅仅只是表面层接口程序,它能执行基本的模拟量输入、模拟量输出、数字I/O,以及计数器/定时器操作。它简单易用,并且包含一个简单的出错处理方法。当出错时,将弹出一个对话框,显示出错信息,而用户可以选择中止程序执行或者忽略错误。

相对于简单程序而言,中级程序具备更多的硬件设置功能,灵活性,并且可以更有效地开发实用程序。它具有许多简单程序所缺乏的功能,如外部时钟等。它对出错的处理也更加灵活,可以把出错状态信息传递给其它的程序,编程处理出错情况。

在Data Acquisition子模板下的Analog Input子模板程序执行模/数转换操作。而Analog Output程序库则执行数/模转换或多重转换。

img2.3.1.jpg

AI Sample Channel程序测量指定通道上信号的一个采样点,并返回测量值。Device是DAQ卡的设备编号,Channel是描述模拟输入通道号的字符串,High Limit和Low Limit指明输入信号的范围,缺省值为+10V和-10V。

AO Update Channel程序把一个给定电压值在一个模拟输出通道上输出。Device是DAQ卡的设备编号,Channel是输出通道号字符串Voltage是输出的电压值。

img2.3.2.jpg

在上述程序执行时,如果发生错误,则弹出一个对话框,显示错误代码,你可以选择中止程序或者继续程序执行。

目的:输出一个模拟电压信号,并且用DAQ卡再次采集该信号。

首先编制一个VI程序,以0.5伏的间隔从0伏到9.5伏输出电压,再编制VI程序进行单点模拟输入电压测量,验证上述输出电压。最后,再修改程序,使之控制Demo Box上的LED指示灯。在演示盒Demo Box上,把模拟输出CH0与模拟输入CH1相连。

img2.3.3.jpg

1.打开电压输出Voltage Output程序窗口,用Device指定DAQ卡设备编号,Channel字符串指定模拟输出通道,用Voltage Output输出显示来显示当前输出电压值。

2.切换到框图程序。

1.按照下图建立框图程序。

img2.3.4.jpg

对于循环For Loop要求每500毫秒执行一次,控制输出电压以0.5伏的间隔从0伏到9.5伏变化。当循环For Loop结束后,输出电压又复位为0伏。

2.关闭上述框图程序窗口,再打开前面板窗口,创建输入电压测量Voltmeter程序,以显示输入电压值。

img2.3.5.jpg

框图程序

1.按照下图编写程序。

img2.3.6.jpg

2.在前面板的电压测量仪表盘中,将其刻度定义为0.0至10.0。

3.在通道控制Channel输入值1,上限控制High Limit输入值10.0,下限控制Low Limit输入值0.00,打开Power开关,运行该程序。

4.如果运行过程中出现错误,将会弹出一个对话框,显示错误代码和解释。要模拟出错情况,在Device控制栏中输入0并运行程序,则将会显示出错情况。

5.确认已在演示盒Demo Box中将模拟输出CH0接到模拟输入CH1,运行电压输出Voltage Output VI程序,则在电压测量Voltmeter程序中将采集并显示电压值。

6.停止程序运行,并按上图虚线框住的部分修改程序,当输入电压大于5伏时点亮LED灯。演示盒Demo Box上的LED灯是负逻辑,高电平时关闭LED,低电平时打开LED。

img2.3.7.jpg

7.再同时运行前面的电压输出程序和本电压输入程序,以验证运行效果。

(练习2-1结束)。

在许多应用场合,一次只采样一个数据点是不够的。另外,采样点之间的间隔很难保持恒定,因为它取决于很多因素,如循环的执行速度,子程序的调用时间等等。而使用AI Acquire Waveform和AO Generate Waveform程序,就可以以大于单点操作的速度进行多点的数据采集和波形产生,并且用户可以自定义采样速率。

AI Acquire Waveform程序从一个指定的输入通道按用户定义的采样率和采样点数采集数据并返回计算机。

img2.4.1.jpg

上图中Number of Samples是采样点数,Sample rate是采样率,以Hz为单位。Waveform是模拟输入信号的一维采样数组,以伏特为单位。Actual sample period是实际采样率的倒数,它可能与指定采样率有一些小偏差,偏差取决于计算机硬件速度。

AO Generate Waveform程序在一个模拟输出通道上以用户定义的更新速率产生一个电压波形。Update rate是每秒钟产生的电压数值更新点数。Waveform是一个一维数组,它包含写到输出通 道上的模拟电压值,以伏为单位。

img2.4.2.jpg

目的:采集并显示一个模拟信号波形。

学员将编写一个VI程序,它使用DAQ卡采集一个信号波形,并在图表上显示。在本例中,把演示盒上的模拟输入CH1接到函数发生器的正弦波输出端口上。

1.打开一个新建前面板窗口,并照下图创建一个前面板程序。

img2.4.3.jpg

“采样数”控制栏定义采样点数,而“采样/秒”控制栏定义采样率。

2.切换到框图程序。

img2.4.4.jpg

1.按照上图创建框图程序。

2.返回前面板窗口,输入各控制栏数值,并运行程序。图表窗口将绘出模拟信号波形。试用不同的采样率和采样点数,观察波形的差别。

(练习2-2结束)

AI Acquire Waveforms程序从多个输入通道以指定的采样率采集指定的采样点数,并将采样结果数据送回到计算机。Channels控制栏指定要采样的多个通道的编号,各个通道号间以逗号隔开,例如1,2,4。控制栏Number of samples/ch是每个通道要采集的采样点数。Scan rate是每个通道每秒钟的采样点数即采样率。Waveform是一个二维数组,包含模拟输入信号电压数值,以伏为单位。Actual scan period是实际采样率的倒数,由于计算机硬件的不同,实际采样率与指定的采样率可能有微小差异。

目的:使用简单I/O程序来执行扫描多个通道的数据采集工作。

学员将创建一个VI程序,它扫描两个不同通道的模拟信号波形,并将它们分别在图表上绘出。在本例中,把Demo Box的模拟输入通道CH1接到正弦波/三角波输出口,而模拟输入通道CH2接到方波输出口。

1.按照下图创建前面板程序,它有两个输入通道,可同时显示两个波形。

img2.5.1.jpg

2.切换到框图程序。

img2.5.2.jpg

1.创建如上图所示框图程序,它调用了如下的功能模块:

AI Acquire Waveforms子程序(在Data Acquisition>Analog Input子模板)。在本例中,它在通道1和通道2以采样率10000Hz采样1000个点。

Index Array子程序(在Array子模板),在本例中,把二维数组的第0列定义为通道1的采集数据,第1列定义为通道2的采集数据。

Write to Spreadsheet File子程序(在File I/O子模板)。在本例中,把通道1和通道2的数据写入数据文件(spreadsheet file)。

2.将演示盒上的模拟输入通道1与方波发生器连接;模拟通道2与正弦波发生器相连接。运行该程序,在图表上将显示输入的两个数据波形。

(练习2-3结束)。

连续数据采集,或者说实时数据采集,是在不中断数据采集过程的情况下不断地向计算机返回采集数据。开始数据采集后,DAQ卡不断地采集数据并将它们存贮在指定的缓冲区中(circular buffer),然后LabVIEW每隔一段时间将一批数据送入计算机进行处理。如果缓冲区放满了,DAQ卡就会又重新从内存起始地址写入新数据,覆盖原来的数据。这个过程一直持续,直到采集到了指定数目的数据点,或者LabVIEW主动中止了采集过程,或者程序出现错误。这种工作方式对于需要把数据存入磁盘或者观察实时数据很有用。

目的:调用中级功能模块程序执行连续数据采集工作。

学员将验证一个连续数据采集程序,在本例中,把模拟输入通道CH1接到正弦/三角波输出口。

1.打开Continuous Acquisition and Chart程序。

img2.6.1.jpg

2.缓冲区的大小即数据存贮内存的大小用“缓冲大小”来指定,同时还用“一次读入的扫描”来指定每次从内存读取的数据量,用“扫描剩余数据”显示内存中尚未读取的采样数据个数。

img2.6.2.jpg

1.验证上图所示的框图程序。它调用了下面的功能模块:

AI Configure程序(在Data Acquisition>Analog Input子模板)。设置设备编号。通道号和数据缓冲区大小。

AI Start程序,用指定的采样率,以后台工作的方式开始连续数据采集过程。

AI Read程序,在条件循环中连续采集指定数目的采样点,并返回数据到计算机。

AI Clear程序,停止数据采集,释放所有资源。

2.运行上述程序,观察结果。在本程序中,AI Read子程序的每次读取的采样点数取决于设定值和内存中未读取的采样点数的比较结果,取它们中的较大者。

(练习2-4结束)。

  • home/whyx/labview/chp2.txt
  • 最后更改: 2008/02/20 16:31
  • (外部编辑)