Javier Valcarce's Personal Website

Convertidor A/D de resistencias ponderadas

From JavierValcarce.Eu

Jump to: navigation, search
This article is also available in english EN FLAG.PNG


Resumen
Este artículo habla sobre el convertidor digital/analógico de resistencias ponderadas (Binary-Weighted Resistors DAC), que es un tipo de convertidor muy simple y muy práctico cuando el número de bits es reducido.

En muchos de nuestros proyectos necesitaremos un Convertidor Digital Analógico (DAC - Digital Analog Converter) para generar una tensión analógica de salida a partir de unas muestras. Es necesario, por ejemplo, cuando queremos generar señales de vídeo analógico con un sistema digital.

Este DAC consisten en un conjunto de resistencias en paralelo de valores 1R, 2R, 4R... <math>2^{N-1}R</math>. Ojo, no es lo mismo que una escalera R-2R ("R-2R ladder"), son dos estructuras diferentes que sirven para lo mismo, cada una tiene sus ventajas y sus desventajas.[1]

Ejemplo

La mayoría de las tarjetas de desarrollo con FPGAs de iniciación (starter kits) vienen con un puerto VGA que tiene un DAC de 1-bit, por lo que sólo podemos obtener un máximo de <math>2^1x2^1x2^1=8</math> colores en pantalla. ¿Cómo hacer un DAC de N-bits para obtener <math>2^Nx2^Nx2^N</math> colores diferentes?

Como conocemos de antemano la impedancia de carga que vamos a conectar al DAC como es el caso (en un monitor VGA o en una TV es <math>Z_L=75\Omega</math>) podemos prescindir del amplificador operacional. El convertidor D/A consiste en una sencilla red de resistencias "1R-2R-4R-..." como la de la Fig 1. En la figura, <math>a_{N-1},\ a_{N-2},\ \ldots,\ a_1,\ a_0\,</math> representan los bits de la palabra código que vamos a convertir en una tensión analógica <math>V_o</math>. El bit <math>a_{N-1}</math> es el de mayor peso (MSB) y <math>a_0</math> el de menor (LSB). Si <math>a_i</math> vale "1" entonces en ese terminal hay <math>V_c</math> voltios (normalmente +5V ó +3.3V) y si vale "0" el terminal está a tierra (+0V).

Fig. 1 "D/A Converter with Binary-Weighted Resistor"
Fig. 2 Error en la tensión de salida al cambiar las resistencias calculadas por las de la serie E12

Las resistencias guardan entre si la relación:

<math>R_0 = 2R_1 = 4R_2 = \ldots = 2^{N-1}R_{N-1} </math>

El valor de <math>R_0</math> viene dado por:

<math>R_0 = Z_L (2^N-1) \left[\frac{V_c}{V_{max}} - 1 \right]\,</math>
donde

  • <math>N</math> es el número de bits del DAC
  • <math>Z_L</math> es la impedancia de carga conectada
  • <math>V_c</math> es la tensión del "1" lógico, la del "0" se supone que es 0V que es lo normal, si no es así entonces la ecuación anterior es incorrecta
  • <math>V_{max}</math> es la tensión máxima de salida, la que corresponde a la combinación binaria todo unos (111...111). El rango de salida será entonces (0V, <math>V_{max}</math>)

Por ejemplo, para un DAC de N = 4-bit, <math>Z_L=75\Omega</math> con <math>V_{max} = 0.7V</math> y el "1" lógico igual a <math>V_c=3.3V</math>, las resistencias (de precisión) que debemos usar son:

<math>R_0 = 4.17K</math>
<math>R_1 = R_0/2 = 2.09K</math>
<math>R_2 = R_0/4 = 1.04K</math>
<math>R_3 = R_0/8 = 0.52K</math>

Estos valores de resistencia no se fabrican comercialmente así que tendremos que aproximarlas por valores normalizados y eso introducirá un error en la tensión de salida. Si usamos por ejemplo resistencias de la serie E12 en lugar de las calculadas tendremos la curva de salida que muestra la Fig. 2.

Para obtener estas gráficas puede usar los scripts de Octave/Matlab DAC_design.m y DAC_out.m. Para obtener con exactitud del error, debemos medir con el polímetro los valores exactos de resistencia de estamos usando.

Construcción del circuito

Las resistencias están en serie con el cable

La forma normal y correcta de hacer el DAC sería en un circuito impreso con las resistencias, el conector VGA (hembra) y cable plano o bien una doble tira de postes acodados para conectar a la tarjeta de desarrollo. Igual que los módulos que nos vende el fabricante.

Hay, sin embargo, un apaño más sencillo y chapucero: soldar al conector VGA cables de conexión para placas de prototipos (breadboard) con las resistencias directamente en el cable. Este tipo de cable tiene la ventaja de que se puede insertar directamente en los conectores de expansión de la tarjeta. Funciona bien aunque conviene no moverlo demasiado porque se salen los cables.


Cartas de ajuste

Para comprobar que el circuito construido funciona bien:

  • vgadac_test1.vhd Circuito que genera una carta de ajuste consistente en 4 bandas de color R, G, B y grises con 16 niveles de intensidad en cada una (DAC de 4 bits), resolución 640x480.
  • vgadac_test2.vhd Circuito que genera una carta de ajuste consistente en un mosaico de 4096 colores (DAC de 4 bits), resolución 640x480.
  • vgadac_test.ucf Fichero de restricciones (formato ISE WebPack) adecuado para los los conectores de expansión que yo utilizo en mi tarjeta de desarrollo. Tendrás que modificarlo para adaptarlo a tu caso.

Nota: Los circuitos anteriores son simplemente circuitos de prueba y no están optimizados, el hw generado se podría simplificar bastante.

Si no conoces la impedancia de carga...

Si no conoces de antemano la impedancia de carga[2] que vas a conectar al DAC entonces necesitarás poner a continuación de la red de resistencias un amplificador operacional para adaptar impedancias. Todas las resistencias se conectan a la entrada de un amplificador operacional, conectado en modo sumador. Existen muchos CD/A ya integrados como por ejemplo el AD7303.

DAC Binary Weighted.png

Otro problema a tener en cuenta es que si la impedancia de carga consume mucha corriente, la etapa de salida del DAC puede saturarse y entonces los picos de la señal analógica de salida quedarían recortados (distorsión). En este caso tendrás que usar un amplificador de potencia. En la banda de audio y para potencias pequeñas (~1W) es muy típico usar el LM386.

Referencias


  1. LA estructura 1R-2R-4R es inviable cuando el número de bits es elevado porque requiere resistencias muy precisas y de valor muy elevado. En esos casos se suele usar la escalera R-2R
  2. Bien porque es, en principio, desconocida o porque que varía mucho con la frecuencia