跳轉到

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)