在這個項目里,我大約花了60歐元(合計410人民幣)構建了這個帶有簡單用戶界面的任意波形發生器工具 (AWG)。
用戶可以選擇基本波形,設置頻率、幅度、偏移和其他一些參數。
基本規格:
頻率范圍:20Hz - 15MHz 正弦波(并非所有波形都能很好地工作到 15MHz)
DAC 分辨率 8 位或 10 位
用于 AC/DC 耦合和輸出電阻的輸出開關 Zout low/50Ohm
輸出電壓 6Vpp 無負載,2.8Vpp 帶 Zout 開關至 50Ohm 和 50 Ohm 終端
波形:正弦波、脈沖(鋸齒波、三角波、方波)、高斯、sinc、指數、噪聲(全部重復使用 rgco 的軟件)
我在一個 6.5 厘米 x 13 厘米的帶有銅條紋的原型板上構建。
在這個教程中,我將專注于如何構建一個獨立的 AWG,如果您按照說明構建自己的 AWG 工具,您應該具備一些手工焊接電子元件的基本技能。如果需要調試,使用(簡單)示波器很方便。我建議你在他的 github 網站上閱讀 rgco 的教程和 Peter Hinch 的自述文件。
補給品

構建 AWG 的主要部分是:
1 2.8“ 彩色 LCD TFT 顯示屏,帶 SPI 接口
19 個精密電阻器 10x 2k .1% 和 9 x 1k .1%
NTE2633和NTE2634晶體管各1個。作為替代方案,我測試了 2N2219 和 2N2905 晶體管,它們也運行良好。頻率上限為~5MHz
2個晶體管散熱器
1 個 79L05 和 78L05 穩壓器為 AD8055 供電
+-12V 電源
1 6.5cm x 13cm 原型板
用于連接顯示器、開關和編碼器的面包板線
請參閱隨附的所有電子元件材料清單。
我正在使用通孔組件,因為它們更容易焊接,而且大部分都在我的“組件庫存”中。最終,我選擇將所有部件放在一個漂亮的外殼中。
關于電源的備注:我開始使用Meanwell 5V,+-12V開關電源,只是為了得知發電機的信號被電源的開關噪聲嚴重失真。我最終使用 2x15V 變壓器構建了一個簡單的線性電源,兩個橋式整流器帶有兩個 1000uF 電解電容器和穩壓器 7812,7912(輸出緩沖器為 +-12V)和 Pico 的 L7805CV。我在所有三個穩壓器上都放了一個散熱器。
第 1 步:概念概述

AWG 由三個主要功能塊組成:
用戶界面,選擇波形并可以輸入/調整波形的所有參數。選擇波形時,將相應的參數設置為默認值。
AWG 內核,用于計算波形樣本并將其存儲在內存中。使用 RP2040 的 PIO 和 DMA 功能從內存開始輸出波形。
輸出緩沖級,其中信號被放大 2 倍,AB 類輸出級將提供低輸出阻抗和短路保護。通過開關,輸出阻抗可以在低阻抗和 50 歐姆之間切換,也可以選擇交流或直流耦合。對于低頻,建議使用直流耦合。
用戶界面和 AWG 內核在運行于 Pico 的 RP2040 CPU 上的 micro-python 中實現。
備注:我正在使用 RP2040 的兩個內核進行實驗,一個用于生成器,一個用于用戶界面。這工作正常,但沒有優勢。所以,為了簡單起見,我決定在一個內核上運行整個程序。(AWG_overview.pdf)
第 2 步:構建硬件


在示意圖中,您可以找到被“藍框”包圍的三個功能塊。使用 AWG 的 8 位或 10 位版本的原理圖來構建您自己的。
所有部件都焊接到原型板上。按照示意圖從左到右。確保有一個中央接地點,將電源的接地線連接到 Pico 板的接地引腳、兩個穩壓器和輸出連接器。我在開始時創建了接地回路,這會在輸出信號上產生額外的噪聲。
注意事項:
如果您不需要輸出緩沖級的全部 20MHz 帶寬,請將 Q1 和 Q2 替換為 2N2219 和 2N2905。這些晶體管更便宜并且具有更好的可用性。測試顯示帶寬上限約為 5MHz。還要為這些晶體管添加散熱器。
如果您不需要低輸出阻抗,您可以簡化輸出級,只使用 AD8055。取 R6 之后的信號(參見示意圖中的“TP 1”)。然后,AWG 可以將負載驅動至約 50 歐姆。
相關附件下載:
AD8055.pdf
AWG10bit_schematics.pdf
AWG8bit_schematics.pdf
第 3 步:安裝軟件包


AWG 是使用 micro-python 實現的。作為第一步,請將micropython加載到 Pico。使用版本 1.17 ( rp2-pico-20210902-v1.17.uf2 ) 或更新版本。舊版本無法使用,因為它們缺少 micro-gui 所需的功能。
本教程假設您對如何使用 Pico 板、將 micro-python 和 python 模塊加載到 Pico 有一些基本知識。如果您需要幫助,請在raspberry pi pico 上找到開始使用 micropython的分步指南。
由于我無法在此處附加檔案或壓縮文件,請安裝以下軟件包:
1. 安裝micro-gui。如果您使用的是 Linux,請創建一個項目目錄并使用 git 將 micro-gui 復制到項目目錄。例如:git clone https://github.com/peterhinch/micropython-micro-gui。
使用 mpfshell、rshell 或您喜歡的 micropython IDE 將 micro-gui 模塊復制到 Pico。
如果您使用的是 Windows,請訪問micro-gui github站點,單擊“代碼”按鈕并下載 zip 文件(見圖)。您可以使用您喜歡的工具將文件下載到 Pico。
2. 安裝硬件驅動程序。將 AWG 驅動程序文件復制到 Pico:
hardware_setup.py - 復制到根目錄,包含按鈕、編碼器和顯示驅動程序的信息
colors.py - 替換原始模塊,因為 AWG 使用更多顏色,將附件復制到 Pico 上的 gui/core 目錄
3. 安裝 AWG 文件:
8 位和 10 位版本的 AWG 文件不同。由于我無法附加包裹,因此我將包裹分成了這個教程的兩個步驟。
從第 8 步下載 8 位版本的軟件
從第 9 步下載 10 位版本的軟件
然后將文件復制到 pico。10 位版本的文件名顯示在下面的文本中的括號 [ ] 中。
ui.py [ui10.py] - 復制到根目錄,這是AWG主程序
wave_gen.py [wave_gen10.py] - 復制到根目錄,該模塊計算波形并對 Pico 的 PIO 和 DMA 進行編程
main.py - 復制到根目錄,啟動后調用模塊,導入 ui.py [ui10.py] 啟動 AWG
我添加了一張圖片來顯示 Pico 上文件和目錄結構的圖形表示。圖片僅顯示 AWG 所需的文件。如果您將 micro-gui 作為一個整體下載,您將獲得更多文件,例如 micro-gui 的演示或其他字體,這些文件不被 AWG 使用。您可以只復制所需的文件,如圖所示。
備注:我已經清理了這個教程,只附上了最新版本的文件。如果您已經構建了 AWG,建議您升級到具有 8 位 DAC 或 10 位 DAC 的版本的最新版本。
代碼下載:
hardware_setup.py
顏色.py
第 4 步:AWG 的核心
python 模塊wave_gen.py [wave_gen10.py] 包含用于計算波形和對 Pico 的 PIO 和 DMA 進行編程的代碼。我重用了 Rgco 創建的代碼。附加的模塊支持六種基本波形。AWG 可以做更多事情,例如將兩個波相加或相乘,如果您需要更多功能,請參閱Rcgo 的教程。
對原代碼的改動:
代碼有兩種版本,一種用于 8 位 DAC,一種用于 10 位 DAC。
Pico 超頻了,CPU 運行在 250MHz 而不是 125MHz
我正在使用 DMA 通道 2 和 3 而不是 0 和 1。DMA 通道 0 和 1 由其他功能使用,例如 TFT 顯示器的 SPI 接口
在測試時,我觀察到“內存不足錯誤”,因此我在計算完成后調用垃圾收集器 (gc) 模塊并填充波緩沖區以釋放未使用但仍分配的內存。
備注:Pico 的 CPU 和 USB 連接在 250MHz 下運行非常可靠
第 5 步:用戶界面

用戶界面 (UI) 由兩個按鈕、一個帶按鈕的旋轉編碼器、2.8” TFT 顯示器和 python 模塊ui.py [ui10.py] 組成。該模塊定義了屏幕布局和 AWG 控件。在簡而言之,當按下按鈕或旋轉編碼器時會發生什么。在以下 UI 元素中以斜體字母顯示,例如setup指向屏幕上的設置按鈕。您可以在下一步。
用戶界面原則:
所有用戶輸入都被收集并存儲在一個名為“wave”的字典中。按下設置生成器按鈕后,模塊 wave_gen [wave_gen10] 使用存儲在字典中的數據來計算和輸出波形。
AWG 在屏幕上顯示其當前狀態。狀態是以下之一——初始化——、計算波、運行或停止。每個狀態都非常自我解釋,并在模塊 ui.py [ui10.py] 中進行了簡要描述。
UI 允許通過功能下拉菜單選擇波形。When a wave is selected the parameters of the wave are set to default values, which are “mid points” of the parameters. 如果您使用默認值按下設置生成器按鈕,您會得到一個工作正常的波形。通常,您希望根據需要調整頻率。
如果您選擇不同的波形,頻率不會改變,但所有其他參數都設置為默認值。
在 UI 中,只有與所選波形相關的參數處于活動狀態并且可以更改。不需要的參數是“灰色的”。
顯示使用的樣本數和波形的結果輸出頻率。
備注:AWG 是一種數字波發生器。這意味著例如頻率、幅度和偏移量會逐步變化,這會導致一些限制:
輸出頻率可能會偏離 UI 中設置的頻率,例如,如果設置頻率“介于”兩個數字頻率步長之間。
第 6 步:AWG 快速參考指南

用戶界面硬件由硬件中的兩個按鈕和一個旋轉編碼器組成。AWG 控件和設置/停止發生器按鈕在 UI 軟件中實現。
Next按鈕將焦點移動到下一個控件,該控件變為活動狀態。焦點由白色邊框表示。例如,在圖片中,您可以看到具有焦點的功能下拉列表。
上一個按鈕將焦點移回上一個控件。
旋轉編碼器必須起作用。(a) 按下編碼器作為輸入按鈕, (b) 轉動編碼器增加或減少一個值或在下拉列表中上下移動。
有關詳細信息,請參閱隨附的快速參考指南。
備注:如果輸出信號被削波或失真,請嘗試調整幅度、偏移或參數。這樣做通常會減少削波或失真。微調參數以優化輸出,例如對于脈沖:不要將上升和下降時間設置為 0,而是將其設置為較小的值,例如 0.05。這通過限制壓擺率來減少信號的過沖。
第 7 步:限制和改進

AWG 的設計易于使用、易于復制和低成本。
實施了六個基本波。如果 Pico 板連接到 PC 上,基本上任何波形都可以通過在模塊 wave_gen.py 中添加波形的公式來產生。如果波形應該在 AWG 中持久存在,請將波形名稱和控件添加到 ui.py 模塊。
AWG 的輸出級是基本的 AB 類設計。它經過短路驗證并提供 6V pp 擺幅。可以添加一個輸出濾波器來降低較高頻率的數字噪聲。
為 AWG 10 位實施了包圍。根據要求可以移植到 AWG 8 位。
在最近的軟件中,顯示更新(SPI 接口)在 AWG 啟動時會關閉。這顯著降低了輸出信號上的數字噪聲(見圖)。在原型板上構建或進行 PCB 布局時,請注意避免走線或電纜之間的串擾,從而進一步降低噪聲。
為了進一步降低噪音,使用兩個 Pico 板也可以降低輸出噪音。一個用于發生器的 Pico 板和一個用于用戶界面的 Pico 板,將它們與例如串行接口連接。非常歡迎任何改進和評論。
第 8 步:用于 AWG 的軟件,帶有 8 位 DAC
附上使用 8 位 DAC實現 AWG 時要上傳到 Pico 的三個文件。(參見第 3 步)
在停止生成器時保留參數值,而不是每次都初始化它們。
sinc 和指數參數現在被“括起來”,因此它們無法設置為導致波形不可用的值。
ui.py
wave_gen.py
主文件
第 9 步:帶 10 位 DAC 的 AWG
附上使用 10 位 DAC實現 AWG 時要上傳到 Pico 的三個文件。(參見第 3 步)
一些用戶要求在停止生成器時保留參數值,而不是初始化它們。
sinc 和指數參數現在被“括起來”,因此它們無法設置為導致波形不可用的值。
ui10.py
wave_gen10.py
主文件
-
發生器
+關注
關注
4文章
1395瀏覽量
62476 -
AWG
+關注
關注
1文章
64瀏覽量
17072 -
波形發生器
+關注
關注
3文章
306瀏覽量
31821
發布評論請先 登錄
pico-ice:RP2040 plus Lattice iCE40UP5K FPGA 開發板 介紹
ubuntu上交叉編譯rp2040
樹莓派Pico迷你開發板及所使用的RP2040 MCU芯片有哪些特性
基于RP2040 arm微控制器制作的定制Arduino
【BPI-Pico-RP2040 開發板】與Banana BPI-Pico-RP2040的第一次親密接觸
RP2040
4美元的微控制器Pico與RP2040芯片
基于樹莓派產品 Raspberry Pi微控制器板的優缺點
e絡盟現貨發售Arduino Nano RP2040 Connect和Raspberry Pi Pico

Arduino Raspberry Pi Pico/RP2040以太網:W5100S EVB Pico

將MicroPython從Raspberry pi(RP2040)移植到Wiznet5K

RP2040 Raspberry Pi Pico遇見LoRa

評論