National Instruments 提供超過 20 種 C 系列數位模組,可用來在 NI CompactRIO 系統中輸入與輸出數位訊號。C 系列數位模組提供多種訊號準位、速度與通道,可讓您根據自己的規格來建立系統。數位模組非常適合用來完成基本作業,例如監控狀態或開關機器等。搭配 DAQmx 使用 CompactRIO 時,您甚至可以使用 DAQmx API 執行計數器作業,因為 DAQmx API 具有程式設計更簡單的優勢。不過,使用 LabVIEW FPGA 就能進一步擴充數位模組的功能。
本技術文件探討 7 種方式,以提升數位模組的功能。下方範例說明如何使用 LabVIEW FPGA 與 FPGA 介面進行程式設計。這些範例必須針對您的 NI CompactRIO 機箱進行正確設定,才能正常運作。
注意:每個 C 系列數位模組都有不同的時序特性。請務必選擇時序特性符合應用需求的模組。此外,下列範例檔案路徑也適用於 LabVIEW 2012。從 LabVIEW 2013 開始,FPGA 範例都經過改造,並且置於新的檔案路徑中。LabVIEW 2013 與更高版本範例的檔案路徑為新範例,與本文件中使用的範例息息相關。
事件計數是數位模組最簡單的工作之一。 事件計數是數位訊號的每個上升與/或下降緣計數的流程,廣泛用於馬達量測至管路中液體流量計量等各種應用。若要使用 NI-DAQmx 驅動程式進行程式設計,您必須使用專屬的內建計數器或獨立的計數器模組來執行計數作業,這對許多應用來說已足夠。 或者,您也可以使用 FPGA 建立自己的計數器應用,不需額外使用計數器模組即可增加可執行的計數器數量。 計數器數量僅受系統中的數位通道數量與 FPGA 大小限制。
下列範例示範如何使用 LabVIEW FPGA 執行事件計數器。此範例使用布林邏輯來判斷是否發生上升緣或下降緣。您可以在 LabVIEW Example Finder 中找到此範例,並瀏覽至:
LabVIEW 2013 與更新版本:硬體輸入與輸出»CompactRIO»訊號產生與處理»數位»計數器»邊緣計數器»邊緣計數器。lvproj.
LabVIEW 2012 與更早版本:硬體輸入與輸出 » CompactRIO » FPGA Fundamentals » 計數器 » 事件計數器 » 事件 Ctr, either edge – cRIO.lvproj

圖 1.修改您的程式碼以計算外部訊號
使用脈寬調變 (PWM) 輸出一系列數位脈衝,用於控制類比電路。您可以變更這些脈衝的長度與頻率,判定電路總功率。PWM 訊號最常用於控制 DC 馬達,但也適用於其他許多應用,例如控制閥門或幫浦,或是調整 LED 的亮度。
構成 PWM 訊號的數位脈波列有固定頻率,並會改變脈寬,以改變訊號的平均功率。脈寬與週期的比值,即為訊號的工作週期 (Duty cycle)。舉例來說,如果 PWM 訊號的週期是 10 毫秒,且脈衝長度是 2 毫秒,則訊號的工作週期是 20%。 只要控制 PMW 的工作週期,就能控制類比電路所使用的功率。您可以使用 NI 數位模組輸出控制 PWM,或量測現有 PWM 的工作週期。
如果您的 CompactRIO 控制器支援 NI-DAQmx 程式設計,您也可以在 NI-DAQmx 中執行 PWM 作業。不過,由於 PWM 需要計數器,因此,PWM 作業數量會受限於 CompactRIO 內建的計數器數量。在 FPGA 中進行這項作業的程式設計,就能增加可執行的 PWM 作業數量。
圖 2.脈寬調變
下列範例使用 Loop Timer.vi 控制脈衝高低準位持續時間。此範例可於 Example Finder 中找到,並瀏覽至:
LabVIEW 2012 與更早版本:硬體輸入與輸出 » CompactRIO » FPGA Fundamentals » 計數器 » 事件計數器 » PWM Out, 簡單 - cRIO.lvproj。
LabVIEW 2013 與更新版本:硬體輸入與輸出»CompactRIO»Signal Generation and Processing»Digital»Pulse Width Modulation»PWM Generation» PWM Generation.lvproj.

圖 3.修改您的程式碼以產生 PWM 訊號
編碼器是用來量測運動或位置的機電裝置,適用於醫療裝置或工業機器測試等用途。大多數編碼器使用光學感測器以脈波列形式提供電子訊號。多組脈波列提供更多訊號相關資訊。數位模組 (例如 NI 9401) 能擷取這些脈波列,並使用 FPGA 將訊號轉換為運動、方向或位置資訊。您也可以使用 C 系列數位模組模擬編碼器的輸出,用於其他應用,例如硬體迴路 (HIL) 測試。由於編碼器可因應多種應用,因此其形狀、尺寸與輸出層級也大不相同。 NI 提供多款數位模組,可整合應用所需的特定編碼器。在工業環境中,使用 NI 9421 讀取 0 至 24V 訊號。在乾淨的實驗室環境中,使用 NI 9401 讀取電晶體對電晶體邏輯 (TTL) 或 0 至 5V 訊號。
同樣地,如果您的 CompactRIO 控制器支援 NI-DAQmx 程式設計,您也可以在 NI-DAQmx 中執行編碼器作業,但編碼器作業的數量會更加有限。在 FPGA 中進行這項作業的程式設計,即可增加可用的編碼器作業數量。
下列範例示範如何使用 LabVIEW FPGA 與 CompactRIO 系統執行編碼器量測。此範例使用布林邏輯來判斷 AB 象限編碼器是否正在旋轉,以及其旋轉方向為何。您可以在 Example Finder 中找到此範例,並瀏覽至:
LabVIEW 2013 與更新版本:工具組與模組 » FPGA » CompactRIO » Signal Generation and Processing »Digital » Quadrature Encoding » Quadrature Decoder » Quadrature Decoder.lvproj.
LabVIEW 2012 與更早版本:硬體輸入與輸出»CompactRIO»FPGA Fundamentals» Counters»Quadrature Input»Quad Ctr – cRIO.lvproj。

圖 4.在 FPGA 中使用布林邏輯來追蹤位置
數位訊號的頻率是週期發生率,當中的週期是上升緣或下降緣之間的時間,或是以赫茲 (Hz) 的單位進行週期的反向值。數位訊號的頻率非常適用於多種應用,從決定速度或角度速度,到解碼光源的密度,皆包含在內。使用 LabVIEW 與 CompactRIO 設計 C 系列數位模組的程式,將數位訊號傳輸至 FPGA,其使用週期解碼演算法。之後會將週期傳送至主機應用程式,由此應用程序推算出頻率。取得頻率之後,即可將頻率對應至已知的物理現象。
這樣一來,只要在 LabVIEW FPGA 中設計頻率輸入作業的程式,相較於 NI-DAQmx,您就能增加 FPGA 輸入作業的數量。由於某些頻率輸入作業會需要 2 組計數器,因此尤為實用。
圖 5.數位訊號的週期與頻率
下方範例說明如何使用 LabVIEW FPGA 與 CompactRIO 系統執行頻率量測。此範例使用布林邏輯判斷出現邊緣的時間,接著使用 FPGA 時脈判斷脈衝之間的時間。在 Example Finder 中可以找到此範例,需進入 LabVIEW 並瀏覽至:
LabVIEW 2013 與更新版本:硬體輸入與輸出»CompactRIO»Signal Generation and Processing»Digital»Period and Phase Measurement»Period and Phase Measurement.lvproj.
LabVIEW 2012 與更早版本:硬體輸入與輸出»CompactRIO»FPGA Fundamentals» Counters» Frequency Measurement» Count and Period – cRIO.lvproj.

圖 6.判斷數位訊號的週期與頻率
深入了解如何使用 NI 硬體進行頻率量測 https://www.ni.com/en/shop/data-acquisition/measurement-fundamentals/frequency-measurements-how-to-guide.html
環境雜訊等環境因素,或是工業切換器或感測器的機械「抖動」等因素,都會讓您的資料擷取系統難以接收清晰的訊號。搭載 FPGA 的 CompactRIO 系統可實作數位濾波或數位去抖動這項技術。數位濾波是一種驗證機制,必須確認訊號在指定的時間內持續維持在新準位後,才允許該訊號變更傳播至系統的處理層面。此方法可濾波線路的干擾或雜訊,並減少系統中的不必要行為。
下列範例示範如何使用布林邏輯、LabVIEW FPGA 與 CompactRIO 系統篩選數位通道。 訊號必須保持新準位指定的時間長度,才能讓濾波輸入反映變更。在 Example Finder 中可以找到此範例,需進入 LabVIEW 並瀏覽至:
LabVIEW 2012 與更早版本:硬體輸入與輸出»CompactRIO»FPGA Fundamentals»Digital Filter»Digital Filter – Continuous – cRIO.lvproj.
LabVIEW 2013 與更新版本:不再提供同等的範例。您可以在空白 VI 中拖曳下方的程式碼片段。

圖 7.使用 FPGA 篩選數位訊號
CompactRIO 系統與 C 系列模組包含許多標準通訊協定,從序列與乙太網路到 PROFIBUS 與 MODBUS 等工業級通訊協定不等。不過,這些標準協定的通訊能力可能會受限於使用不同協定或接頭的裝置。 CompactRIO 系統可讓您使用數位模組與 LabVIEW FPGA,繼續與這些裝置通訊。
圖 8.使用 LabVIEW 與 LabVIEW FPGA 執行 SPI 通訊協定
如需深入了解此協定,請參閱「了解 SPI 匯流排搭配 NI LabVIEW」,如需使用 LabVIEW FPGA 實作 SPI 匯流排協定的詳細範例,請參閲「在 LabVIEW FPGA 中實作 SPI 通訊協定」。
觸發功能在任何一種資料採集或控制系統中都是不可或缺的功能。使用觸發功能進行同步化、警示或啟動/關機作業。不過,NI-DAQmx 中的標準觸發函式並未提供自訂功能,例如使用多個輸入觸發器,或觸發其中一個邊緣或同時觸發兩個邊緣。 搭配 CompactRIO 系統使用 FPGA 建立客制化觸發應用。
若需如何只在發生數位碼型時產生觸發訊號的範例,請參閱「建立觸發器與計數器 (FPGA 模組)」。
圖 9.僅在發生數位碼型時產生觸發器