<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 測試測量 > 設計應用 > 多通道高精度數(shù)據(jù)采集電路設計

          多通道高精度數(shù)據(jù)采集電路設計

          作者: 時間:2008-01-29 來源:網(wǎng)絡 收藏

            在信號處理領域,技術的應用越來越廣泛,基于的信號采集處理平臺不斷出現(xiàn)。常見的信號采集處理平臺利用總線進行數(shù)據(jù)采集,總線上多個設備的數(shù)據(jù)傳輸經(jīng)常相互沖突。ADI公司的Tiger SHARCl01型DSP(簡稱TSl01)只有總線和鏈可以與外設通信,基于緩解總線沖突的目的,筆者設計了一種以現(xiàn)場可編程門陣列(FPGA)作為數(shù)據(jù)接口緩沖器,避開總線,經(jīng)TSl01的鏈將多個A/D轉換器采集到的數(shù)據(jù)傳送到TSl01。由FPGA完成多個多路A/D轉換器采集數(shù)據(jù)的緩沖排序,并形成符合TSl01鏈傳輸協(xié)議的數(shù)據(jù)流,送到TSl01的鏈路口。該設計實現(xiàn)了鏈路口與其他非鏈路口外部設備的通信。減少了TSlOl總線上的數(shù)據(jù)傳輸量,緩解了總線競爭的問題。

            2 ADS8361型A/D轉換器

            ADS8361是TI公司生產(chǎn)的雙通道、四路、模擬差分輸入、16 bit同步采樣串行A/D轉換器。4路模擬差分輸入分成2組,每組各有1個A/D轉換模塊,可同時采樣;對每個輸入最快可以實現(xiàn)500 ks/s的采樣率,即2 μs就完成1次A/D采樣。采樣后的數(shù)據(jù)由串行接口輸出

            ,這對于具備同步串行接口的大多數(shù)DSP是非常有用的,DSP的總線可以掛接多種其他設備,在高速連續(xù)采樣的過程中,DSP的串口和總線可以互不影響地獨立工作。

            ADS8361在采樣頻率率為50 kHz時,有80 dB的,這在強噪聲環(huán)境中非常重要。ADS8361需要模擬電壓和數(shù)字電壓分別供電,考慮到與外部電路的匹配,所以模擬部分選擇5 V供電,數(shù)字部分與DSP的I/O電壓一致,選擇3.3 V供電。工作時既可以使用內(nèi)部2.5 V參考電壓,也可以由外部提供參考電壓。差分模擬輸入信號的電壓范圍為±2.5V。ADS8361采用SSOP-24封裝。CS引腳是ADS8361的片選;Ml、M0、AO引腳用于選擇采樣通道和數(shù)據(jù)通道;RD引腳為讀取數(shù)據(jù)引腳,CONVST引腳是A/D轉換脈沖,在使用中應將RD與引腳相連;CLOCK引腳用于輸入采樣時鐘(與下文中FPGA輸出的相連);2個通道的數(shù)據(jù)輸出引腳分別為SERIAL DATA A和SERIALDATA B,每次轉換輸出16 bit數(shù)據(jù)。ADS8361的工作時鐘最大值為10MHz,高電平和低電平至少各40 ns。

            3 TSl01的鏈路口及傳輸方式

            TSl01是高性能128 bit浮點數(shù)字信號處理器,其運算能力很強(18億次/秒),而外部總線吞吐能力相對不足(若外部頻率為100 MHz,則外部總線傳輸速度為800 MB/s),當外設較多時很容易形成I/O瓶頸。不過它有四個高速鏈路口,每個鏈路口的傳輸速度極限為250 MB/s,適合TSl01之間的點對點高速傳輸,也可與其相同協(xié)議的外設通信,從而大大緩解了總線壓力。

            TSl01的每個鏈路口由發(fā)送器和接收器兩部分組成,每部分都有128 bit的和128 bit的,其結構如圖l所示。每個鏈路口均有8 bit數(shù)據(jù)線和LxCLKIN、LxCLKOUT和LxDIR(x為鏈路口序號0-3)3個控制引腳,可支持多片TSl01處理器間點對點的雙向數(shù)據(jù)傳送,也可以用于與外部設備進行數(shù)據(jù)傳輸。其中LxDIR用來指示鏈路口的數(shù)據(jù)流向。LxCLKIN和LxCLKOUT為鏈路口的時鐘/確認握手信號。發(fā)送數(shù)據(jù)時,LxCLKOUT為時鐘信號,LxCLKIN為確認信號;接收數(shù)據(jù)時,LxCLKIN為時鐘信號,LxCLKOUT為確認信號。發(fā)送數(shù)據(jù)時,首先傳輸4字數(shù)據(jù)到鏈路發(fā)送LBUFTx,再將其復制到(若為空,此時LBUFTx可被寫入新的數(shù)據(jù)),然后以字節(jié)的形式發(fā)送(先發(fā)送低字節(jié)),每個字節(jié)在鏈路時鐘的上升沿和下降沿被驅動和鎖存。接收器的移位寄存器為空時,系統(tǒng)將開始接收發(fā)送方傳輸?shù)臄?shù)據(jù)并將其送入移位寄存器,同時驅動LxCLKOUT為低電平。當整個4字接收完畢后,如果接收LBUFRx為空,系統(tǒng)會將4字數(shù)據(jù)從移位寄存器復制到LBUFRx,并在數(shù)據(jù)被復制后驅動其Lx-CLKOUT為高電平,以告訴發(fā)送方接收緩沖寄存器為空,可以準備接收新數(shù)據(jù)。發(fā)送方檢測到為高電平后立即進行下次傳輸。

            

            

            常見的啟動鏈路傳輸數(shù)據(jù)的方法有二種:利用TSl01的IRQ中斷啟動和利用鏈路中斷啟動。鏈路傳輸以進行,是在TSl01內(nèi)核不干預的情況下,后臺通過鏈路口高速傳送數(shù)據(jù)的機制。從外部設備向鏈路口傳送數(shù)據(jù),實際上是鏈路口把外部設備送來的數(shù)據(jù)自動保存到TSlOl的內(nèi)、外存儲器中,也可以經(jīng)其他鏈路口轉發(fā)出去。對鏈路口及其DMA寄存器進行正確的設置后就可以設置塊。DMA啟動后,一旦鏈路緩沖器未滿,它將向外部設備請求數(shù)據(jù)。這時,如果DMA可以占用內(nèi)部或外部數(shù)據(jù)總線,那么,系統(tǒng)便可將數(shù)據(jù)從鏈路口傳送到存儲器中。

          4 數(shù)據(jù)采集的硬件設計

            TSIOI是運算能力強但與外部連接資源相對少的一類DSP,在多個TSl01級連的系統(tǒng)中,如果利用總線進行數(shù)據(jù)采集,A/D轉換器通常需要長時間占用總線,會經(jīng)常出現(xiàn)爭占總線的問題,從而導致信號采集處理出現(xiàn)總線瓶頸,利用鏈路口進行數(shù)據(jù)采集可以很大程度地釋放總線資源。本應用中需要對10路模擬信號同時進行500 kHz的采樣,傳輸?shù)臄?shù)據(jù)率為lOx0.5 MBx2=10 MB/s250 MB/s。

            TSl01通過FPGA進行數(shù)據(jù)采集,它的鏈路口作為數(shù)據(jù)輸入口。它們的連接結構如圖2所示,將鏈路口的LxCLKIN直接和FPGA連接,由FPGA驅動,在FPGA向鏈路口傳送數(shù)據(jù)時作為鏈路口的時鐘輸入。LxDIR和LxCLKOUT可以懸空,鏈路口的8條數(shù)據(jù)線接到FPGA上。

          連接結構

            設計中將每個A/D轉換器的M1、NO、A0引腳接地,僅取用每個A/D轉換器的2個模擬差分輸入——AO和B0通道,2個通道可以在2μs之內(nèi)同時完成1次采樣。本

          設計共用5個ADS8361級連以擴充模擬輸入通道,實現(xiàn)10個模擬通道輸入,每個ADS8361的RD與CONVST連接,由FPGA進行控制,5個ADS8361同時進行A/D轉換,轉換后在FPGA內(nèi)同時完成串并轉換,把轉換后的并行數(shù)據(jù)先鎖存在FPGA內(nèi)部,再將各通道按先低字節(jié)后高字節(jié)依次傳送到TSl01的鏈路口。

            5 數(shù)據(jù)采集的軟件設計

            軟件部分包括TSl01軟件設計和FPGA軟件設計,F(xiàn)PGA軟件設計采用VHDL實現(xiàn)。其結構如圖3所示。

          FPGA軟件設計采用VHDL實現(xiàn)

            FPGA的主要操作是將5個ADS8361的10路串行采集數(shù)據(jù)轉換成20個8 bit數(shù)據(jù),再將數(shù)據(jù)鎖存,同時產(chǎn)生鏈路時鐘,將鎖存后的數(shù)據(jù)發(fā)送到TSl01鏈路口。需要實現(xiàn)的時序如圖4所示,其中CLOCK是TSlOl外部時鐘,是ADS8361的工作時鐘,是CLDCK的5分頻,占空比為60%,CONVST與RD相連接,LINKCLK是鏈路時鐘,LINKDATA是鏈路數(shù)據(jù)。

          需要實現(xiàn)的時序

            使用鏈路傳輸時,TSl01在鏈路時鐘的上升沿和下降沿都鎖存數(shù)據(jù),20個8 bit數(shù)據(jù)需要lO個鏈路脈沖,而鏈路口每次至少需要傳輸128 bit的數(shù)據(jù),即至少需要8個脈沖,且發(fā)送數(shù)據(jù)需要的脈沖數(shù)必須為8的倍數(shù)。所以設計中每次通過鏈路發(fā)送數(shù)據(jù)的脈沖數(shù)為16個,前10個傳輸A/D轉換器采集到的數(shù)據(jù),其后的6個脈沖發(fā)送0x55。發(fā)送到鏈路的數(shù)據(jù)是A/D轉換器上次轉換的結果。TSl01可以設置鏈路口工作時鐘為內(nèi)核時鐘的2、3、4、8分頻,設計中TSl01外部時鐘CLOCK是50MHz,內(nèi)核時鐘是CLOCK的5倍頻即250 MHz,鏈路口接收數(shù)據(jù)時FPGA給TSIOI的鏈路時鐘LINKCLK是25 MHz TSl01鏈路口工作時鐘應盡量接近鏈路時鐘LINKCLK,所以設置TSl01鏈路口工作時鐘為內(nèi)核時鐘的8分頻即31.25 MHz。

          系統(tǒng)采用鏈路中斷方式接收FPGA送來的數(shù)據(jù),鏈路中斷方式數(shù)據(jù)接收的程序如下:

          程序

          程序

          6 A/D轉換器電路的設計和使用

            設計高精度A/D轉換器的關鍵是保證有效位數(shù),ADS8361的輸入動態(tài)范圍為:±2.5 V,每個量化單位對應0.076 mV,因此應設法降低噪聲和干擾。噪聲和干擾的來源主要有二種:一種是A/D轉換器自身的噪聲如量化噪聲等,另一種是周圍電路產(chǎn)生的噪聲干擾。前者是A/D轉換器固有的,后者的大小遠遠超過前者,特別是電源、模擬/電路數(shù)字電路之間的干擾。ADS8361的差分輸入方式大大降低了共模干擾。設計中主要考慮如何在電路中減少其他噪聲和干擾。

            電源設計是抑制噪聲的關鍵,本文介紹的設計具有多種電壓(模擬5 V、-5 V和數(shù)字3.3 V、1.2V等)并且是混合模擬和數(shù)字信號的板級設計,選擇合適的電源電路,合理地進行電源層和地層的切割是很重要的。開關電源具有體積小、效率高、輸出穩(wěn)定等優(yōu)點,同時能夠很好地解決TSlOl的上電次序問題,但紋波明顯。開關頻率越高輸出電壓紋波越小,電路中選用的電感器在10μH~200 μH為宜,電路中可以使用ESR小、容值大的電容器構成去耦電路,同時在板上放置多種電容器進行濾波。

            減少數(shù)字信號干擾也可以有效提高A/D轉換器的精度,布板和布線時要使ADS8361模擬差分信號輸入?yún)^(qū)域盡量遠離數(shù)字信號,F(xiàn)PGA設計中盡量避免多個信號電平同時翻轉,同時給A/D轉換器提供良好的工作時鐘,應使用串聯(lián)終端法,串聯(lián)1只小電阻器可以很好減少時基抖動,時鐘信號進入A/D轉換器的布線越短越好,同時不要離數(shù)字信號太近,也不要靠近模擬區(qū),否則會增加模擬區(qū)的噪聲。同時要注意單點共地,在共地的點上串接1個磁珠。設計中使用了多層板布局,在輕載情況下可以將輸出電壓紋波減到4mV。

            7 結束語

            筆者設計一種通過TSl01鏈路口進行多A/D轉換器多通道高精度數(shù)據(jù)采集的實現(xiàn)方法,在DSP信號采集處理系統(tǒng)中可以不占用總線,實現(xiàn)并行數(shù)據(jù)傳輸和處理,有更高的實時性,同時探討了如何提高A/D轉換器精度的問題。該設計方法已經(jīng)應用于多種并行和串行A/D轉換電路中,具有通用性。



          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();