salida-analogica-real-con-arduino-y-dac-de-12bits-mcp4725

Salida analógica real con Arduino y DAC de 12bits MCP4725

¿Qué es el MCP4725?

El MCP4725 es un DAC de 12 bits, es decir, un dispositivo que permite obtener una señal de tensión analógica desde un procesador digital como Arduino.

Cuando vimos las salidas analógicas vimos que, en realidad, estas proporcionan una señal PWM entre GND y Vcc. Aunque apliquemos un filtro RC, no conseguiremos una auténtica señal analógica de tensión.

En su lugar, un DAC ideal generaría una señal es la que la salida generada adopte cualquier valor intermedio entre GND y Vcc, generando una auténtica analógica.

Sin embargo los DAC reales no son capaces de adoptar cualquier valor de tensión, si no que la salida está constituida en N etapas , por lo que proporcionan una señal analógica discretizada de 2^N niveles.

El MCP4725 se controla por I2C por lo que es sencillo realizar su lectura. Dispone de dos posibles direcciones, que se elige mediante la conexión del pin ADDR.

También incorpora una memoria EEPROM que permite que mantenga el nivel de tensión incluso después de un corte de alimentación.

La tensión de alimentación del MCP4725 es de 2.7V a 5.5. La tensión máxima que puede proporcionar es Vcc. Alimentado a una tensión de 5V sus 4096 niveles (12 bits) suponen una precisión de, aproximadamente, 1mV.

La corriente máxima que puede proporcionar es de 25mA. Es una intensidad reducida pero, por otro lado, similar a la de una salida de Arduino. El tiempo de cambio de salida típico es de 6 µs.

El MCP4725 puede ser útil en cualquier tipo de proyecto que requiera la generación de una auténtica señal analógica en lugar de una PWM como, por ejemplo, para alimentar dispositivos especialmente sensibles, calibración de sensores, sistemas de adquisición de datos, o generadores de funciones como ondas triangulares o ondas.

Precio

Los DAC como el MCP4725 son dispositivos baratos. Podemos encontrarlos por 0.70€ buscando en vendedores internacionales de eBay o AliExpress.

arduino-dac-12bits-mcp4725-componente

Esquema montaje

La conexión es sencilla, simplemente alimentamos el módulo desde Arduino mediante GND y 5V y conectamos el pin SDA y SCL de Arduino con los pines correspondientes del sensor.

arduino-dac-12bits-mcp4725-esquema

Mientras que la conexión vista desde el lado de Arduino quedaría así.

arduino-dac-12bits-mcp4725-conexion

En Arduino Uno, Nano y Mini Pro, SDA es el pin A4 y el SCK el pin A5. Para otros modelos de Arduino consultar el esquema patillaje correspondiente.

Ejemplos de código

Para realizar la lectura del MCP4725 usaremos la librería desarrollada por Adafruit, disponible en https://github.com/adafruit/Adafruit_MCP4725.

La librería proporciona ejemplos de código, que resulta aconsejable revisar. El siguiente ejemplo es una modificación de los disponibles en la librería, que muestra el uso de las funciones generando una onda triangular con el MCP4725.

#include <Wire.h>
#include <Adafruit_MCP4725.h>

Adafruit_MCP4725 dac;

void setup(void) 
{
  dac.begin(0x60);
}

void loop(void) {
    uint32_t counter;
    for (counter = 0; counter < 4095; counter++)
    {
      dac.setVoltage(counter, false);
    }
    for (counter = 4095; counter > 0; counter--)
    {
      dac.setVoltage(counter, false);
    }
}

Descarga el código

Todo el código de esta entrada está disponible para su descarga en Github. github-full