[模組] 德州儀器 ADC 24-bit 類比訊號擷取模組 (資料擷取)

前言

        這次接到一個任務,內容是類比訊號的資料擷取,CNC 加工機上面有不少感測器,其中震動感測和電流感測是我這次所要擷取的資料。原本連接在加工機上已有兩個 ADC 資料擷取裝置:研華 USB-4716 和國家儀器 NI-9234,這兩個設備將收集到的資料透過 USB 傳到 PC 端。這次,我必須想辦法將其取代掉,再以 PLC 控制器取代 PC。

        首先,這兩個設備的主要功能是類比訊號擷取器,用來收集加工機上面的震動訊號和電流訊號。加工機上面安裝了一個震動感測器 (Dytran 3055B3),將震動訊號轉成電壓,再由 NI-9234 將電壓轉成數位資料。另外,加工機上面也安裝一個電流感測器 (Topstek TU12P10A),將電流轉成電壓訊號,再由研華 USB-4716 將電壓轉成數位資料。首先,我先查詢了 NI-9234 和 USB-4716 資料解析度,分別是 24-bit 和 16-bit,於是從淘寶網站上找到一個 ADC 16-bit 的模組,而且具有八個通道,正好能滿足需求,所以買來研究看看,如圖一所示。這模組上的 ADC 晶片是由德州儀器 TI ADS1256 所構成的核心。另外,我發現這塊模組被用於 Arduino 平台上,官網有提供其 library。

圖一:德州儀器 TI ADS1256 類比訊號模組

        之前,曾設計開發過一個控制器 (Windshear),系統底板的插槽可以提供 5V 電源和 SPI 通訊介面。於是,我將這塊類比訊號模組加工改造後,接到控制器的底板上,如圖二所示。大功告成後,修修改改一下控制器的 STM32F207 韌體程式,啟用 SPI 介面和 GPIO 中斷,便能開始測試模組了。

圖二:Windshear 控制器加上 ADS1256 模組

元件規格

        ADS1256 晶片是一顆具有 24-bit 解析度和八個通道的類比數位轉換器 ADC,根據 datasheet 來看,其內容提到取樣頻率可達 30k SPS (每秒 30k 個取樣點),每個取樣點具有 24-bit 解析度。解析度影響資料的精準度,解析度的位元越高,資料則可以精準到小數點以下更多位。除了要留意解析度之外,取樣頻率則影響資料的頻寬,如果擷取的資料屬於變動較小,例如溫濕度...瞬間變動不會很劇烈,取樣頻率可以選擇較低些。如果擷取的資料是高速變化的話,取樣頻率則必須考慮較高一點,才不會造成資料失真的情況。通常,取樣率和解析度都與價格成正比,想要越高資料準度付出的代價越多。

        圖三是 ADS1256 晶片內部的方塊圖,圖中左側是一個多工選擇器,同一時間只能選擇一個通道進行 ADC 轉換。由於這顆晶片取樣頻率可達 30k SPS,如果八個通道都要使用的話,平均一個通道的取樣頻率約 3.75k SPS 左右 (實際應該會比這個值低)。也就是說,只有一個通道使用的情況下才能滿足單一通道取樣率為 30k SPS。

圖三:ADS1256 晶片內部方塊圖

開發過程

        這塊模組以 SPI 介面通訊,外加一根 DRDY pin 用來通知資料轉換是否完成了。ADS1256 有兩種讀取資料的方式:單筆或連續,分別如圖四或圖五所示。單筆模式下,當 DRDY pin 拉低之後,我們才能發出讀取的命令,從圖四觀察,DRDY 頻率為 30KHz (這是取樣頻率),在 DRDY 的低電位期間,SCK 發出四組 (8-bit 命令 + 24-bit 資料)。
圖四:單筆讀取資料

        連續模式下,只要我們一開始對晶片發出 "連續讀取" 命令後,當 DRDY pin 拉低之後,觸發中斷,SCK 只要發出三組 (24-bit 資料),便能讀取到 24-bit 資料了,如圖五所示。值得留意的是兩者模式的 DRDY 寬度不太一樣,單筆模式的 DRDY 低電位的時間比較長 (28us),而連續模式下的 DRDY 低電位的時間比較短 (17us)。
圖五:連續讀取資料模式

實現展示

        我將上述的整個系統操作過程拍攝成影片,如下所示。24-bit ADC 模組板嵌入接在 WindShear 控制背板上,並與主控板相連。影片中,用一個可變電阻產生的電壓當作 ADC 的輸入訊號。而 WindShear 主控板收集 ADC 模組輸入訊號後,透過網路將訊號資料傳送到 PC 端,PC 軟體再將這些訊號繪製成圖,方便監控者在遠端監看其變化。操作過程中,當我改變可變電阻,在 PC 端的軟體上可觀察到電壓數值的變化。此外,我們除了從 PC 端觀察電壓的變化,Windshear 系統還可以將電壓數值紀錄在 SD 卡內,然後再做數據分析。

影片:擷取 ADC 訊號並繪製成圖的操作過程

相關資料

留言

TH說…
您好,我有震動sensor 要連結到arduino 的需求,目前需要到24bit的adc, 不知道是否能幫忙?
thlin.harcon@gmail.com
漢亞科技說…
要依照您們振動訊號所需的取樣頻率多高才能知道arduino能不能即時處理,取樣頻率*24-bit的資料量可大可小。
ppp70327說…
您好,請問,若取樣頻率只有2kHz,該如何評估能否及時處理?
漢亞科技說…
如果發生無法從ADC晶片穩定且週期性地讀到資料,那就表示沒有達到即時處理。我是用中斷方式讀取ADC資料,當中斷發生延遲,導致連續中斷受影響,那就是沒有做到即時處理。沒有達到即時處理,那麼取樣頻率就會亂飄移(不準確),影響後續的資料分析。

此網誌的熱門文章

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

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

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

[筆記] Android APP 藍芽範例說明 -- BluetoothChat

[筆記] Android APP BLE範例程式 -- BluetoothLeGatt

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

[應用] STM32 DFU (Device Firmware Upgrade)