- MCP4921 DAC (ψηφιακός σε αναλογικός μετατροπέας)
- Απαιτούμενα στοιχεία
- Σχηματικός
- Επεξήγηση κώδικα
- Δοκιμή ψηφιακής σε αναλογική μετατροπή χρησιμοποιώντας PIC
Το Ψηφιακό και το Αναλογικό είναι αναπόσπαστο μέρος της Ηλεκτρονικής. Οι περισσότερες συσκευές διαθέτουν τόσο ADC όσο και DAC και χρησιμοποιούνται όταν υπάρχει ανάγκη μετατροπής σημάτων είτε από αναλογικό σε ψηφιακό είτε από ψηφιακό σε αναλογικό. Επίσης, τα σήματα του πραγματικού κόσμου όπως ο ήχος και το φως είναι αναλογικά στη φύση, οπότε όποτε αυτά τα σήματα του πραγματικού κόσμου πρέπει να χρησιμοποιούνται, τα ψηφιακά σήματα πρέπει να μετατρέπονται σε αναλογικά, για παράδειγμα για την παραγωγή ήχου χρησιμοποιώντας ηχεία ή για τον έλεγχο μιας πηγής φωτός.
Ένας άλλος τύπος DAC είναι ένας Pulse Width Modulator (PWM). Ένα PWM παίρνει μια ψηφιακή λέξη και δημιουργεί έναν ψηφιακό παλμό με μεταβλητό πλάτος παλμού. Όταν αυτό το σήμα περάσει από ένα φίλτρο, το αποτέλεσμα θα είναι καθαρά αναλογικό. Ένα αναλογικό σήμα μπορεί να έχει πολλούς τύπους δεδομένων σε ένα σήμα.
Σε αυτό το σεμινάριο, θα συνδέσουμε το DAC MCP4921 με το Microchip PIC16F877A για ψηφιακή σε αναλογική μετατροπή.
Εδώ σε αυτό το σεμινάριο θα μετατρέψουμε το ψηφιακό σήμα σε αναλογικό σήμα και θα εμφανίσουμε την ψηφιακή τιμή εισόδου και την αναλογική τιμή εξόδου σε οθόνη LCD 16x2. Θα παρέχει 1V, 2V, 3V, 4V και 5V ως την τελική αναλογική έξοδο που φαίνεται στο βίντεο που δίνεται στο τέλος. Μπορείτε να μάθετε περισσότερα για το DAC στο πολύτιμο σεμινάριο διασύνδεσης DAC με πίνακες Raspberry Pi, Arduino και STM32.
Το DAC μπορεί να χρησιμοποιηθεί σε πολλές εφαρμογές όπως έλεγχος κινητήρα, φωτεινότητα ελέγχου των φώτων LED, ενισχυτής ήχου, κωδικοποιητές βίντεο, συστήματα λήψης δεδομένων κ.λπ.
MCP4921 DAC (ψηφιακός σε αναλογικός μετατροπέας)
Το MCP4921 είναι DAC 12 bit, οπότε το MCP4921 θα παρέχει ανάλυση 12 bit εξόδου. Η ανάλυση DAC σημαίνει αριθμό ψηφιακών bit που μπορούν να μετατραπούν σε αναλογικό σήμα. Πόσες τιμές μπορούμε να επιτύχουμε από αυτό βασίζεται στον τύπο. Για 12-bit, είναι = 4096. Αυτό σημαίνει ότι η ανάλυση 12-bit DAC θα μπορούσε να παράγει 4096 διαφορετικές εξόδους.
Χρησιμοποιώντας αυτήν την τιμή, μπορεί κανείς εύκολα να υπολογίσει την απλή αναλογική τάση βήματος. Για τον υπολογισμό των βημάτων, απαιτείται τάση αναφοράς. Δεδομένου ότι η λογική τάση για τη συσκευή είναι 5V, η τάση βήματος είναι 5/4095 (4096-1 επειδή το σημείο εκκίνησης για το ψηφιακό δεν είναι 1, είναι 0), το οποίο είναι 0,00122100122 millivolt. Έτσι, μια αλλαγή 1 bit θα αλλάξει την αναλογική έξοδο με 0,00122100122.
Έτσι, αυτό ήταν το μέρος μετατροπής. Το MCP4921 είναι ένα IC 8 ακίδων. Το διάγραμμα ακίδων και η περιγραφή βρίσκονται παρακάτω.
Το MCP4921 IC επικοινωνεί με τον μικροελεγκτή μέσω του πρωτοκόλλου SPI. Για την επικοινωνία SPI, μια συσκευή πρέπει να είναι κύρια, η οποία υποβάλλει δεδομένα ή εντολές στην εξωτερική συσκευή που είναι συνδεδεμένη ως σκλάβος. Στο σύστημα επικοινωνίας SPI, πολλές δευτερεύουσες συσκευές μπορούν να συνδεθούν με τη μοναδική κύρια συσκευή.
Για να υποβάλετε τα δεδομένα και την εντολή, είναι σημαντικό να κατανοήσετε το μητρώο εντολών.
Στην παρακάτω εικόνα, εμφανίζεται ο καταχωρητής εντολών,
Ο καταχωρητής εντολών είναι ένας καταχωρητής 16-bit. Το bit-15 έως το bit-12 χρησιμοποιείται για την εντολή διαμόρφωσης. Η εισαγωγή δεδομένων και η διαμόρφωση φαίνονται σαφώς στην παραπάνω εικόνα. Σε αυτό το έργο, το MCP4921 θα χρησιμοποιηθεί ως η ακόλουθη διαμόρφωση-
Αριθμός bit |
Διαμόρφωση |
Τιμή διαμόρφωσης |
Κομμάτι 15 |
DAC Α |
0 |
Bit 14 |
Χωρίς προσφορά |
0 |
Bit 13 |
1x (V OUT * D / 4096) |
1 |
Κομμάτι 12 |
Έξοδος Power Down Control Bit |
1 |
Έτσι το Binary είναι 0011 μαζί με τα δεδομένα που καθορίζονται από τα D11 έως D0 bits του μητρώου. Τα δεδομένα 16-bit 0011 xxxx xxxx xxxx πρέπει να υποβληθούν όπου το πρώτο 4 bit του MSB είναι η διαμόρφωση και τα υπόλοιπα είναι το LSB. Θα είναι σαφέστερο βλέποντας το διάγραμμα χρονισμού εντολών εγγραφής.
Σύμφωνα με το διάγραμμα χρονισμού και το φύλλο δεδομένων, ο πείρος CS είναι χαμηλός για ολόκληρη την περίοδο εγγραφής εντολών στο MCP4921.
Τώρα είναι η ώρα να συνδέσετε τη συσκευή με το υλικό και να γράψετε τους κωδικούς.
Απαιτούμενα στοιχεία
Για αυτό το έργο, απαιτούνται τα ακόλουθα στοιχεία-
- MCP4921
- PIC16F877Α
- 20 MHz Crystal
- LCD οθόνης 16x2 χαρακτήρων.
- 2k αντίσταση -1 τεμ
- Πυκνωτές 33pF - 2 τεμ
- 4.7k αντίσταση - 1 τεμ
- Ένα πολύμετρο για τη μέτρηση της τάσης εξόδου
- Ένα ψωμί
- Τροφοδοσία 5V, Ένας φορτιστής τηλεφώνου μπορεί να λειτουργήσει.
- Πολλά καλώδια σύνδεσης ή σύρματα Berg.
- Περιβάλλον προγραμματισμού μικροτσίπ με κιτ προγραμματιστή και IDE με μεταγλωττιστή
Σχηματικός
Το διάγραμμα κυκλώματος για διασύνδεση DAC4921 με μικροελεγκτή PIC δίνεται παρακάτω:
Το κύκλωμα είναι κατασκευασμένο σε Breadboard-
Επεξήγηση κώδικα
Πλήρης κωδικός για τη μετατροπή ψηφιακών σημάτων σε αναλογικό με το PIC16F877A παρέχεται στο τέλος του άρθρου. Όπως πάντα, πρέπει πρώτα να ορίσουμε τα bits διαμόρφωσης στον μικροελεγκτή PIC.
// PIC16F877A Ρυθμίσεις Bit Ρυθμίσεις // Δηλώσεις διαμόρφωσης γραμμής πηγής «C» // CONFIG #pragma config FOSC = HS // Oscillator Selection bits (HS oscillator) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT απενεργοποιημένο) # pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT απενεργοποιημένο) #pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled) #pragma config LVP = OFF // Χαμηλή τάση (Μονή παροχή) In-Circuit Serial Programming Enable bit (Ο πείρος RB3 / PGM έχει λειτουργία PGM, ενεργοποιημένος προγραμματισμός χαμηλής τάσης) #pragma config CPD = OFF // Δεδομένα EEPROM Memory Code Protection bit (Data EEPROM code protection off) #pragma config WRT = OFF // Μνήμη προγράμματος Flash Εγγραφή Ενεργοποίηση bit (Απενεργοποίηση προστασίας; όλη η μνήμη προγράμματος μπορεί να γραφτεί από τον έλεγχο EECON) #pragma config CP = OFF // Μνήμη προγράμματος Flash Προστασία κωδικού μνήμης (Απενεργοποίηση προστασίας κώδικα)
Οι παρακάτω γραμμές κώδικα χρησιμοποιούνται για την ενσωμάτωση των αρχείων κεφαλίδας LCD και SPI, δηλώνεται επίσης η συχνότητα XTAL και η σύνδεση ακροδέκτη CS της DAC.
Ο οδηγός και η βιβλιοθήκη PIC SPI βρίσκονται στον δεδομένο σύνδεσμο.
#περιλαμβάνω
Το Funciton το SPI_Initialize_Master () τροποποιείται ελαφρώς για διαφορετική διαμόρφωση που απαιτείται για αυτό το έργο. Σε αυτήν την περίπτωση, ο καταχωρητής SSPSTAT έχει ρυθμιστεί έτσι ώστε τα δεδομένα εισόδου να λαμβάνονται δείγματα στο τέλος του χρόνου εξόδου δεδομένων και επίσης το ρολόι SPI που έχει διαμορφωθεί ως μετάδοση κατά τη μετάβαση από την κατάσταση ενεργού σε κατάσταση αδράνειας ρολογιού. Το άλλο είναι το ίδιο.
άκυρο SPI_Initialize_Master () { TRISC5 = 0; // Ορισμός ως έξοδος SSPSTAT = 0b11000000; // σελ 74/234 SSPCON = 0b00100000; // σελ. 75/234 TRISC3 = 0; // Ορισμός ως έξοδος για λειτουργία σκλάβης }
Επίσης, για την παρακάτω συνάρτηση, το SPI_Write () τροποποιείται ελαφρώς. Η μετάδοση δεδομένων θα πραγματοποιηθεί μετά την εκκαθάριση του buffer για διασφάλιση της τέλειας μετάδοσης δεδομένων μέσω SPI.
άκυρο SPI_Write (char incoming) { SSPBUF = εισερχόμενο; // Γράψτε τα δεδομένα του χρήστη σε buffer ενώ (! SSPSTATbits.BF); }
Το σημαντικό μέρος του προγράμματος είναι το πρόγραμμα οδήγησης MCP4921. Είναι ελαφρώς δύσκολο μέρος καθώς η εντολή και τα ψηφιακά δεδομένα συνδυάζονται για να παρέχουν πλήρη δεδομένα 16-bit μέσω του SPI. Ωστόσο, αυτή η λογική εμφανίζεται σαφώς στα σχόλια κώδικα.
/ * Αυτή η λειτουργία προορίζεται για τη μετατροπή της ψηφιακής τιμής στο αναλογικό. * / void convert_DAC (unsigned int value) { / * Μέγεθος βήματος = 2 ^ n, Επομένως 12bit 2 ^ 12 = 4096 Για αναφορά 5V, το βήμα θα είναι 5/4095 = 0.0012210012210012V ή 1mV (περίπου) * / μη υπογεγραμμένο κοντέινερ; χωρίς υπογραφή MSB; χωρίς υπογραφή int LSB; / * Βήμα: 1, αποθηκεύθηκαν τα δεδομένα 12 bit στο κοντέινερ Ας υποθέσουμε ότι τα δεδομένα είναι 4095, στο δυαδικό 1111 1111 1111 * / container = value; / * Βήμα: 2 Δημιουργία Dummy 8 bit. Έτσι, διαιρώντας το 256, τα άνω 4 bits καταγράφονται σε LSB LSB = 0000 1111 * / LSB = container / 256; / * Βήμα: 3 Αποστολή της διαμόρφωσης με διάτρηση των δεδομένων 4 bit. LSB = 0011 0000 Ή 0000 1111. Το αποτέλεσμα είναι 0011 1111 * / LSB = (0x30) - LSB; / * Βήμα: 4 Το κοντέινερ έχει ακόμα την τιμή 21bit. Εξαγωγή των κάτω 8 bit. 1111 1111 ΚΑΙ 1111 1111 1111. Το αποτέλεσμα είναι 1111 1111 που είναι MSB * / MSB = 0xFF & container; / * Βήμα: 4 Αποστολή δεδομένων 16 bit διαιρώντας σε δύο byte. * / DAC_CS = 0; // Το CS είναι χαμηλό κατά τη μετάδοση δεδομένων. Σύμφωνα με το φύλλο δεδομένων απαιτείται SPI_Write (LSB). SPI_Write (MSB); DAC_CS = 1; }
Στην κύρια λειτουργία χρησιμοποιείται ένα «για βρόχο» όπου δημιουργούνται τα ψηφιακά δεδομένα για τη δημιουργία της εξόδου 1V, 2V, 3V, 4V και 5V. Η ψηφιακή τιμή υπολογίζεται έναντι της τάσης εξόδου / 0,0012210012210012 millivolt.
void main () { system_init (); Εισαγωγή_ οθόνη (); αριθμός int = 0; int volt = 0; ενώ (1) { για (volt = 1; volt <= MAX_VOLT; volt ++) { number = volt / 0.0012210012210012; καθαρή οθόνη(); lcd_com (FIRST_LINE); lcd_puts ("DATA απεσταλμένα: -"); lcd_print_number (αριθμός); lcd_com (SECOND_LINE); lcd_puts ("Έξοδος: -"); lcd_print_number (volt); lcd_puts ("V"); convert_DAC (αριθμός); __delay_ms (300); } } }
Δοκιμή ψηφιακής σε αναλογική μετατροπή χρησιμοποιώντας PIC
Το ενσωματωμένο κύκλωμα δοκιμάζεται χρησιμοποιώντας Multi-meter. Στις παρακάτω εικόνες, η τάση εξόδου και τα ψηφιακά δεδομένα εμφανίζονται στην οθόνη LCD. Το Multi-meter δείχνει στενή ανάγνωση.
Ο πλήρης κώδικας με ένα βίντεο εργασίας επισυνάπτεται παρακάτω.