實驗室必備 | 利用Arduino波形產生器實現高精度訊號模擬


本文說明如何用Arduino與LM317放大器製作高精度訊號產生器,用極低的成本為你的電子電路實驗室創造極高的價值。不需要再花費大筆鈔票買儀器,只要學會這篇文章你也可以自己做一個!

目錄

    前言

    在做實驗的過程中,常常會遇到沒有波型產生器的困擾,不管是要測試放大器電路、還是產生一個方波訊號當作計數器的Clock來源等等,少了很不方便。

    這次就讓我們用直接數位訊號合成器AD9833,搭配Arduino作為主控制器,並將以前所學的類比放大器電路應用在這次的專案上


    功能

    市售的波型產生器有幾點最重要的功能:

    1. 一定要能夠調整振福、直流準位、頻率
    2. 可產生三角波、方波、正弦波
    3. 有顯示器可顯示目前輸出訊號波型

    還有幾點進階功能

    1. 顯示輸出訊號震幅大小
    2. 短路保護
    3. 可使用xlsx檔案匯入產生任意波型
    因為是自己DIY的,能動就好,所以就只取必要功能

    其他的做起來會比較複雜一點,還是要有所取捨~

    另外,這次的波型產生器為了要有簡潔的操作介面,使用旋轉編碼器(Rotary Encoder) 作為操作開關,搭配一片128 x 64的LCD顯示器,可以顯示兩個通道的波型形狀與頻率,下方則是操作介面,讓使用者可以選擇要設定的頻道。

    要達到第一點必要功能,除了要有一個波型來源之外,還要能夠調整增益的放大電路以及能夠調整直流準位的電路。

    這部分可以直接用高職學過的電晶體共射極放大器就做好,但是那種電路的溫度可靠度不高,而且明明有IC為甚麼還要用離散元件呢?

    感光電路圖

    這次的硬體最主要選用AD9833數位波型產生器,他可以透過SPI設定要輸出的波型形狀、頻率以及相位差。

    主控制器依然選擇熟悉Arduino主控--Atmegs 328P 來控制所有的周邊電路

    這次的電路是用比較特出的材質: 感光電路板 作為基板,它的製作過程可以參考影片中後半部分。

    感光電路板是所有PCB產業的基礎,先印製好所需要的電路,將電路圖與電路板拿去曝光後,會留下黑色的電路部分。

    將電路板拿去蝕刻,照到紫外線的部分會被蝕刻液溶解,留下所需要的銅箔導線。

    雖然製作條件要求比較高但有了電路圖也可以用洞洞板手工焊出一塊。



    電路圖


    電路圖左上是正負12V電源輸入,主要供給下方LM318放大器使用,讓輸出波型可以在+12~-12V之間變化,右方則是Arduino基本電路,包含震盪器、電容、Reset按鈕等等。

    而AD9833模組主要透過SPI通訊,M1、M2是連接到兩個模組的排座,SPI工作模式是共用時脈訊號(SCLK)與資料訊號(SDAT),透過致能腳位(FNC、FNC2)選擇要通訊的對象。

    OUT1與OUT2則是杯型產生器的輸出訊號,連接到放大電路的輸入端。

    另外旋轉編碼器則是連接到Arduino的硬體中斷腳位(INT0與INT1),透過硬體中斷可以更穩定的控制旋鈕,避免輪詢造成的延誤。

    LCD模組透過I2C通訊,因此連接到Arduino的SCL(A4)與SDA(A5)即可。

    韌體

    韌體引用了三個外部函示庫,以下是原作者的專案連結:

    1. Billwilliams - AD9833 Library Arduino Master

    2. Raylid - RSG12864B 128x64 LCD Library

    3. Matthias Hertel - Rotary Encoder Arduino Library

    檔案同時放在Git專案的Library資料夾內 主要的韌體分成三個檔案,分別是firmware_v1.0.ino、lcdUI.h以及lcd_screens.ino。 firmware_v1.0.ino 就是最主要的韌體程式碼,功能除了設定兩顆AD9833的訊號之外,還有處理LCD模組通訊、UI選單店變化、旋轉編碼器讀取的功能。 lcdUI.h則是整個UI介面的選單介面,依照選單層數不同對應不同的選單畫面。 lcd_screens.in則是個製化選單的部分,除了可以顯示詳細資訊外,也可以當作小幫手或幫助葉面供使用者設定詳細資訊。 由於這次的檔案比較大,還請大家移動到Github上瀏覽程式碼

    使用情境


    Post a Comment

    留個言吧

    較新的 較舊