一、D/A轉換器的基本原理及分類 T型電阻網絡D/A轉換器 : 二:輸出電壓與數字量的對應關系 三:D/A轉換器的主要性能指標 1、分辨率 分辨率是指輸入數字量的最低有效位(LSB)發生變化時,所對應的輸出模擬量(電壓或電流)的變化量。它反映了輸出模擬量的最小變化值。 分辨率與輸入數字量的位數有確定的關系,可以表示成FS / 2^n 。FS表示滿量程輸入值,n為二進制位數。對于5V的滿量程,采用8位的DAC時,分辨率為5V/256=19.5mV;當采用12位的DAC時,分辨率則為5V/4096=1.22mV。顯然,位數越多分辨率就越高。 2、線性度 線性度(也稱非線性誤差)是實際轉換特性曲線與理想直線特性之間的最大偏差。常以相對于滿量程的百分數表示。如±1%是指實際輸出值與理論值之差在滿刻度的±1%以內 3、絕對精度和相對精度 絕對精度(簡稱精度)是指在整個刻度范圍內,任一輸入數碼所對應的模擬量實際輸出值與理論值之間的最大誤差。絕對精度是由DAC的增益誤差(當輸入數碼為全1時,實際輸出值與理想輸出值之差)、零點誤差(數碼輸入為全0時,DAC的非零輸出值)、非線性誤差和噪聲等引起的。絕對精度(即最大誤差)應小于1個LSB。 相對精度與絕對精度表示同一含義,用最大誤差相對于滿刻度的百分比表示。 4、建立時間 建立時間是指輸入的數字量發生滿刻度變化時,輸出模擬信號達到滿刻度值的±1/2LSB所需的時間。是描述D/A轉換速率的一個動態指標。 電流輸出型DAC的建立時間短。電壓輸出型DAC的建立時間主要決定于運算放大器的響應時間。根據建立時間的長短,可以將DAC分成超高速( pin description: 2:DAC0832三種工作方式 1、單緩沖工作方式 此方式適用于只有一路模擬量輸出,或有幾路模擬量輸出但并不要求同步的系統。 即:默認 CS = XFER = 0, ILE = 1; WR單獨控制。 緩沖僅由WR單獨控制。 1.1 單極性模擬輸出 1.2:雙極性模擬輸出電壓 雙極性輸出時的分辨率比單極性輸出時降低1/2,這是由于對雙極性輸出而言,最高位作為符號位,只有7位數值位 2、雙緩沖工作方式 多路D/A轉換輸出,如果要求同步進行,就應該采用雙緩沖器同步方式 。 即:默認 CS = 0 ILE = 1 ; WR 和 XFER都單獨控制, 緩沖由WR和XFER兩個控制。 3、直通工作方式 當DAC0832芯片的片選信號CS、寫信號WR、及傳送控制信號XFER 的引腳全部接地,允許輸入鎖存信號ILE引腳接+5V時,DAC0832芯片就處于直通工作方式,數字量一旦輸入,就直接進入DAC寄存器,進行D/A轉換。 即: CS = WR = XFER = 0, ILE = 1; A/D轉換器 一、逐次逼近式ADC的轉換原理 二、雙積分式ADC的轉換原理 三、A/D轉換器的主要技術指標 1、分辨率 ADC的分辨率是指使輸出數字量變化一個相鄰數碼所需輸入模擬電壓的變化量。常用二進制的位數表示。例如12位ADC的分辨率就是12位,或者說分辨率為滿刻度FS的1/ 2^n 。一個10V滿刻度的12位ADC能分辨輸入電壓變化最小值是10V×1/ 2^12 =2.4mV。 2、量化誤差 ADC把模擬量變為數字量,用數字量近似表示模擬量,這個過程稱為量化。量化誤差是ADC的有限位數對模擬量進行量化而引起的誤差。實際上,要準確表示模擬量,ADC的位數需很大甚至無窮大。一個分辨率有限的ADC的階梯狀轉換特性曲線與具有無限分辨率的ADC轉換特性曲線(直線)之間的最大偏差即是量化誤差。 3、偏移誤差 偏移誤差是指輸入信號為零時,輸出信號不為零的值,所以有時又稱為零值誤差。假定ADC沒有非線性誤差,則其轉換特性曲線各階梯中點的連線必定是直線,這條直線與橫軸相交點所對應的輸入電壓值就是偏移誤差。 4、滿刻度誤差 滿刻度誤差又稱為增益誤差。ADC的滿刻度誤差是指滿刻度輸出數碼所對應的實際輸入電壓與理想輸入電壓之差。 5、線性度 線性度有時又稱為非線性度,它是指轉換器實際的轉換特性與理想直線的最大偏差。 6、絕對精度 在一個轉換器中,任何數碼所對應的實際模擬量輸入與理論模擬輸入之差的最大值,稱為絕對精度。對于ADC而言,可以在每一個階梯的水平中點進行測量,它包括了所有的誤差。 7、轉換速率 ADC的轉換速率是能夠重復進行數據轉換的速度,即每秒轉換的次數。而完成一次A/D轉換所需的時間(包括穩定時間),則是轉換速率的倒數。 四:AD080X demo PIN5 如果采用中斷方式通知CPU,則接外部中斷, 否則 5可懸空,延時直接讀取即可。 啟動時序圖如下: code demo: [cpp] view plain copy print? void Launch() { CS = 0; WR = 1; WR = 0; WR = 1; /*Waiting for INTR goto 0*/ } 讀取時序圖: code demo: [cpp] view plain copy print? void ReadAD() { /* INTR had goto 0*/ CS = 0; RD = 1; RD = 0; /*delay*/ RD = 1; /* READ */ } |