本篇介绍了如何使用阿尔泰USB总线脉冲计数/编码器采集卡,接入欧姆龙增量式旋转编码器,获取编码器信号,并通过python读取数据,最终基于socket服务将数据传递到java,便于后端开发。
文章目录
接线
1. 旋转编码器
采用欧姆龙E6B2-CWZ1X增量式旋转编码器,可输出A、A-、B、B-、Z、Z- 相
2. 数据采集卡
采用阿尔泰USB总线脉冲计数/编码器采集卡,型号为USB2381
3. 接线
旋转编码器A(黑色)B(白色)Z(橙色) 相连接到数据采集卡的 A(PFI8)B (PFI9)Z(PFI10) 端口。采集卡的 +5V OUT 和 DGND 分别连接编码器 褐色+ 和 蓝色- 进行供电。
使用官方软件读取数据
1. 安装软件
下载阿尔泰官方软件。
ART-DAQ软件下载地址
2. 更新驱动
打开DMC(设备配置管理工具),在设备和接口列表,右击接入的设备(USB"Dev1"),选择更新驱动,完成连接。
2.1 禁用数字签名
- 如果更新完驱动,设备仍然无法接入,需要禁用数字签名
如何在 Windows 11 中禁用驱动程序签名强制 - 永久禁用数字签名
- 打开命令提示符(以管理员身份运行)
- 输入以下命令并按回车键:
bcdedit /set testsigning on
- 如果提示,设置元素数据时出错 该值受安全引导策略保护,无法进行修改或删除,需要在计算机的 BIOS 设置中禁用安全引导(Secure Boot)
- 重新启动系统使更改生效。
这将启用测试签名模式,允许加载未经数字签名的驱动程序和软件。注意,禁用数字签名会降低系统安全性,并且不建议普通用户进行这些更改。
如果希望恢复数字签名验证,使用以下命令:bcdedit /set testsigning off
这将禁用测试签名模式并恢复数字签名验证。
3. 新建采集任务
在DMC软件中,右击ArtDAQ任务,创建新ArtDAQ任务,选择采集信号-计数器输入-角度位置,选择物理通道Dev1 ctr0,输入任务名称,完成创建。
4. 读取数据
打开新创建的任务,设置采样时钟源为PFI8,信号输入范围360脉冲/转,点击运行,获取旋转编码器信号。
使用python获取数据
1. 找到例程
在软件安装目录找到Samples文件夹,里面给出了Pyhton、VC、C#等例程。
2. 运行程序
在Python代码历程中找到 Samples\CNT 文件夹,安装相应依赖包,运行 ci_ang_encoder.py 文件可获取到编码器数据。
import artdaq
import time
import pprint
from artdaq.constants import (AcquisitionType, EncoderZIndexPhase, AngleUnits, EncoderType)
pp = pprint.PrettyPrinter(indent=4)
with artdaq.Task() as task:
# add_ci_ang_encoder_chan(counter, name_to_assign_to_channel='', decoding_type=EncoderType.X_4, zidx_enable=False, zidx_val=0, zidx_phase=EncoderZIndexPhase.AHIGH_BHIGH, units=AngleUnits.DEGREES, pulses_per_rev=24, initial_angle=0.0, custom_scale_name='')
# counter 计数器名称
# decoding_type 指定如何计数和解释编码器在信号A和信号b上产生的脉冲。X_1, X_2和x4仅对正交编码器有效。TWO_PULSE_COUNTING仅对双脉冲编码器有效。
# X_1:表示单倍增量解码类型。这是一种常见的解码方式,每个脉冲都被视为一个计数单位。在这种模式下,每个脉冲都被视为一个状态变化,可以用于确定旋转方向和计数旋转的步数。
# X_2:表示双倍增量解码类型。在这种模式下,每个脉冲被视为两个计数单位,可以提高计数的分辨率。通过检测脉冲的上升沿和下降沿,可以更准确地计算旋转的步数。
# X_4:表示四倍增量解码类型。在这种模式下,每个脉冲被视为四个计数单位,进一步提高计数的分辨率。通过检测脉冲的上升沿和下降沿以及A相和B相的状态变化,可以更精确地计算旋转的步数。
# zidx_enable 用于指定是否在通道上使用 Z 索引,启用 Z 索引功能。如果启用,意味着在旋转编码器的输出信号中,会有一个额外的 Z 相信号。当该信号发生变化时,可以将其视为旋转编码器旋转一周的起点或特定位置的标记。
# zidx_val 用于指定当信号Z高电平(high)且信号A和信号B处于您使用zidx_phase指定的状态时,要将测量值重置为的数值(以指定的单位表示)。
# zidx_phase 用于指定在信号Z高电平(high&#x