代碼解析
LTC2308通過一個標準4線SPI數字接口進行通信。LTC2308模數轉換芯片有8個ADC通道和12位的分辨率,輸入信號時鐘頻率范圍不超過500KHz,按照Nyquist采樣定理則建議輸入信號在250KHz以下。
以下是DE10-Standard開發板上的LTC2308電路:

從電路圖可知,LTC2308的COM引腳接GND,代表當前DE10-Standard開發板上的LTC2308被固定為單極性輸入。
LTC2308的SPI協議時序圖如下:

LTC2308控制模塊(adc_ltc2308.v)框圖如下:

信號列表如下:

模塊參數設計:
DE10-Standard開發板手冊(DE10-Standard_User_manual.pdf)提到如果想設置采樣率100Ksps,只需設置tHCONVST 為 320即可。接下來看看320這個數值是如何計算出來的。
根據LTC2308數據手冊我們知道其最高采樣率是500ksps, SCK最高能達到40MHz, tCONV 的典型值是1.3 us,最大值是 1.6 us。100Ksps的時間周期是10us,40MHz的時間周期是25ns。一次整個過程(包括轉換和采樣)要占用10us/25ns=400 個周期。1.6us/25ns= 64, 那么tCONV 最多占用64個時鐘周期。

根據時序圖和代碼來看,64+12+320=396大約是400 。
adc_ltc2308.v代碼里面參數設定如下:

代碼詳解:
一旦檢測到觸發信號measure_start的上升沿,adc_ltc2308 模塊的系統復位信號就置0:

設計一個計數器,對LTC2308的一次完整轉換和采集過程所需的時鐘周期數進行數節拍:

輸出ADC_CONVST信號(也就是標記出tWHCONV時間段):

輸出SCK時鐘,ADC_SCK周期為40MHz,但每一次只有12個周期輸出,其他時間輸出低電平0 :

在clk下降沿時刻,將轉換完成的數據寫入到到寄存器中:

measure_done是一次采集完成標志,每次檢測到LTC2308的觸發信號上升沿時measure_done信號歸0,當一次采集完成后置1:
measure_done是一次轉換+傳輸+采樣完成的標志,measure_done信號在開始新一輪采樣后清0,當傳輸完成后置1:

reset_n、clk_enable、measure_done、ADC_CONVST和ADC_SCK信號波形標出如下:

根據輸入(measure_ch)的通道選擇不同的配置字存儲到寄存器config_cmd:

然后根據LTC2308的時序圖標記出配置字的三個階段(三個狀態):config_init(配置初始化時間段) 、config_enable(可配置時間段) 和 config_done(配置完成時間段)。
config_init(配置初始化時間段):初始狀態下,將配置字的高字節賦給ADC_SDI
config_enable(可配置時間段):將配置字剩余的5個bit逐個賦給ADC_SDI
config_done(配置完成時間段):配置完成階段將0賦給ADC_SDI


打開~DE10_Standard_ADCstp1.stp 文件(關于Signaltap調試工具的使用請參考之前的推文:SDRAM讀寫),采樣時鐘設置的是PLL outclk_0輸出的100M,ADC_CONVST作為觸發信號:

可得到 LTC2308控制模塊(adc_ltc2308.v)內部信號的波形如下。
測量11次,第一次的數據忽略, 取后面10次的數據:

ADC_CLK 輸出12個時鐘周期:

若 stp1.stp 文件采樣時鐘設置為PLL outclk_1輸出的40M,則波形細節如下:
ADC_CONVST占用4個時鐘周期(tick=0、1、2、3):

-
FPGA
+關注
關注
1660文章
22408瀏覽量
636203 -
接口
+關注
關注
33文章
9519瀏覽量
157014 -
adc
+關注
關注
100文章
7511瀏覽量
555905 -
引腳
+關注
關注
16文章
2111瀏覽量
55680 -
SPI協議
+關注
關注
0文章
24瀏覽量
8833
原文標題:05-基于FPGA和LTC2308的數字電壓表設計-用FPGA實現SPI協議通訊
文章出處:【微信號:友晶FPGA,微信公眾號:友晶FPGA】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
數字電壓表的設計
基于LabVIEW8.2的虛擬數字電壓表的設計和實現
如何使用FPGA實現數字電壓表的設計
基于FPGA的SPI協議及設計實現
數字電壓表設計教程之使用FPGA實現SPI協議通訊
評論