衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于RP2040 Raspberry-pi-Pico實(shí)現(xiàn)的極簡任意波形發(fā)生器設(shè)計(jì)方案

科技觀察員 ? 來源:wolf2018 ? 作者:wolf2018 ? 2022-04-08 17:51 ? 次閱讀

在這個(gè)項(xiàng)目里,我大約花了60歐元(合計(jì)410人民幣)構(gòu)建了這個(gè)帶有簡單用戶界面的任意波形發(fā)生器工具 (AWG)。

用戶可以選擇基本波形,設(shè)置頻率、幅度、偏移和其他一些參數(shù)

基本規(guī)格:

頻率范圍:20Hz - 15MHz 正弦波(并非所有波形都能很好地工作到 15MHz)

DAC 分辨率 8 位或 10 位

用于 AC/DC 耦合和輸出電阻的輸出開關(guān) Zout low/50Ohm

輸出電壓 6Vpp 無負(fù)載,2.8Vpp 帶 Zout 開關(guān)至 50Ohm 和 50 Ohm 終端

波形:正弦波、脈沖(鋸齒波、三角波、方波)、高斯、sinc、指數(shù)、噪聲(全部重復(fù)使用 rgco 的軟件)

我在一個(gè) 6.5 厘米 x 13 厘米的帶有銅條紋的原型板上構(gòu)建。

在這個(gè)教程中,我將專注于如何構(gòu)建一個(gè)獨(dú)立的 AWG,如果您按照說明構(gòu)建自己的 AWG 工具,您應(yīng)該具備一些手工焊接電子元件的基本技能。如果需要調(diào)試,使用(簡單)示波器很方便。我建議你在他的 github 網(wǎng)站上閱讀 rgco 的教程和 Peter Hinch 的自述文件。

補(bǔ)給品

pYYBAGJQBXuAPKjEAAeaXF0WP_w097.png

構(gòu)建 AWG 的主要部分是:

1 個(gè)樹莓派 Pico 板

1 2.8“ 彩色 LCD TFT 顯示屏,帶 SPI 接口

19 個(gè)精密電阻器 10x 2k .1% 和 9 x 1k .1%

1 AD8055(300MHz電壓反饋放大器

NTE2633和NTE2634晶體管各1個(gè)。作為替代方案,我測試了 2N2219 和 2N2905 晶體管,它們也運(yùn)行良好。頻率上限為~5MHz

2個(gè)晶體管散熱器

1 個(gè) 79L05 和 78L05 穩(wěn)壓器為 AD8055 供電

+-12V 電源

1 6.5cm x 13cm 原型板

用于連接顯示器、開關(guān)和編碼器的面包板線

還有一些小零件電阻、電容排針、電線……

請參閱隨附的所有電子元件材料清單。

我正在使用通孔組件,因?yàn)樗鼈兏菀缀附樱掖蟛糠侄荚谖业摹敖M件庫存”中。最終,我選擇將所有部件放在一個(gè)漂亮的外殼中。

關(guān)于電源的備注:我開始使用Meanwell 5V,+-12V開關(guān)電源,只是為了得知發(fā)電機(jī)信號被電源的開關(guān)噪聲嚴(yán)重失真。我最終使用 2x15V 變壓器構(gòu)建了一個(gè)簡單的線性電源,兩個(gè)橋式整流器帶有兩個(gè) 1000uF 電解電容器和穩(wěn)壓器 7812,7912(輸出緩沖器為 +-12V)和 Pico 的 L7805CV。我在所有三個(gè)穩(wěn)壓器上都放了一個(gè)散熱器。

第 1 步:概念概述

poYBAGJQBXaAPt7cAAJZNFDpuwM207.png

AWG 由三個(gè)主要功能塊組成:

用戶界面,選擇波形并可以輸入/調(diào)整波形的所有參數(shù)。選擇波形時(shí),將相應(yīng)的參數(shù)設(shè)置為默認(rèn)值。

AWG 內(nèi)核,用于計(jì)算波形樣本并將其存儲在內(nèi)存中。使用 RP2040 的 PIO 和 DMA 功能從內(nèi)存開始輸出波形。

輸出緩沖級,其中信號被放大 2 倍,AB 類輸出級將提供低輸出阻抗和短路保護(hù)。通過開關(guān),輸出阻抗可以在低阻抗和 50 歐姆之間切換,也可以選擇交流或直流耦合。對于低頻,建議使用直流耦合。

用戶界面和 AWG 內(nèi)核在運(yùn)行于 Pico 的 RP2040 CPU 上的 micro-python 中實(shí)現(xiàn)。

備注:我正在使用 RP2040 的兩個(gè)內(nèi)核進(jìn)行實(shí)驗(yàn),一個(gè)用于生成器,一個(gè)用于用戶界面。這工作正常,但沒有優(yōu)勢。所以,為了簡單起見,我決定在一個(gè)內(nèi)核上運(yùn)行整個(gè)程序。(AWG_overview.pdf)

第 2 步:構(gòu)建硬件

poYBAGJQBXCAKko0AATISpMsaoQ353.png

pYYBAGJQBW2AOrGFAAdzhmh1nTw463.png

在示意圖中,您可以找到被“藍(lán)框”包圍的三個(gè)功能塊。使用 AWG 的 8 位或 10 位版本的原理圖來構(gòu)建您自己的。

所有部件都焊接到原型板上。按照示意圖從左到右。確保有一個(gè)中央接地點(diǎn),將電源的接地線連接到 Pico 板的接地引腳、兩個(gè)穩(wěn)壓器和輸出連接器。我在開始時(shí)創(chuàng)建了接地回路,這會在輸出信號上產(chǎn)生額外的噪聲。

注意事項(xiàng):

如果您不需要輸出緩沖級的全部 20MHz 帶寬,請將 Q1 和 Q2 替換為 2N2219 和 2N2905。這些晶體管更便宜并且具有更好的可用性。測試顯示帶寬上限約為 5MHz。還要為這些晶體管添加散熱器。

如果您不需要低輸出阻抗,您可以簡化輸出級,只使用 AD8055。取 R6 之后的信號(參見示意圖中的“TP 1”)。然后,AWG 可以將負(fù)載驅(qū)動至約 50 歐姆。

相關(guān)附件下載

AD8055.pdf

AWG10bit_schematics.pdf

AWG8bit_schematics.pdf

第 3 步:安裝軟件包

poYBAGJQBWiAOT3jAAErMubHbd8840.png

pYYBAGJQBWSAfS28AACdA2cH5Yg636.png

AWG 是使用 micro-python 實(shí)現(xiàn)的。作為第一步,請將micropython加載到 Pico。使用版本 1.17 ( rp2-pico-20210902-v1.17.uf2 ) 或更新版本。舊版本無法使用,因?yàn)樗鼈內(nèi)鄙?micro-gui 所需的功能。

本教程假設(shè)您對如何使用 Pico 板、將 micro-python 和 python 模塊加載到 Pico 有一些基本知識。如果您需要幫助,請?jiān)趓aspberry pi pico 上找到開始使用 micropython的分步指南。

由于我無法在此處附加檔案或壓縮文件,請安裝以下軟件包:

1. 安裝micro-gui。如果您使用的是 Linux,請創(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,請?jiān)L問micro-gui github站點(diǎn),單擊“代碼”按鈕并下載 zip 文件(見圖)。您可以使用您喜歡的工具將文件下載到 Pico。

2. 安裝硬件驅(qū)動程序。將 AWG 驅(qū)動程序文件復(fù)制到 Pico:

hardware_setup.py - 復(fù)制到根目錄,包含按鈕、編碼器和顯示驅(qū)動程序的信息

colors.py - 替換原始模塊,因?yàn)?AWG 使用更多顏色,將附件復(fù)制到 Pico 上的 gui/core 目錄

3. 安裝 AWG 文件:

8 位和 10 位版本的 AWG 文件不同。由于我無法附加包裹,因此我將包裹分成了這個(gè)教程的兩個(gè)步驟。

從第 8 步下載 8 位版本的軟件

從第 9 步下載 10 位版本的軟件

然后將文件復(fù)制到 pico。10 位版本的文件名顯示在下面的文本中的括號 [ ] 中。

ui.py [ui10.py] - 復(fù)制到根目錄,這是AWG主程序

wave_gen.py [wave_gen10.py] - 復(fù)制到根目錄,該模塊計(jì)算波形并對 Pico 的 PIO 和 DMA 進(jìn)行編程

main.py - 復(fù)制到根目錄,啟動后調(diào)用模塊,導(dǎo)入 ui.py [ui10.py] 啟動 AWG

我添加了一張圖片來顯示 Pico 上文件和目錄結(jié)構(gòu)的圖形表示。圖片僅顯示 AWG 所需的文件。如果您將 micro-gui 作為一個(gè)整體下載,您將獲得更多文件,例如 micro-gui 的演示或其他字體,這些文件不被 AWG 使用。您可以只復(fù)制所需的文件,如圖所示。

備注:我已經(jīng)清理了這個(gè)教程,只附上了最新版本的文件。如果您已經(jīng)構(gòu)建了 AWG,建議您升級到具有 8 位 DAC 或 10 位 DAC 的版本的最新版本。

代碼下載:

hardware_setup.py

顏色.py

第 4 步:AWG 的核心

python 模塊wave_gen.py [wave_gen10.py] 包含用于計(jì)算波形和對 Pico 的 PIO 和 DMA 進(jìn)行編程的代碼。我重用了 Rgco 創(chuàng)建的代碼。附加的模塊支持六種基本波形。AWG 可以做更多事情,例如將兩個(gè)波相加或相乘,如果您需要更多功能,請參閱Rcgo 的教程。

對原代碼的改動:

代碼有兩種版本,一種用于 8 位 DAC,一種用于 10 位 DAC。

Pico 超頻了,CPU 運(yùn)行在 250MHz 而不是 125MHz

我正在使用 DMA 通道 2 和 3 而不是 0 和 1。DMA 通道 0 和 1 由其他功能使用,例如 TFT 顯示器的 SPI 接口

在測試時(shí),我觀察到“內(nèi)存不足錯(cuò)誤”,因此我在計(jì)算完成后調(diào)用垃圾收集器 (gc) 模塊并填充波緩沖區(qū)以釋放未使用但仍分配的內(nèi)存。

備注:Pico 的 CPU 和 USB 連接在 250MHz 下運(yùn)行非常可靠

第 5 步:用戶界面

pYYBAGJQBVyAEIjEAAWp-425hRU030.png

用戶界面 (UI) 由兩個(gè)按鈕、一個(gè)帶按鈕的旋轉(zhuǎn)編碼器、2.8” TFT 顯示器和 python 模塊ui.py [ui10.py] 組成。該模塊定義了屏幕布局和 AWG 控件。在簡而言之,當(dāng)按下按鈕或旋轉(zhuǎn)編碼器時(shí)會發(fā)生什么。在以下 UI 元素中以斜體字母顯示,例如setup指向屏幕上的設(shè)置按鈕。您可以在下一步。

用戶界面原則:

所有用戶輸入都被收集并存儲在一個(gè)名為“wave”的字典中。按下設(shè)置生成器按鈕后,模塊 wave_gen [wave_gen10] 使用存儲在字典中的數(shù)據(jù)來計(jì)算和輸出波形。

AWG 在屏幕上顯示其當(dāng)前狀態(tài)。狀態(tài)是以下之一——初始化——、計(jì)算波、運(yùn)行或停止。每個(gè)狀態(tài)都非常自我解釋,并在模塊 ui.py [ui10.py] 中進(jìn)行了簡要描述。

UI 允許通過功能下拉菜單選擇波形。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è)置生成器按鈕,您會得到一個(gè)工作正常的波形。通常,您希望根據(jù)需要調(diào)整頻率。

如果您選擇不同的波形,頻率不會改變,但所有其他參數(shù)都設(shè)置為默認(rèn)值。

在 UI 中,只有與所選波形相關(guān)的參數(shù)處于活動狀態(tài)并且可以更改。不需要的參數(shù)是“灰色的”。

顯示使用的樣本數(shù)和波形的結(jié)果輸出頻率。

備注:AWG 是一種數(shù)字波發(fā)生器。這意味著例如頻率、幅度和偏移量會逐步變化,這會導(dǎo)致一些限制:

輸出頻率可能會偏離 UI 中設(shè)置的頻率,例如,如果設(shè)置頻率“介于”兩個(gè)數(shù)字頻率步長之間。

第 6 步:AWG 快速參考指南

poYBAGJQBVmABwpvAAOqutBJEj8138.png

用戶界面硬件由硬件中的兩個(gè)按鈕和一個(gè)旋轉(zhuǎn)編碼器組成。AWG 控件和設(shè)置/停止發(fā)生器按鈕在 UI 軟件中實(shí)現(xiàn)。

Next按鈕將焦點(diǎn)移動到下一個(gè)控件,該控件變?yōu)榛顒訝顟B(tài)。焦點(diǎn)由白色邊框表示。例如,在圖片中,您可以看到具有焦點(diǎn)的功能下拉列表。

上一個(gè)按鈕將焦點(diǎn)移回上一個(gè)控件。

旋轉(zhuǎn)編碼器必須起作用。(a) 按下編碼器作為輸入按鈕, (b) 轉(zhuǎn)動編碼器增加或減少一個(gè)值或在下拉列表中上下移動。

有關(guān)詳細(xì)信息,請參閱隨附的快速參考指南。

備注:如果輸出信號被削波或失真,請嘗試調(diào)整幅度、偏移或參數(shù)。這樣做通常會減少削波或失真。微調(diào)參數(shù)以優(yōu)化輸出,例如對于脈沖:不要將上升和下降時(shí)間設(shè)置為 0,而是將其設(shè)置為較小的值,例如 0.05。這通過限制壓擺率來減少信號的過沖。

第 7 步:限制和改進(jìn)

pYYBAGJQBVOAT2wAAAGWTNbxmzo367.png

AWG 的設(shè)計(jì)易于使用、易于復(fù)制和低成本。

實(shí)施了六個(gè)基本波。如果 Pico 板連接到 PC 上,基本上任何波形都可以通過在模塊 wave_gen.py 中添加波形的公式來產(chǎn)生。如果波形應(yīng)該在 AWG 中持久存在,請將波形名稱和控件添加到 ui.py 模塊。

AWG 的輸出級是基本的 AB 類設(shè)計(jì)。它經(jīng)過短路驗(yàn)證并提供 6V pp 擺幅。可以添加一個(gè)輸出濾波器來降低較高頻率的數(shù)字噪聲。

為 AWG 10 位實(shí)施了包圍。根據(jù)要求可以移植到 AWG 8 位。

在最近的軟件中,顯示更新(SPI 接口)在 AWG 啟動時(shí)會關(guān)閉。這顯著降低了輸出信號上的數(shù)字噪聲(見圖)。在原型板上構(gòu)建或進(jìn)行 PCB 布局時(shí),請注意避免走線或電纜之間的串?dāng)_,從而進(jìn)一步降低噪聲。

為了進(jìn)一步降低噪音,使用兩個(gè) Pico 板也可以降低輸出噪音。一個(gè)用于發(fā)生器的 Pico 板和一個(gè)用于用戶界面的 Pico 板,將它們與例如串行接口連接。非常歡迎任何改進(jìn)和評論。

第 8 步:用于 AWG 的軟件,帶有 8 位 DAC

附上使用 8 位 DAC實(shí)現(xiàn) AWG 時(shí)要上傳到 Pico 的三個(gè)文件。(參見第 3 步)

在停止生成器時(shí)保留參數(shù)值,而不是每次都初始化它們。

sinc 和指數(shù)參數(shù)現(xiàn)在被“括起來”,因此它們無法設(shè)置為導(dǎo)致波形不可用的值。

ui.py

wave_gen.py

主文件

第 9 步:帶 10 位 DAC 的 AWG

附上使用 10 位 DAC實(shí)現(xiàn) AWG 時(shí)要上傳到 Pico 的三個(gè)文件。(參見第 3 步)

一些用戶要求在停止生成器時(shí)保留參數(shù)值,而不是初始化它們。

sinc 和指數(shù)參數(shù)現(xiàn)在被“括起來”,因此它們無法設(shè)置為導(dǎo)致波形不可用的值。

ui10.py

wave_gen10.py

主文件

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 發(fā)生器
    +關(guān)注

    關(guān)注

    4

    文章

    1368

    瀏覽量

    61857
  • AWG
    AWG
    +關(guān)注

    關(guān)注

    1

    文章

    58

    瀏覽量

    16876
  • 波形發(fā)生器
    +關(guān)注

    關(guān)注

    3

    文章

    293

    瀏覽量

    31431
收藏 人收藏

    評論

    相關(guān)推薦

    5分鐘內(nèi)將Raspberry Pi Pico變成簡單的示波器+波形發(fā)生器

    5 分鐘內(nèi)將 Raspberry Pi Pico(或任何 RP2040 板)變成簡單的示波器+波形發(fā)生器
    的頭像 發(fā)表于 03-04 09:14 ?2372次閱讀
    5分鐘內(nèi)將<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> <b class='flag-5'>Pico</b>變成簡單的示波器+<b class='flag-5'>波形</b><b class='flag-5'>發(fā)生器</b>

    pico-ice:RP2040 plus Lattice iCE40UP5K FPGA 開發(fā)板 介紹

    pico-ice是一個(gè)小型、低成本的開發(fā)板,帶有Raspberry Pi Pico RP2040微控制
    發(fā)表于 06-28 15:45

    ubuntu上交叉編譯rp2040

    連接到rp2040 ,所以使用另一塊pico作為調(diào)試,需要給pico調(diào)試下載固件,也就是picoprobe 地址 https://git
    發(fā)表于 08-27 08:00

    樹莓派Pico迷你開發(fā)板及所使用的RP2040 MCU芯片有哪些特性

    Raspberry Pi Pico是什么?樹莓派Pico迷你開發(fā)板及所使用的RP2040 MCU芯片有哪些特性?
    發(fā)表于 09-14 06:50

    Raspberry Pi 4/3B的Pico開發(fā)板

    總線 (GPIO) 對 Raspberry Pi Pico 進(jìn)行編程。無論您擁有 Raspberry Pi
    發(fā)表于 07-26 07:14

    基于RP2040 arm微控制制作的定制Arduino

    描述Athduino-RP2040使用新的 Raspberry pi pico 的基于 RP2040 arm 的微控制
    發(fā)表于 08-31 06:03

    【BPI-Pico-RP2040 開發(fā)板】與Banana BPI-Pico-RP2040的第一次親密接觸

    RP2040芯片的微控制開發(fā)板,其最顯著的特性是,在盡量保留Raspberry Pi Pico的功能,外形尺寸,引腳布局的前提下,增加一顆
    發(fā)表于 03-17 23:03

    RP2040

    RP2040是一種基于ARM Cortex-M0+核心的微控制芯片,由Raspberry Pi公司設(shè)計(jì)和生產(chǎn)。它主要用于樹莓派計(jì)算模塊和樹莓派相機(jī)模塊V2等產(chǎn)品中,同時(shí)也適用于各種低
    發(fā)表于 09-15 09:04

    4美元的微控制PicoRP2040芯片

    今天我們來認(rèn)識一下Raspberry Pi Pico,一個(gè)小小的微控制,可以讓你在微控制上運(yùn)行一些代碼來構(gòu)建硬件項(xiàng)目。更有趣的是,
    發(fā)表于 01-22 15:51 ?2542次閱讀

    基于樹莓派產(chǎn)品 Raspberry Pi微控制板的優(yōu)缺點(diǎn)

    早在1月份, Raspberry Pi就推出了使用 RP2040Raspberry Pi Pico
    的頭像 發(fā)表于 06-12 09:13 ?2997次閱讀

    e絡(luò)盟現(xiàn)貨發(fā)售Arduino Nano RP2040 Connect和Raspberry Pi Pico

    Raspberry Pi Pico是首款采用Raspberry Pi自研RP2040微控制
    發(fā)表于 09-23 14:26 ?3252次閱讀
    e絡(luò)盟現(xiàn)貨發(fā)售Arduino Nano <b class='flag-5'>RP2040</b> Connect和<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> <b class='flag-5'>Pico</b>

    Arduino Raspberry Pi Pico/RP2040以太網(wǎng):W5100S EVB Pico

    電子發(fā)燒友網(wǎng)站提供《Arduino Raspberry Pi Pico/RP2040以太網(wǎng):W5100S EVB Pico.zip》資料免費(fèi)
    發(fā)表于 06-14 14:29 ?1次下載
    Arduino <b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> <b class='flag-5'>Pico</b>/<b class='flag-5'>RP2040</b>以太網(wǎng):W5100S EVB <b class='flag-5'>Pico</b>

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

    電子發(fā)燒友網(wǎng)站提供《將MicroPython從Raspberry pi(RP2040)移植到Wiznet5K.zip》資料免費(fèi)下載
    發(fā)表于 06-14 10:54 ?0次下載
    將MicroPython從<b class='flag-5'>Raspberry</b> <b class='flag-5'>pi</b>(<b class='flag-5'>RP2040</b>)移植到Wiznet5K

    RP2040 Raspberry Pi Pico遇見LoRa

    電子發(fā)燒友網(wǎng)站提供《RP2040 Raspberry Pi Pico遇見LoRa.zip》資料免費(fèi)下載
    發(fā)表于 06-15 09:25 ?1次下載
    <b class='flag-5'>RP2040</b> <b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> <b class='flag-5'>Pico</b>遇見LoRa

    RP2040Raspberry Pi的區(qū)別

    作為 Raspberry Pi 基金會推出的首款微控制產(chǎn)品,RP2040 標(biāo)志著以單板計(jì)算機(jī) (SBC) 而聞名的 Raspberry
    的頭像 發(fā)表于 11-16 17:37 ?983次閱讀
    <b class='flag-5'>RP2040</b>和<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>的區(qū)別
    百家乐的必胜方法| 网上真钱娱乐| 百家乐官网博弈之赢者理论| 老虎机下载| 山阳县| 百家乐稳一点的押法| 波音现金网| 百家乐园会员注册| 兴隆县| 百家乐板路| 百家乐官网博之道娱乐城| 百家乐丽| 百家乐官网平台是最好的娱乐城| YY百家乐的玩法技巧和规则| 百家乐官网路单破解器| 百家乐扑克桌| 玩百家乐官网会犯法吗| 百家乐赌场游戏平台| 嬴澳门百家乐官网的公式| 大发888推广合作| 赌博百家乐官网游戏| 百家乐创立几年了| 优惠搏百家乐官网的玩法技巧和规则 | 华侨人娱乐城| 百家乐娱乐城足球盘网| 百家乐官网交流群号| 百家乐最新投注方法| 黄金城赌场| 网上百家乐是现场吗| 百家乐官网龙虎台布作弊技巧| 發中發百家乐的玩法技巧和规则| 星港城百家乐官网娱乐城| 德州扑克书籍| 属狗与属猪能做生意吗| 阜新| 乐享百家乐的玩法技巧和规则| 百家乐官网正网| 霍林郭勒市| 大发888攻略| 视频百家乐赌法| 沙龙百家乐官网赌场娱乐网规则 |