王敏,葉顯
(華中師范大學 物理科學與技術學院,湖北 武漢 430079)
D/A轉換器接收數字編碼信號,并以電流或電壓形式提供模擬輸出信號。它是數字控制器件和模擬信號之間的接口[1]。
在儀器、儀表和自動控制領域中,經常需要高精度模擬量的輸出,例如儀器、儀表中參考電壓,偏置電壓等,因而要求分辨率較高的D/A輸出[2]。而高精度DAC芯片的價格一般比較昂貴,并且D/A轉換器不像A/D轉換器那樣通過模擬開關就可以實現A/D轉換器的多路擴展。當一個項目中需要多路D/A轉換時,設計者一般會使用多個D/A轉換芯片來進行轉換得到,這樣無形中增加了產品的成本,而且多個D/A轉換模塊也會增加PCB板的布線難度和布板面積,導致信號噪聲的增加,不利于高頻小信號的輸出。同時大量的DA轉換模塊也將占用MCU大量的I/O口,浪費MCU資源,不利于產品的再升級。
針對上述問題,文中提出了一種基于單路DAC多路復用的設計方案,利用軟件和硬件結合的方式,對一個串行D/A轉換器進行操作,打破傳統的一個串行D/A轉換器只控制一路模擬輸出的慣例,實現DAC的多路復用。
我們利用MCU分時傳給DAC芯片不同的數據[3],傳送數據的同時,控制模擬開關的通道選擇,使得各模擬電平獨立的輸出,進過RC濾波器后,輸出信號達到穩定,從而實現單路DAC的多路復用,系統的總體設計框圖如圖1所示。

圖1 系統設計框圖Fig.1 The diagram of the system
假設最終需要n路模擬輸出,則在MCU中分時給DAC傳送數據,同時DAC芯片需要連通一個n選一的模擬開關,來控制選通每路信號,當其中一個通路有信號輸出時,其他通路輸出為零,所以通過模擬開關后的每路輸出信號為一個脈沖波。通過MCU控制DAC按固定時間更新數據,則每路脈沖信號的脈寬都相等,設為τ,信號幅度分別為A1,A2,A3……An,進過DAC轉換模塊后,可以得到一個周期為nτ的準階梯波,設n=5,則DAC的輸出波形如圖2所示。
其中ti-ti-1=τ。
控制模擬開關的通道選擇,在0~t1時刻選通通道一,在t1~t2時刻選通通道二……使各路電平分別從對應的通道輸出,如果不接入濾波電路,那么通過模擬開關后,通道i輸出波形為一個幅度為Ai,周期為nτi,占空比為1/n的脈沖波。以圖1.2DAC的輸出波形為例,通過模擬開關后各路輸出波形如圖3所示。

圖2 在n=5時DAC的輸出波形圖Fig.2 The output waveform of the DAC when n=5

圖3 模擬開關各通道的輸出波形Fig.3 Each channel's output waveform of the analog switch
為了將上述脈沖波轉化為我們所需要的穩定信號,此時我們需要引入RC濾波電路,利用RC電路的充放電特性,使充電速度快,放電速度慢[4],經過若干個周期后,使得輸出信號達到穩定。為滿足這一要求,我們利用模擬開關的輸出電阻小,電壓型運算放大器的同向輸入端的輸入電阻大的特性[5],將模擬開關的輸出電阻作為充電電阻,將運算放大器的輸入電阻作為放電電阻。
設模擬開關的輸出電阻為R1,運算放大器同向端輸入電阻為R2,濾波電容的容值為C,則其充、放電回路的等效電路如圖4,5所示。

圖4 充電回路Fig.4 Charge circuit

圖5 放電回路Fig.5 Discharge circuit
設脈沖信號的幅度為Us,電容兩端的電壓為uc(t),對于充電回路,電容兩端的電壓為uc(t)=Us(1,時間常數τ=R1C,由公式可知,電容兩端的電壓隨時間按指數的規律增長,增長的快慢由時間常數τ決定,τ越小,增長越快,τ越大,增長越慢,當t→∞時,達到穩態值Us。 在t=4τ時,uc已增長到穩態值的98%以上,在工程上一般認為,t=4τ時,電路已近似達到穩態了,uc(t)的波形如圖6所示。

圖6 充電回路 的波形Fig.6 The output waveform of the charge circuit
對于放電回路,電容兩端的電壓為uc(t)=Us(1-,時間常數τ=R2C,由公式可知電容兩端的電壓隨時間呈指數衰減,衰減的快慢由τ決定,τ越大衰減越慢,τ越小衰減越快,當t=4τ時,uc(t)已下降為初始值的1.8%,在工程中認為此時已放電完畢,uc(t)的波形如圖7所示。

圖7 放電回路的波形Fig.7 The output waveform of the discharge circuit
在本設計中需要使R1盡可能的小,R2盡量大,從而使充電常數τ1=R1×C很小,而放電常數τ2=R2×C比較大。當脈沖信號為高電平時,由于τ1很小,電容快速充滿電,達到脈沖的幅度值;在脈沖信號為低電平時,由于τ2比較大,所以電容緩慢釋放電量。經過RC濾波電路后,得到穩定的輸出電壓。 各路脈沖信號經過上述濾波后得到對應的穩定輸出電壓,從而實現了單路DAC的多路復用。
DAC的分辨率是指輸入數字量的最低有效位 (LSB)發生變化時,所對應的輸出模擬量(電壓或電流)的變化量。它反映了輸出模擬量的最小變化值,與DAC的位數及參考電壓有關。在本設計中,DAC的輸入位數及參考電壓都不發生改變,所以用改方法擴展DAC的多路輸出不會降低DAC的分辨率。
DAC的轉換速度是指DAC更新數據所需要的時鐘數,在DAC轉換器的工作時鐘一定的前提下,通過本設計的方法實現DAC的多路擴展,在一路信號輸出時,其他路信號都是無法更新數據的,如果擴展路數為N,則更新一次數據所需要的時間為原來的N倍,所以本擴展方法只適合數據更新速度要求不高的場合。
DAC的精度(簡稱精度)是指在整個刻度范圍內,任一輸入數碼所對應的模擬量實際輸出值與理論值之間的最大誤差。是由DAC的增益誤差(當輸入數碼為全1時,實際輸出值與理想輸出值之差)、零點誤差(數碼輸入為全0時,DAC的非零輸出值)、非線性誤差和噪聲等引起的。在沒有對DAC進行擴展時,DAC的精度只由DAC本身決定。在本設計中由于引入了運放,所以其精度還與運放的偏執電壓有關。為提高精度,我們需要在軟件中對DAC進行校準,盡可能低的降低運放的偏置電壓對系統精度的影響。
為驗證上述設計方案的可行性,本文采用FPGA來作為微處理器,串行數模轉換芯片AD1851,模擬開關74HC4051,RC濾波器以及運算放大器TL072來實現單路DAC的多路復用,具體電路如圖8所示。

圖8 AD1851實現4路擴展電路Fig.8 Use AD1851 to achieve 4-way expansion
在本設計中,采用FPGA來控制數字部分電路,利用Verilog HDL編程語言來編寫代碼,將FPGA的強大邏輯和計算功能與Verilog的簡單、直觀和高效的特點相結合,以便更好的完成設計要求[6-7]。FPGA傳送給AD1851的工作時鐘為10 MHz,小于它的最大工作時鐘12.5 M,在程序中依次按照DAC1,DAC2,DAC3,DAC4所對應的值給AD1851循環賦值,每20 μs更新一次輸入數據,賦值的同時控制模擬開關的選通,使上述4種電平分別從對應的通道輸出,得到4路周期性的脈沖波,然后通過濾波得到相應的穩定信號。經查手冊可知HC4051的輸出電阻記為R1=120 Ω,TL072的同向輸入端輸入電阻為R2=1×1012Ω,濾波電容取值100 nF,對于充電回路的充電常數τ1=R1C=12 μs,對于放電回路的放電常數τ2=R2C=105s,由于τ1很小,而τ2很大,所以電容很很快充滿電,而且一旦充滿電后就可以基本保持不變,得到所需的穩定電平,從而現實的單路DAC的4路擴展輸出。
通過對四路輸出電壓的實際測量,并記錄測量值,將測量值與實際輸出值進行對比,驗證實驗的可靠性,測試數據如表1、表2、表3、表4所示。

表1 通道1的實際測量值與理論值對比Tab.1 The error between measurement value and theoretical value of channel 1

表2 通道2的實際測量值與理論值對比Tab.2 The error between measurement value and theoretical value of channel 2

表3 通道3的實際測量值與理論值對比Tab.3 The error between measurement value and theoretical value of channel 3

表4 通道4的實際測量值與理論值對比Tab.4 The error between measurement value and theoretical value of channel 4
從以上數據可以看出,實際測量值與理論值都非常接近,最大誤差不超過2%,由此可見將單路串行DAC1851進行4路輸出擴展取得了成功。
文中給出了一種將單路DAC實現多路輸出的設計方案,并成功應用于與江蘇綠揚電子儀器集團有限公司合作項目:任意波形發生器。這種方法不僅能在占用CPU資源較少的情況下,有效解決了實際項目中需要多路高分辨率D/A輸出問題,而且可以簡化接口電路,減少對高精度DAC的需要,大幅度的減小電路板的面積,降低設計成本,讓公司產品更加具有競爭力。本設計方案是一種易于被開發者接受的高性價比,實用的設計方案。
[1]張紅,李紅寶,陳海燕.一種串行逐次逼近10位DA轉換器[J].微電子學,2006,36(6):798-801.
[2]牛春平,張文學,任哲平.基于軟件的多路PWM式D/A轉換技術[J].裝甲兵工程學院學報,2002,16(1):83-86.
[3]李群芳,肖看.單片機原理、接口及應用——嵌入式系統技術基礎[M].北京:清華大學出版社,2005.
[4]田化梅,李玲遠.電路測試與電工基礎實驗[M].北京:科學出版社,2006.
[5]華成英,童詩白.模擬電子技術基礎[M].北京:高等教育出版社,2006.
[6]王敬華,林萍,陳靜.C語言程序設計教程[M].北京:清華大學出版社,2005.
[7]劉福奇.FPGA嵌入式項目開發實戰[M].北京:電子工業出版社,2009.