在這個(gè)項(xiàng)目里,我大約花了60歐元(合計(jì)410人民幣)構(gòu)建了這個(gè)帶有簡(jiǎn)單用戶界面的任意波形發(fā)生器工具 (AWG)。
用戶可以選擇基本波形,設(shè)置頻率、幅度、偏移和其他一些參數(shù)。
基本規(guī)格:
頻率范圍:20Hz - 15MHz 正弦波(并非所有波形都能很好地工作到 15MHz)
DAC 分辨率 8 位或 10 位
用于 AC/DC 耦合和輸出電阻的輸出開(kāi)關(guān) Zout low/50Ohm
輸出電壓 6Vpp 無(wú)負(fù)載,2.8Vpp 帶 Zout 開(kāi)關(guān)至 50Ohm 和 50 Ohm 終端
波形:正弦波、脈沖(鋸齒波、三角波、方波)、高斯、sinc、指數(shù)、噪聲(全部重復(fù)使用 rgco 的軟件)
我在一個(gè) 6.5 厘米 x 13 厘米的帶有銅條紋的原型板上構(gòu)建。
在這個(gè)教程中,我將專注于如何構(gòu)建一個(gè)獨(dú)立的 AWG,如果您按照說(shuō)明構(gòu)建自己的 AWG 工具,您應(yīng)該具備一些手工焊接電子元件的基本技能。如果需要調(diào)試,使用(簡(jiǎn)單)示波器很方便。我建議你在他的 github 網(wǎng)站上閱讀 rgco 的教程和 Peter Hinch 的自述文件。
補(bǔ)給品
構(gòu)建 AWG 的主要部分是:
1 2.8“ 彩色 LCD TFT 顯示屏,帶 SPI 接口
19 個(gè)精密電阻器 10x 2k .1% 和 9 x 1k .1%
NTE2633和NTE2634晶體管各1個(gè)。作為替代方案,我測(cè)試了 2N2219 和 2N2905 晶體管,它們也運(yùn)行良好。頻率上限為~5MHz
2個(gè)晶體管散熱器
1 個(gè) 79L05 和 78L05 穩(wěn)壓器為 AD8055 供電
+-12V 電源
1 6.5cm x 13cm 原型板
用于連接顯示器、開(kāi)關(guān)和編碼器的面包板線
請(qǐng)參閱隨附的所有電子元件材料清單。
我正在使用通孔組件,因?yàn)樗鼈兏菀缀附?,而且大部分都在我的“組件庫(kù)存”中。最終,我選擇將所有部件放在一個(gè)漂亮的外殼中。
關(guān)于電源的備注:我開(kāi)始使用Meanwell 5V,+-12V開(kāi)關(guān)電源,只是為了得知發(fā)電機(jī)的信號(hào)被電源的開(kāi)關(guān)噪聲嚴(yán)重失真。我最終使用 2x15V 變壓器構(gòu)建了一個(gè)簡(jiǎn)單的線性電源,兩個(gè)橋式整流器帶有兩個(gè) 1000uF 電解電容器和穩(wěn)壓器 7812,7912(輸出緩沖器為 +-12V)和 Pico 的 L7805CV。我在所有三個(gè)穩(wěn)壓器上都放了一個(gè)散熱器。
第 1 步:概念概述
AWG 由三個(gè)主要功能塊組成:
用戶界面,選擇波形并可以輸入/調(diào)整波形的所有參數(shù)。選擇波形時(shí),將相應(yīng)的參數(shù)設(shè)置為默認(rèn)值。
AWG 內(nèi)核,用于計(jì)算波形樣本并將其存儲(chǔ)在內(nèi)存中。使用 RP2040 的 PIO 和 DMA 功能從內(nèi)存開(kāi)始輸出波形。
輸出緩沖級(jí),其中信號(hào)被放大 2 倍,AB 類輸出級(jí)將提供低輸出阻抗和短路保護(hù)。通過(guò)開(kāi)關(guān),輸出阻抗可以在低阻抗和 50 歐姆之間切換,也可以選擇交流或直流耦合。對(duì)于低頻,建議使用直流耦合。
用戶界面和 AWG 內(nèi)核在運(yùn)行于 Pico 的 RP2040 CPU 上的 micro-python 中實(shí)現(xiàn)。
備注:我正在使用 RP2040 的兩個(gè)內(nèi)核進(jìn)行實(shí)驗(yàn),一個(gè)用于生成器,一個(gè)用于用戶界面。這工作正常,但沒(méi)有優(yōu)勢(shì)。所以,為了簡(jiǎn)單起見(jiàn),我決定在一個(gè)內(nèi)核上運(yùn)行整個(gè)程序。(AWG_overview.pdf)
第 2 步:構(gòu)建硬件
在示意圖中,您可以找到被“藍(lán)框”包圍的三個(gè)功能塊。使用 AWG 的 8 位或 10 位版本的原理圖來(lái)構(gòu)建您自己的。
所有部件都焊接到原型板上。按照示意圖從左到右。確保有一個(gè)中央接地點(diǎn),將電源的接地線連接到 Pico 板的接地引腳、兩個(gè)穩(wěn)壓器和輸出連接器。我在開(kāi)始時(shí)創(chuàng)建了接地回路,這會(huì)在輸出信號(hào)上產(chǎn)生額外的噪聲。
注意事項(xiàng):
如果您不需要輸出緩沖級(jí)的全部 20MHz 帶寬,請(qǐng)將 Q1 和 Q2 替換為 2N2219 和 2N2905。這些晶體管更便宜并且具有更好的可用性。測(cè)試顯示帶寬上限約為 5MHz。還要為這些晶體管添加散熱器。
如果您不需要低輸出阻抗,您可以簡(jiǎn)化輸出級(jí),只使用 AD8055。取 R6 之后的信號(hào)(參見(jiàn)示意圖中的“TP 1”)。然后,AWG 可以將負(fù)載驅(qū)動(dòng)至約 50 歐姆。
相關(guān)附件下載:
AD8055.pdf
AWG10bit_schematics.pdf
AWG8bit_schematics.pdf
第 3 步:安裝軟件包
AWG 是使用 micro-python 實(shí)現(xiàn)的。作為第一步,請(qǐng)將micropython加載到 Pico。使用版本 1.17 ( rp2-pico-20210902-v1.17.uf2 ) 或更新版本。舊版本無(wú)法使用,因?yàn)樗鼈內(nèi)鄙?micro-gui 所需的功能。
本教程假設(shè)您對(duì)如何使用 Pico 板、將 micro-python 和 python 模塊加載到 Pico 有一些基本知識(shí)。如果您需要幫助,請(qǐng)?jiān)趓aspberry pi pico 上找到開(kāi)始使用 micropython的分步指南。
由于我無(wú)法在此處附加檔案或壓縮文件,請(qǐng)安裝以下軟件包:
1. 安裝micro-gui。如果您使用的是 Linux,請(qǐng)創(chuàng)建一個(gè)項(xiàng)目目錄并使用 git 將 micro-gui 復(fù)制到項(xiàng)目目錄。例如:git clone https://github.com/peterhinch/micropython-micro-gui。
使用 mpfshell、rshell 或您喜歡的 micropython IDE 將 micro-gui 模塊復(fù)制到 Pico。
如果您使用的是 Windows,請(qǐng)?jiān)L問(wèn)micro-gui github站點(diǎn),單擊“代碼”按鈕并下載 zip 文件(見(jiàn)圖)。您可以使用您喜歡的工具將文件下載到 Pico。
2. 安裝硬件驅(qū)動(dòng)程序。將 AWG 驅(qū)動(dòng)程序文件復(fù)制到 Pico:
hardware_setup.py - 復(fù)制到根目錄,包含按鈕、編碼器和顯示驅(qū)動(dòng)程序的信息
colors.py - 替換原始模塊,因?yàn)?AWG 使用更多顏色,將附件復(fù)制到 Pico 上的 gui/core 目錄
3. 安裝 AWG 文件:
8 位和 10 位版本的 AWG 文件不同。由于我無(wú)法附加包裹,因此我將包裹分成了這個(gè)教程的兩個(gè)步驟。
從第 8 步下載 8 位版本的軟件
從第 9 步下載 10 位版本的軟件
然后將文件復(fù)制到 pico。10 位版本的文件名顯示在下面的文本中的括號(hào) [ ] 中。
ui.py [ui10.py] - 復(fù)制到根目錄,這是AWG主程序
wave_gen.py [wave_gen10.py] - 復(fù)制到根目錄,該模塊計(jì)算波形并對(duì) Pico 的 PIO 和 DMA 進(jìn)行編程
main.py - 復(fù)制到根目錄,啟動(dòng)后調(diào)用模塊,導(dǎo)入 ui.py [ui10.py] 啟動(dòng) AWG
我添加了一張圖片來(lái)顯示 Pico 上文件和目錄結(jié)構(gòu)的圖形表示。圖片僅顯示 AWG 所需的文件。如果您將 micro-gui 作為一個(gè)整體下載,您將獲得更多文件,例如 micro-gui 的演示或其他字體,這些文件不被 AWG 使用。您可以只復(fù)制所需的文件,如圖所示。
備注:我已經(jīng)清理了這個(gè)教程,只附上了最新版本的文件。如果您已經(jīng)構(gòu)建了 AWG,建議您升級(jí)到具有 8 位 DAC 或 10 位 DAC 的版本的最新版本。
代碼下載:
hardware_setup.py
顏色.py
第 4 步:AWG 的核心
python 模塊wave_gen.py [wave_gen10.py] 包含用于計(jì)算波形和對(duì) Pico 的 PIO 和 DMA 進(jìn)行編程的代碼。我重用了 Rgco 創(chuàng)建的代碼。附加的模塊支持六種基本波形。AWG 可以做更多事情,例如將兩個(gè)波相加或相乘,如果您需要更多功能,請(qǐng)參閱Rcgo 的教程。
對(duì)原代碼的改動(dòng):
代碼有兩種版本,一種用于 8 位 DAC,一種用于 10 位 DAC。
Pico 超頻了,CPU 運(yùn)行在 250MHz 而不是 125MHz
我正在使用 DMA 通道 2 和 3 而不是 0 和 1。DMA 通道 0 和 1 由其他功能使用,例如 TFT 顯示器的 SPI 接口
在測(cè)試時(shí),我觀察到“內(nèi)存不足錯(cuò)誤”,因此我在計(jì)算完成后調(diào)用垃圾收集器 (gc) 模塊并填充波緩沖區(qū)以釋放未使用但仍分配的內(nèi)存。
備注:Pico 的 CPU 和 USB 連接在 250MHz 下運(yùn)行非常可靠
第 5 步:用戶界面
用戶界面 (UI) 由兩個(gè)按鈕、一個(gè)帶按鈕的旋轉(zhuǎn)編碼器、2.8” TFT 顯示器和 python 模塊ui.py [ui10.py] 組成。該模塊定義了屏幕布局和 AWG 控件。在簡(jiǎn)而言之,當(dāng)按下按鈕或旋轉(zhuǎn)編碼器時(shí)會(huì)發(fā)生什么。在以下 UI 元素中以斜體字母顯示,例如setup指向屏幕上的設(shè)置按鈕。您可以在下一步。
用戶界面原則:
所有用戶輸入都被收集并存儲(chǔ)在一個(gè)名為“wave”的字典中。按下設(shè)置生成器按鈕后,模塊 wave_gen [wave_gen10] 使用存儲(chǔ)在字典中的數(shù)據(jù)來(lái)計(jì)算和輸出波形。
AWG 在屏幕上顯示其當(dāng)前狀態(tài)。狀態(tài)是以下之一——初始化——、計(jì)算波、運(yùn)行或停止。每個(gè)狀態(tài)都非常自我解釋,并在模塊 ui.py [ui10.py] 中進(jìn)行了簡(jiǎn)要描述。
UI 允許通過(guò)功能下拉菜單選擇波形。When a wave is selected the parameters of the wave are set to default values, which are “mid points” of the parameters. 如果您使用默認(rèn)值按下設(shè)置生成器按鈕,您會(huì)得到一個(gè)工作正常的波形。通常,您希望根據(jù)需要調(diào)整頻率。
如果您選擇不同的波形,頻率不會(huì)改變,但所有其他參數(shù)都設(shè)置為默認(rèn)值。
在 UI 中,只有與所選波形相關(guān)的參數(shù)處于活動(dòng)狀態(tài)并且可以更改。不需要的參數(shù)是“灰色的”。
顯示使用的樣本數(shù)和波形的結(jié)果輸出頻率。
備注:AWG 是一種數(shù)字波發(fā)生器。這意味著例如頻率、幅度和偏移量會(huì)逐步變化,這會(huì)導(dǎo)致一些限制:
輸出頻率可能會(huì)偏離 UI 中設(shè)置的頻率,例如,如果設(shè)置頻率“介于”兩個(gè)數(shù)字頻率步長(zhǎng)之間。
第 6 步:AWG 快速參考指南
用戶界面硬件由硬件中的兩個(gè)按鈕和一個(gè)旋轉(zhuǎn)編碼器組成。AWG 控件和設(shè)置/停止發(fā)生器按鈕在 UI 軟件中實(shí)現(xiàn)。
Next按鈕將焦點(diǎn)移動(dòng)到下一個(gè)控件,該控件變?yōu)榛顒?dòng)狀態(tài)。焦點(diǎn)由白色邊框表示。例如,在圖片中,您可以看到具有焦點(diǎn)的功能下拉列表。
上一個(gè)按鈕將焦點(diǎn)移回上一個(gè)控件。
旋轉(zhuǎn)編碼器必須起作用。(a) 按下編碼器作為輸入按鈕, (b) 轉(zhuǎn)動(dòng)編碼器增加或減少一個(gè)值或在下拉列表中上下移動(dòng)。
有關(guān)詳細(xì)信息,請(qǐng)參閱隨附的快速參考指南。
備注:如果輸出信號(hào)被削波或失真,請(qǐng)嘗試調(diào)整幅度、偏移或參數(shù)。這樣做通常會(huì)減少削波或失真。微調(diào)參數(shù)以優(yōu)化輸出,例如對(duì)于脈沖:不要將上升和下降時(shí)間設(shè)置為 0,而是將其設(shè)置為較小的值,例如 0.05。這通過(guò)限制壓擺率來(lái)減少信號(hào)的過(guò)沖。
第 7 步:限制和改進(jìn)
AWG 的設(shè)計(jì)易于使用、易于復(fù)制和低成本。
實(shí)施了六個(gè)基本波。如果 Pico 板連接到 PC 上,基本上任何波形都可以通過(guò)在模塊 wave_gen.py 中添加波形的公式來(lái)產(chǎn)生。如果波形應(yīng)該在 AWG 中持久存在,請(qǐng)將波形名稱和控件添加到 ui.py 模塊。
AWG 的輸出級(jí)是基本的 AB 類設(shè)計(jì)。它經(jīng)過(guò)短路驗(yàn)證并提供 6V pp 擺幅??梢蕴砑右粋€(gè)輸出濾波器來(lái)降低較高頻率的數(shù)字噪聲。
為 AWG 10 位實(shí)施了包圍。根據(jù)要求可以移植到 AWG 8 位。
在最近的軟件中,顯示更新(SPI 接口)在 AWG 啟動(dòng)時(shí)會(huì)關(guān)閉。這顯著降低了輸出信號(hào)上的數(shù)字噪聲(見(jiàn)圖)。在原型板上構(gòu)建或進(jìn)行 PCB 布局時(shí),請(qǐng)注意避免走線或電纜之間的串?dāng)_,從而進(jìn)一步降低噪聲。
為了進(jìn)一步降低噪音,使用兩個(gè) Pico 板也可以降低輸出噪音。一個(gè)用于發(fā)生器的 Pico 板和一個(gè)用于用戶界面的 Pico 板,將它們與例如串行接口連接。非常歡迎任何改進(jìn)和評(píng)論。
第 8 步:用于 AWG 的軟件,帶有 8 位 DAC
附上使用 8 位 DAC實(shí)現(xiàn) AWG 時(shí)要上傳到 Pico 的三個(gè)文件。(參見(jiàn)第 3 步)
在停止生成器時(shí)保留參數(shù)值,而不是每次都初始化它們。
sinc 和指數(shù)參數(shù)現(xiàn)在被“括起來(lái)”,因此它們無(wú)法設(shè)置為導(dǎo)致波形不可用的值。
ui.py
wave_gen.py
主文件
第 9 步:帶 10 位 DAC 的 AWG
附上使用 10 位 DAC實(shí)現(xiàn) AWG 時(shí)要上傳到 Pico 的三個(gè)文件。(參見(jiàn)第 3 步)
一些用戶要求在停止生成器時(shí)保留參數(shù)值,而不是初始化它們。
sinc 和指數(shù)參數(shù)現(xiàn)在被“括起來(lái)”,因此它們無(wú)法設(shè)置為導(dǎo)致波形不可用的值。
ui10.py
wave_gen10.py
主文件
-
發(fā)生器
+關(guān)注
關(guān)注
4文章
1368瀏覽量
61760 -
AWG
+關(guān)注
關(guān)注
1文章
58瀏覽量
16854 -
波形發(fā)生器
+關(guān)注
關(guān)注
3文章
293瀏覽量
31404
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論