使用 NI-DAQmx Python API 設定計數器輸出的佔空比

更新 Feb 19, 2024

環境

驅動程式

  • NI-DAQ™mx

程式語言

  • Python

脈衝寬度調變(PWM)訊號是一種用於產生數位脈衝以控制類比電路的技術。本文將逐步介紹建立計數器輸出以及使用Python NI-DAQmx API執行任務時設置或更改方波佔空比的步驟。您將需要安裝NI-DAQmx驅動程式並支援Python API。

您可以使用stream writers 中的計數器寫入器類別來配置計數器輸出任務的頻率和佔空比。
計數器編寫器將在DAQ-mx任務中將樣本寫入計數器輸出通道,一種方法是使用write_one_sample_pulse_frequency方法,請參考以下步驟說明:
  • 引用以下 packages/modules:
import nidaqmx
from nidaqmx.stream_writers import CounterWriter
from nidaqmx.constants import *
  • 建立您的任務並向其增加計數器輸出通道。
with nidaqmx.Task() as task: 
   task.co_channels.add_co_pulse_chan_time(counter = "cDAQ1Mod1/ctr1")
  • 設置擷取模式:
   task.timing.cfg_implicit_timing(sample_mode=AcquisitionType.CONTINUOUS)
  • 設置計數器編寫器並啟動任務:
   cw = CounterWriter(task.out_stream, True)
   task.start()
  • 設置佔空比和頻率:
   cw.write_one_sample_pulse_frequency(100, 0.1, 10)

此方法的參數如下:
  • frequency(float) –指定以什麼頻率產生脈衝。
  • duty_cycle(float) –指定脈衝寬度除以脈衝週期。 NI-DAQmx使用該比率和頻率來確定脈衝寬度和脈衝間隔。
  • auto_start(Optional [bool]) –指定如果您未使用DAQmx啟動任務方法顯式啟動任務,則此方法是否自動啟動任務。
  • timeout(Optional [float]) –指定等待方法寫入所有樣本的時間(以秒為單位)。 NI-DAQmx僅在該方法必須等待寫入資料後才執行超時檢查。如果時間已過,此方法將回傳錯誤。預設超時為10秒。如果將超時設置為nidaqmx.constants.WAIT_INFINITELY,則該方法將無限期等待。如果將超時設置為0,則該方法將嘗試一次寫入提交的樣本。如果該方法無法寫入所有提交的樣本,則它將回傳錯誤和成功寫入的樣本數。

最後,完整的程式碼會長這樣﹔
import nidaqmx
from nidaqmx.stream_writers import CounterWriter
from nidaqmx.constants import *

with nidaqmx.Task() as task:
    task.co_channels.add_co_pulse_chan_time(counter = "cDAQ1Mod1/ctr1")
    task.timing.cfg_implicit_timing(sample_mode=AcquisitionType.CONTINUOUS)
    cw = CounterWriter(task.out_stream, True)
    task.start()
    cw.write_one_sample_pulse_frequency(100, 0.1, 10)