domingo, 15 de abril de 2012

CONVERTIDOR DIGITAL A ANALÓGICO CON MODULO DAC


Un DAC ó convertidor digital a analógico es un circuito que es capaz de tomar un valor digital de “n” número de bits para luego entregar al usuario un valor de tipo analógico, uno de los aspectos fundamentales de este tipo de convertidores es la resolución la cual se puede definir como el cambio de voltaje que se presenta por cada cambio del valor digital.

La resolución de estos dispositivos está determinada por el numero de bits que toma en su parte digital, entre mayor sea el numero de bits mejor será la resolución de dicho convertidor. Otro factor que influye en la resolución del DAC es el voltaje al cual trabaja, o en otras palabras el voltaje máximo que va a entregar el convertidor en su parte analógica. Lo anterior se puede ver mejor en los siguientes ejemplos:


Donde:

V= Voltaje de convertidor (Máximo voltaje analógico a representar)
n= Numero de bits del convertidor.

Ejemplo:

Para un DAC de 8 Bits cuyo valor máximo analógico será 5 voltios


Para un DAC de 8 Bits cuyo valor máximo analógico será 3 voltios

Para un DAC de 9 Bits cuyo valor máximo analógico será 5 voltios


Para un DAC de 9 Bits cuyo valor máximo analógico será 3 voltios


La mayoría de este tipo de convertidores está construidos por medio de circuitos de resistencias tipo red R2R como el que se puede ver en la figura 1. También se pueden conseguir en el mercado circuitos integrados que cumplen la función de DAC como es el caso del DAC0800 el cual es un convertidor digital a análogo de 8 bits.

Figura 1 (DAC con red de resistencia R2R)

Sin embargo con los microcontroladores PSoC no se tiene la necesidad de recurrir a estos circuitos externos mencionados anteriormente, esto es debido a que PSoC gracias a sus bloques analógicos tiene la posibilidad de ofrecer módulos DAC de 6, 8 y 9 bits.

Estos módulos utilizan 2 bloques análogos de PSoC para el caso de los DAC de 8 y 9 bits ó un bloque para el caso de los DAC de 6 bits, en ninguno de los casos se utiliza bloques de tipo digital. Estos convertidores toman un código digital para luego entregar a la salida un voltaje que representa a ese código, el valor digital puede ser tomado directamente de uno de los puertos del microcontrolador en formato binario ó puede ser una variable con la cual se esté trabajando dentro del programa, el numero de muestras que pueden llegar a tomar estos módulos DAC es de 125k muestras por segundo.

Configuración modulo DAC:

Los aspectos que se van a tener en cuenta en esta publicación para la configuración del modulo DAC, son los aspectos mínimos para ponerlo en funcionamiento, razón por la cual se recomienda leer la hoja de datos que se puede encontrar desde PSoC Designer para así profundizar sobre características que pueden ser necesarias dependiendo de la aplicación que se piense desarrollar con el DAC.

Luego de agregar el modulo al proyecto se deben configurar los parámetros de los módulos los cuales son:

AnalogBus: Este parámetro indica el bus analógico al cual se va a conectar la salida de convertidor Digital-Analógico.

DataFormat: Este parámetro define el formato del valor digital con el que se va a trabajar el cual puede ser OffsetBinary, TwosComplement, TwoBitSignAndMagnitude.

Figura 2 (Configuración Parametros DAC8)
Luego de esto es necesario inicializar el modulo y ajustar la potencia del mismo en el archivo fuente de nuestra aplicación, esto se puede hacer mediante el comando DAC8_Start(x), donde el valor de “x” representa la potencia con la que se quiere configurar el modulo teniendo los siguientes valores posibles:

DAC8_OFF = 0
DAC8_LOWPOWER = 1
DAC8_MEDPOWER = 2
DAC8_FULLPOWER = 3

Por último el comando DAC8_WriteBlind(x) permite obtener a la salida del DAC el valor analógico del término digital que se quiere convertir, en este caso representado por la “x” que se encuentra en el comando.

Para intentar esclarecer un poco más las cosas en el siguiente código se puede observar una aplicación sencilla en la cual por el puerto 1 del microcontrolador PSoC se está tomando un dato digital (Binario) y luego se entrega el valor analógico.

//-----------------------------------------------------------------------
// C main line
//-----------------------------------------------------------------------

#include <m8c.h>      
#include "PSoCAPI.h"  

void main(void)
{
DAC8_1_Start(3); //se inicializa el modulos DAC8
while(1)
{
DAC8_1_WriteBlind(PRT1DR);/*El DAC toma el valor digital del puerto 1 y retorna el valor análogo por el pin que se haya configurado como salida analógica*/
}
}


Las configuraciones de los parámetros del modulo DAC8 para esta práctica son los que se mostraron anteriormente en la figura 2.

10 comentarios:

  1. hola Ivan:

    veo que su experiencia en PSoC es muy buena, y sinceramente lo felicito, los ejemplos aqui propuestos son bastante interesantes.

    aprovechando su conocimiento me gustaria preguntarle una inquietud: recientemente comence a trabajar con esta tecnologia, y buscando quemadores di con este

    http://www.dynamoelectronics.com/components/com_virtuemart/shop_image/product/PSoc_Gainer_BOar_4f3a80f5df261.png

    como puede ver es un quemador de psoc por USB, ahi mismo estan los planos incluso de la conexion entre el chip max232 y el psoc, recientemente pude adquirir una tarjeta ft232rl que me ahorra toda la conexion de condensadores y resistencias, pero no entiendo como hacer la comunicacion con el psoc, y ademas, con que programa lo "quemaria" (PSoC designer, PSoC Programmer), le agradezco si puede colaborarme, y de antemano mil gracias por su atencion, su pagina enserio es muy buena...

    aqui le dejo ademas el plano de la tarjeta ft232rl que le nombro anteriormente

    http://www.sigmaelectronica.net/manuals/Tarjeta%20FT232RL.pdf

    ResponderEliminar
    Respuestas
    1. Hola, primero que todo que pena por la demora con la respuesta y muchas gracias por visitar el Blog. En lo referente al producto sobre el cual está preguntando, según lo que pude leer este en si no es un programador ó quemador de microcontroladores PSoC, sino que es una tarjeta de desarrollo para solamente programar y hacer pruebas con el CY8C29466 que viene integrado con la tarjeta en mención.

      Voy a intentar explicarme mejor, según entiendo por lo que pude ver en la página del vendedor, con esta tarjeta no podría programar otros PSoC diferentes al que viene integrado a la tarjeta, ya que no es un programador como tal. Lo que sí se puede hacer es cargar programas y hacer pruebas con este CY8C29466 integrado a la “PSoC Gainer Board de desarrollo” ya que este viene pre-programado con un bootloader el cual es un programa que se aloja en la una parte de la memoria del micro y que permite cargar otros programas por medio de una señal serial, es por esto que esta tarjeta tiene integrado el FT232 para hacer la interfaz USB – UART y así cargar el programa por medio del bootloader que ya había comentado.

      Espero que la respuesta sea de utilidad y cualquier otra inquietud con gusto le responderé.

      Eliminar
  2. salut, si vous pouvez me aider, j'ai la carte CY3210 avec PIC CY8C27443 mais la problème comment programmer un convertisseur analogique numérique et la sortie doit être sur un LED de carte.
    et merci d'avance

    ResponderEliminar
    Respuestas
    1. Hola, primero que todo muchas gracias por visitar el blog, en cuanto a la pregunta que pena con usted pero no logro entender cual es el problema, no se si lo que tiene es una entrada analógica y quiere una salida digital o viceversa, me gustaría si es posible que me aclarara un poco mejor cual es el inconveniente para así intentar ofrecerle una mejor respuesta.

      Eliminar
    2. Este comentario ha sido eliminado por el autor.

      Eliminar
  3. salut, si vous m'aider, j'utilise une carte CY3210 avec PIC CY8C27443,on me donner de fonctionner un convertisseur analogique numérique et d'allumer les 4 LED sur port comme vérification de la fonctionnement de ADC, j'ne connus pas quels sont les module d’utilisateurs que j'utilise et interconnections entre eux et le programme que j'employé sur cette carte.
    merci d'avance.

    ResponderEliminar
    Respuestas
    1. Hola, primero que todo que pena por la demora con la respuesta, si lo que necesita es utilizar un convertidor analógico a digital (ADC), una de las opciones a utilizar es el modulo ADCINC el cual se presenta en una de las entradas de este blog, a continuación le dejo el link de esa entrada.

      http://psocenespanol.blogspot.com/2012/05/convertidor-analogo-digital-con-modulo.html

      El modulo ADCINC le sirve para conversiones con una frecuencia de muestreo baja, si requiere hacer una conversión con una velocidad de muestreo mas alta puede utilizar el modulo DelSig cuya configuración es similar a la del modulo ADCINC.

      Espero que la respuesta sea de utilidad y cualquier otra inquietud con gusto le responderé.

      Eliminar
  4. Felicidades por el blog, como estudiante encuentro algunos temas que me ayudan para la materia. Actualmente estoy desarrollando una aplicación que reconstruya una señal analógica a partir de la salida de un ADC, de tal manera que el proceso queda ADC-DAC, hasta ahorita si me hace la conversión pero aún la señal de salida no se parece a la de entrada, al parecer es por la configuración de los recursos globales, así que les pediría amablemente, si pudieran auxiliarme a saber que debo de tomar en cuenta en los recursos globales para que esto funcione. Saludos.

    ResponderEliminar
    Respuestas
    1. Buen día y gracias por visitar el blog, es muy gratificante saber que el trabajo esta siendo de ayuda. En cuanto al problema que tiene con la practica de conversión ADC-DAC puede ser que los tiempos de muestreo de los módulos no sean lo suficientemente rápidos para poder reconstruir la señal original de manera adecuada.

      Entonces puede probar aumentando estos tiempos de muestreo, esto lo puede hacer aumentando la velocidad de los relojes con los que alimenta los módulos (VC1, VC2, VC3) pero hay que tener en cuenta que estos módulos tienen ciertas limitaciones en cuanto a la velocidad de los relojes que los alimentan. Otra opción es si esta utilizando el modulo ADCINC como convertidor análogo a digital, cambiar este modulo por otro que cumpla la misma función pero que permita utilizar tiempos de muestreo mayores.

      Espero que esto le haya sido de ayuda y cualquier otra inquietud con mucho gusto le colaborare desde que se encuentre a mi alcance.

      Eliminar
  5. muy buen blog,
    tengo una pregunta, tengo guardar cuatro sonido de una voz en un psoc y despues emitir por uno de los pines, alguien me podria dar auna guia de como podria hacer esto, gracias.

    ResponderEliminar