DAC audio stéréo R-2R 8 bits, est-ce une bonne façon de le faire?

8

Je suis nouveau en génie électrique et le premier projet que j'aimerais faire est de réaliser un audioconvertisseur numérique-analogique. J'ai découvert qu'une bonne façon de le faire est d'utiliser une structure R-2R pour la conversion.

J'aimerais me mettre au défi et repartir de zéro avec la partie numérique du circuit, en plus du fait que je ne trouve pas vraiment de solutions sur le web pour aider à le construire. J'ai un programme de simulation de circuits et j'ai commencé à concevoir, tout en recherchant sur le Web tous les types d'électronique que vous pourriez utiliser.

Maintenant, je pense que je pourrais être quelque part dans le voisinage de la compréhension du principe d'un CAD, mais il serait utile qu'une personne expérimentée puisse m'aider à vérifier si je l'obtiens. Est-ce un bon endroit pour demander cela?

Si oui, voici le circuit que j'ai conçu: DAC audio stéréo 8 bits R-2R

J'ai utilisé un registre à décalage avec verrouillage de sortie pour chaque canal et Q7S lié de l'un à l'autre pour alimenter les données. Est-il vrai que les fichiers audio alternent les canaux gauche et droit, ou vice versa, en blocs? par exemple dans un fichier 8 bits: 0010 0111 pour la gauche après 0010 0110 pour la droite?

Les registres à décalage que j'ai utilisés ici sont les 74HC595. Lors du passage des bits, aucune des broches ne sera (momentanément) active. Lorsque le verrou [broche STCP] est déclenché, les bits sont transférés du registre à décalage vers le registre de stockage, où ils émettent directement leur valeur vers les broches correspondantes et restent actifs jusqu'à ce que les 16 bits suivants soient autorisés.

Ensuite, il y a le cristal, pour lequel j'ai utilisé un signal carré pour en imiter un avec la bonne fréquence d'oscillation: 24 576 MHz. Il alimente le compteur dans lequel la fréquence est divisée pour produire les fréquences dont mon DAC a besoin. Dans ce cas, la fréquence d'échantillonnage doit être de 192 000 kHz et donc la fréquence à laquelle les données sont décalées doit être de 3,02 MHz (192 000 x 16 bits). La vitesse d'horloge de 192 000 kHz est utilisée pour déclencher STCP.

La prochaine chose que je veux faire est de comprendre comment charger des données à partir d'une source (Raspberry par exemple) via peut-être I2C dans un tampon dans le DAC et à partir de là, synchroniser les bits dans le circuit que vous voyez ici.

Si vous pensez que je le suis ou que je ne suis pas sur la bonne voie, il serait très utile de me le faire savoir.

Merci! Rogier

Soit dit en passant, j'ai oublié de mentionner que le DAC que je voudrais construire est d'au moins 24 bits par canal à 96 kHz. Cela prend juste beaucoup de place sur cette menace et ne devrait pas être difficile de les ajouter par la suite. C'est le même principe.

Rogier Reerink
la source
2
Bon projet difficile. Je n'ai pas parcouru tous vos calculs, mais un audio 8 bits ne va pas sonner trop bien. Vous allez devoir privilégier la demi-alimentation, ce qui vous laisse 7 bits de chaque côté. Vous pouvez vous en tirer avec la parole compressée où la plage dynamique est sévèrement limitée mais les passages silencieux de la parole ou de la musique auront une distorsion terrible en raison de la taille de pas grossière et de la réponse logarithmique de l'oreille. De mémoire, la qualité CD est de 14 bits.
Transistor
1
@transistor bien qu'il ne soit pas qualifié a une haute fidélité, l'audio 8 bits peut être étonnamment écoutable s'il est bien fait, surtout si le taux d'échantillonnage est hors de la plage audible, ce qui semble être le cas dans ce cas (avec un échantillon suffisamment élevé vous pouvez même vous en sortir avec une sortie 1 bit ...). Une préoccupation plus sérieuse est de savoir si les registres à décalage proposés sont "à double tampon", ou si des bits apparaissent momentanément sur les mauvaises sorties tout en étant décalés, ce qui pourrait provoquer une distorsion substantielle.
Chris Stratton
4
Quant à votre commentaire sur 24 bits par canal - oubliez-le, oubliez-le maintenant, et ne perdez plus de temps à y penser. Je ne vais pas entrer dans les mathématiques pour cela dans ce commentaire, mais je suis sûr que cela est venu ici quelque temps auparavant. Sinon, voici ce que wikipedia a à dire: en.wikipedia.org/wiki/…
pipe
2
En utilisant des résistances de 1%, vous pouvez obtenir une résolution précise de 6 bits (LSB = MSB / 64, donc 1% d'erreur <valeur LSB / MSB), mais au-dessus de cela, vous devrez réduire de moitié l'erreur possible par résistance pour chaque élément supplémentaire. (0,25% pour 8 bits) empêchent également l'erreur de résistance de surcharger éventuellement vos bits les moins significatifs.
Robherc KV5ROB
2
2-23est un très petit nombre. comme 1 sur 8 millions. vous ne pourrez pas créer un DAC, avec une vitesse de conversion décente, qui a une sortie aussi précise que cette spécification. le nombre honnête de bits est la plage dynamique en dB (qui est le rapport S / N en dB ajouté au nombre de dB de marge) divisé par 6,02 dB / bit. qui vous donnera le nombre de bits honnêtes. le meilleur que j'ai vu dans l'industrie est toujours d'environ 20 bits (ou environ 120 dB de plage dynamique).
robert bristow-johnson

Réponses:

7
  • Oui, c'est exactement le bon endroit pour poser votre question.
  • Oui, la topographie R-2R est le moyen le plus simple à concevoir (et je pense que c'est le meilleur) pour créer un DAC homebrew (sans utiliser PWM).
  • Quant à vous mettre au défi, il me semble que vous êtes peut-être aussi masochiste que moi (bravo pour avoir le courage!). Il s'agit d'un projet très impliqué pour un débutant.
  • Vos cordes de résistance R-2R (et sans doute les amplificateurs opérationnels attachés) SONT en fait vos DAC 8 bits

Voici ce que je pense:
Échelle corrigée

Malheureusement, la page wikipedia sur les DAC à échelle R-2R est incorrecte quand elle dit que l'échelle R-2R fonctionne comme un diviseur de courant dans cette application. Alors qu'une échelle R-2R peut être utilisée comme diviseur de courant, elle fonctionne en fait comme diviseur de tension ici. Voici une analyse détaillée.

Considérez uniquement le LSB de l'échelle:

schématique

simuler ce circuit - Schéma créé à l'aide de CircuitLab

Quelle que soit la position du commutateur, la résistance Thevenin de ce simple diviseur de tension est juste R. La valeur de la source de tension Thevenin est soit 0V soit 1/2 × Vref.

Maintenant, considérez ce qui se passe lorsque vous ajoutez la prochaine étape de l'échelle R-2R:

schématique

simuler ce circuit

Vous pouvez voir que c'est le même type de diviseur de tension que nous avions dans le premier cas, sauf que le nombre de combinaisons de tension a augmenté. Cependant, la résistance Thevenin de ce circuit est toujours juste R, et la source de tension Thevenin est maintenant 0/4, 1/4, 2/4 ou 3/4 × Vref.

Par induction, vous pouvez voir que vous pouvez ajouter un nombre quelconque d'étages à l'échelle, et le seul effet est que le nombre de choix pour la valeur de la source de tension Thevenin est multiplié par 2 pour chaque étage. La résistance de la source reste exactement la même pour un nombre quelconque d'étages.

Si l'impédance de charge est infinie, la tension de sortie de l'échelle correspondra exactement à la tension de Thevenin. Mais si la charge a une valeur finie de résistance, le seul effet sera de créer un diviseur de tension avec la résistance de la source Thevenin, en ajustant la tension de sortie par un rapport fixe, mais sans aucun autre effet sur la précision ou la linéarité de base du CAD.


Notez que dans le circuit d'origine de Rogier (celui en question), les amplificateurs opérationnels sont dans une configuration inverseuse, ce qui signifie que la sortie de l'échelle R-2R est directement liée à une masse virtuelle. Cela signifie que la valeur de sortie est vraiment le courant traversant Rth (qui est juste R), et ce courant traverse également la résistance de rétroaction de l'ampli op. La tension de sortie de l'ampli-op est la tension nécessaire pour que ces deux courants soient égaux et correspond à -Rfb / R × Vth. Puisqu'il utilise une résistance de rétroaction de 2R, la sortie finit par être -2 × Vth.


Il semble y avoir une certaine confusion quant à savoir si l'échelle R-2R est utilisée comme diviseur de tension ou diviseur de courant, alors voici une illustration de la façon dont ce dernier peut fonctionner, afin de montrer les principales différences entre celui-ci et le circuit de l'OP.

schématique

simuler ce circuit

Notez que les courants qui descendent à travers les résistances 2R sont pondérés en binaire. Cela fonctionne parce que la résistance efficace regardant vers la droite de l'une des jonctions triples est également exactement de 2R. Par conséquent, le courant qui s'écoule de la gauche se divise toujours également entre la branche inférieure et la branche droite.

Notez qu'une hypothèse clé ici est que toutes les jambes sont liées à la même tension (zéro, dans ce cas). Il est également intéressant de noter que les tensions aux nœuds de jonction sont également pondérées en binaire.

Cela peut être utilisé pour construire un DAC de sortie de courant comme suit:

schématique

simuler ce circuit

Les courants dans les résistances de ce circuit sont exactement les mêmes que sur le schéma précédent, car quelle que soit la position de chacun des commutateurs, la résistance correspondante est connectée soit à une masse réelle sur le Iout¯ bus, ou à un sol virtuel sur le Ioutautobus. Les courants sur les deux bus totalisent toujours Iref. Un ampli-op peut convertir le courant de sortie en tension, et la plage de tension est simplement -Iref × R7.

Dave Tweed
la source
Pour être honnête, je ne sais toujours pas ce qu'un opamp fait et pourquoi j'en aurais besoin ici. Ce qu'il fait (selon le logiciel de simulation), c'est de rendre le signal positif sortant de l'échelle R-2R négatif avec un multiple de deux: ~ 5V in, -9,96V out. Pourquoi cela serait-il nécessaire?
Rogier Reerink
1
Les amplis opérationnels amplifient la différence entre 2 tensions d'entrée. Par conséquent, le logiciel dit que votre MSB est connecté à l'entrée inverseuse (broche de signe moins) de l'ampli opérationnel, ce qui fait que la sortie varie comme l'opposé de l'entrée. Le rapport entre la tension du signal de sortie et la tension d'entrée est contrôlé par la résistance de rétroaction (vous avez utilisé 10K) de la sortie de l'ampli op à l'entrée inverseuse de l'ampli op; plus la résistance est élevée, plus vous obtenez de gain (court-circuit à travers cette résistance, puis déplacer la connexion MSB vers l'ampli opérationnel + entrée et la connexion LSB vers la terre devrait résoudre ce problème.
Robherc KV5ROB
Pas vraiment. Dans le diagramme de l'OP, les entrées non inverseuses des amplificateurs opérationnels SONT mises à la terre. Tout ce que vous faites, c'est passer à une configuration de suiveur de tension. N'oubliez pas d'inclure une résistance 5k dans le chemin de rétroaction de chacun pour équilibrer les décalages de courant de polarisation. De plus, la résistance la plus basse de chacune de vos échelles R-2R doit être de 10K, pas de 5K. Le PO avait également ce droit.
Dave Tweed
Robherc, 1. j'abandonnerais les condensateurs de couplage. 2. Si vous conservez le circuit suiveur de tension non inverseur que vous avez, vous devez ajouter une résistance 10K de la borne + des amplificateurs opérationnels à la terre. et la résistance 5K sur le fond devrait être de 10 K. imaginez la superposition et tous les bits OFF (ou masse). lorsque vous êtes assis à l'un de ces nœuds, il devrait y avoir 10K de résistance à la terre dans les 3 directions.
robert bristow-johnson
Schéma mis à jour avec mise à la terre corrigée. @ robertbristow-johnson pourquoi voudriez-vous vous débarrasser des condensateurs qui bloquent le courant continu et centrer votre sortie pour protéger les tranducers dans un circuit audio?
Robherc KV5ROB