- MCP4725 DAC Module (ψηφιακός σε αναλογικός μετατροπέας)
- Επικοινωνία I2C στο MCP4725 DAC
- Απαιτούμενα στοιχεία
- Διάγραμμα κυκλώματος
- Προγραμματισμός DAC Arduino
- Ψηφιακή σε αναλογική μετατροπή χρησιμοποιώντας MCP4725 και Arduino
Όλοι γνωρίζουμε ότι οι μικροελεγκτές λειτουργούν μόνο με ψηφιακές τιμές, αλλά στον πραγματικό κόσμο πρέπει να αντιμετωπίσουμε αναλογικά σήματα. Αυτός είναι ο λόγος για τον οποίο το ADC (Analog to Digital Converters) υπάρχει για να μετατρέψει τις πραγματικές αναλογικές τιμές σε ψηφιακή μορφή έτσι ώστε οι μικροελεγκτές να μπορούν να επεξεργάζονται τα σήματα. Αλλά τι γίνεται αν χρειαζόμαστε αναλογικά σήματα από ψηφιακές τιμές, έτσι έρχεται το DAC (Digital to Analog Converter).
Ένα απλό παράδειγμα για το Digital to Analog converter είναι η ηχογράφηση ενός τραγουδιού στο στούντιο όπου ένας καλλιτέχνης τραγουδιστής χρησιμοποιεί μικρόφωνο και τραγουδά ένα τραγούδι. Αυτά τα αναλογικά ηχητικά κύματα μετατρέπονται σε ψηφιακή μορφή και στη συνέχεια αποθηκεύονται σε αρχείο ψηφιακής μορφής και όταν το τραγούδι αναπαράγεται χρησιμοποιώντας το αποθηκευμένο ψηφιακό αρχείο, αυτές οι ψηφιακές τιμές μετατρέπονται σε αναλογικά σήματα για έξοδο ηχείου. Έτσι σε αυτό το σύστημα χρησιμοποιείται το DAC.
Το DAC μπορεί να χρησιμοποιηθεί σε πολλές εφαρμογές, όπως έλεγχος κινητήρα, φωτεινότητα ελέγχου των φώτων LED, ενισχυτής ήχου, κωδικοποιητές βίντεο, συστήματα απόκτησης δεδομένων κ.λπ.
Σε πολλούς μικροελεγκτές υπάρχει ένα εσωτερικό DAC που μπορεί να χρησιμοποιηθεί για την παραγωγή αναλογικής εξόδου. Αλλά οι επεξεργαστές Arduino όπως το ATmega328 / ATmega168 δεν έχουν ενσωματωμένο DAC. Το Arduino διαθέτει δυνατότητα ADC (Αναλογικός σε Ψηφιακός Μετατροπέας) αλλά δεν έχει DAC (Ψηφιακός σε Αναλογικός Μετατροπέας). Έχει 10-bit DAC σε εσωτερικό ADC, αλλά αυτό το DAC δεν μπορεί να χρησιμοποιηθεί ως αυτόνομο. Εδώ λοιπόν σε αυτό το σεμινάριο Arduino DAC, χρησιμοποιούμε έναν πρόσθετο πίνακα που ονομάζεται MCP4725 DAC Module με το Arduino.
MCP4725 DAC Module (ψηφιακός σε αναλογικός μετατροπέας)
Το MCP4725 IC είναι ένα 12-Bit Digital to Analog Converter Module που χρησιμοποιείται για την παραγωγή αναλογικών τάσεων εξόδου από (0 έως 5V) και ελέγχεται με τη χρήση επικοινωνίας I2C. Έρχεται επίσης με ενσωματωμένη μη πτητική μνήμη EEPROM.
Αυτό το IC έχει ανάλυση 12-bit. Αυτό σημαίνει ότι χρησιμοποιούμε (0 έως 4096) ως είσοδο για να παρέχουμε την έξοδο τάσης σε σχέση με την τάση αναφοράς. Η μέγιστη τάση αναφοράς είναι 5V.
Τύπος για τον υπολογισμό της τάσης εξόδου
Τάση O / P = (Τάση αναφοράς / Ανάλυση) x Ψηφιακή τιμή
Για παράδειγμα, αν χρησιμοποιούμε 5V ως τάση αναφοράς και ας υποθέσουμε ότι η ψηφιακή τιμή είναι 2048. Έτσι, για να υπολογίσουμε την έξοδο DAC.
Τάση O / P = (5/4096) x 2048 = 2.5V
Pinout του MCP4725
Παρακάτω είναι η εικόνα του MCP4725 με σαφή ένδειξη ονομάτων.
Καρφίτσες MCP4725 |
Χρήση |
ΕΞΩ |
Έξοδος αναλογικής τάσης |
GND |
GND για έξοδο |
SCL |
Γραμμή σειριακού ρολογιού I2C |
SDA |
Γραμμή σειριακών δεδομένων I2C |
VCC |
Τάση αναφοράς εισόδου 5V ή 3.3V |
GND |
GND για εισαγωγή |
Επικοινωνία I2C στο MCP4725 DAC
Αυτό το DAC IC μπορεί να συνδεθεί με οποιονδήποτε μικροελεγκτή χρησιμοποιώντας την επικοινωνία I2C. Η επικοινωνία I2C απαιτεί μόνο δύο καλώδια SCL και SDA. Από προεπιλογή, η διεύθυνση I2C για MCP4725 είναι 0x60 ή 0x61 ή 0x62. Για μένα το 0x61. Χρησιμοποιώντας I2C bus μπορούμε να συνδέσουμε πολλαπλά MCP4725 DAC IC. Το μόνο πράγμα είναι ότι πρέπει να αλλάξουμε τη διεύθυνση I2C του IC. Η επικοινωνία I2C στο Arduino εξηγείται ήδη λεπτομερώς στο προηγούμενο σεμινάριο.
Σε αυτό το σεμινάριο θα συνδέσουμε ένα MCP4725 DAC IC με Arduino Uno και θα παρέχουμε αναλογική τιμή εισόδου στον Arduino pin A0 χρησιμοποιώντας ένα ποτενσιόμετρο. Στη συνέχεια, το ADC θα χρησιμοποιηθεί για τη μετατροπή της αναλογικής τιμής σε ψηφιακή μορφή. Μετά από αυτό οι ψηφιακές τιμές αποστέλλονται στο MCP4725 μέσω διαύλου I2C για μετατροπή σε αναλογικά σήματα χρησιμοποιώντας το DAC MCP4725 IC Ο πείρος Arduino A1 χρησιμοποιείται για τον έλεγχο της αναλογικής εξόδου του MCP4725 από τον πείρο OUT και τελικά εμφανίζει τις τιμές ADC & DAC και τάσεις στην οθόνη LCD 16x2
Απαιτούμενα στοιχεία
- Arduino Nano / Arduino Uno
- Μονάδα οθόνης 16x2 LCD
- MCP4725 DAC IC
- Ποτενσιόμετρο 10k
- Ψωμί
- Καλώδια αλτών
Διάγραμμα κυκλώματος
Στον παρακάτω πίνακα εμφανίζεται η σύνδεση μεταξύ MCP4725 DAC IC, Arduino Nano και Multi-meter
MCP4725 |
Arduino Nano |
Πολύμετρο |
SDA |
Α4 |
ΝΚ |
SCL |
Α5 |
ΝΚ |
A0 ή OUT |
Α'1 |
+ ve τερματικό |
GND |
GND |
- τερματικό |
VCC |
5V |
ΝΚ |
Σύνδεση μεταξύ 16x2 LCD και Arduino Nano
LCD 16x2 |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Από το ποτενσιόμετρο Center Pin για να ρυθμίσετε την αντίθεση της οθόνης LCD |
RS |
Δ2 |
RW |
GND |
μι |
Δ3 |
Δ4 |
Δ4 |
Δ5 |
Δ5 |
Δ6 |
Δ6 |
Δ7 |
Δ7 |
ΕΝΑ |
+ 5V |
κ |
GND |
Χρησιμοποιείται ποτενσιόμετρο με κεντρικό πείρο συνδεδεμένο με αναλογική είσοδο A0 του Arduino Nano, αριστερό πείρο συνδεδεμένο με GND και δεξιό πείρο συνδεδεμένο με 5V του Arduino.
Προγραμματισμός DAC Arduino
Ο πλήρης κωδικός Arduino για DAC φροντιστήριο δίνεται στο τέλος με ένα βίντεο επίδειξης. Εδώ έχουμε εξηγήσει τον κωδικό γραμμή προς γραμμή.
Αρχικά, συμπεριλάβετε τη βιβλιοθήκη για I2C και LCD χρησιμοποιώντας τη βιβλιοθήκη wire.h και liquidcrystal.h.
#περιλαμβάνω
Στη συνέχεια, ορίστε και αρχικοποιήστε τις καρφίτσες LCD σύμφωνα με τις ακίδες που έχουμε συνδέσει με το Arduino Nano
LiquidCrystal lcd (2,3,4,5,6,7); // Ορίστε τις καρφίτσες οθόνης LCD RS, E, D4, D5, D6, D7
Στη συνέχεια ορίστε τη διεύθυνση I2C του MCP4725 DAC IC
# καθορισμός MCP4725 0x61
Στην κενή ρύθμιση ()
Αρχικά ξεκινήστε την επικοινωνία I2C στις ακίδες A4 (SDA) και A5 (SCL) του Arduino Nano
Wire.begin (); // Ξεκινά την επικοινωνία I2C
Στη συνέχεια ρυθμίστε την οθόνη LCD σε λειτουργία 16x2 και εμφανίστε ένα μήνυμα καλωσορίσματος.
lcd.begin (16,2); // Ορίζει LCD σε λειτουργία 16X2 lcd.print ("CIRCUIT DIGEST"); καθυστέρηση (1000) lcd.clear (); lcd.setCursor (0,0); lcd.print ("Arduino"); lcd.setCursor (0,1); lcd.print ("DAC με MCP4725"); καθυστέρηση (2000); lcd.clear ();
Στο κενό βρόχο ()
1. Πρώτα στο buffer βάλτε την τιμή byte ελέγχου (0b01000000)
(010-Σετ MCP4725 σε λειτουργία εγγραφής)
buffer = 0b01000000;
2. Η ακόλουθη δήλωση διαβάζει την αναλογική τιμή από τον πείρο A0 και τη μετατρέπει σε ψηφιακές τιμές (0-1023) Το Arduino ADC είναι ανάλυση 10 bit, πολλαπλασιάστε το με 4 δίνει: 0-4096, καθώς το DAC είναι ανάλυση 12 bit.
adc = analogRead (A0) * 4;
3. Αυτή η δήλωση είναι να βρείτε την τάση από την τιμή εισόδου ADC (0 έως 4096) και την τάση αναφοράς ως 5V
float ipvolt = (5.0 / 4096.0) * adc;
4. Κάτω από την πρώτη γραμμή βάζει τις πιο σημαντικές τιμές bit στο buffer, αλλάζοντας 4 bit προς τα δεξιά στη μεταβλητή ADC και η δεύτερη γραμμή βάζει τις λιγότερο σημαντικές τιμές bit στο buffer, αλλάζοντας 4 bit προς τα αριστερά στη μεταβλητή ADC.
buffer = adc >> 4; buffer = adc << 4;
5. Η ακόλουθη δήλωση διαβάζει την αναλογική τάση από το A1 που είναι η έξοδος DAC (ακροδέκτης εξόδου MCP4725 DAC IC). Αυτός ο πείρος μπορεί επίσης να συνδεθεί σε πολύμετρο για να ελέγξει την τάση εξόδου. Μάθετε πώς να χρησιμοποιείτε το Πολύμετρο εδώ.
unsigned int analogread = analogRead (A1) * 4;
6. Επιπλέον, η τιμή τάσης από το μεταβλητό αναλογικό διάγραμμα υπολογίζεται χρησιμοποιώντας τον παρακάτω τύπο
float opvolt = (5.0 / 4096.0) * αναλογικό
7. Η ακόλουθη δήλωση χρησιμοποιείται για να ξεκινήσει η μετάδοση με MCP4725
Wire.beginTransmission (MCP4725);
Στέλνει το byte ελέγχου στο I2C
Wire.write (buffer);
Στέλνει το MSB στο I2C
Wire.write (buffer);
Στέλνει το LSB στο I2C
Wire.write (buffer);
Τερματίζει τη μετάδοση
Wire.endTransmission ();
Τώρα επιτέλους, εμφανίστε αυτά τα αποτελέσματα στην οθόνη LCD 16x2 χρησιμοποιώντας το 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); καθυστέρηση (500) lcd.clear ();
Ψηφιακή σε αναλογική μετατροπή χρησιμοποιώντας MCP4725 και Arduino
Αφού ολοκληρώσετε όλες τις συνδέσεις κυκλώματος και ανεβάστε τον κωδικό στο Arduino, αλλάξτε το ποτενσιόμετρο και παρακολουθήστε την έξοδο σε LCD . Η πρώτη γραμμή LCD θα εμφανίσει την τιμή και την τάση ADC εισόδου και η δεύτερη γραμμή θα δείχνει την τιμή και την τάση DAC εξόδου.
Μπορείτε επίσης να ελέγξετε την τάση εξόδου συνδέοντας ένα πολύμετρο στον ακροδέκτη OUT και GND του MCP4725.
Έτσι μπορούμε να μετατρέψουμε τις Ψηφιακές τιμές σε Αναλογικά, συνδέοντας τη μονάδα DAC MCP4725 με το Arduino.