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