技术中心
 
 

数据采集卡之计数器边沿计数功能

   日期:2012-05-04    

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

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



每个计时器有7个输入端,但是实际上只有几个是供用户直接使用的,在具体应用中,也只会使用其中的一个或者几个,下面的示意图描述了计数器默认的几个外部连接管脚。


我们注意到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)每发生一个沿的跳变,即上升沿后,计数器自动进行加一操作,它的当前的计数器值存储在板卡内部的寄存器中。





所谓单点计数指的是根据需要,通过软件不断查询板卡计数器中寄存器的值,由于计数器寄存器只能存储当前值,因此只能返回一个标量的值,表示当前计数器的值。


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


 

 

 

下面我们详细分析一下上面程序框图实现过程:

基本过程为:配置虚拟通道、启动任务、循环读取计数器当前值、清除任务

1)配置虚拟通道

上图中,我们使用的第一个函数节点是创建虚拟通道节点,在虚拟通道函数中,首先要选择我们想使用的计数器。对于一款数据采集卡,可能具备多个计数器。单点边沿计数是最为简单的应用,只需要一个单独的计数器即可。计数器的高级应用需要多个计数器级联,我们以后会谈谈到。

 

计数器通常情况下,配置初始化后,计数器的当前值默认为0。个别情况下,比如我们对生产线上生产的零件进行计数,每天结束停机断电后,第二天需要从前一天计数开始继续计数。类似情况下,可以通过设置计数器初始计数值实现。

计数方向有三种选择:增计数、减计数和外控计数。

设定增计数时, 当计数源发生变化时,计数器增加一个计数。反之,如果设定为减计数,计数器减少一个计数。

我们特别要注意的是外控计数方式。在计数器AUX端引入一个控制信号时,可以通过外部控制计数器为增计数器还是减计数器。这样我们可以通过TTL电平人为操控增减计数器,这种方式在PLC 中很常见,在某些单片机中也能见到。

另外一个重要的选择是计数时刻的选择,我们可以选择上升沿计数或者下降沿计数。

2、启动任务

启动任务函数负责采集任务的启动,不仅仅是计数器,其他类型的采集采用同样的启动任务函数。

3、循环采集当前计数

在循环中,我们通过软件设置时间间隔,上面的例子中,每100毫秒读取一次计数器的当前值。需要注意的是由于是单点采集,所以必须设置为:1采样。

4、结束清除任务

采集结束后,必须调用清除任务函数,释放分配的系统资源。

 
  
  
  
  
 
更多>同类技术
 
全年征稿 / 资讯合作
 
推荐图文
推荐技术
可能喜欢