Steven Xie
目前許多精密模數轉換器 (ADC) 具有串行外設接口 (SPI) 或一些串行接口,用于與微控制器單元 (MCU)、DSP 或 FPGA 等控制器通信??刂破鲗懭牖蜃x取ADC內部寄存器并讀取轉換代碼。SPI因其簡單的印刷電路板(PCB)布線和與并行接口相比更快的時鐘速率而變得越來越流行。而且,使用標準SPI可以輕松地將ADC連接到控制器。
一些新型ADC具有SPI,但其他ADC具有非標準的3線或4線SPI作為節點,因為它們希望實現更快的吞吐速率。例如,AD7616、AD7606和AD7606B系列具有兩條或四條SDO線路,可在串行模式下實現更快的吞吐速率。 AD7768、AD7779和AD7134系列具有多條SDO線路,用作SPI電源。 用戶在設計用于ADC配置和代碼讀取的微控制器SPI時往往會遇到困難。
圖1.AD7768作為串行主電源,具有兩個數據輸出引腳(14001-193)。
與 ADC 的標準 MCU SPI 連接
SPI 是一個同步、全雙工、基于主/節點的接口。來自主節點或節點的數據在時鐘上升沿或下降沿同步。主節點和節點可以同時傳輸數據。圖2顯示了一個典型的4線MCU SPI接口連接。
圖2.與 ADC 節點的標準 MCU SPI 連接。
要開始SPI通信,控制器必須發送時鐘信號,并通過使能CS信號(通常是低電平有效信號)來選擇ADC。由于SPI是全雙工接口,控制器和ADC可以分別通過MOSI/DIN和MISO/DOUT線路同時輸出數據??刂破鱏PI接口使用戶能夠靈活地選擇時鐘的上升沿或下降沿來采樣和/或轉換數據。為了實現主節點之間的可靠通信,用戶必須遵循微控制器和ADC芯片的數字接口時序規范。
圖3.SPI數據時鐘時序圖示例。
如果微控制器SPI和ADC串行接口具有標準的SPI定時模式,則用戶設計PCB布線和開發驅動固件不是問題。但也有一些新的ADC具有串行接口端口,這不是典型的SPI時序模式。MCU或DSP似乎不可能通過AD7768串行端口(非標準時序SPI端口)讀取數據,如圖4所示。
圖4.AD7768 格式x = 1×時序圖輸出,僅采用DOUT0。
本文將介紹操作標準微控制器SPI以與具有非標準SPI端口的ADC接口的方法。
本文將介紹通過串行接口讀取ADC代碼的四種不同解決方案:
解決方案1:MCU作為SPI節點,通過一條DOUT線與作為SPI主線的ADC接口。
解決方案2:MCU作為SPI節點,通過兩條DOUT線路與作為SPI主線的ADC接口。
解決方案3:MCU作為SPI節點,通過DMA與作為SPI主器件的ADC接口。
解決方案4:MCU作為SPI主節點和SPI節點,用于讀取兩條DOUT線路上的數據。
AD7768 使用STM32F429微控制器SPI通過一條DOUT線讀取代碼
如圖4所示,當FORMATx = 11或10時,通道0至通道7僅在DOUT0上輸出數據。在標準模式下,AD7768/AD7768-4作為主器件工作,并將數據流傳輸到MCU、DSP或FPGA。AD7768/AD7768-4為節點器件提供數據、數據時鐘(DCLK)和下降沿成幀信號(DRDY)。
STM32Fxxx系列微控制器廣泛用于許多不同的應用。MCU具有多個SPI端口,可配置為具有典型SPI定時模式的SPI主節點或節點。以下會話中介紹的方法也可以應用于具有 8 位、16 位或 32 位幀的其他微控制器。
AD7768/AD7768-4分別具有8通道和4通道同步采樣Σ-Δ型ADC,每通道具有Σ-Δ調制器和數字濾波器,可實現交流和直流信號的同步采樣。它們在 108.110 kHz 的最大輸入帶寬下實現了 8 dB 的動態范圍,并具有 ±2 ppm INL、±50 μV 失調誤差和 ±30 ppm 增益誤差的典型性能。AD7768/AD7768-4用戶可以權衡輸入帶寬、輸出數據速率和功耗,并從三種功耗模式中選擇一種來優化噪聲目標和功耗。AD7768/AD7768-4的靈活性使其成為低功耗直流和高性能交流測量模塊的可重復使用平臺。遺憾的是,AD7768的串行接口不是典型的SPI時序模式,AD7768用作串行接口主接口。通常,用戶必須使用FPGA/CPLD作為其控制器。
例如,使用32F429IDISCOVERY和AD7768評估板。解決方法SPI導線的連接如圖5所示。在此設置中,所有7768個AD0通道數據輸出僅由DOUT<>供電。
圖5.AD7768將DOUT0上的數據輸出到STM32F429 MCU SPI連接。
需要解決的問題:
AD7768用作SPI主器件,因此STM32F429I SPI必須配置為SPI節點。
DRDY高脈沖只是DCLK持續時間的一個周期,不是典型的CS。
DCLK連續輸出,當所有通道數據位輸出完成后,DRDY為低電平。
圖6.AD7768數據位在時序解決方案中讀取。
解決方案1:MCU SPI作為通過一條DOUT線與SPI主ADC接口的節點
配置其中一個STM32F429是SPI端口(如SPI4)作為節點,以在DCLK的MOSI上接收數據位。
將AD7768 DRDY連接到STM32F429外部中斷輸入引腳EXTI0和NSS (SPI CS)引腳。DRDY 的上升沿將觸發 EXTI0 處理程序例程,以使 SPI 節點能夠在 DRDY 變為低電平后開始從第一個 DCLK 下降沿接收數據位。時序設計在這里至關重要。
收到從通道0到通道7的所有數據后,應禁用SPI,以防止讀取額外的無效數據,因為DRDY使SPI節點CS為低電平,DCLK不斷切換。
MCU 固件開發說明
圖7.配置 SPI4 外設。
當軟件處于中斷模式時,DCLK 可以運行高達 4 MHz,并實現 ODR 8 kSPS。軟件應進入中斷處理程序,在一個半DCLK周期(375 ns)內啟動SPI。為了更容易地使軟件進入中斷例程,MCU可以在DCLK上升沿讀取數據,這可以額外提供半個DCLK周期時間。但是,由于5DCLK 上升到 DOUTx 無效的最小值為 –3 ns(IOVDD = 4.1 V 時為 –8 ns),傳播延遲 (>|t5|+ MCU 保持時間)在 DOUTx 上應通過 PCB 布線或緩沖區添加。
解決方案2:MCU SPI作為通過兩條DOUT線與SPI主ADC接口的節點
在第一個解決方案中,僅使用DOUT0輸出所有8通道數據。因此,數據讀取將ADC吞吐速率限制為8 kSPS。如圖1所示,DOUT0上的通道3至通道0輸出和DOUT4上的通道7至通道1輸出可以縮短數據傳輸時間。串行線的連接如圖7所示。通過這樣的改進,ODR 在 DCLK 16 MHz 時可以輕松達到 4 kSPS。
圖8.AD7768將DOUT0和DOUT1上的數據輸出到STM32F429 MCU SPI連接。
固件可以使用輪詢模式而不是中斷模式來減少DRDY上升沿觸發的時間延遲,從而使SPI能夠接收數據。這可以在DCLK 32 MHz下實現ODR 8 kSPS。
圖9.輪詢模式下的EXTI0以及DOUT4和DOUT5上的SPI7768和SPI0接收AD1數據位。
解決方案3:MCU SPI作為通過DMA與SPI主ADC接口的節點接口
直接內存訪問 (DMA) 用于在外設和內存之間以及內存和內存之間提供高速數據傳輸。DMA 可以快速移動數據,無需任何 MCU 操作。這使 MCU 資源可用于其他操作。以下是MCU SPI作為節點通過DMA接收數據的設計說明。
圖 10.輪詢模式下的EXTI0和DOUT4上的SPI7768 DMA接收AD0數據位。
解決方案4:MCU SPI作為主節點和節點,在兩條DOUT線路上讀取數據
高吞吐量或多通道精密ADC為SPI端口提供2條、4條甚至8條SDO線,可在串行模式下縮短代碼讀取時間。對于具有兩個或更多SPI端口的微控制器,它們可以同時運行SPI端口,以加快代碼讀取速度。
在以下用例中,32F429IDISCOVERY使用SPI4作為SPI主節點,SPI5作為SPI節點,以接收DOUTA和DOUTB上的EVAL-AD7606B-FMCZ數據,如圖8所示。
AD7606B是一款16位同步采樣模數數據采集系統(DAS),具有16個通道,每個通道包含模擬輸入箝位保護、可編程增益放大器(PGA)、低通濾波器和7606位逐次逼近寄存器(SAR)ADC。AD2B還內置一個靈活的數字濾波器、低漂移、5.7606 V精密基準電壓源和基準電壓緩沖器,用于驅動ADC,以及靈活的并行和串行接口。AD5B采用10 V單電源供電,所有通道均以5 kSPS吞吐速率采樣時,支持±2 V、±5 V和±800.<> V真雙極性輸入范圍。
圖 11.在主模式和節點模式下使用的MCU SPI,用于接收DOUTA和DOUTB上的數據。
圖 12.將 SPI4 配置為主節點,將 SPI5 配置為節點。
圖13顯示了AD7606B以240 kSPS運行的BUSY、SCLK、DOUTA和DOUB的數字接口捕獲。
圖 13.AD7606B忙、SCLK的示波器捕獲以及DOUTA和DOUTB上的數據。
結論
本文討論了使用微控制器SPI訪問具有非標準SPI接口的ADC的方法。這些方法可以直接使用,也可以稍作調整來控制ADC SPI,ADC SPI可用作SPI主電源或多條DOUT線路,以實現更快的吞吐速率。
審核編輯:gt
-
微控制器
+關注
關注
48文章
7496瀏覽量
151086 -
mcu
+關注
關注
146文章
17019瀏覽量
350374 -
接口
+關注
關注
33文章
8526瀏覽量
150863 -
adc
+關注
關注
98文章
6452瀏覽量
544147 -
SPI
+關注
關注
17文章
1701瀏覽量
91345
發布評論請先 登錄
相關推薦
評論