串行數(shù)據(jù)轉(zhuǎn)換器接口
掃描二維碼
隨時隨地手機(jī)看文章
問:我現(xiàn)在需要安裝節(jié)省空間的數(shù)據(jù)轉(zhuǎn)換器,認(rèn)為串行式轉(zhuǎn)換器比較適合。為了選擇 和使用這種轉(zhuǎn)換器,請問我需要了解些什么?
答:首先我們看一下串行接口的工作原理,然后再將它與并行接口相比較,從而可以消 除對串行接口數(shù)據(jù)轉(zhuǎn)換的神秘感。
圖10?1示出了一種8通道多路轉(zhuǎn)換12位串行式模數(shù)轉(zhuǎn)換器(ADC) AD7890與一種帶串行接 口的 數(shù)字信號處理器(DSP) ADSP?2105接線圖。圖中還示出了使用DSP與ADC通信的時序圖。通過 一根線以串行數(shù)據(jù)流的形式傳輸12位轉(zhuǎn)換結(jié)果。串行數(shù)據(jù)流還包括3位地址,用來表示AD789 0當(dāng)前被選中的多路轉(zhuǎn)換器中的輸入通道。為了區(qū)分不同組的數(shù)據(jù)串行位流,必須提供時鐘 信 號(SCLK),通常由DSP提供。有時ADC作為輸出信號提供這種時鐘信號。DSP通常(但不總是) 提供一個附加的成幀脈沖,它要么在通信開始第一個周期有效,要么在通信期間(例如TFS/R FS)有效。
圖10?1 串行式ADC與DSP之間的接線圖
在這個實(shí)例中,利用DSP的串行端口來設(shè)置ADC內(nèi)部5位寄存器。這個寄存器的位控功能包 括:選擇通道、設(shè)定ADC處于電源休眠方式和起動轉(zhuǎn)換。顯然,這種情況下串行接口必 須雙向工作。
從另一方面來說,并行式ADC的數(shù)據(jù)總線直接(或可能通過緩沖器)與帶接口的處理器的 數(shù) 據(jù)總線相連。圖10?2示出了并行式ADC AD7892與ADSP?2101的接線圖。當(dāng)AD7892完成一次 轉(zhuǎn)換后,中斷該
圖10?2 并行式ADC AD7892與ADSP?2001接線圖
DSP,DSP響應(yīng)后,按照ADC的譯碼內(nèi)存地址讀一次數(shù)據(jù)。串行式數(shù)據(jù)轉(zhuǎn)換器與并行式數(shù)據(jù)轉(zhuǎn)換器之間的重要差別在于需要的連接線數(shù)。從節(jié)省 空間的角度來看, 串行式數(shù)據(jù)轉(zhuǎn)換器有明顯的優(yōu)點(diǎn)。因?yàn)樗鼫p少了器件的引腳數(shù)目,從而有可能做成8腳DIP或 SO封裝的12位串行式ADC或DAC。更重要的是它節(jié)省了印制線路板的空間, 因?yàn)榇薪涌谥恍柽B接幾根線條。
問:我的數(shù)模轉(zhuǎn)換器(DAC)必須離中心處理器及其它處理器距離很遠(yuǎn)。我最 好采用何種方法?
答:首先你必須確定是使用串行式DAC還是并行式DAC。當(dāng)使用并行式DAC時,你應(yīng)該確 定每個DAC進(jìn)入存儲器I/O端口的地址,如圖10.3所示。然后你應(yīng)該對每個DAC編程,將寫命 令直 接寫入適當(dāng)?shù)腎/O口地址。但這種結(jié)構(gòu)具有明顯的缺點(diǎn)。它不但需要并行數(shù)據(jù)總線,而且到 所有遠(yuǎn)處的端口都需要一些控制信號線。然而串行接口只需要為數(shù)不多的兩條
圖10?3 多個并行式DAC接線圖
線,顯然它比并行接口經(jīng)濟(jì)得多。 一般說來,雖然串行式數(shù)據(jù)轉(zhuǎn)換器不能對處理器的存儲器尋址,但是可以把許多串行DA C接到處理器的串行端口上,然后利用處理器的其它端口產(chǎn)生片選信號來逐一地啟動每個DAC 。片選信號雖然僅需要一條線就能將每個DAC都接到串行接口上,但是接到處理器上傳輸 片選信號線的數(shù)目可能受到限制。
解決這個問題的一種方法是采用菊花鏈(daisy?chained)式結(jié)構(gòu),將所用的串行式DAC 都連在一起。圖10.4示 出了如何將多個DAC連接到一個I/O端口上。每個DAC都有一個串行數(shù)據(jù)輸出(SDO)腳,將第一 個DAC(即DAC0)的SDO腳接到本菊花鏈中的下一個DAC(即DAC1)的串行數(shù)據(jù)輸入(SDI)腳。LDAC 和 SCLK以并行方式被送到本菊花鏈中的所有DAC。因?yàn)樵跁r鐘作用下送入SDI的數(shù)據(jù)最終都要到 達(dá)SDO(N個時鐘周期之后),所以一個I/O端口能夠?qū)ぶ范鄠€DAC。但是這個I/O端口必須輸 出很長的數(shù)據(jù)流(每個DAC占的N位乘以本菊花鏈中DAC的數(shù)目)。這種結(jié)構(gòu)的最大優(yōu)點(diǎn)是不需 要對尋址的DAC進(jìn)行譯碼。所有的DAC在相同的I/O端口上都有效。菊花鏈?zhǔn)浇Y(jié)構(gòu)的主要缺點(diǎn) 是可達(dá)性(accessibility)或等待時間長。即使要改變某一個DAC的狀態(tài),處理器也必須從該 I/O端口輸出全部數(shù)據(jù)流。
圖10?4 多個串行式DAC菊花鏈?zhǔn)浇Y(jié)構(gòu)
問:既然串行式數(shù)據(jù)轉(zhuǎn)換器節(jié)省許多空間和線路,那么為什么不在每個要求節(jié)省空間的 應(yīng)用場合都使用它們呢?
答:串行式數(shù)據(jù)轉(zhuǎn)換器的主要缺點(diǎn)是為了節(jié)省空間從而降低了速度。例如,對并行DAC 編程,只用一個寫脈沖便可以把數(shù)據(jù)總線上的數(shù)據(jù)在時鐘作用下送入DAC。然而,如果要把 數(shù)據(jù)寫入串行DAC,那么DAC的位數(shù)必須等于相繼的時鐘脈沖數(shù)(N位DAC需要N個時鐘脈沖), 每個時鐘脈沖后還要跟隨一個裝入脈沖。所以這種處理器的I/O端口與串行數(shù)據(jù)轉(zhuǎn)換器通信 要花費(fèi)相當(dāng)多的時間。因此吞吐率高于500 ksps 的串行式DAC平常是少見的。
問:我的8位處理器沒有串行接口,有什么辦法可以把一個12位串行 式ADC(例如AD7993)接到該8位處理器總線上?
答:當(dāng)然我可以使用外部移位寄存器,將數(shù)據(jù)用串行(和異步)方式裝入移位寄存器,然 后在時鐘作用下進(jìn)入處理器的并行端口。但是,如果這個問題的著眼點(diǎn)是“沒有外部邏輯” ,那么可以把這個串行式ADC看作1位并行式ADC來連接。將該ADC的SDATA腳接到該處理器 數(shù)據(jù)總線的一條數(shù)據(jù)線上,這里接到數(shù)據(jù)線D0。如圖10.5所示。使用某種譯碼邏輯電路 , 能使 該ADC的口地址看作是該處理器的一個存儲器地址,以便用12個逐次讀命令讀取ADC的轉(zhuǎn)換結(jié) 果。然后用附加的軟件命令把12個字節(jié)的LSB組合起來,拼成一個12位的并行字。
圖10?5 沒有串行口的8位處理器與串行式ADC的接口
上面介紹的方法有時稱作“位拆裂”(bit banging)。從軟件的觀點(diǎn)來看,這種方法是很 不經(jīng)濟(jì)的,但是當(dāng)處理器的運(yùn)行速度遠(yuǎn)遠(yuǎn)高于ADC的轉(zhuǎn)換速度時,這種方法可以采用。
問:在前面的例子中,利用了處理器的寫信號門控方式來 起動AD7893轉(zhuǎn)換。請問這種方法是否有問題?
答:我很高興你看出這一點(diǎn)。在這個例子中,每轉(zhuǎn)換一次都要對AD7893的尋址存儲器發(fā) 出一個空操作的寫命令。雖然沒有數(shù)據(jù)交換,但是處理器仍然提供開始轉(zhuǎn)換所需要的寫脈沖 。從硬件的觀點(diǎn)來看,這種結(jié)構(gòu)非常簡單,因?yàn)樗槐卦佼a(chǎn)生一個轉(zhuǎn)換信號。
但是,對信號必須進(jìn)行周期性采樣的交流數(shù)據(jù)采集應(yīng)用場合,不推薦這種方法。即使程 控處理器,對ADC發(fā)出周期性寫命令,寫脈沖的相位抖動將會嚴(yán)重降低實(shí)際得到的信噪比。 經(jīng)過門控之后寫脈沖會抖動得更壞。例如,假設(shè)采樣時鐘相拉抖動僅僅1 ns,對一個理想的 100kHz正弦波來說,其信噪比會降到大約600dB(低于10有效位分辨率)。另外一個缺點(diǎn)是, 過沖和采樣信號噪聲都會進(jìn)一步降低模數(shù)轉(zhuǎn)換的完整性。
問:我應(yīng)該在什么時候選擇具有異步串行接口的數(shù)據(jù)轉(zhuǎn)換器?
答:異步通信方式允許設(shè)備之間交換信息,不必借助于時鐘。為了使用相同的數(shù)據(jù)格式 ,必須對設(shè)備初始化,其中包括設(shè)置一種傳輸速率(通常用波特率表示,或位數(shù)每秒)。還應(yīng) 該規(guī)定轉(zhuǎn)換結(jié)果如何開始傳送和結(jié)束傳送。我們使用容易識別的帶有起始位和停止位的數(shù)據(jù) 序列來傳送數(shù)據(jù)。傳送過程還包括奇偶校驗(yàn)位,用來檢測設(shè)備出錯。
圖10?6示出了AD1B60數(shù)字化信號調(diào)節(jié)器與PC機(jī)異步通信端口之間的接線圖。這是一種3 線雙向接口(為了簡明,地線省去未畫)。應(yīng)該注意發(fā)送線與接收線在線路的另一端位置交換 。
圖10?6 AD1B60與PC機(jī)之間的異步通信接口
異步通信線路對僅限于設(shè)備分散式通信應(yīng)用場合是很有用的。因?yàn)樵诿看蝹魉椭卸及?括起始位和停止位,所以設(shè)備在任何時間只要輸出其數(shù)據(jù)就可以開始通信。另外設(shè)備之間 的接線數(shù)目也減少了,因?yàn)闀r鐘和控制信號線都不需要了。
問:有一種ADC產(chǎn)品說明在串行接口中推薦使用非連續(xù)時鐘,為什么?
答:這種技術(shù)要求可能是指ADC在轉(zhuǎn)換過程期間要求其時鐘信號無效。有的ADC有這種要 求,因?yàn)檫B續(xù)的時鐘信號能夠饋送到ADC的模擬部分,反過來會影響轉(zhuǎn)換結(jié)果。如果I/O端 口有一個幀脈沖,那么連續(xù)的時鐘信號在轉(zhuǎn)換期間可能變成不連續(xù)。這個幀脈沖用作門控信 號,只有在數(shù)據(jù)傳遞時才允許將串行時鐘送到ADC。
問:如何使設(shè)備與SPI或MICROWIRE接口標(biāo)準(zhǔn)兼容?
答:SPI(串行外圍接口)與MICROWIRE分別是美國摩托羅拉公司和國家半導(dǎo)體公司研制的 串行接口標(biāo)準(zhǔn)。大多數(shù)同步串行式數(shù)據(jù)轉(zhuǎn)換器都很容易與這兩種接口連接,但是在有些情況 下可能需要附加連接邏輯(glue logic)。
問:好,我放棄偏見,在我的當(dāng)前設(shè)計(jì)中決定使用串行ADC。我按照產(chǎn)品說明的技術(shù)要求 剛剛把線路接好。當(dāng)用MICROWIRE標(biāo)準(zhǔn)轉(zhuǎn)換結(jié)果時,ADC的輸出好像總是FFF HEX (不論 模擬輸入電壓如何變化),這是怎么回事?
答:這或許是通信問題。首先我們需要檢查ADC與處理器之間的連接問題,即定時和控制 信號線是否接好。我們還需要檢查一下處理器的中斷結(jié)構(gòu)。與時序有關(guān)的可能誤差有許多。你要想檢查這個問題,首先將所有的時序信號要么接到邏輯分析儀上,要么接到多通道示波 器 上(至少需要3個通道才能同時檢測全部時序信號)。你在儀器的熒光屏上應(yīng)該觀察到類似圖1 0.7所示的時序圖。首先保證從微處理器或從獨(dú)立的信號源產(chǎn)生一個啟動轉(zhuǎn)換命令CONVST) 。常見的錯誤是所施加的CONVST信號極性不對。雖然也能啟動轉(zhuǎn)換,但不是按照你期望的時 序轉(zhuǎn) 換 。另外應(yīng)該記住的是,通常要求CONVST信號有一個最小的脈沖寬度(典型值約為50ns)。一般 來自快速微處理器的寫脈沖或讀脈沖寬度都不能滿足這個要求。如果脈沖寬度太窄,可用軟 件方法插入等待周期來增大脈沖寬度。
圖10?7 串行ADC時序圖
其次應(yīng)該保證在讀周期開始之前微處理器一直在等待模數(shù)轉(zhuǎn)換完成。為了使微處理器產(chǎn) 生中斷信號,你的應(yīng)用軟件應(yīng)該知道完成A/D轉(zhuǎn)換所需要的時間,或等待ADC轉(zhuǎn)換結(jié)束(EOC) 發(fā)出的指示信號。還要保證EOC信號極性正確,以免ADC在轉(zhuǎn)換進(jìn)程中會產(chǎn)生中斷。如果微處 理器對中斷不響應(yīng),你應(yīng)該檢查軟件中斷的設(shè)置。
另外,如果轉(zhuǎn)換器尋址不對,檢查一下串行時鐘序列(SCLK)的狀態(tài)也是很有必要的。正 如 前面的討論所述,有些DAC和ADC在連續(xù)時鐘作用下,工作不正常。除此以外,還有些DAC和A DC要求SCLK在某一指定狀態(tài)總得有一個閑音(idles)。
問:我現(xiàn)在已經(jīng)發(fā)現(xiàn)了我的軟件中的問題和一些解決方法,使問題有所改善。當(dāng)改變輸 入電壓時,ADC輸出的數(shù)據(jù)也發(fā)生變化,但是轉(zhuǎn)換結(jié)果好像不可識別,這是怎么回事?
答:可能產(chǎn)生的誤差源仍然很多。ADC的轉(zhuǎn)換結(jié)果或者直接用二進(jìn)制數(shù)據(jù)形式表示,或者 用2的補(bǔ)碼形式表示(BCD碼用得不太多)。為了使微處理器接受合適的數(shù)據(jù)格式,應(yīng)該檢查它 的配置。如果微處理器的配置不能直接接受2的補(bǔ)碼,你應(yīng)該將轉(zhuǎn)換數(shù)據(jù)與100…00二進(jìn)制數(shù) 進(jìn)行異或操作,將其轉(zhuǎn)換成二進(jìn)制數(shù)。
通常利用串行時鐘的前沿(上升或下降沿)選通ADC的數(shù)據(jù)輸出并且進(jìn)入數(shù)據(jù)總線。然后 利用時鐘的后沿使數(shù)據(jù)進(jìn)入微處理器。應(yīng)該保證微處理器與ADC在同一轉(zhuǎn)換條件下正常工作 ,保證所有準(zhǔn)備時間和保持時間都滿足要求。如果串行ADC的轉(zhuǎn)換結(jié)果恰好是期望值的一半 或二 倍時,這是一個告警信號,它說明這個數(shù)字結(jié)果(尤其是MSB)是由于受錯誤的時鐘邊沿作用 。同樣一個問題,對于串行DAC則表現(xiàn)為其輸出電壓恰好為期望值的一半或二倍。
驅(qū)動轉(zhuǎn)換器的數(shù)字信號應(yīng)該干凈。過沖或欠沖除對器件可能引起長期損壞以外,還能產(chǎn) 生轉(zhuǎn)換誤差和通信誤差。圖10?8示出了用來驅(qū)動單電源轉(zhuǎn)換器的時鐘輸入 具 有很大過沖的尖脈沖信號。在這種情況下,時鐘輸入驅(qū)動PNP晶體管的基極。按照慣例,將 器件的P型襯底內(nèi)部連接到最負(fù)的電位,這里為地。在SCLK線上大于地電位以下0?3V的幅度 完 全能使N型晶體管的基極和P型襯底之間的寄生二極管開始導(dǎo)通。如果經(jīng)常出現(xiàn)這種情況,而 且作用時間很長,可能會導(dǎo)致器件損壞。
圖10?8 過沖或欠沖波形及其損壞器件的機(jī)理
如果作用時間很短,雖然不會損壞器件,但是會增強(qiáng)器件中通常不起作用的襯底對其它 晶體管的影響,從而導(dǎo)致將每個作用脈沖檢測為多個時鐘脈沖。這種脈沖抖動對串行式轉(zhuǎn)換 器影響很厲害,而對并行式轉(zhuǎn)換器則差一些。因?yàn)樽x周期和寫周期通常都取決于所施加的 第一 個脈沖,而后邊的脈沖無關(guān)緊要。但是,如果在轉(zhuǎn)換期間出現(xiàn)這種干擾信號,無論是串行還 是并行式轉(zhuǎn)換器都要受到噪聲的影響。
圖10?9示出了如何很容易地減小過沖。在出現(xiàn)問
圖10?9 用來減小過沖的低通濾波器
題的數(shù)字輸入信號線上串聯(lián)一個小電阻。這個電阻與數(shù)字輸入端的寄生電容 C par 結(jié)合起來可構(gòu)成一個低通濾波器,從而可 以消除接受信號的任何振蕩。一般推薦使用50Ω的電阻,但是做一些實(shí)驗(yàn)可能是必要的。如 果數(shù)字輸入端的內(nèi)部電容不夠大,還可在這個輸入端加一個外接電容。這時實(shí)驗(yàn)是必要的, 但開始最好選10pF左右的電容。
問:你已經(jīng)談到時鐘信號過沖會使轉(zhuǎn)換器的噪聲惡化。從接口技術(shù)的角度來看,是否有 其它方法來改善其信噪比?
答:因?yàn)槟愕南到y(tǒng)在混合信號(模擬與數(shù)字)環(huán)境下工作,所以接地方法至關(guān)重要。你可 能知道,因?yàn)閿?shù)字電路是一種噪聲源,所以模擬地與數(shù)字地應(yīng)該分開,只在一點(diǎn)會合。這種 接地方法通常只用在電源上。實(shí)際上,如果模擬器件和數(shù)字器件共用一個電源,例如+5V或+ 3?3V單電源系統(tǒng),只有連接模擬地與數(shù)字地才能在電源返回,別無選擇。具體數(shù)據(jù)轉(zhuǎn)換器 的 產(chǎn)品說明可能指導(dǎo)你對器件的AGND腳和DGND腳如何連接。如果在兩點(diǎn)接地,那么應(yīng)該如何避 免產(chǎn)生接地環(huán)路呢?
圖10?10示出了解決這種困境的方法。關(guān)鍵在于數(shù)據(jù)轉(zhuǎn)換器的引腳中標(biāo)記的AGND和DGND 腳 都是相對轉(zhuǎn)換器的部件而言的,用來與其它引腳連接。數(shù)據(jù)轉(zhuǎn)換器作為一個整體,應(yīng)該按模 擬器件來處 理。所以將AGND和DGND腳連接到一起后,應(yīng)該用一根線接到系統(tǒng)的模擬地。如果真的這樣做 ,會使轉(zhuǎn)換器的數(shù)字電流流入模擬接地平面,但這樣要比通常把轉(zhuǎn)換器的DGND腳接到噪聲數(shù) 字接地平面帶來的危害要小。這個例子還示出了一個接數(shù)字地的數(shù)字緩沖器,用來使轉(zhuǎn)換 器的串行數(shù)據(jù)引腳與有噪聲的串行數(shù)據(jù)總線相隔離。如果數(shù)據(jù)轉(zhuǎn)換器的引腳與微處理器的引 腳直接相連,那么可以不用這種緩沖器。
圖10?10還示出了如何處理混合信號系統(tǒng)單電源
供電這樣一個越來越引人關(guān)注的普遍性問題。正如接
圖10?10 模擬地與數(shù)字地的接線方法
地一樣,我們將電路中的模擬部分與數(shù)字部分的電源線(最好是電源平面)分開。我們將 數(shù)據(jù)轉(zhuǎn)換器的數(shù)字電源按模擬電源處理。但是有時候?qū)⒛M電源引腳與數(shù)字電源引腳用一種 電感的方式隔離起來是很必要的。請注意,轉(zhuǎn)換器的兩個電源引腳都應(yīng)分別接去耦電容器。 具 體產(chǎn)品說明將推薦選用合適的電容器,但好的經(jīng)驗(yàn)規(guī)則是0?1μF。如果空間允許,每個器 件都應(yīng)接一個10μF電容器。
問:我想在ADC與微處理器之間用光隔離器設(shè)計(jì)一個串行接口。當(dāng)我使用這些器件時,應(yīng) 該知道些什么?
答:為了構(gòu)造一個簡單而又經(jīng)濟(jì)的高壓隔離器可以使用光隔離器(又稱光耦合器)。在數(shù) 據(jù)轉(zhuǎn)換器與微處理器之間電流隔離作用的經(jīng)驗(yàn)還表明模擬系統(tǒng)的地與數(shù)字系統(tǒng)的地不必再連 接起來。正如圖10.11所示,精密ADC AD7714 與通用的微控制68HC11之間的
隔離串行接口只用3個光隔離器便可實(shí)現(xiàn)。
圖10?11 ADC與微處理器之間的隔離串行接口
設(shè)計(jì)者應(yīng)該知道,光隔離器的上升時間和下降時間非常慢。它與CMOS數(shù)據(jù)轉(zhuǎn)換器一起使 用會出現(xiàn)問題,即使在串行通信時以低速運(yùn)行也是如此。CMOS邏輯輸入端設(shè)計(jì)成用規(guī)定的邏輯“0”或邏輯“1”來驅(qū)動。在這種狀態(tài)下,輸入端 提供和吸收很少量的電流。然而,當(dāng)輸入電壓處于邏輯“0”與邏輯 “1”之間的變遷狀態(tài)時(0?8V到2?0 V)邏輯門消耗的電流數(shù)量將要增加。如果所用的光隔離器的上升時間和下降時間相當(dāng)慢,那 么絕大部分時間都浪費(fèi)在“死區(qū)”,從而產(chǎn)生邏輯門的自熱。這種自熱導(dǎo)致邏輯 門的閾值電壓向上漂移,從而導(dǎo)致轉(zhuǎn)換器將一個時鐘脈沖看作多個時鐘脈沖。為 了防止這種閾值抖動,應(yīng)該使用施密特觸發(fā)器來緩沖來自光隔離器的信號線,以便將快速、 陡沿的時鐘信號傳送給數(shù)據(jù)轉(zhuǎn)換器。