基於STM 32和AD 5791的高精度數模轉換電路設計

2020-12-23 電子產品世界

  崔海朋(青島傑瑞工控技術有限公司 青島266071)

本文引用地址:http://www.eepw.com.cn/article/202005/413601.htm

  摘 要:現在很多智能儀表中,要求有超高精度的電壓信號輸出,而且要求刷新率高、噪聲低,常規的處理電路比較複雜,難以實現自動校準。為了解決該問題,採用了20位的高精度數模轉換器(DAC)AD5791,並應用於基於STM32的測量儀表中。本文詳細介紹了軟硬體設計。此系統實現了超高精度的單路可調電壓輸出,精度高和噪聲低。

  關鍵詞:數模轉換器STM32AD5791

  0 引言

  現在很多智能測量儀表要求具有超高精度的電壓信號,同時要求高穩定性、高線形度和低噪聲、低溫度漂移。這樣的模擬系統設計面臨複雜的工程技術挑戰,常規的方法是採用多個較低解析度的DAC和大量分立元件與支持IC整合在一起,同時伴隨著相當大的開發風險和高代價的修改時間,才能優化電路參數、減小誤差和設計出複雜的自動校準電路,這樣不僅增加了硬體設計的複雜性,通常達到的精度也不是很高。本系統設計的基於STM32微處理器和AD5791的20位超高精度測量系統中,實現了單路超高精度可調電壓信號的輸出,輸出電壓信號的幅值可以通過軟體來設置。該系統可靠性高,不需要校準電路。

  AD5791是美國ADI公司推出的一款高性能的單路20位電壓輸出數模轉換器, 它是業界首款具有真正1 ppm(百萬分之一)解析度和精度的DAC器件 [1-2] 。雙極工作電壓高達33 V。同時AD5791具有1 ppm的解析度和精度、低噪聲(l ppm以下)、快速刷新率(1 us)和非常低的輸出漂移(在l ppm以下)。該器件採用了多功能三線串行接口,並與SPI、QSPI TM 、MICROWIRE TM 和DSP接口標準兼容。該器件集成了一個上電復位電路,以確保DAC輸出能達到0V,並保持在已知輸出阻抗狀態,直到有效寫入為止。該器件還提供了一個輸出鉗位功能,這使得其輸出在一個限定的負載狀態。綜上知,採用該款晶片,減少了複雜校準算法的必要性,能極大地簡化設計任務、減少開發和維護成本,同時降低風險。國內相關學者在精密電壓源和醫療儀器中也得到了應用 [3-4]

  本系統的 Cortex-M3處理器為意法半導體公司推出的32位RISC處理器 STM32F103VCT6,主頻最高可達72 MHz,應用也比較廣泛 [5] 。該處理器具有256KB的程序存儲器,48 KB的RAM,同時它有8個定時器、5路串口、3路SPI、2路I2C,具有獨立看門狗和窗口看門狗,非常適合於與AD5791構成高精度的測量系統。

  1 硬體電路設計

  數模轉換電路中採用了1片參考電壓基準產生晶片REF02AZ、1片超高精度雙路軌至軌輸出運算放大器AD8676、1片高精度單路軌至軌輸出運算放大器AD8675和20位超高精度數模轉換晶片AD5791構成。該電路性能穩定,運行效果非常好。下面對電路進行詳細分析。

  AD5791中,VDD為+15 V,VSS為-15 V。VREFPS和VREFPF用以提供AD5791的正參考電壓輸入,輸入範圍5V到VDD-2.5 V,本測試系統中使用了+5 V的參考電壓。VREFNS和VREFNF用以提供AD5791的負參考電壓輸入,輸入範圍VSS+2.5到0 V,本測試系統中使用了-5 V的參考電壓。AD5791的工作電壓為3.3 V。+5 V參考電壓由參考電壓產生晶片REF02AZ產生,負電壓是通過由OP177構成的單位增益反向放大器來實現。±5 V電壓產生電路如圖1所示。

  AD5791有7個用於與STM32處理器進行通訊的引腳,下面逐一作詳細介紹:

  RESET/:復位引腳,可以實現AD5791的復位;

  CLR/:清零引腳,可以將AD5791內部DAC寄存器的值恢復到用戶定義的值,並更新DAC的輸出;

  LDAC/:用於更新AD5791內部DAC寄存器的值,並更新DAC的輸出;

  SDO:串行數據輸出引腳;

  SDIN:串行數據輸入引腳;

  SCLK:串行通訊時鐘信號輸入引腳,最高頻率可高達35 MHz;

  SYNC/:串行輸入數據的幀同步信號;

  由於STM32處理器採用了I/O口模擬SPI通訊的方式,所以通訊控制引腳可以連接到空餘的STM32處理器的任何一個I/O引腳上,只要做相應配置就可以。AD5791的應用電路圖如圖2所示。其中,AD8675構成電壓跟隨器,作為AD5791的輸出緩衝。硬體電路上模擬地和數字地分開,並在一點接地,同時各個電源都加有濾波電容,以消除幹擾。

  2 軟體設計

  系統採用模擬SPI總線通信,軟體的關鍵是STM32處理器和 AD5791之間的時序匹配,輸出電壓值到AD5791的DAC寄存器的值的計算,下面分別進行詳細介紹。

  2.1 AD5791晶片配置

  AD5791的配置,主要在於AD5791的控制寄存器的配置。為了使得AD5791和STM32處理器匹配使用,需要做如下配置,具體控制寄存器相關介紹和操作參見手冊。DBn(n=1…9)代表控制寄存器的第n位。

  DB1 RBUF=1 內部運算放大器關閉

  DB2 OPGND=0 將DAC輸出下拉到地的功能切換掉,使得DAC處於正常模式

  DB3 DACTRI=0 使DAC處於正常操作模式

  DB4 BIN/2sC=1 使用直接二進位編碼,不使用二進位補碼編碼的形式

  DB5 SDODIS=0 SDO數據輸出使能

  DB6-DB9 LIN_COMP=0 參考電壓輸入範圍選擇為10 V

  按照上述的配置,將相應配置字寫入到AD5791的控制寄存器內部,AD5791就可以正常工作了。此處值得注意的是DB4位,一定要選擇好相應的編碼形式,否則輸出電壓會和計算值不符合。

  2.2 ST M 32接口配置

  STM32處理器的SPI 發送和接收都採用的是I/O口模擬的方式,因此I/O的初始化比較簡單,除了DAC1_SDO網絡標號的引腳設置為輸入模式外,其他通訊用的引腳都設置為輸出模式。

  2.3 數模轉換輸出

  數模轉換輸出,主要涉及3個子程序,晶片上電初始化子程序,晶片控制寄存器初始化子程序和電壓輸出子程序3個部分。下面給出AD5791讀寫函數和測試的例子。

  u32 AD5791_Read(void)//讀取的24bit的數據

{

unsigned int i,j;

u32 data,c;

data=0;

AD5791_sync_0();

AD5791_sclk_0();

for(i=0;i<24;i++)

{

j=3;

data=data<<1;

AD5791_sclk_1();

while(j--);

c=GET_AD5791_SO();

AD5791_sclk_0();

data=data|c;

}

AD5791_sclk_0();

AD5791_sync_1();

return(data);

}

void AD5791_Write(unsigned long OutData) //寫一

個24 bit的數值

{

unsigned char i;

unsigned long value;

value = OutData & 0x00ffffff; //取低24bit

value = value<<8; //左移8位,ok

AD5791_ldac_1();

AD5791_sclk_1();

AD5791_sync_1();

AD5791_sync_0();

for ( i = 0; i < 24; i ++ )

{

AD5791_sclk_1();

ad5791delay();

if((value & 0x80000000) == 0x80000000)

{

AD5791_sdin_1();

}

else

{

AD5791_

sdin_0();

}

ad5791delay();

AD5791_sclk_0();

ad5791delay();

value = value << 1;

}

AD5791_sync_1();

ad5791delay();

AD5791_ldac_0();

ad5791delay();

AD5791_ldac_1();

ad5791delay();

}

/*入口參數:outvalue 輸出的電

壓的值*/

void test_ad5791(double outvalue)

{

double temp=0.0;

long temp1=0;

Ad5791_gpio_init(); //AD5791 I/O口初始化

Ad5791_clr_init();//AD5791 清零

Reset_ad5791(); //AD5791 復位

Write_ad5791_control_register();//寫AD5791的控

制寄存器

temp=((outvalue+5.0)*1048575.0)/10.0;//計

算DAC輸出值

temp1=(long)temp | 0x00100000;

Write_ad5791_dac_register(temp1);//寫AD5791的

dac寄存器,同時輸出相應電壓

}

  程序中對AD5791晶片進行相應初始化以及寫AD5791的相應寄存器都採用I/O模擬相應時序的方法。其中寫模式的時序如圖3所示。寫數據時,注意先寫高位,再寫低位,必須嚴格按照時序來寫入。

  3 結束語

  本系統成功實現了基於STM32處理器和AD5791的20位高精度電壓輸出系統,給出了全新實用的硬體和軟體設計,適用於對輸出高精度模擬電壓有需要的智能儀表場合中。該系統精度高,漂移低,可靠性高,可以應用於醫療儀器、測試測量儀表、工業控制以及高端科學和航空航天儀器中,具有很好的應用前景。

  參考文獻:

  [1]AD5791 Datasheet Rev.E[EB]. Analog Devices, Inc,2018.

  [2]AD5791:20位電壓輸出數模轉換解決方案[J].世界電子元器件,2011(2    ):15-16.

  [3]薛巨峰,李壯,魯志軍.基於20位DAC—AD5791的高精度電壓源的設計[J].電子技術,2015,44(09):59-62.

  [4]Jan-Hein Broeders.採用ADI 20位DAC設計醫療成像系統[J].電子設計技術,2011(7):58.

  [5]王永虹,徐煒,郝立平.STM32系列ARMCortex-M3微控制器原理及實踐[M].北京:北京航空航天大學出版社,2008.

  (註:本文來源於科技期刊《電子產品世界》2020年第06期第39頁,歡迎您寫論文時引用,並註明出處。)

相關焦點

  • 基於24位A/D轉換的高精度電子秤的設計
    打開APP 基於24位A/D轉換的高精度電子秤的設計 發表於 2017-12-21 20:04:15 基於24位A/D轉換的高精度電子秤的設計引言物料計量是工業生產與貿易流通中的一個重要環節
  • 基於STM 32和LTC 1859的數據採集系統
    為了解決該問題,設計了基於STM32和LTC1859的16位高精度數據採集系統,詳細介紹了軟硬體設計。此 系統不僅可以實現8路電流信號的單端輸入,也可以實現8路電壓信號的單端輸入,成本低,精度高。 本系統設計的基於Cortex-M3處理 器和 LTC1859的 16位高精度數據採集系統,不僅可以 實現8路的電流信號的輸入,還可以實現8路電壓信號的 輸入,對輸入信號的範圍可以通過軟體來設置,同時 AD採集電路與Cortex-M3處理器採用了電源隔離和信 號隔離,提高了系統的可靠性。
  • 淺談PCB設計中PWM數模轉換器電路的布局
    通常,這是通過數模轉換器組件完成的,但這意味著將另一部分及其相關電路放置在板上。通過使用設計中已經使用的組件中已有的PWM功能,您可以轉換信號而無需在設計中添加其他多引腳組件。以下是有關如何在下一個印刷電路板上設計PWM數模轉換器的更多信息。 由於普通電路板上的大部分電路都是由數字電路組成的,因此將這些信號連接到數字接口設備是一件相當簡單的事情。以一個簡單的開關為例。
  • HART協議智能變送器的數模轉換
    前文,我們對HART協議智能變送器的功耗和通信系統進行了分析和講解。這裡我們繼續對單片機的數模轉換器和壓力變送器的設計進行講解。首先讓我們看看在數模轉換器方面的設計內容吧。一、單片機及A/D轉換器1.A/D轉換器為實現智能變送器的功能,在電路硬體設計上,需要1個增益可調的儀表放大器和1個解析度至少在14位的A/D轉換器,來實現對傳感器信號的放大和模數轉換。這樣才能達到智能變送器的高精度、自動調節量程、大量程比的設計要求。對智能差壓變送器,還需要對靜壓和溫度進行採樣,從而實現對靜壓和溫度的補償,提高全範圍的測量精度
  • 一篇很好的AD轉換設計中的基本問題整理
    如何保證ADC的精度,AD轉換的滿量程即是電源電壓,對於單電源供電,零點的確定和量程都與電源電壓有關,如果電源電壓波動勢必導致轉換的誤差,電路中如何解決,特別對小信號的採集.請問什麼是DAC的輸出靜態誤差?怎樣提高數模轉換器中電阻或者電流源單元的匹配程度?在給ADC供電時,數字地與模擬地之間是否需要串接小電感?
  • 82條AD轉換設計經驗,讓你少走彎路!
    13、想設計高精度校準儀表,如直流電壓輸出(毫伏級),能不能推薦幾款晶片?請問怎樣消除伴隨的量化噪聲?如何保證ADC的精度,AD轉換的滿量程即是電源電壓,對於單電源供電,零點的確定和量程都與電源電壓有關,如果電源電壓波動勢必導致轉換的誤差,電路中如何解決,特別對小信號的採集.請問什麼是DAC的輸出靜態誤差?
  • 模數轉換(A/D)與數模轉換(D/A)
    為了實現數字系統對這些電模擬量的測量,運算和控制,就需要一個模擬量和數字量之間的相互轉化的過程。 一個包含A/D和D/A轉換器的典型的計算機自動控制系統 一個包含A/D和D/A轉換器的計算機閉環自動控制系統下圖所示。
  • 基於單片機的雙積分A/D轉換設計
    0 引言 A/D轉換電路是數據採集系統中的重要部分,也是計算機應用系統中一種重要的功能接口。目前市場上有兩種常用的A/D轉換晶片,一類是逐次逼近式的,如AD1674,其特點是轉換速度較高,功率較低。
  • 基於DAC53701智能數模轉換器的醫療設備警報系統設計實現方案
    打開APP 基於DAC53701智能數模轉換器的醫療設備警報系統設計實現方案 德州儀器 發表於 2020-12-22 16:21:39
  • A/D轉換組合工作原理剖和結構組成分析
    (3)模數轉換和微調自檢裝置  該裝置包括模數轉換電路、自動微調電路和自檢電路,其中模數轉換電路又由四個模數轉換模塊組成,如圖6所示。這樣就得到了模數轉換結果的8個數據位。  3 A/D轉換組合設計實現  新A/D轉換組合的幾何尺寸應與引進A/D轉換組合吻合,輸入輸出接口特性應與引進A/D轉換組合完全一致。鑑於原A/D轉換組合採用分立元件和低集成度晶片設計,導致電路複雜,故障率高的缺點,本文採用高集成度的CPLD晶片設計國產A/D轉換組合。
  • A/D轉換電路圖大全(五款A/D轉換電路設計原理圖詳解)
    A/D轉換電路圖設計(一) ICL7109的接口電路較強,輸出為12位二進位數。其特點是:可與TTL電路兼容;具有三態控制輸出;有通用信號控制端,可方便監視轉換;有極性和溢出位;片內有振蕩器,UART異步收發數據交換;可串行、並行接口;差分輸入,差分基準電壓使其具有較低噪聲和較小誤差;帶有防靜電保護功能;類似型號有TSC7109,ADC7109。
  • 基於OB2532的原邊反饋LED驅動電路設計
    與傳統的副邊反饋相比,原邊反饋驅動電路省去了光耦和TL431晶片,降低了成本,提高了系統的可靠性。所設計的LED驅動電路具有恆壓恆流控制特性。實測的結果來表明:4個1 W的白光LED正常工作,亮度非常高,測試參數達到設計要求。
  • ADC外圍電路應該如何設計
    ADC,也即數模轉換轉換器。為增進大家對ADC的認識,本文將對ADC外圍電路設計方法予以介紹。如果你對ADC,抑或是對本文即將闡述的內容具有興趣,不妨繼續往下閱讀哦。   在使用ADC晶片時,由於ADC的型號多樣化,其性能各有局限性,所以為了使ADC能夠適應現場需要以及滿足後繼電路的要求,必需對ADC的外圍電路進行設計。ADC外圍電路的設計通常包括模擬電路、數字電路和電源電路的設計。
  • 基於單片機的正弦信號發生器的設計
    基於單片機的正弦信號發生器的設計 秩名 發表於 2012-07-31 11:42:14   摘 要:本系統採用AT89S51單片機為核心,輔以必要的模擬,數字電路,構成了一個基於
  • 一種高性能Pierce時鐘晶體振蕩器電路設計
    摘要 設計了一種用於時鐘晶片的Pierce晶體振蕩器,通過對傳統結構的改進,增加了振幅控制結構和輸出頻率校準電路,提高了輸出頻率、振幅的穩定性和輸出頻率的精度,降低了功耗。
  • 基於NJM4580運算放大器實現電磁超聲換能器級聯放大電路的設計
    為了得到適合顯示觀察的水平,需要對信號進行放大和濾波處理,以減少噪聲和幹擾。為了避免EMAT的接收系統放大倍數過大引起信號失真和自激的現象,通常採用多級放大。主要包括前置放大器、濾波器、主放大器,以及用於在數字設備中的A/D轉換電路等。為了得到更好的結果,前置放大器自然起著至關重要的作用。
  • ...帶你了解播放器與音效卡的「心臟」——DAC(數模轉換器)基本原理...
    本文經電子發燒友授權轉載,原標題《數模轉換器的基本原理及DAC類型簡介》,未經允許請勿轉載。數模轉換器(DAC)是將數字量轉換成模擬量,完成這個轉換的器件叫做數模轉換器。本文將介紹數模轉換器的概念、原理、主要技術指標以及不同類型DAC特點進行介紹。
  • 如何利用STM32CubeMX來自動生成STM32代碼
    單片機設計的內核。再加上兼容的一套中間件(RTOS、USB、TCP/IP 和圖形),所有內嵌軟體組件附帶了全套例程。  STM32CubeMX 軟體是運行於 JRE 上面的軟體,因此我們在安裝 STM32CubeMX 這個軟體之前,現需要安裝 JRE。
  • 基於FPGA的串行A/D轉換模塊設計
    電子技術發展的數位化進程中,A/D轉換器性能起到了關鍵的作用,使用硬體描述語言來設計數字電路方便快捷,FPGA的時鐘頻率可高達300MHz以上,A/D轉換控制邏輯簡單,故可用FPGA器件進行控制設計。
  • 基於S3C44BOX處理器和Linux作業系統實現物流PDA無線終端的設計
    基於S3C44BOX處理器和Linux作業系統實現物流PDA無線終端的設計 趙國強;張鵬 發表於 2020-12-23 10:20:56 科學技術的進步帶來了物流業的巨大變化