DAC - časování: Jak dlouho trvají operace? Jakou prodlevu?

Dobrý den,

potřeboval bych poradit s časováním operací na DAC převodníku. Pro určitou aplikaci potřebuji posílat data z mC (Atmel, ale na tom v podstatě nezáleží) přes DAC na multiplex se S&H.

Moje představa práce s DAC je taková: DAC i multiplex(y) jsou disabled, mC vystaví na port hodnotu, enabluje DAC, počká na dokončení převodu, ustálení, pak enabluje příslušný multiplex (s již nastavenou adresou vývodu, kam má vstup směřovat), zas chvíli počká, vše disabluje a sekvence se opakuje.

Chtěl bych použít převodník AD7538, jehož datasheet připojuji, multiplexy jsou HD14051B.

Jde mi přesně o toto: jak dlouhou prodlevu zařadit po vystavení hodnoty na port, jak dlouho trvá převod, ustálení, zpracování multiplexem, tj. která hodnota z datasheetu je která a zda se o to mám vůbec starat.

Nejsem hardwarář a z datasheetu mi to moc jasné není.

Děkuji za případné reakce.

:arrow_right: administrator: přejmenováno z "DAC - časování"
AD7538 14 bit DAC.pdf (149 KB)
HD14051B.pdf (95.3 KB)

Ještě bych doplnil, že obvod je napájen ±15V, rozsah převáděných napětí je 0-10V, zapajení DAC podle datasheetu, jak jsem psal, nejsem HW, takže nic lepšího nevymyslím. Za multiplexy jsou kondy a TL-064/84. Multiplex byl na orig. schématu, ze kterého jsem se inspiroval, napájen 7.3V, ale netuším proč.

Napájení je 12-15V, vstupy jsou 5V tolerant.
Reference musí udržet hodnotu ještě při zátěži 3.5kOhm.
Předpokládám, že nebudeš potřebovat funkci synchronizace více D/A. V tom případě by měl být převodník schopen práce se všemi řídicími vstupy (/CS, /LDAC, /WR) spojenými. Data jsou převáděna při náběžné hraně.

  1. vypnout výstup multiplexu (počkat >625ns)
  2. Minimální doba, kdy musejí být data přítomna na vstupu před náběžnou hranou na řízení je t5>180ns. (zapsat data, počkat >180ns)
  3. Po příchodu náběž. hrany se výstup (proud!) ustálí nejpozději do “Output Current Settling Time” < 1.5us. (počkat 1.5us, zatím můžeš provést 4)
  4. Nastavit adresu na multiplexu
  5. zapnout výstup multiplexu (počkat >525ns)
  6. počkat na ustálení S/H OZ. To bude záležet na zapojení a parametrech součástek.

Myslíš, že by se nenašel D/A s potřebnou bitovou šířkou a počtem výstupů?
Jaký jsou konkrétně požadavky? Případně co vyrábíš pěkného jesli to není tajné? :slight_smile:

Díky za odpověď, co to má být tajné není, spíš s koncem v nedohlednu…

Měl by vzniknout A/D polyfonní (nejspíš 8 hlasý) syntetizér s wavetable oscilátory, přičemž wavetable není to, co je známé třeba ze zvukových karet, ale to, že každý oscilátor má přiřazenou určitým způsobem seřazenou skupinu průběhů a mezi nimi pomocí modulátorů přepíná, takže průběh není statický.

Tohle mám vyřešené jak HW, tak jsem napsal i kompletní SW synth na PC, který tohle používá. HW verze má mít ale analogové VCF a VCA, proto potřebuji mechanismus, který teď řeším.

Struktura by měla být následující: hlavní uC, který bude zajišťovat komunikaci s okolím (MIDI přes USART), scanování fyzických ovládacích prvků (cca 20 potenciometrů + tlačítka, 2x 7segmentovka a 40x2 LCD) a posílat řídící data na 2 identické boardy, každý řízený 1 uC, který bude dělat to, co tu řeším. Každý z dvojice oscilátorů na hlas (tj. celkem 8 osc na boardu) je tzv. fázový oscilátor, hodnotu přírustku udává řídící uC boardu. Proto nemohu mít DAC stále průchozí, protože bude na stejné sběrnici, jako oscilátory (základem je ATtiny2313 ve funkci programovatelného čítače, který generuje pulzy a přes přídavné obvody udává pozici vzorku v tabulce v ROM - mohu kdyžtak vysvětlit detailněji), jejichž frekvence se musí dosti často updatovat, např. kvůli periodickým modulacím.

Modulační generátory (generátor periodických kmitů různých průběhů - LFO a generátory obálek) budu řešit SW, na hodnotách modulátorů totiž závisí např. i poloha ve wavetable, více modulátorů může ovlivňovat jednu veličinu. Ještě nemám určeno, zda budu posílat např. do VCF výslednou hodnotu řídícího napětí nebo zvlášť fixní nastavení a modulátory, obojí má pro a proti. Proto mohu potřebovat těch výstupů třeba 20 i více (všechno 4x, takže i pro pár veličin je jich dost).

K tomu bodu 2, to znamená, že musím na porty vložit hodnotu, čekat 180ns, pak teprve WR → LOW? Mezi nastavením adresy a sepnutím INH na multiplexu nemusí být prodleva nebo je to těch 525 ns?

Nakreslil jsem takové rádoby schéma, jak je to zapojené okolo uC a DAC, chybí tam jen odbočky sběrnice k oscilátorům, které nejsou podstatné. Také program pro Atmel, který by to měl zajišťovat. Je to v podstatě jen funkční prototyp, namlátil jsem to za chvilku, řeší jen posílání na DAC a adresování multiplexů. Jinak programování uC se také učím, takže to nemusí být všechno úplně “clever” :wink:.
DAC.jpg
DACmulti.asm (4.55 KB)

Ad 2) (/CS = /LDAC = /WR):
/WR -> 0
zápis dat
čekání 180 ns
/WR -> 1

Na tom zapojení se mi nezdají ty S/H.
D/A má proudovej výstup. To, co tam máš napětí nevyrobí.
Mezi D/A a MX bys měl vložit převodník I/U s nízkou výstupní impedancí pro nabíjení S/H (pomocí OZ). Za MX potom malej kondik na zem (bude udržovat napětí) a teprve z kondiku na OZ.

Mimochodem - celé to bude velice pomalé, ale velice (počítal bych možná 20us na kanál v závislosti na schopnostech analogové části) :wink:

Ještě jednou díky, máte pravdu, ty kondíky jsem nakreslil špatně, mají jít opravdu proti zemi, takhle jak jsem to nakreslil je to pěkná blbost… :confused: Jinak za DAC bude samozřejmě něco dalšího, já jsem to tam nenapsal a na “schémátku” jsem to také vynechal jako nepodstatné, mělo by tam být zapojení dle datasheetu DAC. Akorát to asi přinese další prodlevu, se kterou zatím není počítáno…

K té pomalosti - v servisním manuálu k jednomu starému syntezátoru jsem se dočetl, že celý cyklus (konkrétně 43 hodnot, já jich přece jen budu mít méně, tam bylo 8 VCO, každý se 3 parametry), trvá 2,6 ms a stačí to, takže jsem OK. Sice se mezi to musí vejít ještě výpočet příslušné hodnoty, ale to mám docela rychlé… No uvidím.

To odpojování DAC pomocí WR je správné? Částí toho cyklu bude i update přírůstků pro oscilátory, které jdou po stejné sběrnici, ale s DAC by to nemělo hýbat, jsou to řídící data. Ačkoliv pokud jsou multiplexy odpojené, tak změny na DAC by nemusely být významné…

Jinak je na tom programu něco zvlášť zavrženíhodného, tedy pokud jste se někdo díval?

Pokud bude /WR v “1”, tak se na vstupu D/A může dít co chce. Výstup nebude ovlivněn.
Na program jsem nekoukal, píši v C, v ASM maximálně hledám chybu. Tudíž nemůžu kód posoudit.

Díky, jen se mi zdá, zdali by nemělo být nejprve WR = 1, pak zápis dat na port uC, prodleva > 180 ns a pak povolení WR, tj. 0? Nebo jsem to špatně pochopil?

Má být nějaká prodleva mezi nastavením adresy na multiplexu, tj. vstupů A,B,C a INH na 0? Nebo bod 5) zapnout výstup multiplexu (počkat >525ns) znamená počkat PŘED (pak je tam asi chyba, má to být z dtatsheetu 625???)?

Může být, ale nemusí. V datasheetu D/A je specifikovaná doba zpoždění náběž. hrany rízení za daty. Jesli jsou data přítomna již v průběhu sestupné hrany či nikoli by nemělo mít na fukci vliv.

multiplex: zpoždění výstupu je definované v případě jeho zapnutého stavu. Když je výstup vypnut a zpoždění po změně adresy je stejné nebo kratší než zpoždění následující po zapnutí výstupu, tak nemá vliv když je výstup zapnut až později. Což je tento případ. 525 je skutečně překlep, 625 je správně.
4 a 5 tedy můžeš provést současně(ihned zasebou, současně to na mcu nelze), nebo můžeš provést 4 současně s 3, počkat dobu potřebnou pro 3 a pak provést 5.
Těch 625ns je doba ustálení výstupu multiplexu po zapnutí výstupu, tedy skutečně až PO 5.