Global Sources
電子工程專輯
 
電子工程專輯 > EDA/IP
 
 
EDA/IP  

利用單片機內置比較器設計高精度A/D變換器

上網時間: 2003年05月31日     打印版  Bookmark and Share  字型大小:  

關鍵字:單片機  高精度A/D  內置比較器  MSP430系列單片機  積分型A/D 

Σ-ΔA/D技術具有高解析度、高線性度和低成本的特點。本文基於TI公司的MSP430F1121單片機,介紹了採用內置比較器和周邊電路構成類似於Σ-△的高精度A/D實現方案,適合用於對溫度、壓力和電壓等緩慢變化信號的採集應用。

在各種A/D轉換器中,最常用是逐次逼近法(SAR)A/D,該類器件具有轉換時間固定且快速的特點,但難以顯著提高解析度;積分型A/D有較強的抗干擾能力,但轉換時間較長;過採樣Σ-ΔA/D由於其高解析度,高線性度及低成本的特點,正得到越來越多的應用。根據這些特點,本文以TI公司的MSP430F1121單片機實現了一種類似於Σ-ΔA/D技術的高精度轉換器方案。

MSP430F1121是16位元RISC結構的FLASH型單片機,該晶片有14個雙向I/O口並兼有中斷功能,一個16位元定時器兼有計數和定時功能。I/O口輸出高電平時電壓接近Vcc,低電平時接近Vss,因此,一個I/O口可以看作一位DAC,具有PWM功能。

該晶片具有一個內置類比電壓比較器,只須外接一只電阻和電容即可構成一個類似於Σ-Δ技術的高精度單斜率A/D。一般而言,比較器在使用過程中會受到兩種因素的影響,一種是比較器輸入端的偏置電壓的積累;另一種是兩個輸入端電壓接近到一程度時,輸出端會產生振蕩。圖1:利用MSP430F1121實現的實用A/D轉換器電路方案。

MSP430F1121單片機在比較器兩輸入端對應的單片機埠與片外輸入信號的連接線路保持不變的情況下,可藉由軟體將比較器兩輸入端與對應的單片機埠的連接線路交換,並同時將比較器的輸出極性變換,這樣抵消了比較器的輸入端累積的偏置電壓。藉由在內部將輸出連接到低通濾波器後,即使在比較器輸入端兩比較電壓非常接近,藉由濾波後也不會出現輸出端的振蕩現象,從而消除了輸出端震蕩的問題。

利用內置比較器實現高精度A/D

圖1是一個可直接使用的A/D轉換方案,該方案是一個高精度的積分型A/D轉換器。其基本原理是用單一的I/O埠,執行1位元的數位類比轉換,以比較器的輸出作反饋,來維持Vout與Vin相等。

如圖1所示,產生1位元DAC的電路為一路通用I/O口、一個串聯的電阻和電容。在電容上產生Vout,要維持Vout=Vin,必須藉由I/O口對電容進行充放電,而由比較器的輸出來決定是進行充電還是放電(即I/O口輸出高低電平),這樣A/D形成了一個類似於帶負反饋的閉環系統。以圖1的電路為例,當比較器輸出為高電平時,說明Vout>Vin,此時應對電容放電,則I/O口輸出低電平;當比較器輸出為低電平時,說明Vout<Vin,應對電容充電,則I/O口輸出高電平。

充、放電維持的時間確定的方法是每隔一個極短且固定的時間t後,查詢比較器的輸出狀態,如果比較器的輸出狀態沒變,則維持I/O口的輸出;當比較器的輸出狀態產生改變,則I/O口的輸出狀態也應改變。因此 ,I/O的某一狀態(高/低電平)維持的時間可能是Xt(X為整數),從而在整個A/D轉換過程中,形成了一系列的X1、X2、...、Xi、...、Xn。Xn為一隨機數,其值由比較器的輸出狀態而定。在每個單位時間t後,如果I/O口的輸出為高電平,則事先設定的計數加1,當A/D轉換完成後,記錄下I/O口輸出高電平的次數為m。

而A/D轉換完成的時間主要取決於對A/D轉換的精度要求。當要求一個12位元的A/D,則其時間為4096t,即對比較器輸出作4096次查詢,每次查詢間隔時間為t(參考後面的程式及說明)。同樣16位元的A/D的時間為65535t。在此,將對應轉換精度要求的4096或65535設為N,並結合上文所述,N=X1+X2+……Xn。

那麼結合電容的充放電公式:


V(t)=V(1-exp(-t/RC))


可對積分型A/D作以下數學上的推斷,從而求出Vin。


N=X1+X2+……Xn


高電平的次數為m


假設:


Vin(t)=Vin


根據Vout=Vin和電容的充放電的公式可得:


Vout(t)=Vin+m(Vcc-Vin)(1-exp(-t/RC))-(N-m)Vin(1-exp(-t/RC)


m(Vcc-Vin)(1-exp(-t/RC))為充電過程


(N-m)Vin(1-exp(-t/RC)為放電過程


因此:


Vin=Vcc×m/N (1)


上式成立的前提條件是Vin
在短時間內不變,且對確定Vout的電容要預充電,在開始進行A/D轉換前使Vout=Vin,即藉由I/O口對電容預充電使比較器在產生第一次翻轉後,開始進行積分A/D轉換。

如果對(1)式作一些處理,可使得A/D轉換的處理更加方便:如果電源電壓Vcc為3.0V,取N=3000,則解析度為1mV,當m=1245時, Vin=1.245V;如果N=30000,則解析度為0.1mV,在m=12456時,則Vin=1.2456V。這樣,只要藉由對m的確定就可以得到Vin的值,避免了直接用公式(1)帶來的計算上的麻煩。

用比較器做A/D轉換的子程式代碼

Comparator_A/Dc ;比較器A/D子程式


mov.b #CAON,&CACTL1 ;開啟片內比較器電源


Clr A/DCData ;清保存A/D轉換結果的暫存器


call #Sample_A/DC ;調用A/D轉換子程式,1/2的轉換時間


call #Sample_A/DC ;內部交換兩輸入信號後,再調用A/D轉換子程式,1/2的轉換時間。


Meas_Over ;測量結束,A/DCData中的值為測量結果


clr.b &CACTL1 ;關閉片內比較器電源


ret ; 從子程式中反回


;;----- A/D轉換子程式


Sample_A/DC


mov &VCC_Cal,R15 ;確定A/D時間,VCC_Cal暫存器內的值與電源電壓有關


;例,當VCC為3.2v時,VCC_Cal=3200


rra R15 ;右移暫存器的值,變為1/2的A/D時間


;;-----對電容進行預充電,使Vout=Vin


Pre_A/DC


bis.b #DAC_Out,&P2OUT ;1位元DAC對應的I/O口置高電平,對電容進行預充電


C1


bit.b #CAOUT,&CACTL2 ;判斷比較器的輸出是否為高電平


jz C1 ;如 Vout
;;-----藉由對比較器輸出的判斷,來調整1位元DAC對應的I/O口的電平


Test_DAC


bit.b #CAOUT,&CACTL2 ;判斷比較器的輸出是否為高電平


jnc Low1 ;跳到I/O口輸出高電平


High


bic.b #DAC_Out,&P2OUT ;I/O口輸出低電平


Jmp Meas_


Low1 bis.b #DAC_Out,&P2OUT ;I/O口輸出高電平


setc ;將進位位置1


DA/Dc A/DCData ;I/O口輸出高電平時,A/DCData加1


Meas_


dec R15 ;A/D時間減1


jnz Test_DAC ;A/D時間未到,繼續進行轉換


bic.b #DAC_Out,&P2OUT ;I/O口輸出低電平,下一次轉換作準備


xor.b #CAEX,&CACTL1 ;交換內部兩輸入信號,以便抵消偏置電壓


ret ; 從子程式中反回

應用實例

上面介紹的低成本A/D轉換器方案適用於緩慢變化電訊號的採集,如溫度、壓力、光和電壓等。結合晶片的低功耗特點,該方案適合於電池供電的可攜式儀器。

用圖1所示電路可以構成一個簡單的信號測量系統,用HT1621作為液晶顯示驅動器,P1.0~P1.3四個I/O口控制HT1621。測量結果直接可以看到,利用該電路可以構成一個具有12位元以上解析度的毫伏表。

MSP430F1121內部有4K FLASH 記憶體,沒有被程式佔用部份可以作為數據記憶體用,因此,可以將測量結果放入FLASH記憶體中,具有記憶和回放功能。MSP430F1121 還有一個16位元定時器,可以與一個I/O埠構成一個UART,用於發送測量結果,上傳給PC機,可以構成一個低採樣率的簡易儲存示波器。

【參考文獻】


1. MSP430X1XX Family User's Guide 2000


2. TI Application reports/slaa104.pdf

作者:季燕飛


段煥春


杭州利爾達單片機技術有限公司




投票數:   加入我的最愛
我來評論 - 利用單片機內置比較器設計高精度A/D變...
評論:  
*  您還能輸入[0]個字
*驗證碼:
 
論壇熱門主題 熱門下載
 •   將邁入40歲的你...存款多少了  •  深入電容觸控技術就從這個問題開始
 •  我有一個數位電源的專利...  •  磷酸鋰鐵電池一問
 •   關於設備商公司的工程師(廠商)薪資前景  •  計算諧振轉換器的同步整流MOSFET功耗損失
 •   Touch sensor & MEMS controller  •  針對智慧電表PLC通訊應用的線路驅動器
 •   下週 深圳 llC 2012 關於PCB免費工具的研討會  •  邏輯閘的應用


EE人生人氣排行
 
返回頁首