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

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

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

信號列表如下:

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

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

代碼詳解:
一旦檢測到觸發(fā)信號measure_start的上升沿,adc_ltc2308 模塊的系統(tǒng)復(fù)位信號就置0:

設(shè)計一個計數(shù)器,對LTC2308的一次完整轉(zhuǎn)換和采集過程所需的時鐘周期數(shù)進行數(shù)節(jié)拍:

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

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

在clk下降沿時刻,將轉(zhuǎn)換完成的數(shù)據(jù)寫入到到寄存器中:

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

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

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

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


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

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

ADC_CLK 輸出12個時鐘周期:

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

-
FPGA
+關(guān)注
關(guān)注
1651文章
22224瀏覽量
628238 -
接口
+關(guān)注
關(guān)注
33文章
9330瀏覽量
155750 -
adc
+關(guān)注
關(guān)注
100文章
6898瀏覽量
552833 -
引腳
+關(guān)注
關(guān)注
16文章
2013瀏覽量
54777 -
SPI協(xié)議
+關(guān)注
關(guān)注
0文章
22瀏覽量
8761
原文標題:05-基于FPGA和LTC2308的數(shù)字電壓表設(shè)計-用FPGA實現(xiàn)SPI協(xié)議通訊
文章出處:【微信號:友晶FPGA,微信公眾號:友晶FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
基于FPGA和LTC2308模數(shù)轉(zhuǎn)換芯片的數(shù)字電壓表設(shè)計
源碼系列:基于FPGA的數(shù)字電壓表(AD)設(shè)計
版主 你好,我在論壇查到FPGA的數(shù)字電壓表的設(shè)計已經(jīng)過期了。
請問如何利用CPLD實現(xiàn)智能數(shù)字電壓表的設(shè)計?
數(shù)字電壓表的VHDL設(shè)計與實現(xiàn)
數(shù)字電壓表的設(shè)計
電壓表protues仿真 基于51數(shù)字電壓表仿真設(shè)計 電壓表程序
基于LabVIEW8.2的虛擬數(shù)字電壓表的設(shè)計和實現(xiàn)
如何使用FPGA實現(xiàn)數(shù)字電壓表的設(shè)計
基于FPGA的SPI協(xié)議及設(shè)計實現(xiàn)

數(shù)字電壓表設(shè)計教程之使用FPGA實現(xiàn)SPI協(xié)議通訊
評論