- MCP4725 DAC-modul (digital til analog omformer)
- I2C-kommunikasjon i MCP4725 DAC
- Komponenter kreves
- Kretsdiagram
- DAC Arduino programmering
- Digital til analog konvertering ved hjelp av MCP4725 og Arduino
Vi vet alle at mikrokontrollerne bare fungerer med digitale verdier, men i den virkelige verden må vi håndtere analoge signaler. Derfor er ADC (analoge til digitale omformere) der for å konvertere analoge verdier i den virkelige verden til digital form slik at mikrokontrollere kan behandle signalene. Men hva om vi trenger analoge signaler fra digitale verdier, så her kommer DAC (Digital til Analog Converter).
Et enkelt eksempel for Digital til Analog-omformer er å spille inn en sang i studio der en kunstnersanger bruker mikrofon og synger en sang. Disse analoge lydbølgene blir konvertert til digital form og deretter lagret i en fil i digitalt format, og når sangen spilles ved hjelp av den lagrede digitale filen, konverteres de digitale verdiene til analoge signaler for høyttalerutgang. Så i dette systemet brukes DAC.
DAC kan brukes i mange applikasjoner som motorstyring, kontrolllysstyrke på LED-lysene, lydforsterker, videokodere, datainnsamlingssystemer etc.
I mange mikrokontrollere er det en intern DAC som kan brukes til å produsere analog utgang. Men Arduino-prosessorer som ATmega328 / ATmega168 har ikke DAC innebygd. Arduino har ADC-funksjon (Analog til Digital Converter), men den har ingen DAC (Digital to Analog Converter). Den har en 10-biters DAC i intern ADC, men denne DAC kan ikke brukes som frittstående. Så her i denne Arduino DAC-opplæringen bruker vi et ekstra kort kalt MCP4725 DAC-modul med Arduino.
MCP4725 DAC-modul (digital til analog omformer)
MCP4725 IC er en 12-bit digital til analog omformermodul som brukes til å generere analoge utgangsspenninger fra (0 til 5V) og den styres ved hjelp av I2C-kommunikasjon. Den leveres også ombord med ikke-flyktig minne EEPROM.
Denne IC har 12-biters oppløsning. Dette betyr at vi bruker (0 til 4096) som inngang for å levere spenningsutgangen med hensyn til referansespenning. Maks referansespenning er 5V.
Formel for å beregne utgangsspenning
O / P-spenning = (referansespenning / oppløsning) x digital verdi
For eksempel hvis vi bruker 5V som referansespenning og la oss anta at digital verdi er 2048. Så for å beregne DAC-utgangen.
U / P-spenning = (5/4096) x 2048 = 2,5V
Pinout av MCP4725
Nedenfor er bildet av MCP4725 med tydelig angivende pin-navn.
Pins av MCP4725 |
Bruk |
UTE |
Utganger Analog spenning |
GND |
GND for utgang |
SCL |
I2C seriell klokkelinje |
SDA |
I2C Seriell datalinje |
VCC |
Inngangsreferansespenning 5V eller 3,3V |
GND |
GND for inngang |
I2C-kommunikasjon i MCP4725 DAC
Denne DAC IC kan grensesnittes med hvilken som helst mikrokontroller som bruker I2C-kommunikasjonen. I2C-kommunikasjon krever bare to ledninger SCL og SDA. Som standard er I2C-adressen for MCP4725 0x60 eller 0x61 eller 0x62. For meg er det 0x61. Ved hjelp av I2C-buss kan vi koble til flere MCP4725 DAC IC. Eneste er at vi trenger å endre I2C-adressen til IC. I2C-kommunikasjon i Arduino er allerede forklart i detalj i forrige opplæring.
I denne opplæringen kobler vi en MCP4725 DAC IC med Arduino Uno og gir analog inngangsverdi til Arduino pin A0 ved hjelp av et potensiometer. Da vil ADC brukes til å konvertere analog verdi til digital form. Deretter sendes disse digitale verdiene til MCP4725 via I2C-buss for å konverteres til analoge signaler ved bruk av DAC MCP4725 IC. Arduino pin A1 brukes til å kontrollere den analoge utgangen til MCP4725 fra pin OUT og til slutt vise både ADC & DAC-verdiene og spenningene på 16x2 LCD-skjermen.
Komponenter kreves
- Arduino Nano / Arduino Uno
- 16x2 LCD-skjermmodul
- MCP4725 DAC IC
- 10k potensiometer
- Brettbrett
- Jumper Wires
Kretsdiagram
Tabellen nedenfor viser forbindelsen mellom MCP4725 DAC IC, Arduino Nano og Multi-meter
MCP4725 |
Arduino Nano |
Multimeter |
SDA |
A4 |
NC |
SCL |
A5 |
NC |
A0 eller UT |
A1 |
+ ve terminal |
GND |
GND |
-ve terminal |
VCC |
5V |
NC |
Forbindelse mellom 16x2 LCD og Arduino Nano
LCD 16x2 |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Fra Potentiometer Center Pin for å justere kontrasten på LCD-skjermen |
RS |
D2 |
RW |
GND |
E |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
EN |
+ 5V |
K |
GND |
Et potensiometer brukes med midtpinne koblet til A0 analog inngang på Arduino Nano, Venstre pinne koblet til GND og høyre høyre pinne koblet til 5V Arduino.
DAC Arduino programmering
Komplett Arduino-kode for DAC-opplæring er gitt til slutt med en demonstrasjonsvideo. Her har vi forklart koden linje for linje.
Først må du inkludere biblioteket for I2C og LCD ved hjelp av wire.h og liquidcrystal.h- biblioteket.
#inkludere
Neste definere og initialisere LCD-pinnene i henhold til pinnene vi har koblet til Arduino Nano
LiquidCrystal lcd (2,3,4,5,6,7); // Definer LCD-skjermpinner RS, E, D4, D5, D6, D7
Definer deretter I2C-adressen til MCP4725 DAC IC
#definer MCP4725 0x61
I ugyldig oppsett ()
Først begynner I2C-kommunikasjonen ved pinnene A4 (SDA) og A5 (SCL) i Arduino Nano
Wire.begin (); // Begynner I2C-kommunikasjonen
Sett deretter LCD-skjermen i 16x2-modus og vis en velkomstmelding.
lcd.begin (16,2); // Setter LCD i 16X2-modus lcd.print ("CIRCUIT DIGEST"); forsinkelse (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("Arduino"); lcd.setCursor (0,1); lcd.print ("DAC med MCP4725"); forsinkelse (2000); lcd.clear ();
I tomrommet ()
1. Først i buffer setter du kontrollbyteverdien (0b01000000)
(010-setter MCP4725 i skrivemodus)
buffer = 0b01000000;
2. Følgende uttalelse leser den analoge verdien fra pin A0 og konverterer den til digitale verdier (0-1023). Arduino ADC er 10-biters oppløsning, så multipliser den med 4 gir: 0-4096, da DAC er 12-biters oppløsning.
adc = analogRead (A0) * 4;
3. Denne uttalelsen er å finne spenningen fra ADC-inngangsverdien (0 til 4096) og referansespenningen som 5V
flyte ipvolt = (5.0 / 4096.0) * adc;
4. Under første linje setter de mest betydningsfulle bitverdiene i buffer ved å skifte 4 bits til høyre i ADC-variabelen, og den andre linjen plasserer de minst signifikante bitverdiene i buffer ved å skifte 4 bits til venstre i ADC-variabelen.
buffer = adc >> 4; buffer = adc << 4;
5. Følgende uttalelse leser analog spenning fra A1 som er DAC-utgangen (MCP4725 DAC ICs OUTPUT-pin). Denne pinnen kan også kobles til multimeter for å kontrollere utgangsspenningen. Lær hvordan du bruker multimeter her.
usignert int analogread = analogRead (A1) * 4;
6. Videre beregnes spenningsverdien fra den variable analoglesen med formelen nedenfor
float opvolt = (5.0 / 4096.0) * analogles;
7. Følgende uttalelse brukes til å starte overføringen med MCP4725
Wire.beginTransmission (MCP4725);
Sender kontrollbyte til I2C
Wire.write (buffer);
Sender MSB til I2C
Wire.write (buffer);
Sender LSB til I2C
Wire.write (buffer);
Avslutter overføringen
Wire.endTransmission ();
Nå viser du endelig resultatene i 16x2 LCD-skjermen ved hjelp av 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 (analoglesing); lcd.setCursor (10,1); lcd.print ("V:"); lcd.print (opvolt); forsinkelse (500); lcd.clear ();
Digital til analog konvertering ved hjelp av MCP4725 og Arduino
Etter å ha fullført alle kretsforbindelsene og lastet opp koden til Arduino, varierer du potensiometeret og ser på utgangen på LCD . Første linje på LCD-skjermen viser inngangs-ADC-verdien og spenningen, og den andre linjen viser utgangs-DAC-verdien og spenningen.
Du kan også sjekke utgangsspenningen ved å koble et multimeter til OUT- og GND-pinnen på MCP4725.
Slik kan vi konvertere digitale verdier til Analog ved å koble DAC-modulen MCP4725 til Arduino.