1采样(硬件定时)通常称作硬件定时单点采样,这是一种非常重要的采集模式。我们知道LV可以用于测试测量和自动化控制领域,硬件定时单点采样特别适合自 动化领域方面的应用,比如高速PID控制,类似与PLC的IO逻辑顺序控制等等。

WINDOWS操作系统无法实现精确的软件定时,无法准确控制一个循环的周期,这使得WINDOWS操作系统在自动化方面受到很大限制。如果想使用稳定精 确地软件定时,必须采用专门的实时操作系统。

使用NI板卡的采样时钟来控制软件的循环周期,实现比较精确的定时是一种很好的方式。1采样(硬件定时)模式由于采样是由硬件采样时钟控制的,因此,两个 采样之间的时间间隔是非常精确的。在采样时钟发生沿变化时,通知CPU读取上一次的采样值。

显然,1采样(硬件定时)模式最好工作在实时操作系统下,在实时操作系统下,可以实现几十K的循环速度,这可以满足一般的高速PID控制,比如伺服系统、 液压伺服阀等等。在WINDOWS操作系统下,通过1采样(硬件定时)也可以保证毫秒级的准确定时。

1采样(硬件定时)不同于1采样(按要求),并非所有的NI数据采集卡都支持这种采样模式,第三方的板卡一般都不支持,NI的下列板卡支持1采样(硬件定 时)采样模式。

  • PCIe X Series (PCIe-63xx)
  • PXIe X Series (PXIe-63xx)
  • PCIe M Series (PCIe-62xx)
  • PXIe M Series (PXIe-62xx)
  • PCI M Series (PCI-62xx)
  • PXI M Series (PXI-62xx)
  • PCI E Series (PCI-60xxE)
  • PXI E Series (PXI-60xxE)
通过1采样(硬件定时)不但可以实现模拟量输入和模拟量输出的同步控制,也可以实现数字量输入和数字量输出的同步控制,下面主要以模拟量输入和模拟量输出 为例,谈谈1采样(硬件定时)的多种应用方法,LABVIEW的帮助文件中和例程中,涉及很多这方面的内容。

一、等待下一个采样函数

1采样(硬件定时)的很多具体应用中,都使用了等待下一个采样函数,这个函数是模拟量输入和输出单点同步控制的关键函数。

我们知道,在硬件采样时钟的控制下,数据采集卡自身就可以自动完成采样工作,这个是不需要操作系统和CPU参与的,但是在板卡完成采集后,必须通知CPU 来读取这个采样值。

CPU得到采样完成的信息可以通过两种不同的方式得到,一是CPU主动轮询,查看采样是否完成,这中方式可以实现较高的速度,但是增加了CPU的开销,二 是板卡作为主动方,通过中断的方式通知CPU采集已经完成,中断方式虽然减轻了CPU的负担,但是工作速度要比轮询方式慢一些,默认是采用中断方式,由板 卡主动通知CPU。

DAQMX在LABVIEW中专门提供了一个实时函数选板,其中包括了等待下一个采样函数和实时属性节点,其中实时属性节点可以控制选择轮询或者中断模 式。
 
Picture
二、利用1采样(硬件定时)同步模拟量输入和输出

控制中最常用的方法之一是PID控制,PID控制的基本流程是,读取模拟量输入值、数据处理(与设定值比较,进行比例、积分、微分计算)、模拟量输出当前 控制值。
 
Picture
Picture
上面的程序框图中,AD、AO采用的时钟是相同的,AO采用的也是模拟量输入采样时钟,这样就可以在AD采样时钟的控制下,同步模拟量输入和输出。

模拟量输入、数据处理、模拟量输出所用的时间必须小于采样间隔,否则会丢失采样样本,产生错误。

通过属性节点可以把错误转换为警告,这种情况下,如果丢失,程序继续运行。通过属性节点也可以监测是否丢失了采样样本。

三、1采样(硬件定时)模拟量输入和软件定时模拟量输出

这种方式下,模拟量输出采用软件定时,所以模拟量输出的时刻在采样间隔间是不确定的。
 
Picture
四、稳定循环速度的几种措施

使用1采样(硬件定时)在采样时钟较高的时候,要求循环必须有较高的响应速度,特别适合于RT系统,在WINDOWS操作系统下,循环速度过高的场合,会 丢失采样,可以采样一下几种措施改进。

1、通常情况下,2K左右的循环速度基本不会丢失采样,高于2K时尝试下面的方法。

2、设置VI优先级为实时(高)

3、设置VI工作在数据采集系统

4、通过属性节点设置等待下一个采样时钟模式为轮询方式,轮询增加的CPU的开销,但是提高了响应速度,中断方式相对较慢。中断方式为默认方式。

5、通过属性节点设置读操作为轮询方式。
 
Picture
 
NI 的MAX对NI的板卡提供了四种采样模式,分别是:
1、1采样(按要求),通常称为单点软触发采集。

2、1采样(硬件定时)

3、N采样

4、连续采样

如下图所示:
Picture
NI的数据采集卡代表了业界的先进水平,所以可以实现多种采集模式。一般第三方的板卡,包括自己制作的简单的数据采集卡,都会提供最基本的软件触发单点采 集,即1采样(按要求),但是未必能提供其它三种模式。

这里按要求的含义是跟据驱动程序读取采样的函数运行时刻决定采集的时刻,比如一般的AD转换芯片都需要一个启动信号(Start),Start 管脚接收到一个脉冲后,启动AD转换过程。

我们有两种方式控制这个启动信号,一是通过软件来控制这个启动信号,二是采用板卡内部的专门时钟自动控制这个启动信号。1采样(按要求)就是通过软件控制 的,1采样(硬件定时)、N采样、连续采样都是通过板卡内部时钟自动控制启动信号的。

和不熟悉数据采集的朋友们交流时,对于连续采集经常会发生误解,我们需要清楚的是所谓连续采集,并非是多次软件触发的单点采集。1采样(按要求)无论采集 多少次,还是单点软件触发采集,和我们所说的连续采集是有本质区别的。

1采样(按要求)的优点是使用非常简单,不需要开辟专门的线程和内存缓冲区,非常适合于低速采集和对采集时间要求不高的场合,比如检测粮库粮仓温度,由于 变化非常缓慢,几分钟甚至以小时为单位采集数据,都可以满足实际需要。

1采样(按要求)最快每秒钟能采集数百个数据,这是由于操作系统定时精度决定的。虽然软件定时函数可以使用毫秒单位,但是不能保证几个毫秒的循环周期。

我们今天讨论的是1采样(按要求),主要有三种工作方式:

一、每次数据采集只需要采集一次。

下面是1采样(按要求)采样的最基本的程序框图 。
Picture
上图的采集过程为:创建任务--》读取1采样--》清除任务,重复上面的过程就可以实现多次单点采样。从上面的程序框图中,并不存在明显的启动过程,由于 没有指定运行任务的时刻,读函数运行时,自动启动任务。
 
二、用户指定采集次数的多次1采样(按要求)采样

对于多次单点采样,每次创建任务和清除任务是不必要的,只要创建一次任务,并在结束采集时清除任务就可以了,如下图所示:
 
Picture
上面的程序框图的目的是利用1采样(按要求)模式,实现指定次数的多次采集,每次采集的时间间隔是通过等待下一个整数倍函数实现的。其中需要的样本数由用 户指定,在进入采集循环时启动采集任务。
 
三、软件指定时间间隔,连续进行1采样(按要求)采集数据

这实际上就是一个LABVIEW如何实现件定时循环的问题,有多种方法,上图中如果不规定采集次数,实际上就是连续进行1采样(按要求)采集数据。

对于间隔时间很长的循环,采样上面的程序框图是有问题的,会导致无法及时退出的问题,因此采用定时循环更为合适,我在别的文章中谈过长时间定时的问题,可以参考。
 
Picture
Picture
 
有网友问:如何获取板卡的物理通道列表,以便用户选择。

   DAQMX是NI公司非常易用的设备驱动程序,通过MAX可以非常容易地配置板卡、任务、虚拟通道等等。由于采用对话框的方式,很容易区分不同的通道。有些情况下,采集那个通道和多少通道是不固定的,所以必须给用户提供设备的列表和物理通道的列表。

通常情况下有两种方法可以解决这个问题。
 
一、利用设备控件和物理通道控件

NI DAQMX专门提供了两个控件,设备控件可以列出MAX中配置的所有板卡,物理通道控件可以列出选定板卡的所有物理通道,包括数值IO,模拟量输入输出通 道和计数器通道等等。
 
Picture
Picture
二、利用DAQMX类的属性节点

从上图可以看出,创建设备控件和物理通道控件,所有的设备和物理通道自动出现在列表中,同过DAQMX的类属性,可以通过编程实现类似的功能。
通过编程实现更为灵活,对于多个设备,每个设备包含不同数量和不同性质的物理通道,特别适合于用列表框和树控件显示和选择。

下面通过几个步骤,详细介绍一下如何通过编程获取所有设备和特定设备的物理通道列表。

1、首先选择
Picture
2、设置活动设备并返回设备参数

由于存在多个设备,必须轮询每个设备,指定当前活动设备,然后才能返回对应设备的物理通道列表。
 
Picture
Picture
Picture
 
      在前面几篇有关计数器的文章中,谈到了缓冲区的概念。对于数据采集的另外两种类型,模拟量输入(AD)和模拟量输出,缓冲区的概念更为重要。

      在数据采集过程中经常遇到缓冲区重写错误,一般提示,原来采集的数据已经被重写。这样的错误与缓冲区密切相关。

      在传统DAQ中缓冲区非常明显,但是在新的DAQMX中,缓冲区的分配被隐含了,从程序框图上看不到缓冲区的概念 ,这一方面简化了编程的复杂性,对于初学者非常有利, 但是另一方面,由于不了解缓冲区的基本原理,导致采集程序的低效和错误无法处理。

      下面谈一下NI板卡模拟量缓冲区是如何确定的,这些知识在DAQMX文档中解释的非常清楚。

      输入类型任务这里指的模拟量输入,我们知道模拟量输入可以分为单点采集方式、定点采集方式和连续采集方式。

A、单点采集方式不需要分配缓冲区。
B、定点采集方式

      所谓定点采集,是由用户确定需要采样的点数,这可以通过设置Samples Per  Channel参数实现。比如每通道采集1000个采样,采集8个通道,则分配的缓冲区大小为1000×8,因此LV分配的缓冲区是足够容纳所有采样点的。

Picture
上面是定点采集的程序框图,红色箭头处表示与分配缓冲区相关的参数。
  1. 图中虚拟通道VI中,物理通道参数决定了需要采集的通道数。
  2. 采样模式确定了定点采集方式。
  3. Samples per channel(每通道采样数)和物理通道数共同决定了缓冲区的大小,为二者的乘积关系。
  4. RATE(采样率)在定点方式下与缓冲区的大小无关,采样率决定了完成所有采样所需要的时间,不影响缓冲区的大小。
  5. 定点采集方式下读函数一次读取整个缓冲区, 不需要设置要读取的采样数。
C、连续采集方式

      同定点采集方式类似,连续采集方式下,LV分配的最小缓冲区等于每通道采样数X通道数,保证能容纳规定的采样数量。但是与定点采样不同,根据每通道采样数和采样速率设置不同,LV会对缓冲区进一步调整,如下表所示。连续采集方式下,缓冲区的大小不仅取决于Samples Per Channel,也取决于Sample Rate,缓冲区的大小取二者之间较大的数。

      连续采集方式缓冲区的大小与采样率相同,这是可以理解的。设想一下,在高速采样的情况下,采样速率为100万每秒,每通道采样1000个,假设为单通道采集,则1000个采样需要时间为1毫秒。如果缓冲区为1000,则必须保证1MS 读取一次,每次1000个。这对于WINDOWS操作系统,由于其非实时性,根本无法保证1MS循环一次。所以必须要扩大缓冲区的大小,才能满足要求。

      一般情况下,连续采集的缓冲区大小决定于采样速率,其分配情况如下表所示。

Sample Rate                  Buffer Size  
No rate specified            10 kS
0–100 S/s                      1 kS
100–10,000 S/s              10 kS
10,000–1,000,000 S/s     100 kS
>1,000,000 S/s               1 MS

      看一下连续采集方式下的程序框图。

Picture
  1. 虚拟通道设置与定点采集相同,物理通道决定了采集的通道数。
  2. 采样模式确定为连续采集方式。
  3. Samples Per ChanelX通道数决定最小缓冲区的大小。
  4. 采样率决定了是否调整缓冲区大小,如上述表格所示。
  5. 读函数必须规定每次读取采样数,这样通过采样率和每通道采样数,就可以确定循环时间。
      不仅仅是AD采集需要缓冲区,缓冲计数方式和DA波形输出都涉及到缓冲区分配的问题。对于AD采集,为了充分利用缓冲区的内存,采用循环缓冲的方式,在以后的文章中,会专门说明循环缓冲区的工作原理。

Picture
 
      脉宽测量是计数器典型应用之一,何谓脉冲宽度,脉冲宽度指的是稳定电平持续的时间。脉冲宽度分为高脉冲宽度和低脉冲宽度两种。
      1、高脉冲宽度----测量电平从低到高开始计时(上升沿),一直到由高到低结束(下降沿),中间持续的时间。
      2、低脉冲宽度----测量电平由高到低开始计时(下降沿),一直到由低到高结束(上升沿),中间持续的时间。

脉宽测量基本原理:

      脉宽测量实际上是计数器的定时应用,从一个沿变化开始计时,到另外一个沿变化结束计时,中间经历的时间由标准的脉冲计数实现。通过两个沿之间经历过的标准 脉冲数,我们可以精确地计算出其经历的时间。这要求标准脉冲的频率必须远高于需要测量的脉宽,标准脉冲频率越高,则测量越精确。

      上述的标准脉冲可以来自于板卡内部时钟或者板卡外部时钟,最后均路由到计数器的Source端。待测脉冲连接到计数器的GATE端。

       与边沿计数类似,脉宽测量可以分为单脉宽测量和缓冲方式脉宽测量。

一、单脉宽测量
Picture
     上图为高脉冲单脉宽测量的原理图,从图中可以看到,在GATE由低到高处于活动状态时,计数器在内部标准脉冲的每个上升沿进行边沿计数。当GATE由高低 处于非活动状态时,硬件存储寄存器保存计数器值,供外部读取,在GATE处于非活动状态时,尽管SOURCE端的标准脉冲依然工作,但不对其计数。

      脉冲宽度最后要通过计数和标准脉冲宽度计算得到,不过这都是驱动程序所作的工作,看一下单脉宽测量的LV例程。

Picture
      程序框图非常简单,流程为:配置虚拟通道、读取计数器值和清除任务。

      在配置虚拟通道VI中,需要选择CI脉冲宽度。因为一个计数器就可以完成单脉宽测量,因此可以选择不同的计数器,这也可以通过选择不同的物理通道配置。

      测量高脉宽或者低脉宽可以通过启动沿设置,选择上升沿则测量的是高脉宽,选择下降沿则测量的低脉宽。

      特别要注意的是最大最小值的设置,从原理上可以看出,我们需要一个标准时钟,并连接到SOURCE端。因为板卡有多种可配置的时钟,通过输入的脉宽最大和最小值,板卡会自动连接合适的内部时钟,所以事先需要估计可能的脉冲宽度。

二、缓冲方式脉宽测量
Picture
      缓冲型脉宽测量与单脉宽测量类似,区别在于缓冲脉宽测量可以连续测量多个脉冲的脉宽,并维护一个 缓冲区,缓冲里记录的是每个脉宽的标准脉冲计数。板卡自动通过DMA把脉冲计数传入到计算机内存缓冲区中。

      缓冲型脉宽测量同缓冲型边沿测量一样,需要一个采样时钟,通过采样时钟控制DMA传送,这需要配置定时VI。配置过程类似于缓冲型边沿计数,就不过多描述了,LV例程程序框图如下图所示:

Picture
Picture
 
      单点边沿计数一文中提及的单点计数方式特别适合于计数器的触发与时间关系不大,只关心计数器的数值问题。通过单点边沿计数,我们只知道计数器的值发生变化 了,而不知道计数的变化与时间的关系。比如计算周期或者频率,我们需要知道两个条件,计数器值变化和每个变化之间的时间间隔。
      时间相关的计数器应用,缓冲计数是必备的基础,其它的计数器高级应用,都是建立在这个基础之上的。
      所谓缓冲计数,指的是具有一个硬件采用时钟,在采样时钟的每个有效沿(上升或者下降沿),采集卡自动读取当前计数器的值,并通过DMA(直接内存访问),按照次序写入到用户的计算机开辟的内存空间中,采集过程和传输过程均不需要计算机CPU 参与。
      缓冲计数由于存在硬件采样间隔,时间是非常明确的。在单点采集中,使用的是软件定时,由于操作系统本身的问题,这样的循环时间是不确定的。而采样时钟是完全确定的。另外一个重要的区别是缓冲计数返回的计数器值的数组,因此很容易通过数组分析计数与时间的关系。

Picture
      缓冲计数在采样时钟的控制下,自动按照采样时钟确定的时间间隔自动读取计数器的计数值。所以关键是如何设置采样时钟和如何开辟内存缓冲区,供DMA写入。
      采样时钟可以设置为内部采样时钟,比如AD采样时钟、DA采样时钟或者另外计数器发出的方波。NI的板卡可以直接通过内部路由机制重定向采样时钟到计数器的门控端(GATE),避免了外部连线,也可以通过采集卡直接连接外部脉冲信号作为外部采样时钟。
      下面看一下缓冲方式计数器应用的程序框图。

Picture
      与单点边沿计数程序框图相比,缓冲计数的程序框图存在明显区别。虚拟通道的配置是完全相同的,但是增加了DAQMX定时VI,我们重点分析一下。
      如上所述,我们需要设置采样时钟和分配内存缓冲区,这些都是在定时VI中完成的。定时VI中,Sample Clock Source直接指定采样时钟,可以是板卡内部的时钟,也可以是板卡外部时钟。Sample mode采样模式可以设置为连续采样或者定点采样。有效沿可以设定为上升沿或者下降沿。值得注意的是每通道采样率,LV根据这个参数自动分配内存缓冲区。
      循环中,读取计数VI配置为N采样,这样函数返回一个数组,Sample to Read表示欲读取的采样数。需要注意的与单点采样不同,循环中不存在软件定时。假如定时VI 中的Rate=1000,表示每秒采样1000个样本,Sample to Read设置为100,则表示每次读取100个,这种情况下,实际循环每秒需要循环1000/100=10次,循环时间实际是由硬件决定的,因此可以实现精确定时。
      缓冲计数是计数器高级应用的基础,其它频率、周期测量等都是建立在这个基础之上的,因此有必要详细了解缓冲计数的基本原理。

Picture
 

我们知道常规的数据采集卡均包括模拟量输入、模拟量输出、数字量输入输出和计数器输入输出功能。今天我们主要讨论计数器输入中最简单最基本的边沿计数功 能。由于各种板卡采用的计数器芯片不同,所以可以实现不同的特殊功能,但是基本的功能一般都会支持的,我们以NI公司M系列的数据采卡为例,从原理、编程 和外部连接的角度,谈一谈如何使用计数器。

M系列板卡提供给用户两个32位通用计数器和一个频率发生器,看看它的原理示意图:

Picture
每个计时器有7个输入端,但是实际上只有几个是供用户直接使用的,在具体应用中,也只会使用其中的一个或者几个,下面的示意图描述了计数器默认的几个外部连接管脚。
Picture
我们注意到CTRO A、B、Z实际上和CTRO SRC、CTRO AUX、CTR0 GATE是相同的管脚,ABZ主要是用于编码器应用的,采用ABZ的描述方式与编码器的描述方式一致,从计数器的角度看,计数器具有三个输入管脚,分别 是:SRC(计数器源)、GATE(门控)和AUX(辅助),具有一个输出管脚OUT(输出)。每个管脚都是可编程功能接口(PFI),PFI是一个非常 重要的概念,可以简单地理解可编程管脚,类似于8051单片机的管脚复用功能,我们以后将专门讨论。

计数器的最基本功能是对外部信号进行计数,外部信号连接到CTR0 SRC,当计数器准备好(使能)后,在外部信号的上升沿或者下降沿,计数器会自动进行加一或者减一的操作,前者乘坐增量计数器(加计数器),后者称作减计 数器,选用上升沿计数还是下降沿计数是通过软件设置实现的,增量计数还是减量计数是通过AUX(CTR0 B)连接的外部数字信号控制的,默认情况下是增量计数器。

一、单点边沿计数

以上升沿增量计数器为例,随着外部信号(连接到SRC)每发生一个沿的跳变,即上升沿后,计数器自动进行加一操作,它的当前的计数器值存储在板卡内部的寄存器中。
Picture
所谓单点计数指的是根据需要,通过软件不断查询板卡计数器中寄存器的值,由于计数器寄存器只能存储当前值,因此只能返回一个标量的值,表示当前计数器的值。


下面我们看下NI 例程中 提供的单点计数器边沿计数的例子。
Picture
Picture