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


arduino-dac-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.

Anuncio:

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 este enlace.

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.

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección tutoriales de Arduino

Anuncio:

Previous Entrada analógica de 16 bits con Arduino y ADC ADS1115
Next Resistencia variable con Arduino y Digipot MCP41XXX
1000
4 Comment threads
1 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
4 Comment authors
newest oldest
Javier Pitarch

Buenas noches.
Excelentes tutoriales. Muy amenos y bien explicados. Respecto al post actual, una duda. ¿Sería posible conectar varios MCP4725 a una placa? Gracias.

dave

Claro, pero dependerá del modelo, en el arduino UNO por ejemplo, tengo entendido que en condiciones normales se puede conectar hasta 2 dispositivos en sus puertos SDA/SCL

alexis

hola Luis, me parece fantástico tu aporte y es por eso que te pido tu ayuda, necesito convertir una salida analoga (PWM) de arduino a analoga DC con un DAC. como se deberia hacer?

Saber más Arduino Avanzado 2018 | Aprendiendo Arduino

[…] Tutorial Luis Llamas: https://luisllamas.es/salida-analogica-real-con-arduino-y-dac-de-12bits-mcp4725/ […]

Victor

Buena explicación, una pregunta: ¿Tienes alguna sugerencia para hacer lo mismo pero con una onda senoidal?