Arnie Mae Baes 和 Christian Garcia
虛擬電子實驗室是一系列基于軟件的儀器。這是作為軟件應(yīng)用實現(xiàn)的仿真電子實驗室環(huán)境,用戶可以在該環(huán)境中開展大量電子實驗。功能齊全的物理實驗室可能造價昂貴且難以管理。想象一下,如果能夠構(gòu)建一個可放入口袋的電子實驗室;將帶來無限可能!
本文旨在演示用戶如何使用ADALM2000開發(fā)自己的虛擬實驗室儀器。本文將使用Python這種簡單的開源編程語言。將Python與ADALM2000相結(jié)合,可以開發(fā)多個虛擬實驗室儀器,如示波器、信號發(fā)生器、數(shù)字萬用表等。但本文將重點討論一種儀器——示波器。從該儀器入手是個不錯的選擇,這是我們在實際電子實驗室中常用的基本儀器之一。
簡介
儀器儀表行業(yè)正穩(wěn)定迅速地朝著虛擬化方向發(fā)展?;谲浖膬x器托管在PC上,PC使用盡可能少的專業(yè)硬件將其連接到必須測量/控制的設(shè)備。該硬件通常包括用于直接將信號數(shù)字化或控制獨立儀器的接插板。
虛擬儀器儀表因其靈活性、模塊化和可移植性而聞名。ADI公司為客戶提供適合幾乎所有用例的電子模塊,其中ADALM2000就是一個很好的例子。
通過ADALM2000,工程師或開發(fā)人員可根據(jù)具體需求創(chuàng)建自己的虛擬電子實驗室。通過libm2k庫,用戶可以使用C++、C#或Python開發(fā)用于控制ADALM2000的軟件應(yīng)用。后面部分將詳細討論ADALM2000和libm2k。
什么是示波器?
示波器可用于常見電路和復(fù)雜電路的信號分析,因而是電子工程的重要組成部分。除此之外,如今的示波器能夠與計算機連接,因此在示波器中捕獲的信號能夠以數(shù)字形式存儲,供日后分析。
示波器用于直觀呈現(xiàn)模擬或數(shù)字波形的電壓和時間特性。前面板控件(放大器觸發(fā)、掃描時間和顯示屏)用于調(diào)整顯示內(nèi)容,以更好地直觀呈現(xiàn)信號。
示波器向我們展示信號輸入在特定時間段內(nèi)的行為,這對于分析常見電路至關(guān)重要。此外,它有助于驗證這些電路的功能。這也是示波器成為不可或缺的電子實驗設(shè)備的主要原因。此外,我們允許工程師定制自己的示波器來滿足需求,從而可以改進特定電子電路的分析。
ADALM2000是什么?
ADALM2000是主動學(xué)習(xí)模塊,具有數(shù)字示波器、函數(shù)發(fā)生器、邏輯分析儀、電壓表、頻譜和數(shù)字總線分析儀,以及兩個可編程的電源。對于基礎(chǔ)用戶或?qū)W生,可以將Scopy與ADALM2000連接。對于應(yīng)用開發(fā)人員,可使用libm2k庫開發(fā)應(yīng)用接口。對于固件開發(fā)人員,還可以選擇開發(fā)能夠直接在ADALM2000上運行的定制軟件或HDL。
開始使用
安裝Python和PyCharm
Python是功能強大、簡單易學(xué)的開源編程語言。Python可從 official Python 官方網(wǎng)站下載。如果您不確定要使用哪個版本,請選擇Python 3.7。
安裝庫
Python庫包含可用于特定應(yīng)用的方法或函數(shù)。在本文中,我們將使用libm2k、matplotlib和NumPy。
Libm2k
若要使用Python與ADALM2000交互,您需要安裝libm2k庫。這是C++庫,帶有可用于Python、C#、MATLAB?和LabVIEW?的綁定,具備以下功能:
AnalogIn 用于示波器或電壓表。我們將重點介紹該功能。
AnalogOut 用于信號發(fā)生器。
Digital 用于邏輯分析儀或模式發(fā)生器。
DMM 用于數(shù)字萬用表。
安裝Libm2k
安裝該庫的一種方法是按照以下步驟操作:
轉(zhuǎn)到 發(fā)布頁面。
下載該庫的最新可執(zhí)行版本。示例:Libm2k-0.4.0-Windows-Setup.exe
運行可執(zhí)行文件。當(dāng)“設(shè)置”窗口提示您選擇其他任務(wù)時,請務(wù)必選擇安裝libm2k Python綁定。
安裝結(jié)束。Libm2k將安裝在Python的默認環(huán)境中。
Matplotlib
若要創(chuàng)建示波器顯示,您需要使用matplotlib庫。該庫備受歡迎且易于使用,用于在Python中定制和顯示可視化內(nèi)容。
NumPy
簡單的示波器仍將需要大量數(shù)學(xué)計算。NumPy庫可以為復(fù)雜的計算提供簡單的函數(shù)。
安裝Matplotlib和NumPy
若要安裝matplotlib和NumPy,請在PyCharm中按照以下步驟操作:
轉(zhuǎn)到“文件”>“設(shè)置”>“項目解釋器”。
點擊“設(shè)置”窗口右側(cè)的+圖標(biāo)。
將出現(xiàn)“可用軟件包”窗口。在搜索框中,搜索matplotlib和NumPy。
指定要安裝的版本(選擇最新版本)。
點擊安裝軟件包按鈕。
圖3. 在PyCharm中安裝庫包。
硬件設(shè)置
在開始編碼前,我們先設(shè)置硬件組件。需要使用以下硬件組件:
信號源(或信號發(fā)生器,如適用)
ADALM2000
探頭和限幅器
如果信號發(fā)生器可用,請按照圖4中顯示的配置,使用探頭和/或限幅器將ADALM2000設(shè)備連接到通道1和通道2。
圖4. 使用信號發(fā)生器和ADALM2000的實際設(shè)置。
信號發(fā)生器 | ADALM2000 |
Ch1 正極引線 (+) | 1+ |
Ch1 地 | 1– |
Ch2 正極引線 (+) | 2+ |
Ch2 地 | 2– |
對于其他可用的信號源,您也可以遵循相同配置。最后,通過USB端口將ADALM2000設(shè)備連接到PC。
簡單的虛擬示波器
在這一部分,我們將逐個代碼塊介紹程序。我們還將討論代碼的作用,并說明以這些方式編寫代碼的原因。我們將在隨后的部分中演示其他示例,在這些示例中,我們會修改基礎(chǔ)代碼,以添加更多功能,從而滿足開發(fā)人員用例要求。
首先,導(dǎo)入將用于開發(fā)虛擬示波器的三個庫(libm2k、matplotlib和NumPy)。
統(tǒng)一資源標(biāo)識符(URI)是連接到PC的每個ADALM2000的唯一標(biāo)識符。該代碼塊確保ADALM2000連接到PC。如果沒有ADALM2000設(shè)備插入PC,代碼將自動退出。
通過檢測到的URI連接到ADALM2000?!?strong>uri[0]”是在連接了多個設(shè)備的情況下檢測到的第一個ADALM2000設(shè)備的URI。
對ADC和DAC運行校準(zhǔn)。這是確保我們將獲得準(zhǔn)確測量的重要步驟。
設(shè)置采樣速率和時長。可用采樣速率有1 kHz、10 kHz、100 kHz、1 MHz、10 MHz和100 MHz。采樣速率是在1秒內(nèi)獲得樣本的次數(shù),時長是獲得這些樣本的持續(xù)采樣時間。例如,如果將采樣速率設(shè)為1000,時長設(shè)為3,那么每秒將獲得1000個樣本,并持續(xù)采樣3秒。因此,共有3000個樣本。
啟用并將通道1設(shè)置為示波器的模擬輸入。
Linspace 用于創(chuàng)建等間距的樣本陣列。我們將使用該NumPy函數(shù)創(chuàng)建時間x軸數(shù)據(jù)陣列。該函數(shù)的第一和第二個參數(shù)分別表示陣列的起始和結(jié)束值。最后一個參數(shù)是希望在起始和結(jié)束值范圍內(nèi)生成的樣本數(shù)。
在該示例中,起始值是0,結(jié)束值是設(shè)置的時長,也就是3。對于樣本數(shù),將duration與sample_rate相乘,即可獲得所需的總樣本數(shù),也就是3000個樣本。這3000個樣本將均勻放置在0和3之間。該數(shù)組將存儲在time_x中。
data_y存儲我們使用ADALM2000設(shè)備收集的波形樣本。通道1的樣本存儲在data_y[0]中,通道2的樣本存儲在data_y[1]中。為了顯示精確的波形頻率,必須使用與time_x相同的樣本數(shù)量。
創(chuàng)建我們將處理的圖形。plt.subplots函數(shù)將返回圖形對象(存儲在fig中)和軸對象(存儲在ax中),這些對象將用于自定義整個圖形。
我們可以添加網(wǎng)格線,作為波形的參考坐標(biāo)。添加軸標(biāo)簽和y限制,以添加有關(guān)圖形的更多細節(jié)。
顯示圖形。
在代碼末尾銷毀上下文。
運行代碼,將會看到類似圖5的圖形。
圖5. 單通道正弦波輸出;一個信號發(fā)生器輸出:10 Hz,2 V p-p。
雙通道虛擬示波器
在這一部分,我們將使用上一部分中的代碼,并添加更多代碼塊,以創(chuàng)建雙通道虛擬示波器。
若要添加另一個通道,請復(fù)制ocsi.enableChannel和ocsi.setRange行代碼,并將第一個參數(shù)從libm2k.ANALOG_IN_CHANNEL_1更改為libm2k.ANALOG_IN_CHANNEL_2。
在創(chuàng)建圖形時,為通道2添加另一個圖形。通道2的數(shù)據(jù)在data_y[1]陣列中。我們也可以自定義兩個圖形的顏色,以便輕松區(qū)分二者。在該示例中,通道1使用淺珊瑚色,通道2使用鋼藍色。
運行代碼,應(yīng)該會得到類似圖6的結(jié)果。
圖6. 雙通道正弦波輸出。通道1信號發(fā)生器輸出:10 Hz,2 V p-p;通道2信號發(fā)生器輸出:5 Hz,3 V p-p。
虛擬示波器的其他功能
在這一部分,我們將為虛擬示波器添加其他功能,以提升交互性。Matplotlib提供我們可以使用的多個小部件。在該示例中,我們將使用文本標(biāo)簽和滑塊小部件。我們還將繼續(xù)使用上一部分中的代碼。
為matplotlib滑塊添加另一次導(dǎo)入。
將時間和數(shù)據(jù)陣列轉(zhuǎn)換為NumPy陣列。在下一個代碼塊進行的計算中,將使用這些陣列。
獲取所有波形數(shù)據(jù)后,提取這些波形的特性將不在話下。在以下代碼塊中,我們從獲取的兩個通道的數(shù)據(jù)中提取了Vpp、Vave和Vrms。要計算Vpp,將data_y numpy陣列中找到的最大值和最小值的絕對值相加。要計算Vave,只需用Vpp除以pi。要計算Vrms,用Vpp除以2乘以√2。
該代碼塊與前面部分類似。唯一的區(qū)別是,我們?yōu)閳D形使用NumPy陣列,而不是使用原始陣列。我們還根據(jù)圖形創(chuàng)建了波形對象。稍后我們將使用這些對象。
為了在圖形中顯示計算的Vpp、Vave和Vrms,我們將利用matplotlib庫中的文本標(biāo)簽小部件。創(chuàng)建字符串標(biāo)簽label_ch1和label_ch2,然后連接這兩個字符串,以創(chuàng)建最終標(biāo)簽fin_label。我們將使用plt.text創(chuàng)建文本標(biāo)簽。第一和第二個參數(shù)(0.2, 3)是文本的x和y位置。第三個參數(shù)是要顯示的字符串。第四和第五個參數(shù)分別是文本和框的樣式。
接下來,我們創(chuàng)建偏移滑塊。該滑塊用于調(diào)整波形的參考電平。將主圖形向左調(diào)整,為滑塊留出空間。plt.axes定義滑塊的尺寸、位置和表面顏色。Slider函數(shù)用于為偏移滑塊創(chuàng)建具有特定特性的對象。
創(chuàng)建update_offset函數(shù),并將其注冊到offset_slider對象。每次更改滑塊的值時,該函數(shù)都會向波形添加偏移量。
運行代碼,將會看到類似圖7的圖形。
圖7. 帶偏移滑塊的默認雙通道正弦波輸出。
嘗試使用滑塊調(diào)整偏移量。將會看到波形實時上下移動。
圖8. 調(diào)整偏移量滑塊(向左滑動),用于調(diào)整兩個通道輸出的偏移量。
總結(jié)
本文解釋了擁有虛擬電子實驗室的重要性和便利性。文中還演示了如何使用ADALM2000和Python開發(fā)虛擬示波器。討論了軟件要求和硬件設(shè)置,并提供了3個示例。
審核編輯:郭婷
-
示波器
+關(guān)注
關(guān)注
113文章
6237瀏覽量
184757 -
信號發(fā)生器
+關(guān)注
關(guān)注
28文章
1469瀏覽量
108727 -
python
+關(guān)注
關(guān)注
56文章
4790瀏覽量
84601
發(fā)布評論請先 登錄
相關(guān)推薦
評論