當前位置: 主頁 > 技術&應用 >
 

虛擬電子實驗室:如何使用Python編程語言和ADALM2000創建示波器

本文作者:Arnie Mae Baes       點擊: 2022-08-24 15:53
前言:
作者:ADI 軟體系統工程師Arnie Mae Baes 及軟體系統工程師 Christian Garcia
摘要
虛擬電子實驗室是一系列基於軟體的儀器。這是作為軟體應用實現的模擬電子實驗室環境,使用者可以在該環境中開展大量電子實驗。功能齊全的物理實驗室可能造價昂貴且難以管理。想像一下,如果能夠建構一個可放入口袋的電子實驗室,將帶來無限可能!
 
本文旨在展示使用者如何使用ADALM2000開發自己的虛擬實驗室儀器。本文將使用Python這種簡單的開源編程語言。將Python與ADALM2000相結合,可以開發多個虛擬實驗室儀器,如示波器、訊號產生器、數位萬用表等。但本文將重點討論一種儀器——示波器。從該儀器入手是個不錯的選擇,這是我們在實際電子實驗室中常用的基本儀器之一。
 
簡介
儀器儀錶產業正穩定迅速地朝著虛擬化方向發展。基於軟體的儀器託管在PC上,PC使用盡可能少的專業硬體將其連接到必須測量/控制的設備。該硬體通常包括用於直接將訊號數位化或控制獨立儀器的接插板。
 
虛擬儀器儀錶因其彈性、模組化和可攜性而聞名。ADI為客戶提供適合幾乎所有用例的電子模組,其中ADALM2000就是一個很好的例子。
透過ADALM2000,工程師或開發人員可根據具體需求創建自己的虛擬電子實驗室。透過libm2k庫,用戶可以使用C++、C#或Python開發用於控制ADALM2000的軟體應用。後面部分將詳細討論ADALM2000和libm2k。
 
什麼是示波器?
示波器可用於常見電路和複雜電路的訊號分析,因而是電子工程的重要組成部分。除此之外,如今的示波器能夠與電腦連接,因此在示波器中擷取的訊號能夠以數位形式儲存,供日後分析。 
圖1. 示波器示意圖。
 
示波器用於直覺呈現類比或數位波形的電壓和時間特性。前面板控制項(放大器觸發、掃描時間和顯示幕)用於調整顯示內容,能更直覺呈現訊號。
 
示波器向我們展示訊號輸入在特定時間段內的行為,這對於分析常見電路非常重要。此外,其有助於驗證這些電路的功能。這也是示波器成為不可或缺的電子實驗設備的主要原因。此外,我們允許工程師定制自己的示波器來滿足需求,從而可以改善特定電子電路的分析。
 
ADALM2000是什麼?
ADALM2000是主動學習模組,具有數位示波器、函數產生器、邏輯分析儀、電壓表、頻譜和數位匯流排分析儀,以及兩個可編程的電源。對於基礎用戶或學生,可以將Scopy與ADALM2000連接。對於應用開發人員,可使用libm2k庫開發應用介面。對於韌體開發人員,還可以選擇開發能夠直接在ADALM2000上運行的定制軟體或HDL。
 
開始使用
安裝Python和PyCharm

Python是功能強大、簡單易學的開源程式設計語言。Python可從 official Python 官方網站下載。如果您不確定要使用哪個版本,請選擇Python 3.7,或下載最新版PyCharm Community。

安裝庫

Python庫包含可用於特定應用的方法或函數。在本文中,我們將使用libm2k、matplotlib和NumPy。

Libm2k

若要使用Python與ADALM2000交互,您需要安裝libm2k庫。這是C++庫,具有可用於Python、C#、MATLAB®和LabVIEW®的綁定,具備以下功能:
AnalogIn 用於示波器或電壓表。我們將重點介紹該功能。
AnalogOut 用於訊號產生器。
Digital 用於邏輯分析儀或模式產生器。
PowerSupply 用於恆壓發電機。
DMM 用於數位萬用表。
有關該庫的詳細資訊,請瀏覽 libm2k 維基百科頁面。

安裝Libm2k

安裝該庫的一種方法是按照以下步驟操作:
轉到 發佈頁面。

o 下載該庫的最新可執行版本。示例:Libm2k-0.4.0-Windows-Setup.exe
運行可執行檔。當「設定」視窗提示您選擇其他任務時,請務必選擇安裝libm2k Python綁定。
 
圖2. Libm2k安裝視窗
 
安裝結束。Libm2k將安裝在Python的默認環境中。

Matplotlib

若要創建示波器顯示,您需要使用matplotlib庫。該庫備受歡迎且易於使用,用於在Python中定制和顯示視覺化內容。有關該庫的詳細資訊,請瀏覽 matplotlib 網站。

NumPy

簡單的示波器仍將需要大量數學計算。NumPy庫可以為複雜的計算提供簡單的函數。有關該庫的詳細資訊,請瀏覽 NumPy 網站。

安裝Matplotlib和NumPy

若要安裝matplotlib和NumPy,請在PyCharm中按照以下步驟操作:
轉到「檔」>「設定」>「專案解譯器」。
點擊「設定」視窗右側的+圖示。
將出現「可用套裝軟體」視窗。在搜尋框中,搜尋matplotlib和NumPy。
指定要安裝的版本(選擇最新版本)。
點擊安裝套裝軟體按鈕。
 
圖3. 在PyCharm中安裝庫軟體。
 
硬體設定
在開始編碼前,我們先設定硬體元件。需要使用以下硬體元件:
訊號源(或訊號產生器,如適用)
ADALM2000
探頭和限幅器
 
如果訊號產生器可用,請按照圖4中顯示的配置,使用探頭AND、OR限幅器將ADALM2000裝置連接到通道1和通道2。
 
圖4. 使用訊號產生器和ADALM2000的實際設定。
 
表1. 接腳配置

訊號產生器

ADALM2000

Ch1 正極引線 (+)

1+

Ch1 接地

1–

Ch2 正極引線 (+)

2+

Ch2 接地

2–


對於其他可用的訊號源,您也可以遵循相同配置。最後,透過USB埠將ADALM2000裝置連接到PC。
 
簡單的虛擬示波器
在這一部分,我們將逐每一代碼塊介紹程式。我們還將討論代碼的作用,並說明以這些方式編寫代碼的原因。我們將在隨後的部分中展示其他示例,在這些示例中,我們會修改基礎代碼,以增加更多功能,從而滿足開發人員用例要求。
 
首先,導入將用於開發虛擬示波器的三個庫(libm2k、matplotlib和NumPy)。
 
 
統一資源識別項(URI)是連接到PC的每個ADALM2000的唯一識別碼。該代碼塊確保ADALM2000連接到PC。如果沒有ADALM2000裝置插入PC,代碼將自動退出。
 
 
透過檢測到的URI連接到ADALM2000。“uri[0]”是在連接了多個裝置的情況下檢測到的第一個ADALM2000裝置的URI。
 
 
對ADC和DAC運行校準。這是確保我們將獲得準確測量的重要步驟。
 
 
設定採樣速率和持續時間。可用採樣速率有1 kHz、10 kHz、100 kHz、1 MHz、10 MHz和100 MHz。採樣速率是在1秒內獲得樣本的次數,持續時間是獲得這些樣本的持續採樣時間。例如,如果將採樣速率設為1000,持續時間設為3,那麼每秒將獲得1000個樣本,並持續採樣3秒。因此,共有3000個樣本。
 
 
啟用並將通道1設定為示波器的類比輸入。
 
 
Linspace 用於創建等間距的樣本陣列。我們將使用該NumPy函數創建時間x軸資料陣列。該函數的第一和第二個參數分別表示陣列的起始和結束值。最後一個參數是希望在起始和結束值範圍內產生的樣本數。
 
在該示例中,起始值是0,結束值是設定的持續時間,也就是3。對於樣本數,將duration與sample_rate相乘,即可獲得所需的總樣本數,也就是3000個樣本。這3000個樣本將均勻放置在0和3之間。該陣列將儲存在time_x中。
 
data_y儲存我們使用ADALM2000裝置收集的波形樣本。通道1的樣本儲存在data_y[0]中,通道2的樣本儲存在data_y[1]中。為了顯示精準的波形頻率,必須使用與time_x相同的樣本數量。
 
 
創建我們將處理的圖形。plt.subplots函數將返回圖形物件(存儲在fig中)和軸物件(存儲在ax中),這些物件將用於自訂整個圖形。
我們可以增加格線,作為波形的參考座標。增加軸標籤和y限制,以增加有關圖形的更多細節。
 
 
顯示圖形。
 
 
在代碼末尾銷毀上下文。
 
 
運行代碼,將會看到類似圖5的圖形。
 
圖5. 單通道正弦波輸出;一個訊號產生器輸出:10 Hz,2 V p-p。
 
雙通道虛擬示波器
在這一部分,我們將使用上一部分中的代碼,並增加更多代碼塊,以創建雙通道虛擬示波器。
 
若要增加另一個通道,請複製ocsi.enableChannel和ocsi.setRange行代碼,並將第一個參數從libm2k.ANALOG_IN_CHANNEL_1更改為libm2k.ANALOG_IN_CHANNEL_2。
 
 
在創建圖形時,為通道2增加另一個圖形。通道2的資料在data_y[1]陣列中。我們也可以自訂兩個圖形的顏色,以便輕鬆區分二者。在該示例中,通道1使用淺珊瑚色,通道2使用鋼藍色。
 
 
運行代碼,應該會得到類似圖6的結果。
 
圖6. 雙通道正弦波輸出。通道1訊號產生器輸出:10 Hz,2 V p-p;通道2訊號產生器輸出:5 Hz,3 V p-p。
 
虛擬示波器的其他功能
在這一部分,我們將為虛擬示波器增加其他功能,以提升交互性。Matplotlib提供我們可以使用的多個小零件。在該示例中,我們將使用文本標籤和滑塊小零件。我們還將繼續使用上一部分中的代碼。
為matplotlib滑塊增加另一次導入。
 
 
將時間和資料陣列轉換為NumPy陣列。在下一個代碼塊進行的計算中,將使用這些陣列。
 
 
獲取所有波形資料後,提取這些波形的特性將不在話下。在以下代碼塊中,我們從獲取的兩個通道的資料中提取了VppVaveVrms。要計算Vpp,將data_y numpy陣列中找到的最大值和最小值的絕對值相加。要計算Vave,只需用Vpp除以pi。要計算Vrms,用Vpp除以2乘以√2。
 
 
該代碼塊與前面部分類似。唯一的區別是,我們為圖形使用NumPy陣列,而不是使用原始陣列。我們還根據圖形創建了波形物件。稍後我們將使用這些物件。
 
 
為了在圖形中顯示計算的VppVaveVrms,我們將利用matplotlib庫中的文本標籤小零件。創建字串標籤label_ch1和label_ch2,然後連接這兩個字串,以創建最終標籤fin_label。我們將使用plt.text創建文本標籤。第一和第二個參數(0.2, 3)是文本的x和y位置。第三個參數是要顯示的字串。第四和第五個參數分別是文本和框的樣式。
 
 
接下來,我們創建偏移滑塊。該滑塊用於調整波形的參考位準。將主圖形向左調整,為滑塊留出空間。plt.axes定義滑塊的尺寸、位置和表面顏色。Slider函數用於為偏移滑塊創建具有特定特性的物件。
 
 
創建update_offset函數,並將其註冊到offset_slider物件。每次更改滑塊的值時,該函數都會向波形增加偏移量。
 
運行代碼,將會看到類似圖7的圖形。
 
圖7. 具有偏移滑塊的默認雙通道正弦波輸出。
 
嘗試使用滑塊調整偏移量。將會看到波形即時上下移動。
 
圖8. 調整偏移量滑塊(向左滑動),用於調整兩個通道輸出的偏移量。
 
總結
本文解釋了擁有虛擬電子實驗室的重要性和便利性。文中並展示如何使用ADALM2000和Python開發虛擬示波器。討論了軟體要求和硬體設定,並提供了3個示例。
 
參考電路
「ADALM2000概述」。ADI,2021年3月。
Bhunia、Chandan、Saikat Giri、Samrat Kar和Sudarshan Haldar。 「基於PC的低成本虛擬示波器」。IEEE教育論文集,第47卷第2期,2004 年5月。
「Limb2k示例:analog.py」。ADI
Tegen, Amelia和Wright, Jeremy。 「示波器:數位替代版:與類比示波器相比,數位示波器的測量、瞬態擷取和資料儲存能力明顯改善」 。IEEE Potentials,第2卷,1983年。
「什麼是libm2k?」 ADI,維基百科,2021年4月。
 

電子郵件:look@compotechasia.com

聯繫電話:886-2-27201789       分機請撥:11