【NI-DAQmx入门】计数器
1.计数器的作用
NI产品的计数器一般来说兼容TTL信号,定义如下:0-0.8V为逻辑低电平,2~5V为高电平,0.8-2V为高阻态,最大上升下降时间为50ns。
计数器可以感测上升沿(从逻辑低到逻辑高的转变)和下降沿(逻辑高到逻辑低)。 与感测上升沿和下降沿相关的两个重要参数是上升/下降时间和最小脉冲宽度。 上升/下降时间衡量信号从低电平转变为高电平或从高电平转变为低电平的速度。 为了使计数器能够感测边沿,转换必须发生在 50ns 或更短的时间内(如 TTL 兼容信号规范所定义)。 除了信号转换速度的时间限制之外,从计数器感测到上升沿或下降沿的时间到它可以感测到另一个上升沿或下降沿的时间之间还需要最小延迟。 该延迟称为最小脉冲宽度。 最小脉冲宽度取决于所使用的计数器芯片。
2.计数器的组成
GATE输入端控制计数发生的时机。GATE输入类似于触发,用来开始或停止计数。
SOURCE (CLK)输入端时测量或信号计数的时基。
计数器的寄存器对要计数的边沿进行计数。当计数器寄存器往下计数时,计数到0停止。计数器寄存器的大小时计数器中包含的位数,寄存器计数值=2位数。
OUT接线端输出一个脉冲或脉冲序列。

3. 计数器的功能
- 基于输入信号(门和源)的比较,进行计数
- 基于输入和寄存器值,生成脉冲
- 边沿计数,例如简单边沿计数和时间测量
- 脉冲宽度、半周期和周期测量
- 频率测量
- 单脉冲和脉冲序列生成
- 位置和速度测量
3.1边沿计数
边沿计数是指设备通过计数器通道计算上升或下降沿。边沿计数可选择单点或缓冲采样时钟方式。
简单边沿计数
- 在源的指定边沿,计数增加
- 有效边沿可改为下降沿
- 计数器达到最终计数时将归零
- 最终计数= 2(分辨率) – 1


边沿计数-暂停触发
- 非缓冲
- 门可暂停计数寄存器的增加/减小
- 只有当门生效时,源的有效边沿将增加寄存器值

当门信号为高或低(软件设定参数)时,计数器将增加或减小,在非有效状态时,计数器将暂停计数。


边沿计数-带缓冲区的连续
门上的活动边沿将当前计数器寄存器值锁存到 PC 内存中。 使用中断或 DMA(软件可配置),计数寄存器值通过 PCI 总线单独传输到软件缓冲区。 对于连续操作,软件缓冲区可以是有限的或循环的。 一旦进入软件缓冲区,这些值就会通过缓冲区读取被读入 LabVIEW。

边沿计数-带缓冲区有限点

3.2脉冲生成
脉冲是指信号的幅值在短时间内从闲时值变为活动值。脉冲分为高闲时状态和低闲时状态。低闲时状态的脉冲从低值开始(通常为零),然后到脉冲高值,最后恢复低值。高闲时状态的脉冲从高值开始,然后到脉冲低值,最后恢复高值。

脉冲或脉冲序列由以下三部分组成:
- 高电平时间-脉冲处于高电平的时间。
- 低电平时间-脉冲处于低电平的时间。
- 初始延迟-输出信号在未生成脉冲前处于空闲状态的时间。闲时状态通常在第一次生成脉冲时替换高值时间或低值时间,取决于闲时状态的类别。
单个脉冲生成

脉冲序列生成
连续脉冲序列流程图
修改占空比
使用NI-DAQmx的通道属性节点的两个输入(CO.Pulse.DutyCyc 和CO.Pulse.Freq)。给属性节点输入新的占空比和频率(即使它没有改变)。因为LabVIEW从上到下来执行属性节点,所以占空比必须先于频率改变(参考下面的截图)。

当DAQmx写入VI是Counter Freq 1Chan 1Samp 设置时,同样可以使用DAQmx写入VI来改变占空比(参考下面的截图)。

下面附件中的范例使用上面两种方法实现了占空比的改变。
有限脉冲序列流程图
可重触发的有限点脉冲序列

不带缓冲的脉冲序列(隐式定时)

带缓冲的脉冲序列(隐式定时)

带缓冲的脉冲序列(采样时钟定时)

3.3脉冲测量
脉冲宽度测量

单脉冲宽度测量

周期测量
周期测量是指对脉冲的连续上升沿和下降沿的时间间隔进行测量。半周期测量是对两个连续边沿的时间间隔进行测量。脉冲宽度测量是对从上升沿到下降沿,或下降沿到上升沿的时间间隔进行测量。两边沿间隔测量是对一个数字信号上升沿(或下降沿)到另一个数字信号上升沿(或下降沿)的时间间隔进行测量。


单周期测量

半周期测量

3.4频率测量
计数器频率测量方法
带 1 个计数器的低频
使用已知时基测量输入信号的一个周期。信号的频率是其周期的倒数。对于许多应用来说,具有 1 个计数器的低频是一种很好的方法。它的测量时间最短,但精度也最低,并且随着信号频率的增加,精度进一步降低。
带 2 个计数器的高频
对于双计数器、高频方法,第二个计数器提供已知的测量时间。计数器对测量时间内出现的输入信号周期数进行计数,对结果进行平均,并在读取函数/VI中返回平均值。该方法对于高频信号来说是准确的。然而,精度随着待测量信号频率的降低而降低。
带 2 个计数器的大频率范围
两个计数器的较大范围测量与一个计数器测量相同,但现在用户对信号进行整数除法。第二个计数器使用输入信号来创建使用已知时基测量的脉冲。结果是 VI 中设置的除数的平均值。该方法可以准确测量高频和低频信号。然而,它需要两个计数器,并且具有取决于输入信号的可变采样时间和可变误差%。
注意事项
如果您的应用程序有足够的计数器,则只需考虑测量时间(如果适用),计算每个可用选项的预期频率的误差。最好的方法是在给定频率和测量时间(如果适用)下误差最低的方法。
如果您想找到每种方法中误差的数值, NI-DAQmx帮助中的量化误差主题显示了不同输入频率下的误差,包括1个计数器的低频、2个计数器的高频、带有2个计数器的大频率范围。 2 种计数器和动态平均方法用于快速比较。您可以使用帮助主题中包含的公式或参阅设备上的用户手册以获取更多信息。
如果您的卡包含多个计数器,也可以使用多个计数器任务。这可以让您满足不同频率下的响应时间和精度的需求。
注意: 采样时钟方法不包含在量化误差主题中,因为它不依赖于输入频率。如果您需要将采样时钟计数器频率测量与任何其他方法进行比较,请参阅设备的用户手册以计算采样时钟方法误差。
3.5位置测量
使用编码器可以测量位置,编码器的测量原理如下:
编码器的原理
编码器是一种可以测量运动或位置的机电设备。大多数编码器使用光学传感器以脉冲序列的形式提供电信号,然后可以将其转换为运动,方向或位置。
编码器每转通常有100到6,000个段。这意味着这些编码器可以为100段的编码器提供3.6度的分辨率,为6,000段的编码器提供0.06度的分辨率。
线性编码器的工作原理与旋转编码器相同,不同之处在于,线性编码器不是旋转盘,而是固定不透明带,其表面上有透明缝,并且LED检测器组件固定在移动体上。

具有一组脉冲的编码器将无法使用,因为它无法指示旋转方向。使用两个扇区的相位相差90度的代码(图2),正交编码器的两个输出通道可同时指示旋转的位置和方向。例如,如果A引导B,则磁盘沿顺时针方向旋转。如果B领先于A,则磁盘将沿逆时针方向旋转。因此,通过同时监视脉冲数和信号A和B的相对相位,可以跟踪旋转的位置和方向。

此外,某些正交编码器还包括第三输出通道-称为零或参考信号-每转提供一个脉冲。您可以使用该单个脉冲来精确确定参考位置。在大多数编码器中,此信号称为Z端子或索引。
如何进行编码器测量
要进行编码器测量,您需要一个称为计数器的基本电子组件。基于其几个输入,基本计数器会发出一个值,该值表示所计数的边沿数量(波形中从低到高的跳变)。大多数计数器具有三个相关输入-门,源和上/下。计数器对在源输入中注册的事件进行计数,并根据上/下线的状态,增加或减少计数。例如,如果上/下线为“高”,则计数器递增计数;如果为“低”,则计数器递减计数。图3显示了计数器的简化版本。

编码器通常需要连接到仪器的五根电线,并且根据编码器的不同,这些电线的颜色也会有所不同。您可以使用这些电线为编码器供电并读取A,B和Z信号。图4显示了增量编码器的典型引脚分配表。

下一步是确定应在何处连接这些导线。考虑到上述计数器,信号A连接到源极端子,使之成为从中计数脉冲的信号。信号B连接到上/下端子,您可以将+5 VDC和接地信号连接到任何电源-在大多数情况下,数据采集设备卡中的数字线就足够了。
计算完边缘后,您需要考虑的下一个概念是如何将这些值转换为位置。边沿计数转换为位置的过程取决于所使用的编码类型。共有三种基本的编码类型:X1,X2和X4。
X1编码
图5显示了一个正交周期以及X1编码的结果增量和减量。当通道A领先于通道B时,增量发生在通道A的上升沿。当通道B领先于通道A时,减量发生在通道A的下降沿。

X2编码
对于X2编码,行为相同,只是计数器在通道A的每个边缘上递增或递减,这取决于哪个通道领先于另一个通道。每个周期导致两个增量或减量,如图6所示。

X4编码
对于X4编码,计数器在通道A和B的每个边缘上类似地递增或递减。计数器是递增还是递减取决于哪个通道领先于另一个通道。每个周期导致四个增量或减量,如图7所示。

一旦设置了编码类型并计算了脉冲数,就可以使用以下公式之一转换为位置:
旋转位置
旋转量为![]()
其中N =编码器每转一圈产生的脉冲数
x =编码类型
对于线性位置
排量为![]()
其中PPI =每英寸脉冲数(每个编码器特定的参数)
将编码器连到数据采集设备
NI 9401具有一个DSUB连接器,可为八个数字通道提供连接。每个通道都有一个数字I / O引脚,您可以将数字输入或输出设备连接到该引脚。在机箱的任何插槽中均可访问CompactDAQ机箱的四个计数器。如果使用的是cDAQ-9172,则只能通过插槽5和6来访问其两个计数器,因此请将9401插入插槽5。。


根据这些规范,导线A连接到引脚14,导线B连接到引脚17,“ 5 VDC电源”连接到设置为“高”的任何未使用的数字线路,“接地”连接到任何COM端子。
3.6缓冲事件计数
事件计数是所有计数器操作中最基本的操作,其重点是测量源信号。它基本上通过使用软件命令轮询计数寄存器来计算到达计数器源的活动边沿的数量。因此,缓冲事件计数是事件计数的一种形式,其中门充当控制信号,将当前寄存器计数值锁存到 PC 内存中。这种测量有时被称为时间戳,因为它允许人们测量门上发生的连续事件之间的经过时间。显示了用于缓冲事件计数的基本计数器芯片组件。

它使用计数器的源和门来进行操作。计数器门上的有效边沿用于将当前计数寄存器值锁存在硬件寄存器中,然后通过直接内存访问 (DMA) 或中断将其传输到预分配的 PC 内存或软件缓冲区。对于连续操作,软件缓冲区可以是有限的或循环的。一旦进入软件缓冲区,就可以在 LabVIEW 中读取这些值。门信号的作用很像采样时钟,对计数寄存器的当前值进行采样。

对缓冲事件进行编程的控制流需要配置缓冲区。可以使用位于 NI 测量 → DAQmx 下功能选项板上的 DAQmx 定时功能在 DAQmx 中配置缓冲区。
由于该函数是多态的,因此需要注意的是要修改的属性是“Sample Clock”。通过 DAQmx 定时功能,可以设置缓冲区大小、缓冲区模式、采样时钟源(栅极引脚)和采样时钟极性(栅极极性),如下图所示。

可以将缓冲配置为有限或连续采集。在有限缓冲区事件计数中,采样模式设置为“有限采样”,将数据从预分配的 PC 内存复制到应用程序开发环境 (ADE) 内存。显示了执行有限缓冲区事件计数的 LabVIEW 程序示例。

连续缓冲区事件计数与有限缓冲事件计数类似,不同之处在于缓冲区是在循环中读取的。同样,采样模式配置为“连续采样”。连续缓冲输入也称为循环或双缓冲输入。

相关文章:
【NI-DAQmx入门】计数器
1.计数器的作用 NI产品的计数器一般来说兼容TTL信号,定义如下:0-0.8V为逻辑低电平,2~5V为高电平,0.8-2V为高阻态,最大上升下降时间为50ns。 计数器可以感测上升沿(从逻辑低到逻辑高的转变)和下降…...
Python爬取读书网的图片链接和书名并保存在数据库中
一个比较基础且常见的爬虫,写下来用于记录和巩固相关知识。 一、前置条件 本项目采用scrapy框架进行爬取,需要提前安装 pip install scrapy# 国内镜像 pip install scrapy -i https://pypi.douban.com/simple 由于需要保存数据到数据库,因…...
js解决加油站
在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。 给定两个整数数组 gas 和 cost &…...
【c++|opencv】二、灰度变换和空间滤波---5.中值滤波
every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 1. 中值滤波 #include<iostream> #include<opencv2/opencv.hpp> #include"Salt.h"using namespace cv; using namespace std;voi…...
python之pytorch多进程
目录 1、创建并运行并行进程 2、使用队列(Queue)来共享数据 3、进程池 4、进程锁 5、比较使用多进程和使用单进程执行一段代码的时间消耗 6、共享变量 多进程是计算机科学中的一个术语,它是指同时运行多个进程,这些进程可以…...
sqoop 抽数报错com.mysql.cj.exceptions.WrongArgumentException: HOUR_OF_DAY: 2 -> 3
文章目录 1.sqoop 抽数报错: Caused by: com.mysql.cj.exceptions.WrongArgumentException: HOUR_OF_DAY: 2 -> 3 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructor…...
【Acwing170】加成序列(dfs+迭代加深+剪枝)题解和一点感想
本思路来自acwing算法提高课 题目描述 看本文需要准备的知识 1.dfs算法基本思想 2.对剪枝这个词有个简单的认识 迭代加深思想和此题分析 首先,什么是迭代加深呢?当一个问题的解有很大概率出现在递归树很浅的层,但是这个问题的解本身存在…...
Android开发知识学习——Kotlin进阶
文章目录 次级构造主构造器init 代码块构造属性data class相等性解构Elvis 操作符when 操作符operatorLambdainfix 函数嵌套函数注解使用处目标函数简化函数参数默认值扩展函数类型内联函数部分禁用用内联具体化的类型参数抽象属性委托属性委托类委托 Kotlin 标准函数课后题 次…...
iOS使用AVCaptureSession实现音视频采集
AVCaptureSession配置采集行为并协调从输入设备到采集输出的数据流。要执行实时音视频采集,需要实例化采集会话并添加适当的输入和输出。 AVCaptureSession:管理输入输出音视频流AVCaptureDevice:相机硬件的接口,用于控制硬件特性…...
springboot和flask整合nacos,使用openfeign实现服务调用,使用gateway实现网关的搭建(附带jwt续约的实现)
环境准备: 插件版本jdk21springboot 3.0.11 springcloud 2022.0.4 springcloudalibaba 2022.0.0.0 nacos2.2.3(稳定版)python3.8 nacos部署(docker) 先创建目录,分别创建config,logs…...
深入浅出排序算法之基数排序
目录 1. 前言 1.1 什么是基数排序⭐⭐⭐ 1.2 执行流程⭐⭐⭐⭐⭐ 2. 代码实现⭐⭐⭐ 3. 性能分析⭐⭐ 3.1 时间复杂度 3.2 空间复杂度 1. 前言 一个算法,只有理解算法的思路才是真正地认识该算法,不能单纯记住某个算法的实现代码! 1.…...
CSS选择器、CSS属性相关
CSS选择器 CSS属性选择器 通过标签的属性来查找标签,标签都有属性 <div class"c1" id"d1"></div>id值和class值是每个标签都自带的属性,还有另外一种:自定义属性 <div class"c1" id"d1&…...
设计模式(21)中介者模式
一、介绍: 1、定义:中介者模式(Mediator Pattern)是一种行为型设计模式,它通过引入一个中介者对象来降低多个对象之间的耦合度。在中介者模式中,各个对象之间不直接进行通信,而是通过中介者对象…...
JVM虚拟机:通过一个例子解释JVM中栈结构的使用
代码 代码解析 main方法执行,创建栈帧并压栈。 int d8,d为局部变量,是基础类型,它位于虚拟机栈的局部变量表中 然后创建了一个TestDemo的对象,这个对象在堆中,并且这个对象的成员变量(day&am…...
会自动写代码的AI大模型来了!阿里云推出智能编码助手通义灵码
用大模型写代码是什么样的体验?10月31日,杭州云栖大会上,阿里云对外展示了一款可自动编写代码的 AI 助手,在编码软件的对话窗口输入“帮我用 python 写一个飞机游戏”,短短几秒,这款名为“通义灵码”的 AI …...
如何公网远程访问本地WebSocket服务端
本地websocket服务端暴露至公网访问【cpolar内网穿透】 文章目录 本地websocket服务端暴露至公网访问【cpolar内网穿透】1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功…...
python 练习 在列表元素中合适的位置插入 输入值
目的: 有一列从小到大排好的数字元素列表, 现在想往其插入一个值,要求: 大于右边数字小于左边数字 列表元素: [1,4,6,13,16,19,28,40,100] # 方法: 往列表中添加一个数值,其目的方便元素位置往后…...
企业级JAVA、数据库等编程规范之命名风格 —— 超详细准确无误
🧸欢迎来到dream_ready的博客,📜相信你对这两篇博客也感兴趣o (ˉ▽ˉ;) 📜 表白墙/留言墙 —— 初级SpringBoot项目,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学 📜 用户登录前后端…...
有什么可以自动保存微信收到的图片和视频的方法么
8-1 在一些有外勤工作的公司里,经常会需要在外面工作的同事把工作情况的图片发到指定微信或者指定的微信群里,以记录工作进展等,或者打卡等,对于外勤人员来说,也就发个图片的事,但是对于在公司里收图片的人…...
面试算法46:二叉树的右侧视图
题目 给定一棵二叉树,如果站在该二叉树的右侧,那么从上到下看到的节点构成二叉树的右侧视图。例如,图7.6中二叉树的右侧视图包含节点8、节点10和节点7。请写一个函数返回二叉树的右侧视图节点的值。 分析 既然这个题目和二叉树的层相关&a…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...


