跳转至

GPIO: 读取、驱动与脉冲

GPIO 辅助方法位于 AqProtocolExerciser: 它们直接与仪器的 GPIO 层通信(不是总线器件)。从 aqpxlibaqpxlib.gpio 导入枚举与 GPIO protobuf 类型——一般脚本不需要 aqpxlib.message

from aqpxlib import AqProtocolExerciser, PxIoState

with AqProtocolExerciser.connect(host="localhost", port=60600) as px:
    ...

类型参考: GPIO (API)

逻辑电平(PxIoState)

驱动或解读状态时使用 PxIoState:

成员 含义
PxIoState.LOW 驱动或采样为低
PxIoState.HIGH 驱动或采样为高
PxIoState.HIGH_Z 高阻抗(未主动驱动)

读取引脚状态(get_gpio_state)

pin = px.get_gpio_state(gpio_idx=3)

Exerciser 会回报所有引脚的状态;库再按 gpio_idx 选出单一 PxGpioPinState,字段如下: | 字段 | 含义 | | ----- | ------- | | pin_idx | 引脚索引(对应硬件编号) | | output_state | 仪器正在驱动的电平(未驱动时为 None/未设置) | | input_state | 最近一次采样的输入电平(无法取得时为 None/未设置) |

gpio_idx 为负值,或超过响应中的最后一个引脚,库会抛出 ValueError

驱动静态电平(set_gpio_state)

px.set_gpio_state(gpio_idx=3, state=PxIoState.HIGH)

这会对单一引脚发出设置状态操作。若该 GPIO 已被仪器上的其他协议占用,服务器可能拒绝请求。

此处对 gpio_idx 没有 Python 端限制(与脉冲不同);有效索引取决于硬件与固件。

发送脉冲(send_gpio_pulse)

发出一个脉冲: idle → 以active_time_ns保持 active → idle

px.send_gpio_pulse(
    gpio_idx=8,
    active_state=PxIoState.HIGH,
    idle_state=PxIoState.LOW,
    active_time_ns=5000,
)
限制 说明
引脚 仅限 gpio_idx 89(与脉冲宽度触发工具相同)。
宽度 active_time_ns 必须大于 5 ns小于 1 秒(1_000_000_000 ns)。

另见: GPIO 脉冲宽度触发set_gpio_triggergpio_trigger 全局事件。

相关 GPIO (API)