- MCP4725 DAC-modul (digital til analog konverter)
- I2C-kommunikation i MCP4725 DAC
- Komponenter, der kræves
- Kredsløbsdiagram
- DAC Arduino programmering
- Digital til analog konvertering ved hjælp af MCP4725 og Arduino
Vi ved alle, at mikrokontrollerne kun arbejder med digitale værdier, men i den virkelige verden skal vi håndtere analoge signaler. Derfor er ADC (analoge til digitale konverterere) der for at konvertere analoge værdier i den virkelige verden til digital form, så mikrocontrollere kan behandle signalerne. Men hvad hvis vi har brug for analoge signaler fra digitale værdier, så her kommer DAC (Digital til Analog Converter).
Et simpelt eksempel på Digital til Analog konverter er at optage en sang i studiet, hvor en kunstnersanger bruger mikrofon og synger en sang. Disse analoge lydbølger konverteres til digital form og gemmes derefter i en fil i digitalt format, og når sangen afspilles ved hjælp af den gemte digitale fil, konverteres disse digitale værdier til analoge signaler til højttaleroutput. Så i dette system bruges DAC.
DAC kan bruges i mange applikationer såsom motorkontrol, lysstyrke på LED-lys, lydforstærker, videokodere, dataopsamlingssystemer osv.
I mange mikrokontroller er der en intern DAC, der kan bruges til at producere analog udgang. Men Arduino-processorer som ATmega328 / ATmega168 har ikke DAC indbygget. Arduino har ADC-funktion (Analog til Digital Converter), men den har ingen DAC (Digital til Analog Converter). Den har en 10-bit DAC i intern ADC, men denne DAC kan ikke bruges som enkeltstående. Så her i denne Arduino DAC-tutorial bruger vi et ekstra kort kaldet MCP4725 DAC-modul med Arduino.
MCP4725 DAC-modul (digital til analog konverter)
MCP4725 IC er et 12-bit digitalt til analogt konvertermodul, der bruges til at generere analoge udgangsspændinger fra (0 til 5V), og det styres ved hjælp af I2C-kommunikation. Den leveres også med EEPROM om ikke-flygtig hukommelse.
Denne IC har 12-bit opløsning. Dette betyder, at vi bruger (0 til 4096) som input til at levere spændingsoutputtet i forhold til referencespænding. Maks. Referencespænding er 5V.
Formel til beregning af udgangsspænding
O / P spænding = (reference spænding / opløsning) x digital værdi
For eksempel hvis vi bruger 5V som referencespænding, og lad os antage, at den digitale værdi er 2048. Så for at beregne DAC-output.
O / P spænding = (5/4096) x 2048 = 2,5V
Pinout af MCP4725
Nedenfor er billedet af MCP4725 med tydeligt angivende pinnavne.
Stifter af MCP4725 |
Brug |
UD |
Udgange analog spænding |
GND |
GND for output |
SCL |
I2C seriel ur linje |
SDA |
I2C seriel datalinje |
VCC |
Indgangsspænding 5V eller 3,3V |
GND |
GND til input |
I2C-kommunikation i MCP4725 DAC
Denne DAC IC kan være grænseflade med enhver mikrocontroller, der bruger I2C-kommunikationen. I2C-kommunikation kræver kun to ledninger SCL og SDA. Som standard er I2C-adressen til MCP4725 0x60 eller 0x61 eller 0x62. For mig er det 0x61. Ved hjælp af I2C-bus kan vi forbinde flere MCP4725 DAC IC. Den eneste ting er, at vi har brug for at ændre I2C-adressen på IC. I2C-kommunikation i Arduino er allerede forklaret detaljeret i tidligere tutorial.
I denne vejledning forbinder vi en MCP4725 DAC IC med Arduino Uno og giver analog inputværdi til Arduino pin A0 ved hjælp af et potentiometer. Derefter bruges ADC til at konvertere analog værdi til digital form. Derefter sendes disse digitale værdier til MCP4725 via I2C-bus for at blive konverteret til analoge signaler ved hjælp af DAC MCP4725 IC. Arduino pin A1 bruges til at kontrollere den analoge udgang fra MCP4725 fra pin OUT og til sidst vise både ADC & DAC værdier og spændinger i 16x2 LCD displayet.
Komponenter, der kræves
- Arduino Nano / Arduino Uno
- 16x2 LCD display modul
- MCP4725 DAC IC
- 10k Potentiometer
- Brødbræt
- Jumper Wires
Kredsløbsdiagram
Nedenstående tabel viser forbindelsen mellem MCP4725 DAC IC, Arduino Nano og Multi-meter
MCP4725 |
Arduino Nano |
Multimeter |
SDA |
A4 |
NC |
SCL |
A5 |
NC |
A0 eller OUT |
A1 |
+ terminal |
GND |
GND |
-ve terminal |
VCC |
5V |
NC |
Forbindelse mellem 16x2 LCD og Arduino Nano
LCD 16x2 |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Fra Potentiometer Center Pin til at justere LCD-kontrasten |
RS |
D2 |
RW |
GND |
E |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
EN |
+ 5V |
K |
GND |
Et potentiometer bruges med centerpind tilsluttet til A0 analog indgang på Arduino Nano, Venstre pin tilsluttet til GND og højre højre pin tilsluttet til 5V Arduino.
DAC Arduino programmering
Komplet Arduino-kode til DAC-tutorial gives i slutningen med en demonstrationsvideo. Her har vi forklaret koden linje for linje.
Først skal du inkludere biblioteket til I2C og LCD ved hjælp af wire.h og liquidcrystal.h- biblioteket.
#omfatte
Derefter defineres og initialiseres LCD-stifter i henhold til stifter, vi har forbundet med Arduino Nano
LiquidCrystal lcd (2,3,4,5,6,7); // Definer LCD-skærmstifter RS, E, D4, D5, D6, D7
Definer derefter I2C-adressen på MCP4725 DAC IC
#definer MCP4725 0x61
I tomrumsopsætningen ()
Start først I2C-kommunikationen ved benene A4 (SDA) og A5 (SCL) i Arduino Nano
Wire.begin (); // Begynder I2C-kommunikationen
Indstil derefter LCD-displayet i 16x2-tilstand, og vis en velkomstmeddelelse.
lcd.begin (16,2); // Indstiller LCD i 16X2 tilstand 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 hulrummet ()
1. Først i buffer sætte kontrolbyteværdien (0b01000000)
(010-sæt MCP4725 i skrivetilstand)
buffer = 0b01000000;
2. Følgende udsagn læser den analoge værdi fra pin A0 og konverterer den til digitale værdier (0-1023). Arduino ADC er 10-bit opløsning, så gang det med 4 giver: 0-4096, da DAC er 12-bit opløsning.
adc = analogRead (A0) * 4;
3. Denne erklæring skal finde spændingen fra ADC-indgangsværdien (0 til 4096) og referencespændingen som 5V
flyde ipvolt = (5.0 / 4096.0) * adc;
4. Under første linje anbringes de mest signifikante bitværdier i buffer ved at skifte 4 bits til højre i ADC-variablen, og anden linje sætter de mindst signifikante bitværdier i buffer ved at skifte 4 bits til venstre i ADC-variablen.
buffer = adc >> 4; buffer = adc << 4;
5. Følgende udsagn læser analog spænding fra A1, der er DAC-udgangen (MCP4725 DAC ICs OUTPUT-pin). Denne pin kan også tilsluttes multimeter for at kontrollere udgangsspændingen. Lær hvordan du bruger multimeter her.
usigneret int analogread = analogRead (A1) * 4;
6. Spændingsværdien fra den variable analoge læse beregnes yderligere ved hjælp af nedenstående formel
float opvolt = (5.0 / 4096.0) * analoglæs;
7. Følgende erklæring bruges til at begynde transmissionen med MCP4725
Wire.beginTransmission (MCP4725);
Sender kontrolbyte til I2C
Wire.write (buffer);
Sender MSB til I2C
Wire.write (buffer);
Sender LSB til I2C
Wire.write (buffer);
Afslutter transmissionen
Wire.endTransmission ();
Vis endelig disse resultater i 16x2 LCD-skærmen ved hjælp af 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 (analoglæs); lcd.setCursor (10,1); lcd.print ("V:"); lcd.print (opvolt); forsinkelse (500); lcd.clear ();
Digital til analog konvertering ved hjælp af MCP4725 og Arduino
Efter at have afsluttet alle kredsløbsforbindelser og uploade koden til Arduino, skal du variere potentiometeret og se output på LCD . Første linje på LCD viser input ADC-værdi og spænding, og anden linje viser output DAC-værdi og spænding.
Du kan også kontrollere udgangsspændingen ved at tilslutte et multimeter til OUT- og GND-stiften på MCP4725.
Dette er, hvordan vi kan konvertere digitale værdier til Analog ved at interfacere DAC-modul MCP4725 med Arduino.