多功能智能DAQ設(shè)備配有自定義式板載處理功能,最大限度地為系統(tǒng)定時及觸發(fā)提供靈活性能。 與控制設(shè)備功能的固定
ASIC不同,智能DAQ采用基于
FPGA的系統(tǒng)定時控制器,令所有模擬和數(shù)字I/O能夠根據(jù)特定應(yīng)用操作接受相應(yīng)的配置。 本指南展示了:如何使用R系列智能DAQ板卡和NI LabVIEW
FPGA,靈活自如地執(zhí)行數(shù)據(jù)采集任務(wù)
入門
NI LabVIEW FPGA模塊幫助DAQ系統(tǒng)的開發(fā)者靈活自如地進行應(yīng)用程序編程以實現(xiàn)各類輸入/輸出操作。 用戶無需預(yù)先了解VHDL等硬件設(shè)計工具,便可將LabVIEW代碼嵌入FPGA芯片并獲得硬件定時的速度和可靠性。
讓我們先從數(shù)據(jù)采集硬件的常用組件切入論題。 假設(shè)您擁有了模數(shù)轉(zhuǎn)換器(ADC)、數(shù)模轉(zhuǎn)換器(DAC)和數(shù)字輸入/輸出線,則所有I/O便要根據(jù)實際操作接受某種方式的定時和控制。 典型的多功能數(shù)據(jù)采集設(shè)備采用功能齊全的ASIC,滿足了大多數(shù)的功能性需求。
比如:M系列DAQ設(shè)備通過DAQ-STC2,控制著各類硬件組件的定時和觸發(fā)。 智能DAQ硬件(如:R系列DAQ設(shè)備)區(qū)別于市面上的其他任何數(shù)據(jù)采集設(shè)備,因為在控制設(shè)備功能方面智能DAQ用基于FPGA的系統(tǒng)定時控制器取代了傳統(tǒng)ASIC,從而使得所有模擬和數(shù)字I/O都能根據(jù)特定應(yīng)用操作接受相應(yīng)的配置。 可重配置FPGA芯片通過NI LabVIEW FPGA模塊進行編程,此時NI LabVIEW的數(shù)據(jù)流模式仍舊適用,不過采用了一組新函數(shù)控制最底層的設(shè)備I/O。
LabVIEW FPGA I/O節(jié)點并不通過NI-DAQmx函數(shù)負責實現(xiàn)常見的任務(wù)和功能,而是靈活自如地在各個通道最底層上運行。 通過以下各部分的內(nèi)容,我們將了解NI-DAQmx的特定實例,并學習如何通過智能DAQ定制各類數(shù)據(jù)采集任務(wù)。
定時和觸發(fā)
實現(xiàn)高級數(shù)據(jù)采集的智能DAQ主要用于定制定時和觸發(fā)。 下方的范例程序框圖展現(xiàn)了:NI-DAQmx幫助實現(xiàn)的觸發(fā)式模擬輸入任務(wù)。

圖1. 通過NI-DAQmx實現(xiàn)的觸發(fā)式模擬輸入
如圖1所示,智能DAQ并未使用不同函數(shù)配置通道,而是通過名為I/O節(jié)點的函數(shù)讀寫各路模擬和數(shù)字通道。 讓我們看看使用NI LabVIEW FPGA中I/O節(jié)點所獲得的相同功能。

圖2. 通過智能DAQ和NI LabVIEW FPGA實現(xiàn)的觸發(fā)式模擬輸入
上圖既沒有針對全局通道、采樣時鐘、觸發(fā)的配置函數(shù),也沒有開始、停止和清除等任務(wù)。 所有內(nèi)容都被1個簡單的模擬I/O讀取所取代;全部定時都為本地LabVIEW結(jié)構(gòu)(如:While循環(huán)和條件結(jié)構(gòu))所控制。由于整個程序框圖均在FPGA硬件內(nèi)執(zhí)行,LabVIEW代碼的運行便體現(xiàn)出硬件定時的速度和可靠性。
讓我們更深入地了解一下該程序框圖的運行方式。 模擬I/O節(jié)點并不指定某個采樣速率,而使用For循環(huán)采集各個樣本。 與之對應(yīng)的ADC在I/O節(jié)點被調(diào)用時,負責對輸入信號進行實際數(shù)字化,因而通過For循環(huán)接受定時。 若想在100 kHz的頻率下進行信號采樣,針對循環(huán)的延遲就必須設(shè)定為10 ?s。 循環(huán)的定時器函數(shù)從第2輪循環(huán)迭代開始便確保著特定的時間延遲,用戶因而能夠通過順序結(jié)構(gòu)保證樣本之間存在著指定的時間間隔。 NI LabVIEW FPGA*能強大的條件結(jié)構(gòu),實際代表了用于封裝各類代碼的硬件觸發(fā)。 由于所有的函數(shù)和結(jié)構(gòu)都通過邏輯單元在硬件內(nèi)運行,所以條件結(jié)構(gòu)確保開始具有實時10 ?s時間精度的采樣。 最后需指出的是,由于操作位于硬件層,只涉及幾個層次的抽象處理,因此用戶無需清除任務(wù)ID或釋放內(nèi)存。
就基于FPGA的智能DAQ硬件而言,其真正的優(yōu)勢是能夠定制各類定時和觸發(fā),并在硬件中進行信號處理和決策。 現(xiàn)在讓我們了解一下:針對某類自定義應(yīng)用,需對模擬輸入觸發(fā)做出哪些修改。 若我們希望在2路模擬輸入通道的某路電壓超過指定范圍時便觸發(fā)采集,又該如何修改呢? 借助NI LabVIEW FPGA,此類任務(wù)的執(zhí)行易如反掌。

圖 3. 通過智能DAQ和NI LabVIEW FPGA實現(xiàn)的自定義觸發(fā)式模擬輸入
這里,我們已經(jīng)為程序框圖添加了第2個I/O節(jié)點和第2個比較函數(shù),以及1個布爾“或”函數(shù)。 智能DAQ硬件為所有的模擬輸入通道提供專用ADC,因而2路通道能夠接受同步采樣;同時,只要任何1路通道的電壓超過了指定范圍,條件結(jié)構(gòu)便會執(zhí)行“真”條件,并開始以10 ?s時間精度進行采樣。 請記住:缺少智能DAQ便不可能生成類似的觸發(fā);在其他DAQ硬件上應(yīng)用時,觸發(fā)需要具有更高延遲的軟件定時來實現(xiàn)。 如果此后我們希望通過擴展將監(jiān)控范圍從2路通道延伸至全部8路通道,甚至希望添加數(shù)字觸發(fā),就需要簡化自定義代碼。 添加預(yù)觸發(fā)掃描后,用戶便可對輸入通道不斷進行采樣并將數(shù)據(jù)傳送至FIFO緩沖器。 觸發(fā)器一旦接受讀取,F(xiàn)IFO緩沖器和此后的采樣便可經(jīng)由DMA通道,被傳送至主機。
如果我們希望借助NI-DAQmx驅(qū)動,對第2模擬輸入通道進行采樣,則該程序框圖與圖1所示的內(nèi)容相差無幾。然而限制依然存在,因為2路通道均被迫引用相同的觸發(fā)器并以相同的時鐘頻率進行采樣。 現(xiàn)在我們來看看:智能DAQ和NI LabVIEW FPGA幫助實現(xiàn)的各類多通道采樣。

圖4. 通過智能DAQ實現(xiàn)的觸發(fā)式同步模擬輸入
圖4(上圖)展現(xiàn)了:如何基于模擬輸入通道0中的模擬觸發(fā)器,對2路不同的模擬輸入通道進行同步采樣。由于智能DAQ設(shè)備均配有獨立的ADC,在同一I/O節(jié)點中的2路通道可在完全相同的時刻接受采樣。 典型的多功能DAQ設(shè)備可通過一個ADC多路復用所有通道,因此,各路通道必須共享相同的采樣時鐘和觸發(fā)線。 圖5(下圖)展現(xiàn)了:智能DAQ硬件其實能夠以獨立的速率,對不同的模擬輸入通道進行采樣。 在獨立回路中放置模擬輸入I/O節(jié)點后,每路通道會以完全不同的速率進行采樣,然后各自通過2條DMA通道讀寫硬盤。

圖5. 通過智能DAQ實現(xiàn)的觸發(fā)式多速率模擬輸入
最后需指出的是,我們?nèi)羰窍M?路通道具有相互獨立的采樣率和開始觸發(fā),則可參照圖6,將所有I/O節(jié)點都部署在并行循環(huán)結(jié)構(gòu)中。該方式充分利用了FPGA的并行性,確保了各項任務(wù)能夠使用專用資源并在執(zhí)行時完全獨立于其他采集任務(wù)。

圖6. 通過智能DAQ實現(xiàn)的獨立觸發(fā)式多速率模擬輸入
同步
DAQmx驅(qū)動程序提供多種同步選擇,幫助建立輸入和輸出的時間相關(guān)性。 在下方的程序框圖中,模擬輸入通道和模擬輸出通道借助數(shù)字觸發(fā)實現(xiàn)同步;過程中,需對模擬輸入指定數(shù)字觸發(fā),并使用模擬輸入的觸發(fā)器信號觸發(fā)產(chǎn)生模擬輸出。

圖7. 通過NI-DAQmx實現(xiàn)的同步模擬輸入和輸出
用戶可通過智能DAQ硬件輕而易舉地執(zhí)行同步任務(wù),而無需借助任務(wù)ID和板載信號路由。 本處即顯示了NI LabVIEW FPGA中的內(nèi)容。

圖8. 通過智能DAQ實現(xiàn)的同步模擬輸入和輸出
此處,我們再次通過條件結(jié)構(gòu)在FPGA芯片上執(zhí)行硬件觸發(fā),而數(shù)字通道0上的上升沿則啟用了真條件中的代碼。 在順序結(jié)構(gòu)中,模擬輸入與輸出的節(jié)點在同時接受調(diào)用的過程中,幾乎沒有任何抖動;而我們只要簡單地在各個獨立的While循環(huán)內(nèi)嵌入模擬I/O節(jié)點,即可令其擁有獨立的采樣速率。 另外值得注意的是: 程序框圖中顯示的正弦發(fā)生器函數(shù)是1個Express VI,可幫助用戶在查找表(LUT)中交互式地配置正弦值。
圖8中的智能DAQ程序框圖與圖7中的DAQmx VI皆具有相同的功能,而唯有智能DAQ才能為自定義任務(wù)提供相應(yīng)的靈活性。 舉例為證:如需添加1個暫停觸發(fā),我們只消在內(nèi)部While循環(huán)中添加1個條件結(jié)構(gòu),并通過另一個數(shù)字I/O節(jié)點選擇真條件或假條件,即可輕松完成任務(wù)。 對硬件進行編程的強大功能,實現(xiàn)了各類I/O的定時與同步。
多功能同步的另一例證體現(xiàn)為:通過板載計數(shù)器產(chǎn)生有限脈沖并將計數(shù)器輸出用作模擬輸入的采樣時鐘。 該過程是進行可重觸發(fā)式有限采樣的常用手段。 下圖顯示了開展此類采集所必需的DAQmx代碼。

圖9. 通過NI-DAQmx實現(xiàn)的可重觸發(fā)式有限模擬輸入
現(xiàn)在,讓我們對下圖內(nèi)容和呈現(xiàn)相同功能的NI LabVIEW FPGA程序框圖,加以比較。

圖10. 通過智能DAQ和NI LabVIEW FPGA實現(xiàn)的可重觸發(fā)式有限模擬輸入
由于NI LabVIEW代碼在硬件層運行,圖10中的驅(qū)動配置步驟顯然得到了極大精減。 我們已經(jīng)借助簡單的數(shù)字輸入線和For循環(huán)結(jié)構(gòu),創(chuàng)建了硬件可重觸發(fā)式有限采集。 圖9中的程序框圖使用2個板載計數(shù)器,創(chuàng)建出可重觸發(fā)的有限脈沖序列;典型的多功能DAQ設(shè)備只有2個計數(shù)器。 而借助NI LabVIEW FPGA,智能DAQ硬件卻能夠?qū)⑷我庖粭l數(shù)字線配置成計數(shù)器。 我們將在之后的段落里,涉及更多“通過智能DAQ運行計數(shù)器/定時器”的內(nèi)容。
我們能夠借助由頻率觸發(fā)的采集,進一步地推進智能DAQ在硬件定時方面的靈活性特性。 用戶可通過高速板載決策計算輸入信號的頻率,而后選擇條件結(jié)構(gòu)中所需的代碼;這一點是使用典型多功能DAQ設(shè)備所無法企及的。 在多設(shè)備的同步進程中,智能DAQ還可提供用于PCI板卡的RTSI總線或是用于PXI模塊的PXI觸發(fā)總線。 這些外部定時和同步線還可通過程序框圖上的I/O節(jié)點接受訪問。
模擬波形的生成
不少多功能DAQ設(shè)備都配有模擬輸出通道,能夠為了生成連續(xù)的模擬波形而需要用到FIFO緩沖。 生成的波形可將FIFO用作循環(huán)緩沖區(qū),且無需從主機處接受任何更新數(shù)據(jù),即可連續(xù)不斷地重新生成一系列的模擬值。 通信總線的有無對此影響不大,因為并沒有針對設(shè)備的頻繁數(shù)據(jù)讀寫。 而如果波形需要修改,就必須重新啟動輸出任務(wù)并向FIFO寫入新數(shù)據(jù)。 另一個辦法是向硬件FIFO設(shè)備連續(xù)讀寫數(shù)據(jù),而這又會導致輸出任務(wù)出現(xiàn)時滯。 借助智能DAQ,用戶能夠?qū)⒉ㄐ屋敵鼋Y(jié)果存儲于硬件,甚至能夠通過硬件觸發(fā)改變波形,進而創(chuàng)建任意波形發(fā)生器。
下方的函數(shù)發(fā)生器范例通過數(shù)字輸入線,觸發(fā)了輸出波形中的改動。 通過組合數(shù)字I/O線0與1,我們?nèi)〉昧藨?yīng)用于模擬輸出的4種不同狀態(tài)或稱條件。

圖11a. 配有智能DAQ條件0的函數(shù)發(fā)生器 – 零輸出

圖11b. 配有智能DAQ條件1的函數(shù)發(fā)生器 – 正弦波
當兩線皆呈現(xiàn)低電平時,執(zhí)行條件0;如圖11a所示,輸出值為0 V常量。而當DIO線0呈現(xiàn)高電平而DIO線1呈現(xiàn)低電平時,條件1將在模擬輸出0上執(zhí)行并生成一個正弦波。用戶可通過該正弦生成結(jié)構(gòu)(圖11b)中的正弦發(fā)生器Express VI,配置NI LabVIEW FPGA必需的參數(shù),交互地配置正弦波。

圖11c. 配有智能DAQ條件2的函數(shù)發(fā)生器 – 方波
條件2(圖11c)能夠在While循環(huán)的每輪迭代中,輕松切換布爾值。 數(shù)值較低時,整數(shù)15000便被寫入模擬輸出AO0,以對應(yīng)16位DAC內(nèi)由輸出寄存器存放的數(shù)值:15000。 16位有符號整數(shù)可以包含-32768到32767之間的數(shù)值。當輸出電壓范圍介于-10 V和10 V時,向模擬輸出AO0寫入-32768會生成-10 V電壓,而寫入32767則生成10 V電壓。該例中,因我們的寫入值為15000,則生成的電壓將低于5 V。(數(shù)學公式為: 15000/32767 * 10 V = 4.5778 V) 通常,條件2會輸出一個在0 V和4.578 V之間變換的方波。

圖11d. 配有智能DAQ條件3的函數(shù)發(fā)生器 – 鋸齒波
當DIO 0和DIO 1均呈現(xiàn)高電平時,便執(zhí)行最后一個條件(圖11d);其間,須借助查找表(LUT)連續(xù)生成一個鋸齒波。 作為另一類Express VI的查表VI,既能存儲任意波形值,也能通過編程建立波形值的索引。 該例中,接受配置的鋸齒波可在模擬輸出通道0上生成。
通過將所有的值都存儲在FPGA上,用戶在降低總線依賴性的同時,也確保了波形更新時硬件定時的速度和可靠性。 之前各部分中所描述的模擬輸入的觸發(fā)和同步靈活性同樣適用于模擬輸出;借助智能DAQ,用戶能夠以不同速率,完全獨立地更新各路模擬輸出通道。 這意味著:用戶可在不影響其他通道輸出結(jié)果的前提下,修改單個周期性波形的頻率。 請注意:大多數(shù)數(shù)據(jù)采集硬件均不具備此項功能。
計數(shù)器/定時器的操作
如前所述,典型的多功能DAQ設(shè)備只有2個板載計數(shù)器,而智能DAQ則能在各條數(shù)字線上運行計數(shù)器功能。 數(shù)字I/O節(jié)點能夠在NI LabVIEW FPGA中利用名為單周期定時循環(huán)的專業(yè)結(jié)構(gòu),幫助用戶在2.5 MHz至200 MHz的特定頻率范圍內(nèi)執(zhí)行代碼。 例如,借助40 MHz的時鐘,用戶可使用單周期定時循環(huán),在各條數(shù)字線上創(chuàng)建40 MHz計數(shù)器。 圖12(下圖)展現(xiàn)了程序框圖的樣式。

圖12. 配有智能DAQ的簡單事件計數(shù)器
由于計算值基于U32(32位整數(shù))的數(shù)據(jù)類型被發(fā)送至顯示控件,該代碼便在FPGA芯片上生成了1個40 MHz的32位計數(shù)器。 用戶可對其進行數(shù)次復制與粘貼,令不同數(shù)字線上的多個計數(shù)器都能夠彼此完全并行地運行。 通過對智能DAQ中參數(shù)的設(shè)置可以實現(xiàn)定時器操作的自定義。 通過選擇,用戶能夠每隔2個上升沿便進行1次計數(shù)器遞增,甚至能基于計數(shù)寄存器的值觸發(fā)模擬采集。 許多復雜的計數(shù)器操作(如:有限脈沖序列生成和級聯(lián)式事件計數(shù))均需要使用2個計數(shù)器,這意味著使用典型多功能設(shè)備中的所有板載計數(shù)器。 在總共160條數(shù)字線的幫助下,智能DAQ硬件上定時器的最大數(shù)量很少受到I/O可用性的影響,而往往取決于FPGA芯片的大小。 由于NI LabVIEW代碼運行于硅芯片中,因而用戶無需“裝備”或“重新裝備”通用計數(shù)器,即能全面控制計數(shù)器的運行。
圖13(下圖)中的范例使用計數(shù)器,生成了一個連續(xù)脈沖序列并將暫停觸發(fā)器置于NI-DAQmx中。

圖13. 連續(xù)脈沖序列的生成和配有NI-DAQmx的暫停觸發(fā)器
在NI LabVIEW FPGA中,暫停觸發(fā)器無需接受配置,因為只需簡單的條件結(jié)構(gòu)便能在硅芯片中實現(xiàn)相同的功能。 此處是通過智能DAQ運行時所展現(xiàn)的相同功能(圖14)。

圖14. 連續(xù)脈沖序列的生成和配有智能DAQ的暫停觸發(fā)器
在這種情況下,數(shù)字I/O線DIO0用作暫停觸發(fā),而脈沖將在數(shù)字I/O線DIO1上生成并輸出。使用單周期定時循環(huán)可令各個脈沖獲得25 ns的分辨率,因為這將成為單個計時在使用40 MHz定時源時的值。
數(shù)字I/O應(yīng)用
智能DAQ硬件提供多達160條硬件定時數(shù)字線,令諸多數(shù)字應(yīng)用成為可能。 我們已經(jīng)學習了如何使用數(shù)字I/O實現(xiàn)觸發(fā)、同步及計數(shù)器/定時器的運行,而智能DAQ還可用于誤碼率測試、數(shù)字模式匹配、脈沖寬度調(diào)制、正交編碼器和數(shù)字通信協(xié)議。 自定義或標準形式的串行接口均能直接通過數(shù)字定時框圖編程來實現(xiàn)。 舉例說明,SPI便是一款與硬件組件(如:微控制器或ADC)進行通信時最常用的串口協(xié)議。 圖15(下圖)展現(xiàn)了在進行16位SPI通信時,3條必要數(shù)字線所對應(yīng)的定時框圖。

圖15. SPI通信輸入定時框圖
如定時框圖所示,所有16位數(shù)據(jù)均在每個時鐘周期上順次傳遞,而片選控制線(chip select line)則呈現(xiàn)低電平。 現(xiàn)在,我們來看看在NI LabVIEW FPGA中,如何通過智能DAQ硬件上的3條數(shù)字線進行此類編程。