- Módulo MCP4725 DAC (conversor digital para analógico)
- Comunicação I2C em MCP4725 DAC
- Componentes necessários
- Diagrama de circuito
- Programação DAC Arduino
- Conversão digital para analógico usando MCP4725 e Arduino
Todos nós sabemos que os Microcontroladores funcionam apenas com valores digitais, mas no mundo real temos que lidar com sinais analógicos. É por isso que o ADC (Conversores Analógico para Digital) existe para converter valores analógicos do mundo real em formato digital para que os microcontroladores possam processar os sinais. Mas e se precisarmos de sinais analógicos de valores digitais, então aí vem o DAC (Conversor Digital para Analógico).
Um exemplo simples de conversor digital para analógico é gravar uma música em estúdio onde um cantor está usando o microfone e cantando uma música. Essas ondas sonoras analógicas são convertidas em formato digital e depois armazenadas em um arquivo de formato digital e, quando a música é tocada usando o arquivo digital armazenado, esses valores digitais são convertidos em sinais analógicos para saída de alto-falante. Portanto, neste sistema o DAC é usado.
O DAC pode ser usado em muitas aplicações, como controle de motor, controle de brilho das luzes LED, amplificador de áudio, codificadores de vídeo, sistemas de aquisição de dados etc.
Em muitos microcontroladores, há um DAC interno que pode ser usado para produzir saída analógica. Mas os processadores Arduino, como ATmega328 / ATmega168, não possuem DAC embutido. O Arduino tem o recurso ADC (conversor analógico para digital), mas não tem DAC (conversor digital para analógico). Ele tem um DAC de 10 bits no ADC interno, mas este DAC não pode ser usado como autônomo. Portanto, aqui neste tutorial do Arduino DAC, usamos uma placa adicional chamada Módulo DAC MCP4725 com Arduino.
Módulo MCP4725 DAC (conversor digital para analógico)
O MCP4725 IC é um módulo conversor digital para analógico de 12 bits que é usado para gerar tensões analógicas de saída de (0 a 5 V) e é controlado por meio de comunicação I2C. Ele também vem com memória interna não volátil EEPROM.
Este IC tem resolução de 12 bits. Isso significa que usamos (0 a 4096) como entrada para fornecer a saída de tensão em relação à tensão de referência. A tensão de referência máxima é 5V.
Fórmula para calcular a tensão de saída
Tensão O / P = (Tensão de Referência / Resolução) x Valor Digital
Por exemplo, se usarmos 5V como tensão de referência e vamos assumir que o valor digital é 2048. Então, para calcular a saída DAC.
Tensão O / P = (5/4096) x 2048 = 2,5 V
Pinagem de MCP4725
Abaixo está a imagem de MCP4725 com os nomes dos pinos indicando claramente.
Pinos de MCP4725 |
Usar |
FORA |
Tensão Analógica de Saídas |
GND |
GND para saída |
SCL |
Linha I2C Serial Clock |
SDA |
Linha de dados serial I2C |
VCC |
Tensão de referência de entrada 5V ou 3,3V |
GND |
GND para entrada |
Comunicação I2C em MCP4725 DAC
Este DAC IC pode ser conectado a qualquer microcontrolador usando a comunicação I2C. A comunicação I2C requer apenas dois fios SCL e SDA. Por padrão, o endereço I2C para MCP4725 é 0x60 ou 0x61 ou 0x62. Para mim é 0x61. Usando o barramento I2C, podemos conectar vários MCP4725 DAC IC. A única coisa é que precisamos mudar o endereço I2C do IC. A comunicação I2C no Arduino já foi explicada em detalhes no tutorial anterior.
Neste tutorial, conectaremos um DAC IC MCP4725 com o Arduino Uno e forneceremos o valor de entrada analógica ao pino A0 do Arduino usando um potenciômetro. Em seguida, o ADC será usado para converter o valor analógico em formato digital. Depois disso, esses valores digitais são enviados para MCP4725 via barramento I2C para serem convertidos em sinais analógicos usando o DAC MCP4725 IC. O pino A1 do Arduino é usado para verificar a saída analógica do MCP4725 do pino OUT e, finalmente, exibir os valores e tensões ADC e DAC no display LCD 16x2.
Componentes necessários
- Arduino Nano / Arduino Uno
- Módulo de display LCD 16x2
- MCP4725 DAC IC
- Potenciômetro de 10k
- Tábua de pão
- Jumper Wires
Diagrama de circuito
A tabela abaixo mostra a conexão entre MCP4725 DAC IC, Arduino Nano e multímetro
MCP4725 |
Arduino Nano |
Multímetro |
SDA |
A4 |
NC |
SCL |
A5 |
NC |
A0 ou OUT |
A1 |
+ ve terminal |
GND |
GND |
-ve terminal |
VCC |
5V |
NC |
Conexão entre LCD 16x2 e Arduino Nano
LCD 16x2 |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Do pino central do potenciômetro para ajustar o contraste do LCD |
RS |
D2 |
RW |
GND |
E |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
UMA |
+ 5V |
K |
GND |
Um potenciômetro é usado com o pino central conectado à entrada analógica A0 do Arduino Nano, o pino esquerdo conectado ao GND e o pino mais à direita conectado a 5V do Arduino.
Programação DAC Arduino
O código Arduino completo para o tutorial DAC é fornecido no final com um vídeo de demonstração. Aqui explicamos o código linha por linha.
Em primeiro lugar, incluir a biblioteca para I2C e LCD usando wire.h e liquidcrystal.h biblioteca.
#incluir
Em seguida, defina e inicialize os pinos do LCD de acordo com os pinos que conectamos com o Arduino Nano
LiquidCrystal lcd (2,3,4,5,6,7); // Definir os pinos RS, E, D4, D5, D6, D7 do display LCD
Em seguida, defina o endereço I2C do MCP4725 DAC IC
# define MCP4725 0x61
Na configuração vazia ()
Comece primeiro a comunicação I2C nos pinos A4 (SDA) e A5 (SCL) do Arduino Nano
Wire.begin (); // Inicia a comunicação I2C
Em seguida, defina o display LCD no modo 16x2 e exiba uma mensagem de boas-vindas.
lcd.begin (16,2); // Define o LCD no modo 16X2 lcd.print ("CIRCUIT DIGEST"); atraso (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("Arduino"); lcd.setCursor (0,1); lcd.print ("DAC com MCP4725"); atraso (2000); lcd.clear ();
No loop vazio ()
1. Primeiro no buffer coloque o valor do byte de controle (0b01000000)
(010 - define MCP4725 no modo de gravação)
buffer = 0b01000000;
2. A instrução a seguir lê o valor analógico do pino A0 e o converte em valores digitais (0-1023). O Arduino ADC tem resolução de 10 bits, então multiplique-o por 4 e dá: 0-4096, já que o DAC tem resolução de 12 bits.
adc = analogRead (A0) * 4;
3. Esta declaração deve encontrar a tensão do valor de entrada do ADC (0 a 4096) e a tensão de referência como 5V
float ipvolt = (5,0 / 4096,0) * adc;
4. Abaixo da primeira linha coloca os valores dos bits mais significativos no buffer, deslocando 4 bits para a direita na variável ADC, e a segunda linha coloca os valores dos bits menos significativos no buffer, deslocando 4 bits para a esquerda na variável ADC.
buffer = adc >> 4; buffer = adc << 4;
5. A declaração a seguir lê a tensão analógica de A1 que é a saída DAC (pino de SAÍDA do DAC IC MCP4725). Este pino também pode ser conectado ao multímetro para verificar a tensão de saída. Aprenda a usar o multímetro aqui.
sem sinal int analogread = analogRead (A1) * 4;
6. Além disso, o valor de tensão da variável analogread é calculado usando a fórmula abaixo
float opvolt = (5.0 / 4096.0) * analogread;
7. A seguinte declaração é usada para iniciar a transmissão com MCP4725
Wire.beginTransmission (MCP4725);
Envia o byte de controle para I2C
Wire.write (buffer);
Envia o MSB para I2C
Wire.write (buffer);
Envia o LSB para I2C
Wire.write (buffer);
Termina a transmissão
Wire.endTransmission ();
Agora, finalmente, exiba esses resultados na tela LCD 16x2 usando lcd.print ()
lcd.setCursor (0,0); lcd.print ("A IP:"); lcd.print (adc); lcd.setCursor (10,0); lcd.print ("V:"); lcd.print (ipvolt); lcd.setCursor (0,1); lcd.print ("D OP:"); lcd.print (analogread); lcd.setCursor (10,1); lcd.print ("V:"); lcd.print (opvolt); atraso (500); lcd.clear ();
Conversão digital para analógico usando MCP4725 e Arduino
Depois de completar todas as conexões do circuito e fazer o upload do código para o Arduino, varie o potenciômetro e observe a saída no LCD . A primeira linha do LCD mostrará o valor e a tensão de entrada do ADC, e a segunda linha mostrará o valor e a tensão de saída DAC.
Você também pode verificar a tensão de saída conectando um multímetro aos pinos OUT e GND do MCP4725.
É assim que podemos converter valores digitais em analógicos, fazendo a interface do módulo DAC MCP4725 com o Arduino.