- Modul DAC MCP4725 (convertor digital-analog)
- Comunicare I2C în MCP4725 DAC
- Componente necesare
- Diagrama circuitului
- Programare DAC Arduino
- Conversie digital-analog folosind MCP4725 și Arduino
Știm cu toții că microcontrolerele funcționează numai cu valori digitale, dar în lumea reală trebuie să ne ocupăm de semnale analogice. De aceea, ADC (analogic la convertizoare digitale) este acolo pentru a converti valorile analogice din lumea reală în formă digitală, astfel încât microcontrolerele să poată procesa semnalele. Dar ce se întâmplă dacă avem nevoie de semnale analogice de la valori digitale, așa că aici vine DAC (Convertor digital la analog).
Un exemplu simplu pentru convertorul digital în analog este înregistrarea unei melodii în studio în care un cântăreț artist folosește microfonul și cântă o melodie. Aceste unde sonore analogice sunt convertite în formă digitală și apoi stocate într-un fișier în format digital și atunci când melodia este redată folosind fișierul digital stocat, acele valori digitale sunt convertite în semnale analogice pentru ieșirea difuzoarelor. Deci, în acest sistem este utilizat DAC.
DAC poate fi utilizat în multe aplicații, cum ar fi controlul motorului, controlul luminozității luminilor LED, amplificator audio, codificatoare video, sisteme de achiziție de date etc.
În multe microcontrolere există un DAC intern care poate fi utilizat pentru a produce ieșire analogică. Dar procesoarele Arduino precum ATmega328 / ATmega168 nu au DAC încorporat. Arduino are caracteristică ADC (convertor analog la digital), dar nu are DAC (convertor digital la analog). Are un DAC de 10 biți în ADC intern, dar acest DAC nu poate fi utilizat ca independent. Deci, aici, în acest tutorial Arduino DAC, folosim o placă suplimentară numită modulul DAC MCP4725 cu Arduino.
Modul DAC MCP4725 (convertor digital-analog)
MCP4725 IC este un modul convertor digital la analog pe 12 biți care este utilizat pentru a genera tensiuni analogice de ieșire de la (0 la 5V) și este controlat prin utilizarea comunicației I2C. De asemenea, vine cu memorie EEPROM non-volatilă la bord.
Acest IC are o rezoluție de 12 biți. Aceasta înseamnă că folosim (0 la 4096) ca intrare pentru a furniza tensiunea de ieșire în raport cu tensiunea de referință. Tensiunea maximă de referință este de 5V.
Formula pentru calcularea tensiunii de ieșire
Tensiune O / P = (tensiune de referință / rezoluție) x valoare digitală
De exemplu, dacă folosim 5V ca tensiune de referință și să presupunem că valoarea digitală este 2048. Deci, pentru a calcula ieșirea DAC.
Tensiune O / P = (5/4096) x 2048 = 2,5V
Pinout MCP4725
Mai jos este imaginea MCP4725 cu indicarea clară a numelor pinilor.
Pinii MCP4725 |
Utilizare |
OUT |
Ieșiri Tensiune analogică |
GND |
GND pentru ieșire |
SCL |
Linia I2C Serial Clock |
SDA |
Linia de date seriale I2C |
VCC |
Tensiunea de referință a intrării 5V sau 3,3V |
GND |
GND pentru intrare |
Comunicare I2C în MCP4725 DAC
Acest IC DAC poate fi interfațat cu orice microcontroler folosind comunicația I2C. Comunicarea I2C necesită doar două fire SCL și SDA. În mod implicit, adresa I2C pentru MCP4725 este 0x60 sau 0x61 sau 0x62. Pentru mine este 0x61. Folosind magistrala I2C putem conecta mai multe IC DAC MCP4725. Singurul lucru este că trebuie să schimbăm adresa I2C a IC. Comunicarea I2C în Arduino este deja explicată în detaliu în tutorialul anterior.
În acest tutorial vom conecta un IC DAC MCP4725 cu Arduino Uno și vom furniza valoarea de intrare analogică pinului Arduino A0 utilizând un potențiometru. Apoi ADC va fi folosit pentru a converti valoarea analogică în formă digitală. După aceea, aceste valori digitale sunt trimise către MCP4725 prin magistrala I2C pentru a fi convertite în semnale analogice folosind IC DAC MCP4725. Pinul Arduino A1 este utilizat pentru a verifica ieșirea analogică a MCP4725 de la pinul OUT și pentru a afișa atât valorile ADC și DAC cât și tensiunile pe afișajul LCD de 16x2.
Componente necesare
- Arduino Nano / Arduino Uno
- Modul de afișaj LCD 16x2
- MCP4725 DAC IC
- Potențiometru 10k
- Breadboard
- Sârme jumper
Diagrama circuitului
Tabelul de mai jos arată conexiunea dintre MCP4725 DAC IC, Arduino Nano și Multi-meter
MCP4725 |
Arduino Nano |
Multimetru |
SDA |
A4 |
NC |
SCL |
A5 |
NC |
A0 sau OUT |
A1 |
+ ve terminal |
GND |
GND |
-v terminal |
VCC |
5V |
NC |
Conexiune între 16x2 LCD și Arduino Nano
LCD 16x2 |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
De la Pinul central al potențiometrului pentru a regla contrastul ecranului LCD |
RS |
D2 |
RW |
GND |
E |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
A |
+ 5V |
K |
GND |
Un potențiometru este utilizat cu pinul central conectat la intrarea analogică A0 a Arduino Nano, pinul stâng conectat la GND și pinul cel mai drept conectat la 5V de Arduino.
Programare DAC Arduino
Codul Arduino complet pentru tutorialul DAC este dat la sfârșit cu un videoclip demonstrativ. Aici am explicat codul rând cu rând.
În primul rând, se numără biblioteca pentru I2C și LCD folosind wire.h și liquidcrystal.h bibliotecă.
#include
Apoi definiți și inițializați pinii LCD în funcție de pinii pe care i-am conectat cu Arduino Nano
LiquidCrystal lcd (2,3,4,5,6,7); // Definiți pinii afișajului LCD RS, E, D4, D5, D6, D7
Apoi definiți adresa I2C a IC DAC MCP4725
#define MCP4725 0x61
În setarea nulă ()
Mai întâi începeți comunicarea I2C la pinii A4 (SDA) și A5 (SCL) ai Arduino Nano
Wire.begin (); // Începe comunicarea I2C
Apoi setați afișajul LCD în modul 16x2 și afișați un mesaj de întâmpinare.
lcd.inceput (16,2); // Setează ecranul LCD în mod 16X2 lcd.print ("CIRCUIT DIGEST"); întârziere (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("Arduino"); lcd.setCursor (0,1); lcd.print ("DAC cu MCP4725"); întârziere (2000); lcd.clear ();
În bucla de gol ()
1. Mai întâi în buffer puneți valoarea octetului de control (0b01000000)
(010-Setează MCP4725 în modul Scriere)
tampon = 0b01000000;
2. Următoarea afirmație citește valoarea analogică de la pinul A0 și o convertește în valori digitale (0-1023). Arduino ADC are o rezoluție de 10 biți, deci înmulțiți-o cu 4 oferă: 0-4096, deoarece DAC are o rezoluție de 12 biți.
adc = analogRead (A0) * 4;
3. Această afirmație este de a găsi tensiunea de la valoarea de intrare ADC (0 la 4096) și tensiunea de referință ca 5V
float ipvolt = (5.0 / 4096.0) * adc;
4. Sub prima linie se plasează cele mai semnificative valori de biți în tampon prin deplasarea a 4 biți la dreapta în variabila ADC, iar a doua linie pune valorile de biți cel mai puțin semnificative în buffer prin deplasarea a 4 biți la stânga în variabila ADC.
tampon = adc >> 4; tampon = adc << 4;
5. Următoarea declarație citește tensiunea analogică de la A1 care este ieșirea DAC (pinul OUTPUT al MCP4725 DAC IC). Acest pin poate fi conectat și la multimetru pentru a verifica tensiunea de ieșire. Aflați cum să utilizați Multimeter aici.
unsigned int analogread = analogRead (A1) * 4;
6. În plus, valoarea tensiunii din variabila analogicitere este calculată utilizând formula de mai jos
float opvolt = (5.0 / 4096.0) * citire analogică;
7. Declarația următoare este utilizată pentru a începe transmisia cu MCP4725
Wire.beginTransmission (MCP4725);
Trimite octetul de control către I2C
Wire.write (tampon);
Trimite MSB către I2C
Wire.write (tampon);
Trimite LSB către I2C
Wire.write (tampon);
Încheie transmisia
Wire.endTransmission ();
Acum afișați în cele din urmă aceste rezultate pe ecranul LCD 16x2 folosind 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 (citire analogică); lcd.setCursor (10,1); lcd.print ("V:"); lcd.print (opvolt); întârziere (500); lcd.clear ();
Conversie digital-analog folosind MCP4725 și Arduino
După finalizarea tuturor conexiunilor circuitului și încărcarea codului în Arduino, modificați potențiometrul și urmăriți ieșirea pe LCD . Prima linie LCD va arăta valoarea și tensiunea ADC de intrare, iar a doua linie va arăta valoarea și tensiunea DAC de ieșire.
De asemenea, puteți verifica tensiunea de ieșire conectând un multimetru la pinul OUT și GND al MCP4725.
Acesta este modul în care putem converti valorile digitale în analog prin interfața modulului DAC MCP4725 cu Arduino.