单点边沿计数一文中提及的单点计数方式特别适合于计数器的触发与时间关系不大,只关心计数器的数值问题。通过单点边沿计数,我们只知道计数器的值发生变化 了,而不知道计数的变化与时间的关系。比如计算周期或者频率,我们需要知道两个条件,计数器值变化和每个变化之间的时间间隔。
      时间相关的计数器应用,缓冲计数是必备的基础,其它的计数器高级应用,都是建立在这个基础之上的。
      所谓缓冲计数,指的是具有一个硬件采用时钟,在采样时钟的每个有效沿(上升或者下降沿),采集卡自动读取当前计数器的值,并通过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
12/30/2011 06:56:13 am

nice post

Reply
1/26/2012 09:49:43 am

is soon

Reply
1/27/2012 11:07:58 pm

Nice one info, thanks

Reply
3/22/2012 09:12:26 am

Thank you for data

Reply
3/31/2012 06:34:13 am

Thanks for details

Reply



Leave a Reply.