• Witamy w największym polskim serwisie internetowym poświęconym w całości zagadnieniom samodzielnej budowy nagłośnienia.
    Dzięki DIYaudio.pl poznasz zagadnienia samodzielnej budowy nagłośnienia od podszewki oraz będziesz mógł dyskutować o DIY audio do woli.

    Artykuły z dawnego portalu zostały przeniesione do sekcji forum na samym dole.

"NOS" DAC - czyli jak to dobrze zrobić

W verilogu pewnie kodu bylo by duzo mniej

Nie podoba mi się składnia Veriloga. To już jest kwestia subiektywna :)

Xilinx wybrany przez bardziej przyjazne srodowisko czy akurat ma cos czego alterze brakuje ?

Nie znam Altery. Xilinx został wybrany z prostego powodu - trochę rzeczy już na nich stworzyłem (Spartan 2, Spartan 3 i Artix 7) i po prostu nie widzę potrzeby wchodzenia w układy od Altera.
 
i z małą impedancją wejściową przy takich częstotliwościach.
I łykać spory prąd :)
Z tą licą to bym nie przesadzał na pewno połączenie powinno być możliwie krótkie .

PS
Szybko działasz ;)

- - - - - aktualizacja - - - - -

Kiedyś na nich coś tam robiłem .
Ogólnie jak piszesz w HDL to nie ma różnicy wielkiej .
Było to parę lat temu i wtedy bardziej podobało mi się ich IDE było szybsze ten darmowy WebPack od Xilinx się ślimaczy .
 
I łykać spory prąd

To fakt, bias całego dyskretnego I/V trzeba będzie znacząco zwiększyć - co najmniej 20 mA. Zastanawia mnie jakie będą zniekształcenia przy takim prądzie, chociaż prawdę mówiąc, 16 mA p-p to i tak nie jest tak źle - wyobraźmy sobie 16x TDA1541A z wyjściami po 4 mA p-p :D W tym drugim wypadku już byłby problem.

Z tą licą to bym nie przesadzał na pewno połączenie powinno być możliwie krótkie .

PCB jest relatywnie duże i nie wiem jak to na końcu wyjdzie. Prawdopodobne jest, że w pewnym momencie zachce mi się w pełni symetrycznej konfiguracji na 32x DAC'ach i tutaj dochodzi następna wejściówka na FPGA, która potrafi odwracać próbki PCM (pierwszy projekt o którym wspominałem). Trzeba to potem zmieścić w obudowie i jakoś rozłożyć.

Szybko działasz

Powiedzmy, że chciałbym się z nim pokazać na pewnym spocie :P No i powiem szczerze, że trochę mnie ten projekt kręci - w końcu coś innego niż oklepane rozwiązania.

Kiedyś na nich coś tam robiłem .
Ogólnie jak piszesz w HDL to nie ma różnicy wielkiej .
Było to parę lat temu i wtedy bardziej podobało mi się ich IDE było szybsze ten darmowy WebPack od Xilinx się ślimaczy .

Muszę kiedyś spróbować :) Co do WebPack - no niestety, mi też to w cholerę zajmuje i to na relatywnie "prostych" projektach. Pół biedy jak przejdzie synteza, ale mapowanie też trwa swoje.
 
Chińczycy jak zwykle zadziwiają w pozytywnym znaczeniu tego słowa :) Sami z siebie wysłali zdjęcie mojego zamówienia (moje dane na kartce) i kawałek PCB:

8531df71a266a51786c34db28d0da16b_1457448006.jpg


PCB zostało wysłane i będzie jeszcze w tym tygodniu, czyli tak jak zakładałem.

Projekt zakłada też możliwość połączenia tego wszystkiego w konfiguracji różnicowej (32x DAC na kanał), ponieważ jeden z pinów I/O został przeznaczony do odwracania próbek PCM (np. -100 => 100). Mamy dwie płytki PCB, tworzymy sobie kanapkę i w jednym podpinamy I/O od odwracania próbek pod VCC, a w drugim pod GND. Sygnał wejściowy I2S lub SPDIF jest dokładnie taki sam dla obydwóch, tylko, że w jednym próbki PCM są odwracane a w drugim normalne :)
 
Dzisiaj skończyłem testować każdą linię cyfrową dla kości AD1865N z osobna i wszystko działa, bufory z przerzutnikami Schmitta też fajnie działają :) Płytkę można jeszcze zmniejszyć w szerokości, ale nie widziałem potrzeby, ponieważ robił się z niej taki mocny prostokąt co mi się średnio podobało.

No to teraz można pisać opis sprzętu dla FPGA, tj. wezmę się za to w niedzielę. Potem "jakiś" I/V i można testować.
 
Uaktualnienie do projektu :) Zacznijmy od I/V, który jest na AD811. Niestety z doświadczenia dowiedziałem się, że prosty I/V na rezystorze to czysty idiotyzm - DAC'i miały ogromny problem z impedancją wejściową! Przy pełnej amplitudzie po prostu zniekształcały przebieg i nie były w stanie przepchać całego maksymalnego prądu przez rezystor, który miał wartość 300 Ohm. Generalnie rezystor był relatywnie mały, ponieważ niektórzy "audiofile" potrafią wrzucać większe i podniecać się zniekształconym dźwiękiem :)

Po tym zbudowałem najprostszy I/V na AD811. Dlaczego na tym wzmacniaczu operacyjnym? Po prostu jest on niezwykle szybki (CFB) i potrafi bez problemu konwertować prąd na napięcie bez zniekształceń i zwiększonej impedancji wejściowej przy większej częstotliwości. Niestety z piekielną szybkością opków CFB dochodzą piekielne problemy ze stabilnością :P Po prostu slew rate na poziomie 2500 V/us robi swoje. Kondensator w sprzężeniu dobrałem doświadczalnie, na początku miałem 33 pF a potem zmieniłem na 22 pF i jest znacząco lepiej. Myślę, że sprawa poprawiłaby się z jeszcze mniejszym kondensatorem, ale niestety takiego nie miałem. Poniżej zdjęcie "super" I/V:

70eeb50cad1ff08b97e6ec3634eb9bea_1458050044.jpg


Popełniłem też pewien błąd myślowy przy projektowaniu układu. Niestety błąd ten ogranicza próbkowanie do maksymalnie 44,1 kHz z powodu faktu, że muszę nowe dane przesłać w czasie okresu 4x BCLK, który wymaga zegara na pograniczu możliwości AD1865 i to przy 44,1 kHz. Generalnie wynika to z faktu, że mam połączony zegar i dane dla każdego kanału, tj. po prostu są wspólne. Oczywiście nie mogę przesłać nowych danych do czasu zatrzaśnięcia wszystkich DAC'ów, a potem zostaje mi dosłownie okres 4x BCLK na wysłanie nowych danych aby nie przerywać interpolacji.

W każdym wypadku ten "problem" rozwiązałem na teraźniejszej płytce poprzez przesłanie danych w okresie 4x BCLK. Nie zmienia to faktu, że projekt jeszcze dopracuję aby przyjmował próbkowanie na poziomie 192 kHz co wymaga pewnych zmian w prowadzeniu linii do FPGA na PCB.

Interpolacja w VHDL'u to zwykły rejestr przesuwny, który jako zegar bierze BCLK/4:
b9ed82fb41b962c84f02b4718ee7b0c9_1458052660.jpg


Teraz może jakieś wykresy względem analogowej interpolacji :)

Sinus 1 kHz, 44,1 kHz przy standardowym NOS DAC'u na jednym AD1865N:
2dfc59789ba8854ea0c6f9c354ad3152_1458050030.jpg


Sinus 1 kHz, 44,1 kHz przy analogowej interpolacji na 16x AD1865N:
369eaa912982aacb250d9dd193ae50b9_1458050030.jpg


Sinus 4 kHz, 44,1 kHz przy standardowym NOS DAC'u na jednym AD1865N:
3a36d0f24a6f31acc8f23b61692559bb_1458050030.jpg


Sinus 4 kHz, 44,1 kHz przy analogowej interpolacji na 16x AD1865N:
a86bdb2e53fd91827f61efbb4a9c1717_1458050030.jpg


Sinus 10 kHz, 44,1 kHz przy standardowym NOS DAC'u na jednym AD1865N:
c8fbbe346eea861c5a3fa5b28956b70a_1458050031.jpg


Sinus 10 kHz, 44,1 kHz przy analogowej interpolacji na 16x AD1865N:
4e594549c76b8ede2cb6058d9c51f6d1_1458050030.jpg


Śmieci na przebiegach wynikają głównie z I/V (kondensator do stabilizacji). Myślę, że 18 pF lub nawet mniej mogłoby jeszcze lepiej ustabilizować opampa. Na razie mi to nie przeszkadza, przy docelowym I/V dobierze się kondensator. W każdym wypadku jakiś prosty filtr rekonstrukcyjny (jeden rezystor i kondensator) zapewne załatwi sprawę syfu w.cz.

Czyli generalnie można zbudować jakiś lepszy I/V, posłuchać i ewentualnie brać się za docelowe zmiany :)
 
Ostatnia edycja:
Fajnie to wygląda. Mam amatorsike pytanie, może się pochylisz, czemu ten sinus 10k taki połamany? Tak wygląda 44,1k?
 
Mam amatorsike pytanie, może się pochylisz, czemu ten sinus 10k taki połamany? Tak wygląda 44,1k?

Drugie od końca zdjęcie pokazuje Ci jak wygląda sinus 10 kHz przy zwykłym NOS DAC'u. Czyli generalnie tak masz go zapisanego na płycie czy w pliku 44,1 kHz. W wypadku próbkowania 44,1 kHz masz około 4,5 próbki w pliku na okres do odtworzenia fali. Zwykły filtr cyfrowy odtworzy tego sinusa perfekcyjnie, ponieważ interpoluje on sygnał na bazie interpolacji sinc. W moim przypadku przebiega interpolacja liniowa, która łączy próbki linią ciągłą :)
 
Niestety z doświadczenia dowiedziałem się, że prosty I/V na rezystorze to czysty idiotyzm - DAC'i
Może mniejsza wartość by była OK np 30om tylko trzeba by potem wzmocnić sygnał do standardowych 2V .
Przy 16mA mogło by to działać ;)

http://www.waltjung.org/PDFs/High_Performance_Audio_Stages_Using_TransZ_Amps.pdf
i strona 124 :)
http://www.analog.com/library/analogDialogue/archives/39-05/Web_Ch1_final_R.pdf

:)

Popełniłem też pewien błąd myślowy przy projektowaniu układu.
"Murphy gets me ever single time"
:)


Mam amatorsike pytanie, może się pochylisz, czemu ten sinus 10k taki połamany? Tak wygląda 44,1k?
Bo nie ma żadnego filtrowania i występuje aliasing .
Po zastosowaniu odpowiedniego filtru na wyjściu była by perfekcyjna sinusoida :)
 
Może mniejsza wartość by była OK np 30om tylko trzeba by potem wzmocnić sygnał do standardowych 2V .
Przy 16mA mogło by to działać

Nie widziałem, czy AD1865N ma podaną maksymalną impedancję, ale przykładowo TDA1541A ma napisane, że powyżej 25 mV na wyjściu będzie rosnąc THD. Przy prądzie +- 4mA da to impedancję na poziomie 6,25 Ohm i taki powinien być maksymalny rezystor do konwersji I/V aby kostka nie degradowała dźwięku :)

http://www.waltjung.org/PDFs/High_Pe...ransZ_Amps.pdf
i strona 124
http://www.analog.com/library/analog...h1_final_R.pdf

Genialne pdf. Bardzo dziękuje :)

Śmieci mam powyżej 120 MHz. Ten opamp jest tak szybki, że amplituda przy oscylacji bodajże na 125 MHz miała kilka Vpp bez kondensatora.

W danej chwili został na wyjściu taki syf:

545e1ae021e191f102ced9e7d388d0a2_1458064617.jpg


Do tego ten DC offset.

Wydaje mi się też, że MCLK od I2S (Amanero) śmieci po masie. Nie jest on izolowany.

"Murphy gets me ever single time"

No niestety. Na razie muszę zastanowić się nad nowym podejściem do tematu opóźnienia cyfrowego :)
 
Ostatnia edycja:
OK. Ustabilizowałem opka - dałem mu 10 pF zamiast 22 pF i w miarę cisza na wyjściu :) Tylko teraz został problem z MCLK od Amanero:

Wyjście I/V z wpiętym Amanero w USB:

95d32d765f5844a66443e19ef482950f_1458067603.jpg


Wyjście I/V z wypiętym Amanero (bez zasilania):

cce8d9c9b77c35f089b059a75678d128_1458067604.jpg


Jakim cudem MCLK może mi tak błądzić? Z innej strony jak ten syf pojawia się na masie, to opamp próbuje wyrównać wejścia. Muszę tutaj zaznaczyć, że Amanero nie jest odizolowane - ma wspólną masę z moim układem.

W sumie to filtr rekonstrukcyjny syf ten powinien usunąć, ale najpierw chciałbym się dowiedzieć co go powoduje i najlepiej usunąć go u źródła.
 
common-mode zapewne .
daj izolator

Syf w dużej większości zniknął :) Jeszcze coś tam jest, ale nie powinno być już problemu.

Oczywiście chęć podłączenia przeważyła, ponieważ stwierdziłem, że wszystko jest OK:

afd77216fb095e55df8140bd95bf31d4_1458085511.jpg


Jako, że tylko jeden kanał oraz brak bufora wyjściowego za filtrem analogowym to się jeszcze nie wypowiem :)

Albo rozplanowac jakos inaczej powroty pradu zegara. Najlepsza opcja to chyba izolacja.

Prądy powrotne sekcji cyfrowej są tylko i wyłącznie na części masy po stronie cyfrowej i tak samo jest z prądami analogowymi i masą analogową :)

Generalnie nie powinny błądzić.
 
Ostatnia edycja:
Powrót
Góra