- MCP4725 DAC-module (digitaal naar analoog converter)
- I2C-communicatie in MCP4725 DAC
- Componenten vereist
- Schakelschema
- DAC Arduino-programmering
- Digitaal naar analoog conversie met MCP4725 en Arduino
We weten allemaal dat de Microcontrollers alleen met digitale waarden werken, maar in de echte wereld hebben we te maken met analoge signalen. Daarom is ADC (Analog to Digital Converters) er om analoge waarden uit de echte wereld om te zetten in digitale vorm, zodat microcontrollers de signalen kunnen verwerken. Maar wat als we analoge signalen van digitale waarden nodig hebben, dan komt hier de DAC (Digital to Analog Converter).
Een eenvoudig voorbeeld voor een digitaal naar analoog-omzetter is het opnemen van een nummer in de studio waar een artiest-zanger een microfoon gebruikt en een nummer zingt. Deze analoge geluidsgolven worden omgezet in digitale vorm en vervolgens opgeslagen in een digitaal formaatbestand en wanneer het nummer wordt afgespeeld met behulp van het opgeslagen digitale bestand, worden die digitale waarden omgezet in analoge signalen voor luidsprekeruitvoer. Dus in dit systeem wordt DAC gebruikt.
DAC kan in veel toepassingen worden gebruikt, zoals motorbesturing, helderheid van de LED-verlichting regelen, audioversterker, video-encoders, data-acquisitiesystemen enz.
In veel microcontrollers is er een interne DAC die kan worden gebruikt om analoge uitvoer te produceren. Maar Arduino-processors zoals ATmega328 / ATmega168 hebben geen ingebouwde DAC. Arduino heeft een ADC-functie (analoog naar digitaal converter), maar het heeft geen DAC (digitaal naar analoog converter). Het heeft een 10-bits DAC in interne ADC, maar deze DAC kan niet als standalone worden gebruikt. Dus hier in deze Arduino DAC-tutorial gebruiken we een extra bord genaamd MCP4725 DAC-module met Arduino.
MCP4725 DAC-module (digitaal naar analoog converter)
MCP4725 IC is een 12-bits digitaal naar analoog convertormodule die wordt gebruikt om analoge uitgangsspanningen van (0 tot 5V) te genereren en wordt bestuurd door middel van I2C-communicatie. Het wordt ook geleverd met een niet-vluchtig geheugen-EEPROM aan boord.
Dit IC heeft een resolutie van 12 bits. Dit betekent dat we (0 tot 4096) als ingang gebruiken om de uitgangsspanning te leveren met betrekking tot de referentiespanning. De maximale referentiespanning is 5V.
Formule om de uitgangsspanning te berekenen
O / P-spanning = (referentiespanning / resolutie) x digitale waarde
Bijvoorbeeld als we gebruik 5V als referentie spanning en laten we aannemen dat digitale waarde is 2048. Dus om de DAC-uitgang te berekenen.
O / P-spanning = (5/4096) x 2048 = 2,5 V.
Pinout van MCP4725
Hieronder ziet u de afbeelding van MCP4725 met duidelijk aangegeven pinnamen.
Pinnen van MCP4725 |
Gebruik |
UIT |
Voert analoge spanning uit |
GND |
GND voor uitvoer |
SCL |
I2C Serial Clock-lijn |
SDA |
I2C seriële datalijn |
VCC |
Ingangsreferentiespanning 5V of 3.3V |
GND |
GND voor invoer |
I2C-communicatie in MCP4725 DAC
Deze DAC-IC kan worden gekoppeld aan elke microcontroller met behulp van de I2C-communicatie. I2C-communicatie vereist slechts twee draden SCL en SDA. Standaard is het I2C-adres voor MCP4725 0x60 of 0x61 of 0x62. Voor mij is het 0x61. Met behulp van de I2C-bus kunnen we meerdere MCP4725 DAC IC's aansluiten. Het enige is dat we het I2C-adres van de IC moeten wijzigen. I2C-communicatie in Arduino is al in detail uitgelegd in de vorige tutorial.
In deze tutorial zullen we een MCP4725 DAC IC verbinden met Arduino Uno en analoge inputwaarde leveren aan Arduino pin A0 met behulp van een potentiometer. Vervolgens wordt ADC gebruikt om analoge waarde om te zetten in digitale vorm. Daarna worden die digitale waarden via de I2C-bus naar MCP4725 gestuurd om te worden omgezet in analoge signalen met behulp van de DAC MCP4725 IC. Arduino pin A1 wordt gebruikt om de analoge output van MCP4725 van pin OUT te controleren en tenslotte zowel de ADC- als DAC-waarden en spanningen weer te geven op het 16x2 LCD-scherm.
Componenten vereist
- Arduino Nano / Arduino Uno
- 16x2 LCD-weergavemodule
- MCP4725 DAC IC
- 10k Potentiometer
- Breadboard
- Doorverbindingsdraden
Schakelschema
Onderstaande tabel toont de verbinding tussen MCP4725 DAC IC, Arduino Nano en Multi-meter
MCP4725 |
Arduino Nano |
Multimeter |
SDA |
A4 |
NC |
SCL |
A5 |
NC |
A0 of UIT |
A1 |
+ ve terminal |
GND |
GND |
-ve terminal |
VCC |
5V |
NC |
Verbinding tussen 16x2 LCD en Arduino Nano
LCD 16x2 |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Van Potentiometer Center Pin om contrast van LCD aan te passen |
RS |
D2 |
RW |
GND |
E. |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
EEN |
+ 5V |
K |
GND |
Een potentiometer wordt gebruikt met middelste pin verbonden met A0 analoge ingang van Arduino Nano, linker pin verbonden met GND en meest rechtse pin verbonden met 5V van Arduino.
DAC Arduino-programmering
De volledige Arduino-code voor de DAC-zelfstudie wordt aan het einde gegeven met een demonstratievideo. Hier hebben we de code regel voor regel uitgelegd.
Neem eerst de bibliotheek voor I2C en LCD op met behulp van de wire.h- en liquidcrystal.h- bibliotheek.
# omvatten
Definieer en initialiseer vervolgens de LCD-pinnen volgens pinnen die we hebben verbonden met de Arduino Nano
LiquidCrystal lcd (2,3,4,5,6,7); // Definieer LCD-schermpinnen RS, E, D4, D5, D6, D7
Definieer vervolgens het I2C-adres van de MCP4725 DAC IC
# definiëren MCP4725 0x61
In de leegte setup ()
Begin eerst met de I2C-communicatie op de pinnen A4 (SDA) en A5 (SCL) van Arduino Nano
Wire.begin (); // Begint de I2C-communicatie
Zet vervolgens het LCD-scherm in de 16x2-modus en laat een welkomstbericht zien.
lcd.begin (16,2); // Zet LCD in 16X2 Mode lcd.print ("CIRCUIT DIGEST"); vertraging (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("Arduino"); lcd.setCursor (0,1); lcd.print ("DAC met MCP4725"); vertraging (2000); lcd.clear ();
In de lege lus ()
1. Plaats als eerste in de buffer de waarde van de besturingsbyte (0b01000000)
(010-sets MCP4725 in schrijfmodus)
buffer = 0b01000000;
2. De volgende instructie leest de analoge waarde van pin A0 en zet deze om in digitale waarden (0-1023). Arduino ADC heeft een resolutie van 10 bits, dus vermenigvuldig het met 4 geeft: 0-4096, aangezien de DAC een resolutie van 12 bits heeft.
adc = analogRead (A0) * 4;
3. Deze verklaring is om de spanning van de ADC-ingangswaarde (0 tot 4096) en de referentiespanning als 5V te vinden
zweven ipvolt = (5.0 / 4096.0) * adc;
4. Onder de eerste regel worden de meest significante bitwaarden in de buffer geplaatst door 4 bits naar rechts te verschuiven in de ADC-variabele, en de tweede regel plaatst de minst significante bitwaarden in de buffer door 4 bits naar links te verschuiven in de ADC-variabele.
buffer = adc >> 4; buffer = adc << 4;
5. De volgende verklaring leest de analoge spanning van A1, dat is de DAC-uitgang (MCP4725 DAC IC's OUTPUT-pin). Deze pin kan ook worden aangesloten op een multimeter om de uitgangsspanning te controleren. Leer hier hoe u de multimeter gebruikt.
unsigned int analogread = analogRead (A1) * 4;
6. Verder wordt de spanningswaarde van de variabele analogread berekend met behulp van de onderstaande formule
float opvolt = (5.0 / 4096.0) * analoog lezen;
7. De volgende verklaring wordt gebruikt om de verzending met MCP4725 te starten
Wire.beginTransmission (MCP4725);
Stuurt de besturingsbyte naar I2C
Wire.write (buffer);
Stuurt de MSB naar I2C
Wire.write (buffer);
Stuurt de LSB naar I2C
Wire.write (buffer);
Beëindigt de verzending
Wire.endTransmission ();
Geef nu eindelijk die resultaten weer op het LCD 16x2-scherm met behulp van 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 (analoog lezen); lcd.setCursor (10,1); lcd.print ("V:"); lcd.print (opvolt); vertraging (500); lcd.clear ();
Digitaal naar analoog conversie met MCP4725 en Arduino
Na het voltooien van alle circuitverbindingen en het uploaden van de code naar Arduino, varieer je de potentiometer en bekijk je de output op het LCD-scherm . De eerste regel van het LCD-scherm toont de invoer ADC-waarde en -spanning, en de tweede regel toont de uitvoer-DAC-waarde en -spanning.
U kunt de uitgangsspanning ook controleren door een multimeter aan te sluiten op de OUT- en GND-pin van MCP4725.
Dit is hoe we digitale waarden kunnen omzetten in analoog door de DAC-module MCP4725 te koppelen aan Arduino.