[應用] 以 STM32 晶片的 ADC 為基礎, 設計一個簡易示波器

目的

        以 ADC 模組為基礎,設計一個簡易示波器觀察訊號變化,同時能記錄每筆資料以便數值分析。

設計

        使用 STM32 系列晶片內的 ADC 模組,將類比訊號轉換成數位資料,然後將整筆數據從網路傳送到 PC 端,再由 PC 程式接收後繪製成曲線圖。開發過程,利用前面一文以 STM32 晶片的 DAC 為架構設計一個訊號產生器所產生的方波當做待測訊號源,此訊號源輸入到 ADC 接腳,如下圖一所示。

圖一:設計完整示波器的方塊圖 STM32F207


       下圖是程式碼設定 ADC 的參數,第一個要先設定 ADC 取樣率的刻度,再來設定取樣率,如下面紅線標示。取樣率跟晶片的 operating clock 有關,從系統的高速時脈降頻到 ADC 的取樣率。第二個是選定 ADC 轉換資料的精密度,精密度越高,資料量則越大。最後,設定 ADC 轉換完畢後產生中斷通知 CPU,每次 ADC 轉換資料後,中斷的 IRQ 便會把數值從暫存器搬到記憶體裡。在設計裡,我們宣告兩塊 buffer 存放數值。

圖二:ADC 參數設定


        下圖是在 PC 端寫一個網路接收資料的程式,並把資料繪製成曲線圖。當 ADC 取樣率為 15.2KHz時,從PC端看到的圖形比較像弦波,當我把 ADC 取樣率提高為 48KHz 時,PC端看到的圖形就像一個方波了。不過,取樣率高低對設計來說是一項架構問題,取樣率越高,代表資料量越高,傳輸速率越大,所需要的網路頻寬要夠,還要晶片的CPU有足夠的效能才行。

圖三-1:ADC 取樣率 15.2K 所顯示的方波
圖三-2:ADC 取樣率為 48K 所顯示的方波

問題

        DMA資料搬運過程不穩定,當取樣率越高的時候,DMA搬運出現資料錯亂的情況。將這個問題放到 StackOverflow 網站尋求解答,連結如下「ADC 與 DMA 資料搬運的問題」。所以,在上面的測試過程,我們都採用 ADC 中斷的方式搬運資料到記憶體,而不是 DMA。

留言

Bee說…
用 F3 系列去做,内部有放大器,可做電壓檔位切換。

此網誌的熱門文章

[筆記] Raspberry Pi 樹莓派的軟體開發

[筆記] ESP32 在 VS Code 開發環境的編譯與除錯

[筆記] Visual Studio 遠端偵錯的設定步驟

[應用] 藍芽 BLE client/server 架構:BLE remote controller

[模組] 三軸重力加速計 Accelerometer (GY-61 ADXL335)

[應用] STM32 DFU (Device Firmware Upgrade)

[應用] 在 ESP32 Audio 開發板的 VoIP 範例