DAQ系统的基本任务是物理信号的产生或测量。但是要使计算机系统能够测量物理信号,必须要使用传感器把物理信号转换成电信号(电压或者电流信号)。有时不能把被测信号直接连接到DAQ卡,而必须使用信号调理辅助电路,先将信号进行一定的处理。总之,数据采集是借助软件来控制整个DAQ系统 – 包括采集原始数据、分析数据、给出结果等。
上图中描述了插入式DAQ卡。另一种方式是外接式DAQ系统。这样,就不需要在计算机内部插槽中插入板卡,这时,计算机与DAQ系统之间的通讯可以采用各种不同的总线,如USB,并行口或者PCMCIA等完成。这种结构适用于远程数据采集和控制系统。 当采用DAQ卡测量模拟信号时,必须考虑下列因素:输入模式(单端输入或者差分输入)、分辨率、输入范围、采样速率,精度和噪声等。 单端输入以一个共同接地点为参考点。这种方式适用于输入信号为高电平(大于一伏),信号源与采集端之间的距离较短(小于15英尺),并且所有输入信号有一个公共接地端。如果不能满足上述条件,则需要使用差分输入。差分输入方式下,每个输入可以有不同的接地参考点。并且,由于xx了共模噪声的误差,所以差分输入的精度较高。 输入范围是指ADC能够量化处理的{zd0}、最小输入电压值。DAQ卡提供了可选择的输入范围,它与分辨率、增益等配合,以获得{zj0}的测量精度。
分辨率是模/数转换所使用的数字位数。分辩率越高,输入信号的细分程度就越高,能够识别的信号变化量就越小。下图表示的是一个正弦波信号,以及用三位模/数转换所获得的数字结果。三位模/数转换把输入范围细分为23或者就8份。二进制数从000到111分别代表每一份。显然,此时数字信号不能很好地表示原始信号,因为分辩率不够高,许多变化在模/数转换过程中丢失了。然而,如果把分辩率增加为16位,模/数转换的细分数值就可以从8增加到216即65536,它就可以相当准确地表示原始信号。 增益表示输入信号被处理前放大或缩小的倍数。给信号设置一个增益值,你就可以实际减小信号的输入范围,使模数转换能尽量地细分输入信号。例如,当使用一个3位模数转换,输入信号范围为0到10伏,上面的图显示了给信号设置增益值的效果。当增益=1时,模/数转换只能在5伏范围内细分成4份,而当增益=2时,就可以细分成8份,精度大大地提高了。但是必须注意,此时实际允许的输入信号范围为0到5伏。一但超过5伏,当乘以增益2以后,输入到模/数转换的数值就会大于允许值10伏。
总之,输入范围,分辩率以及增益决定了输入信号可识别的最小模拟变化量。此最小模拟变化量对应于数字量的最小位上的0,1变化,通常叫做转换宽度(Code width)。其算式为:输入范围/(增益*2^分辩率)。 例如,一个12位的DAQ卡,输入范围为0到10伏,增益为1,则可检测到2.4mV的电压变化。而当输入范围为-10到10伏(20伏),可检测的电压变化量则为4.8mV。 采样率决定了模/数变换的速率。采样率高,则在一定时间内采样点就多,对信号的数字表达就越xx。采样率必须保证一定的数值,如果太低,则xx度就很差。下面的图表示了采样率对精度的影响。
根据耐奎斯特采样理论,你的采样频率必须是信号{zg}频率的两倍。例如,音频信号的频率一般达到20KHz,因此其采样频率一般需要40KHz。 平均化。噪声将会引起输入信号畸变。噪声可以是计算机外部的或者内部的。要抑制外部噪声误差,可以使用适当的信号调理电路,也可以增加采样信号点数,再取这些信号的平均值以抑制噪声误差,这样误差可以减小到乘以下面的系数:
例如,如果以100个点来平均,则噪声误差将减小1/10。 LabVIEW的DAQ程序包括模拟输入、模拟输出、计数器操作、或者数字输入、输出等。你可以在框图程序窗口下选择Data Acquisition。再在此子模板下,可以看到6个子模板:Analog Input, Analog Output, Digital I/O, Counter, Calibration and Configuration和Signal Conditioning。
在上述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程序库则执行数/模转换或多重转换。
AI Sample Channel程序测量指定通道上信号的一个采样点,并返回测量值。Device是DAQ卡的设备编号,Channel是描述模拟输入通道号的字符串,High Limit和Low Limit指明输入信号的范围,缺省值为+10V和-10V。 AO Update Channel程序把一个给定电压值在一个模拟输出通道上输出。Device是DAQ卡的设备编号,Channel是输出通道号字符串Voltage是输出的电压值。
在上述程序执行时,如果发生错误,则弹出一个对话框,显示错误代码,你可以选择中止程序或者继续程序执行。
框图程序: 1.按照下图编写程序。
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。
7.再同时运行前面的电压输出程序和本电压输入程序,以验证运行效果。 (练习2-1结束)。 AI Acquire Waveforms程序从多个输入通道以指定的采样率采集指定的采样点数,并将采样结果数据送回到计算机。Channels控制栏指定要采样的多个通道的编号,各个通道号间以逗号隔开,例如1,2,4。控制栏Number of samples/ch是每个通道要采集的采样点数。Scan rate是每个通道每秒钟的采样点数即采样率。Waveform是一个二维数组,包含模拟输入信号电压数值,以伏为单位。Actual scan period是实际采样率的倒数,由于计算机硬件的不同,实际采样率与指定的采样率可能有微小差异。
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主动中止了采集过程,或者程序出现错误。这种工作方式对于需要把数据存入磁盘或者观察实时数据很有用。
1.验证上图所示的框图程序。它调用了下面的功能模块: AI Configure程序(在Data Acquisition>Analog Input子模板)。设置设备编号。通道号和数据缓冲区大小。 AI Start程序,用指定的采样率,以后台工作的方式开始连续数据采集过程。 AI Read程序,在条件循环中连续采集指定数目的采样点,并返回数据到计算机。 AI Clear程序,停止数据采集,释放所有资源。 2.运行上述程序,观察结果。在本程序中,AI Read子程序的每次读取的采样点数取决于设定值和内存中未读取的采样点数的比较结果,取它们中的较大者。 |