- Componentes necessários
- Módulo MCP4725 DAC (conversor digital para analógico)
- Comunicação I2C em MCP4725
- Diagrama de Circuito e Explicação
- Programação STM32F103C8 para conversão digital para analógico
- Testando o DAC com STM32
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.
Já conectamos o módulo DAC MCP4725 com o Arduino. Hoje usaremos o mesmo MCP4725 DAC IC para projetar um conversor digital para analógico usando o microcontrolador STM32F103C8.
Componentes necessários
- STM32F103C8
- MCP4725 DAC IC
- Potenciômetro de 10k
- Visor LCD 16x2
- Tábua de pão
- Fios de conexão
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 MCP4725Abaixo 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
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. Siga o link para saber mais sobre a comunicação I2C em STM32F103C8.
Pinos I2C em STM32F103C8:
SDA: PB7 ou PB9, PB11.
SCL: PB6 ou PB8, PB10.
Diagrama de Circuito e Explicação
Conexões entre STM32F103C8 e LCD 16x2
Pin no LCD |
Nome do pino LCD |
Nome do pino STM32 |
1 |
Ground (Gnd) |
Solo (G) |
2 |
VCC |
5V |
3 |
VEE |
Pino do centro do potenciômetro para contraste |
4 |
Register Select (RS) |
PB11 |
5 |
Leitura / Escrita (RW) |
Solo (G) |
6 |
Habilitar (EN) |
PB10 |
7 |
Bit de dados 0 (DB0) |
Sem conexão (NC) |
8 |
Bit de dados 1 (DB1) |
Sem conexão (NC) |
9 |
Bit de dados 2 (DB2) |
Sem conexão (NC) |
10 |
Dados Bit 3 (DB3) |
Sem conexão (NC) |
11 |
Dados Bit 4 (DB4) |
PB0 |
12 |
Bit de dados 5 (DB5) |
PB1 |
13 |
Bit de dados 6 (DB6) |
PC13 |
14 |
Dados Bit 7 (DB7) |
PC14 |
15 |
LED positivo |
5V |
16 |
LED negativo |
Solo (G) |
Conexão entre MCP4725 DAC IC e STM32F103C8
MCP4725 |
STM32F103C8 |
Multímetro |
SDA |
PB7 |
NC |
SCL |
PB6 |
NC |
FORA |
PA1 |
Sonda Positiva |
GND |
GND |
Sonda Negativa |
VCC |
3,3 V |
NC |
Um potenciômetro também está conectado, com o pino central conectado à entrada analógica PA1 (ADC) do STM32F10C8, o pino esquerdo conectado ao GND e o pino mais à direita conectado a 3,3 V do STM32F103C8.
Neste tutorial, conectaremos um DAC IC MCP4725 com STM32 e usaremos um potenciômetro de 10k para fornecer o valor de entrada analógica para o pino PA0 do ADC STM32. Em seguida, use o ADC para converter o valor analógico em formato digital. Depois disso, envie esses valores digitais para MCP4725 via barramento I2C. Em seguida, converta esses valores digitais em analógicos usando o DAC MCP4725 IC e, em seguida, use outro pino ADC PA1 de STM32 para verificar a saída analógica de MCP4725 do pino OUT. Por fim, exiba os valores ADC e DAC com tensões no display LCD 16x2.
Programação STM32F103C8 para conversão digital para analógico
Um programador FTDI não é necessário agora para fazer upload do código para STM32F103C8. Basta conectá-lo ao PC via porta USB do STM32 e começar a programar com ARDUINO IDE. Visite este link para saber mais sobre como programar seu STM32 no Arduino IDE. O programa completo para este tutorial STM32 DAC é fornecido no final.
Primeiro inclua a biblioteca para I2C e LCD usando a biblioteca wire.h, SoftWire.h e liquidcrystal.h. Saiba mais sobre I2C no microcontrolador STM32 aqui.
#incluir
Em seguida, defina e inicialize os pinos do LCD de acordo com os pinos do LCD conectados ao STM32F103C8
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Em seguida, defina o endereço I2C do MCP4725 DAC IC. O endereço I2C padrão MCP4725 DAC é 0x60
#define MCP4725 0x60
Na configuração vazia ()
Comece primeiro a comunicação I2C nos pinos PB7 (SDA) e PB6 (SCL) de STM32F103C8.
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); lcd.print ("CIRCUITO DIGEST"); atraso (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("STM32F103C8"); 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 PA0 e o converte em valor digital variando de 0 a 4096, já que ADC tem resolução de 12 bits e armazena na variável adc .
adc = analogRead (PA0);
3. Esta declaração a seguir é uma fórmula usada para calcular a tensão do valor de entrada do ADC (0 a 4096) com a tensão de referência de 3,3V.
float ipvolt = (3,3 / 4096,0) * adc;
4. Coloque os valores dos bits mais significativos no buffer, deslocando 4 bits para a direita na variável ADC, e 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 instrução a seguir lê o valor analógico do pino ADC PA1 de STM32 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.
sem sinal int analogread = analogRead (PA1);
6. Além disso, o valor da tensão da variável analogread é calculado usando a fórmula com a seguinte declaração.
float opvolt = (3,3 / 4096,0) * analogread;
7. No mesmo loop void (), existem algumas outras instruções que são explicadas abaixo
Começa 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 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 ();
Testando o DAC com STM32
Quando variamos o valor e a tensão de entrada do ADC girando o potenciômetro, o valor e a tensão de saída do DAC também mudam. Aqui, os valores de entrada são mostrados na primeira linha e os valores de saída na segunda linha do display LCD. Um multímetro também é conectado ao pino de saída MCP4725 para verificar a tensão analógica.
O código completo com vídeo de demonstração é fornecido abaixo.