![]() |
發布時間: 2022-6-14 23:44
正文摘要:單片機實現16位快速DAC,速度<1us。使用R-2R電阻分壓法實現,16位DAC需要16個IO口,如果只需要8位就需要8個IO口。DAC精度與VCC電壓和電阻精度有關,VCC必須使用線性穩壓電源,電阻使用1%電阻。運算放大器起到電壓 ... |
到現在樓主也沒拿出什么證據證明精度有多高。 |
hhh402 發表于 2022-6-16 00:17 算錯了, 你挑一個電壓最低的來算其誤差試試, 1%的阻所導致的電壓誤差是大于1%的, 不信你試試動手算。 |
16位的DAC就是用兩組8位IO組成16個輸出接R-2R輸出,由于電阻精度、電源精度和噪聲的影響,太高的分辨率沒有意義,一般超過12位的意義不大。 |
16位DA指的是16位分辨率,不是指16位精度,R2R結構DA想減少誤差,1是使用大一點的電阻,比如100K和200K,2是使用導通電阻比較小的模擬開關,595比單片機IO效果要好,SGM3157導通電阻只有5歐姆更好,如果用單片機做能夠達到1%以下精度就不錯了,如果需要更高精度那就用萬用表校準。如果不校準16位DA與12位DA精度差別不大,如果校準16位DA比12位DA精度高。還有一點,R2R結構DA帶負載能力很差,一般都需要用運放做電壓跟隨,運放會帶來0.1~5mv左右的誤差,這對于低電壓輸出比如10mv時誤差是很大的。 |
樓上的對單片機要求太高了,對電壓精度要求也太高,首先說參考電壓5v,正常使用的是7805穩壓,要求高的用TL431穩壓,TL431電壓精度1%最高可以達到0.5%,再找一個幾十元的電壓基準芯片AD584,電壓精度0.3%,也就是說要得到5v,0.1%的參考電壓都是非常困難的事情,萬用表的精度4位半的0.5%,6位半的0.1%,就算是電壓檢測要達到0.1%精度也是非常困難的事情。連參考電壓都很難達到0.1%精度,DA更加不可能了,不僅是R2R結構的,其它結構的DA也很難到達0.1%精度,DA芯片只給出了分辨率,很少會給出精度。 |
更詳細的說一下原因,比如輸出某個DAC值的數字,對應著R2R的每一個端的開關狀態,比如有好幾處是低電平,好幾片是高電平,這樣組合出來后,每一處的低電平和高電平上的電阻拉出來的電流都不會相同的,所以每一個低電平或者高電平都不可能完全在0伏或者參考電壓值,它是有偏差的,可能 是0.01伏,0.1伏,0.005伏這個樣子,高電平如果參考電壓為5伏這樣子對吧,哪么有的高電平引腳處可能是4.999伏,有的高電平為4.89x伏,這樣一樣造成的輸出結果就無法保證輸出電壓是按照 DAC的級進值來輸出了,而且在某些輸出的DAC值的高低電平組合下,輸出的電壓比前好幾級的值的電壓都要低許多,電壓比前好幾級DAC值的電壓倒退回去了,比如上一級輸出1伏,DAC值加1后,會輸出0.9伏,再加1后輸出1.1伏這個樣子,這只因為高低電平的組合的位置剛好造成各電阻上下拉的電流嚴重的偏差,所以讓后一級輸出的電壓比前幾級的電壓都更低的原因了,電阻精度只要用精度高的電阻測量表選出來非常接近的也沒什么影響的,但是開關的高低電平影響是極大的 |
如果使用HC595,這芯片引腳如果真的能輸出0伏,完全為0伏,然后R2R分別使用1M歐和2M歐作組合,也不會被上拉到HC595的引腳在低電平時造成不完全0伏,哪么這樣出來的結果也是可以的,只是電阻這么大,估計切換速度也快不起來,實際上看了HC595手冊介紹,輸出引腳是無法輸出0伏的,而且還要看對應的引腳負載電流的大小引腳上的低電平電壓也不一樣的,單片機IO低電平輸出的電壓可以看對應的單片機的手冊,這就是為什么這種R2R不能這樣使用的原因了,并不是什么電阻精度的問題,電阻精度的原因只會造成每步進一個值,可能不哪么線性,每一級的間隔電壓不完全一樣,或者電阻溫飄造成輸出結果的變化而已,但不會造成電壓倒退回來的現象,所以只要電阻精度能保證一點,使用繼電器作為低頻率DAC是非常不錯的,只是成本高 |
這種R2R原理是正確的,但是唯一的問題是Io無法切底的輸出0伏(低電平),因為使用的電阻還會拉電流,造成Io更加的不能完全為0伏,另外高電平時也無法完全達到參考電壓,這就是問題,所以根本無法達到線性級進輸出電壓,而且還會到某些邏輯組合時還會輸出倒退回來的電壓值,實際上與電阻的精度是否影響是無關的,即使電阻精度影響只會影響級進的線性度,但不會級進后電壓倒退回來,我也是通過仿真分析出來原因,除非使用16個繼電器,硬件式開關,這樣保證在低電平時處于完全的0伏,高電平時完全處于參考電壓,這樣出來隨便使用0.1%精度的電阻都能得到非常線性的輸出結果,所以關鍵就是模擬開關或者595移位寄存器的引腳(包括單片機的IO)都不能完全的低電平和高電平,所以用這種方案只有一條路,使用微型繼電器實現,但這樣一來就無法高速度DAC的,只能單純的低速輸出電壓了,除非找到一種模擬開關能達到純0伏低電平和純參考電壓的高電平 |
這樣直接使用開關來仿真是可以得到正確的結果的,但是如果使用單片機IO的話,就問題非常大了,因為IO無法完全輸出0伏,完全輸出為0伏,這樣才能正確的輸出結果的,我也做過相關的仿真,使用SPI驅動兩片595,接成這樣的R2R,結果是到某些值時,輸出的電壓倒回來了,不能線性,分析原因就是因為無法家祭無完全做到開關在0伏或者高電平狀態,因為電阻接通后還是存在電流的,嘗試換為100K和200K組成R2R后電流降下來輸出結果還算可以,但還是不能線性級進,畢竟還存在一定電流,595的引腳還是無法完全達到0電平狀態 |
好熱鬧啊!真是學到不少知識! |
STC單片機手冊上面也介紹過這個R-2R電路,轉換時間很快,有時間也搭個電路試試,手頭有不少74573之類的芯片,二者組合起來用,就當自娛自樂DIY |
hhh402 發表于 2022-10-8 08:48 原理是可行的!商品化生產的芯片肯定可行,芯片廠商的工藝不是DIY可以復制的,因為復制的成本太高! |
不知道40#想表達什么?22#給出的難道不是分立元件的? |
樓主估計搞錯了一些概念,這個DAC結構是沒問題的,也是常用的,只是用分立電阻元件和集成電路芯片里的電阻元件的制造方法和誤差是不同的,在集成電路芯片里的電阻精度在于芯片本身設計時的定位以及生產能達到的精度,這個極有可能超過1%的 |
hhh402 發表于 2022-10-8 08:48 快4個月了,有什么進展沒有?不會只停留在仿真階段吧 |
既然已經做成了芯片并且還在銷售至少說明R-2R分壓做DAC芯片是可行的,精度低是相對的,畢竟是12位DAC,精度再低也強過8位,10位的吧。其實有人做有人買已經證明方案可行。 |
hhh402 發表于 2022-6-16 00:17 驗證DAC原理可以,但實際應用肯定不現實。不要說1%精度的電阻,就是給你0.1%電阻也不一定能夠達到仿真效果。畢竟,仿真是按理想狀態給出的可能結果。 |
hhh402 發表于 2022-6-17 13:47 通常商品DAC內部的網絡電阻都是經過激光修正的,比我們平時購買的電阻的精度要高的多。沒有可比性 |
hhh402 發表于 2022-6-17 17:12 MCP4726, 12bit 你自己看看這片子誤差有多大! ![]() |
因該用ISIS 仿真直接單片機控制并監測輸出有數據 |
左邊20K電阻接IO口,8位就接8個IO,16位就接16個IO,Vcc=需要輸出最大電壓。以16位為例:設Vcc=5V,16個IO分別為0000 0000 1111 1111,將這個二進制數轉化為10進制等于255,這是輸出電壓V=255/65536*5V=19.45mV。如果16個IO分別為0000 1111 0000 1111,將這個二進制數轉化為10進制等于3855,這是輸出電壓V=3855/65536*5V=294.11mV。當然這是理論計算值,實際因為單片機IO有內阻所以輸出電壓會偏低,實際電路中運放不是電壓跟隨而是放大倍數可調的放大器,先將所以IO置1,再調節運放可變電阻使輸出電壓等于5V,這時DA輸出為0-5V(16位分辨率),如果調節運放可變電阻使輸出電壓等于10V,這時DA輸出為0-10V(16位分辨率)。 |
樓主您好,我想問一下咱這個電路怎么通過單片機控制,直接輸出與單片機IO口相連嗎?Vref又要接多少的穩壓電源呢? |
Y_G_G 發表于 2022-6-17 13:24 主要是老師非要求我這么做,我才問樓主的,抱歉啊 |
hhh402 發表于 2022-6-19 22:57 好的,就此打住了 你就好好的做你的DAC去吧,做好了別忘了發個帖子慶祝一下 |
Y_G_G 發表于 2022-6-18 21:27 你是說MCP4726A0T-E、TM8211這種DAC是做來玩的沒有實用價值嗎?芯片都做出來銷售了,你還說沒有做過實際電路,至于誤差還是看看芯片的資料吧 |
TM8211就是R-2R原理做的16位DAC芯片,還有不少DAC芯片是使用R-2R原理的,便宜的也有,非常貴的也有。這么多芯片在用至少說明這種R-2R電阻分壓DAC電路是有實用價值的。STC8H單片機手冊已經提到R-2R電阻分壓DAC電路,以后是不是加入DAC就不知道了,不過16位的應該不會,10位或12位就難說了。 |
hhh402 發表于 2022-6-17 09:06 知道為什么帶DAC的單片機那么貴么? 知道為什么STC不出帶DAC的單片機,只出帶PWM的單片機么? 知道為什么STC寧可不聲不響,給每個IO加上4.7K上拉電阻,也不搞個R-2R的DAC出來抬高身價么? 這就不是幾個電阻的問題。你搭個真實電路出來,試一下就明白了。與其仿真千遍,不如實干一次。 |
hhh402 發表于 2022-6-17 17:12 還在折騰這玩意? 怪不得你覺得這電路好 DAC里面怎么可能用一堆電阻呢? 芯片里面的電阻在絕大多數的情況下只有兩種:一種是三極管代替電阻,一種是場效應管代替電阻 而你說的這個MCP4726用的就是場效應管做成的數字電位器,不是電阻 框圖是這么個樣子而已,里面用的是數字電位器,原理是這個原理,但實用性幾乎等于0 你要真這個電路出來,你看一下能不能達到0.7929uV,能有1mV的精度你就笑了 參考電壓,溫度漂移,電阻誤差,這三個加一塊,沒有做過實際電路,你是不會知道這其中的影響有多大的 |
這是某人設計的圖,陣容豪華:![]() ![]() |
本帖最后由 名字不是重點 于 2022-6-18 09:04 編輯 hhh402 發表于 2022-6-17 23:15 不是數字功放,只是單純的DAC解碼器+耳放 |
22#是數字功放吧,只能看看![]() |
有不少使用這種電路的DAC芯片,比如MCP4726A0T-E、TM8211,也不貴。估計用的電阻精度比較低吧。 也有用0.1%電阻的,很貴。下面有個介紹R-2R的視頻: https://www.bilibili.com/video/B ... 4108bde1b8b3565f372 |
![]() 這個產品圖看一下,標價RMB12K,僅僅是一個DAC High End Discrete R-2R Sign Magnitude DAC / HeadAmp 旗艦! 全平衡! 27 bit! DSD256/PCM384 售價: RMB 11,980 dac1541 internals dac1541 retail packaging Specifications: THD @ -1 dB <0.005% THD @ -60 dB <0.02% Resistor Precision 27 bit, 0.01% – 0.02% Resistors Clock Jitter RMS 0.3 pS typical S/N 20 Khz Bandwith >123 dB unweighted Frequency Range +0.1 -1.0 dB 20hz – 20Khz USB Input Type B, Isolated, Full/High Speed USB Input Mode Selectable Audio Class 1.0 or Audio Class 2.0 SPDIF / AES / Toslink Inputs Up to 24 bit / 192 Khz USB Input PCM Up to 24 Bit / 384 Ksps USB Input DSD Up to DoP-128 and DSD-256 Digital volume control -80 dB to +10 dB Output Line RCA, 2.0V RMS, Zout 50 ohm Output Line Balanced 3 pins XLR, 4.0V RMS, Zout 100 ohm Output Headphones 6.3 mm Jack, 6.5V RMS, Zout 1.5 ohm 1300mW @ 32Ω Output Headphones Balanced 4 pins XLR, 13V RMS., Zout 3.0 ohm 4400mW @ 32Ω Power Consumptation 90-265V AC, max 35W Size 250 x 205 x 40 mm Weight 1.5 Kg Warranty 3 Years |
lgwd 發表于 2022-6-17 16:04 我百度了一下,一般產品是不會采用這種電路的,只會在土豪版的產品上用它, 比如音響類的。那上邊不止16BIT,24BIT的都有。玩HIFI音響的都是不缺錢的主。 要不然單那幾十個電阻就可以買到一顆不錯的DAC的IC了。 |
仿真沒有問題只能說明理論上是正確的。你實際搭個電路試試,看看能否達到目的?會不會出現多種問題? |
hhh402 發表于 2022-6-17 09:20 謝謝!我知道我的思路錯在哪了 ![]() |
查了一個16位DAC,也是用R-2R電阻分壓法實現的。網站介紹如下: TM8211是兩路16位數模轉換集成 電路 ,可廣泛應用于數字音頻、多媒體系統。 芯片采用CMOS工藝設計,內部電路結構基于R-2R電阻網絡結構設計,并在全 電源 電壓范圍內實現16bit的動態范圍。 TM8211可通過采用數字串行總線數據輸入,采 用快速R-2R網絡結構來支持8X的過采樣音頻信號處理。 |
hhh402 發表于 2022-6-17 09:32 那您就做去吧 反正這電路現實中不會有人用,就算有,也是DIY玩玩的,一個16位的工業級DAC才幾塊錢,兩個IO就能控制 有誰用16個IO來控制? |
關于電阻精度問題,1%足夠大多數應用,3位半萬用表只用到1%電阻,4位半萬用表大部分只用到1%電阻,但是都實現了小于1%的誤差,0.1%電阻很少用,0.01%只是傳說,校準才是減少誤差的捷徑。 |
名字不是重點 發表于 2022-6-17 09:04 ADC的話16位只需要16次比較就出結果,不管什么電壓都是需要16次比較,12位ADC就需要12次比較,不存在極限情況,具體百度一下有詳細介紹。 |