4. 数字I/O读写与LED控制

数字I/O读写与LED控制 学习卡片

数字I/O任务的核心结构

DAQmx数字I/O与模拟采集的最大区别在于:数字线是按端口(Port)或按线(Line)组织的离散状态量,没有采样率、量程、耦合方式这些模拟参数。一个数字任务只需要明确三件事:通道方向(输入还是输出)、通道名(如 Dev1/port0/line0)、读写时机(软件定时轮询即可)。

本案例使用一块带数字I/O的DAQ设备(如USB-6008/6009或PCIe-6321),把 port0/line0 配置为数字输出驱动外部LED,把 port0/line1 配置为数字输入读取按钮或开关状态。两者可以放在同一个任务中,也可以分成两个独立任务——本案例采用两个独立任务,因为输入和输出方向不同,分开配置更清晰,也便于单独启停。

数字I/O读写与LED控制 — 任务结构与信号流 LabVIEW 前面板 布尔按钮(输出控制) 按下 → DO 输出高电平 LED 指示灯(输入显示) DI 高电平 → LED 点亮 停止按钮 While 循环 每 100 ms 迭代一次 读按钮 → 写DO → 读DI → 更新LED 停止按钮 → 退出循环 DAQmx 任务配置 数字输出任务 通道:Dev1/port0/line0 方向:输出(DO) 写入:1 或 0(布尔) API:DAQmx Write 数字输入任务 通道:Dev1/port0/line1 方向:输入(DI) 读取:1 或 0(布尔) API:DAQmx Read 任务停止与清除(DAQmx Clear) 硬件与外部电路 DAQ 设备 USB-6008 / PCIe-6321 port0/line0(DO) 外部 LED 电路 DO → 限流电阻 → LED → GND 高电平点亮 外部开关/按钮 DI ← 上拉电阻 + 开关 闭合 → 低电平 / 断开 → 高电平 共地连接(GND ↔ GND) 按钮值 LED状态 DO 信号 DI 信号 开关状态 读取值 信号流:前面板控件 → DAQmx任务 → 硬件端子 → 外部电路 → 回读 → 前面板指示

关键VI与函数选板位置

在LabVIEW中,数字I/O的配置与读写通过以下函数完成(位于测量I/O → NI-DAQmx选板):

  • DAQmx Create Virtual Channel.vi — 创建数字输入或数字输出通道,需选择Digital Input或Digital Output实例。
  • DAQmx Start Task.vi — 启动任务(数字I/O可省略,但显式启动更规范)。
  • DAQmx Write.vi — 向数字输出通道写入布尔值(1/0),选择Digital Bool 1Line 1Point实例。
  • DAQmx Read.vi — 从数字输入通道读取布尔值,选择Digital Bool 1Line 1Point实例。
  • DAQmx Stop Task.vi 与 DAQmx Clear Task.vi — 停止并释放任务资源。

程序框图实现要点

整个程序放在一个While循环中,循环周期设为100 ms(用Wait (ms)实现)。每次迭代执行以下动作:

  1. 读取前面板输出控制按钮的布尔值。
  2. 调用DAQmx Write将该布尔值写入Dev1/port0/line0。
  3. 调用DAQmx Read从Dev1/port0/line1读取一个布尔值。
  4. 将读取到的布尔值赋给前面板LED指示灯。
  5. 检查停止按钮状态,若为真则退出循环。

循环结束后,依次调用DAQmx Stop Task和DAQmx Clear Task释放两个任务。

为什么用两个独立任务? 数字输入和数字输出方向相反,DAQmx不允许在同一个任务中混合输入和输出方向。如果使用同一端口的不同线,也必须分别创建输入任务和输出任务。这是初学者最容易踩的坑。

接线与外部电路

以USB-6008为例,数字端口为P0.0~P0.7(对应Dev1/port0/line0~line7)。接线方式如下:

信号DAQ端子外部电路电平逻辑
数字输出 DOP0.0P0.0 → 330Ω电阻 → LED阳极 → LED阴极 → GND输出高电平(3.3V/5V)点亮LED
数字输入 DIP0.1P0.1 → 10kΩ上拉至+5V;P0.1 → 开关 → GND开关断开=高电平,闭合=低电平
公共地GND与外部电路GND共地—
注意:USB-6008的数字输出为开漏结构,输出高电平时实际由外部上拉电阻决定电压。若直接驱动LED,建议使用低电平点亮方式(输出低电平时LED亮),或外加三极管/MOSFET驱动。本案例为教学演示,采用高电平点亮方式并配合限流电阻,实际电流约5~8 mA,在USB-6008单线驱动能力范围内。

前面板控件与显示配置

  • 输出控制按钮:布尔→按钮,机械动作设为“单击时转换”,默认值为假。
  • LED指示灯:布尔→圆形LED,默认颜色绿色,用于显示DI读取结果。
  • 停止按钮:布尔→停止按钮,机械动作设为“单击时转换”。
  • 循环延时:前面板可放置数值控件,默认100 ms,便于调节轮询速度。

验证与排障

运行程序后,按以下步骤验证功能:

  1. 点击前面板输出控制按钮,观察外部LED是否随之亮灭。若外部LED不亮,用万用表测量P0.0对GND电压:按下按钮时应为高电平(约3.3V或5V),松开为低电平。
  2. 拨动外部开关,观察前面板LED指示灯是否同步变化。若不同步,检查DI通道名是否正确、上拉电阻是否接好、共地是否可靠。
  3. 若DAQmx Read报错“通道未配置为输入”,说明输入任务创建时误选了输出方向,需重新配置。
  4. 若程序无法退出循环,检查停止按钮是否已正确连线到循环条件端子。
核心记忆点:数字I/O任务 = 方向(输入/输出)+ 通道名 + 读写函数。输入和输出必须分任务创建,不能混在同一任务中。软件定时轮询即可满足大多数低速数字I/O场景。