- Κατανόηση της ενότητας ADC:
- Διάγραμμα κυκλώματος:
- Προγραμματισμός του MSP430 για ADC:
- Δοκιμή του αποτελέσματός σας!
Ένα κοινό χαρακτηριστικό που χρησιμοποιείται σχεδόν σε κάθε ενσωματωμένη εφαρμογή είναι η μονάδα ADC (Analog to Digital Converter). Αυτοί οι αναλογικοί σε ψηφιακοί μετατροπείς μπορούν να διαβάσουν τάση από αναλογικούς αισθητήρες όπως αισθητήρας θερμοκρασίας, αισθητήρας κλίσης, αισθητήρας ρεύματος, αισθητήρας Flex και πολλά άλλα. Έτσι, σε αυτό το σεμινάριο θα μάθουμε πώς να χρησιμοποιούμε το ADC στο MSP430G2 για να διαβάσουμε αναλογικές τάσεις χρησιμοποιώντας το Energia IDE. Θα συνδέσουμε ένα μικρό ποτενσιόμετρο στον πίνακα MSP και θα παρέχουμε μια μεταβαλλόμενη τάση σε έναν αναλογικό πείρο, θα διαβάσουμε την τάση και θα την εμφανίσουμε στο Serial Monitor.
Κατανόηση της ενότητας ADC:
Πιστέψτε με, δεν θα χρειαστούν 10 λεπτά για να συνδεθείτε και να προγραμματίσετε το MSP430G2 για να διαβάσετε την αναλογική τάση. Όμως, ας αφιερώσουμε λίγο χρόνο στην κατανόηση της ενότητας ADC στον πίνακα MSP, έτσι ώστε να μπορέσουμε να την χρησιμοποιήσουμε αποτελεσματικά σε όλα τα επερχόμενα έργα μας.
Ένας μικροελεγκτής είναι μια ψηφιακή συσκευή, που σημαίνει ότι μπορεί να καταλάβει μόνο 1 και 0. Αλλά στον πραγματικό κόσμο, σχεδόν όλα όπως η θερμοκρασία, η υγρασία, η ταχύτητα του ανέμου κ.λπ. είναι αναλογικά στη φύση. Για να αλληλεπιδράσει με αυτές τις αναλογικές αλλαγές, ο μικροελεγκτής χρησιμοποιεί μια λειτουργική μονάδα που ονομάζεται ADC. Υπάρχουν πολλοί διαφορετικοί τύποι μονάδων ADC, αυτός που χρησιμοποιείται στο MSP μας είναι το κανάλι SAR 8 ADC 10-bit.
Διαδοχική προσέγγιση (SAR) ADC: Το SAR ADC λειτουργεί με τη βοήθεια ενός συγκριτή και ορισμένων λογικών συνομιλιών. Αυτός ο τύπος ADC χρησιμοποιεί μια τάση αναφοράς (η οποία είναι μεταβλητή) και συγκρίνει την τάση εισόδου με την τάση αναφοράς χρησιμοποιώντας ένα συγκριτικό και η διαφορά, η οποία θα είναι μια ψηφιακή έξοδος, αποθηκεύεται από το πιο σημαντικό bit (MSB). Η ταχύτητα της σύγκρισης εξαρτάται από τη συχνότητα ρολογιού (Fosc) στην οποία λειτουργεί το MSP.
Ανάλυση 10 bit: Αυτό το ADC είναι ADC 8 bit 10 καναλιών. Εδώ ο όρος 8 κανάλι υπονοεί ότι υπάρχουν 8 ακροδέκτες ADC χρησιμοποιώντας τους οποίους μπορούμε να μετρήσουμε την αναλογική τάση. Ο όρος 10-bit υπονοεί την ανάλυση του ADC. 10-bit σημαίνει 2 έως την ισχύ των δέκα (2 10) που είναι 1024. Αυτός είναι ο αριθμός των βημάτων δείγματος για το ADC μας, οπότε το εύρος των τιμών ADC μας θα είναι από 0 έως 1023. Η τιμή θα αυξηθεί από 0 σε 1023 με βάση την τιμή της τάσης ανά βήμα, η οποία μπορεί να υπολογιστεί χρησιμοποιώντας τον παρακάτω τύπο
Σημείωση: Από προεπιλογή στην Energia, η τάση αναφοράς θα οριστεί σε Vcc (~ 3v), μπορείτε να αλλάξετε την τάση αναφοράς χρησιμοποιώντας την επιλογή analogReference () .
Ελέγξτε επίσης τον τρόπο διασύνδεσης του ADC με άλλους μικροελεγκτές:
- Πώς να χρησιμοποιήσετε το ADC στο Arduino Uno;
- Διασύνδεση ADC0808 με 8051 μικροελεγκτή
- Χρήση της μονάδας ADC του μικροελεγκτή PIC
- Εκμάθηση Raspberry Pi ADC
Διάγραμμα κυκλώματος:
Στο προηγούμενο σεμινάριό μας μάθαμε ήδη πώς να διασυνδέουμε την οθόνη LCD με το MSP430G2, τώρα απλώς πρόκειται να προσθέσουμε ένα ποτενσιόμετρο στο MSP430 για να του παρέχουμε μεταβλητή τάση και να εμφανίσουμε την τιμή τάσης στην οθόνη LCD. Εάν δεν γνωρίζετε τη διασύνδεση της οθόνης LCD, επιστρέψτε στον παραπάνω σύνδεσμο και διαβάστε την, αφού θα παραλείψω τις πληροφορίες για να αποφύγω τη μετάνοια. Το πλήρες διάγραμμα κυκλώματος του έργου δίνεται παρακάτω.
Όπως μπορείτε να δείτε εδώ χρησιμοποιούνται δύο ποτενσιόμετρα, το ένα χρησιμοποιείται για τη ρύθμιση της αντίθεσης της οθόνης LCD, ενώ το άλλο χρησιμοποιείται για την παροχή μεταβλητής τάσης στον πίνακα. Σε αυτό το ποτενσιόμετρο ένα ακραίο άκρο του ποτενσιόμετρου συνδέεται με το Vcc και το άλλο άκρο συνδέεται με τη Γείωση. Ο κεντρικός πείρος (μπλε καλώδιο) συνδέεται με τον πείρο P1.7. Αυτός ο πείρος P1.7 θα παρέχει μεταβλητή τάση από 0V (γείωση) έως 3,5V (Vcc). Πρέπει λοιπόν να προγραμματίσουμε τον πείρο P1.7 για να διαβάσουμε αυτήν την μεταβλητή τάση και να την εμφανίσουμε στην οθόνη LCD.
Στην Energia, πρέπει να γνωρίζουμε σε ποιο αναλογικό κανάλι ανήκει ο πείρος P1.7; Αυτό μπορεί να βρεθεί με αναφορά στην παρακάτω εικόνα
Μπορείτε να δείτε τον πείρο P1.7 στη δεξιά πλευρά, αυτός ο πείρος ανήκει στο A7 (Κανάλι 7). Ομοίως, μπορούμε να βρούμε τον αντίστοιχο αριθμό καναλιού και για άλλες καρφίτσες. Μπορείτε να χρησιμοποιήσετε καρφίτσες από A0 έως A7 για ανάγνωση αναλογικών τάσεων εδώ που έχω επιλέξει A7.
Προγραμματισμός του MSP430 για ADC:
Ο προγραμματισμός του MSP430 για ανάγνωση αναλογικής τάσης είναι πολύ απλός. Σε αυτό το πρόγραμμα θα διαβάσει το ανάλογο της τιμής και θα υπολογίσει την τάση με αυτήν την τιμή και στη συνέχεια θα εμφανίσει και τα δύο στην οθόνη LCD. Το πλήρες πρόγραμμα βρίσκεται στο κάτω μέρος αυτής της σελίδας, πιο κάτω εξηγώ το πρόγραμμα σε αποσπάσματα για να σας βοηθήσω να κατανοήσετε καλύτερα.
Ξεκινάμε με τον καθορισμό των καρφιτσών LCD. Αυτά καθορίζουν σε ποιον ακροδέκτη MSP430 συνδέονται οι ακίδες LCD. Μπορείτε να παραπέμψετε τη σύνδεσή σας για να βεβαιωθείτε ότι οι ακίδες είναι συνδεδεμένες αντίστοιχα
# καθορισμός RS 2 # καθορισμός EN 3 # καθορισμός D4 4 # καθορισμός D5 5 # καθορισμός D6 6 # καθορισμός D7 7
Στη συνέχεια, συμπεριλαμβάνουμε το αρχείο κεφαλίδας για την οθόνη LCD. Αυτό καλεί τη βιβλιοθήκη που περιέχει τον κωδικό για το πώς πρέπει να επικοινωνεί το MSP με την οθόνη LCD. Αυτή η βιβλιοθήκη θα εγκατασταθεί στο Energia IDE από προεπιλογή, ώστε να μην χρειάζεται να την προσθέσετε. Βεβαιωθείτε επίσης ότι η λειτουργία Liquid Crystal καλείται με τα ονόματα pin που μόλις ορίσαμε παραπάνω.
#περιλαμβάνω
Μέσα στη λειτουργία εγκατάστασης () , απλώς θα δώσαμε ένα εισαγωγικό μήνυμα που θα εμφανίζεται στην οθόνη LCD. Δεν μπαίνω πολύ βαθιά αφού έχουμε ήδη μάθει πώς να χρησιμοποιούμε LCD με MSP430G2.
lcd.begin (16, 2); // Χρησιμοποιούμε οθόνη LCD 16 * 2 lcd.setCursor (0,0). // Τοποθετήστε τον κέρσορα στην 1η σειρά 1η στήλη lcd.print ("MSP430G2553"); // Εμφάνιση ενός εισαγωγικού μηνύματος lcd.setCursor (0, 1); // ορίστε τον κέρσορα στην 1η στήλη 2η σειρά lcd.print ("- CircuitDigest"); // Εμφανίστε ένα εισαγωγικό μήνυμα
Τέλος, μέσα στη λειτουργία του άπειρου βρόχου () , αρχίζουμε να διαβάζουμε την τάση που παρέχεται στον ακροδέκτη A7. Όπως συζητήσαμε ήδη, ο μικροελεγκτής είναι μια ψηφιακή συσκευή και δεν μπορεί να διαβάσει απευθείας το επίπεδο τάσεων. Χρησιμοποιώντας την τεχνική SAR, το επίπεδο τάσης χαρτογραφείται από 0 έως 1024. Αυτές οι τιμές ονομάζονται τιμές ADC, για να λάβετε αυτήν την τιμή ADC απλά χρησιμοποιήστε την ακόλουθη γραμμή
int val = analogRead (A7); // διαβάστε την τιμή ADC από τον πείρο A7
Εδώ η συνάρτηση analogRead () χρησιμοποιείται για την ανάγνωση της αναλογικής τιμής του πείρου, έχουμε προσδιορίσει το A7 μέσα του αφού έχουμε συνδέσει τη μεταβλητή τάση στον πείρο P1.7. Τέλος αποθηκεύουμε αυτήν την τιμή σε μια μεταβλητή που ονομάζεται " val ". Ο τύπος αυτής της μεταβλητής είναι ακέραιος, επειδή θα λάβουμε τιμές που κυμαίνονται μόνο από 0 έως 1024 σε αυτήν τη μεταβλητή.
Το επόμενο βήμα θα ήταν ο υπολογισμός της τιμής τάσης από την τιμή ADC. Για να το κάνουμε αυτό έχουμε τους ακόλουθους τύπους
Τάση = (Τιμή ADC / Ανάλυση ADC) * Τάση αναφοράς
Στην περίπτωσή μας γνωρίζουμε ήδη ότι η ανάλυση ADC του μικροελεγκτή μας είναι 1024. Η τιμή ADC βρίσκεται επίσης στην προηγούμενη γραμμή και αποθηκεύτηκε η μεταβλητή που ονομάζεται val. Η τάση αναφοράς είναι ίση με την τάση στην οποία λειτουργεί ο μικροελεγκτής. Όταν η πλακέτα MSP430 τροφοδοτείται μέσω καλωδίου USB, τότε η τάση λειτουργίας είναι 3,6V. Μπορείτε επίσης να μετρήσετε την τάση λειτουργίας χρησιμοποιώντας ένα πολύμετρο στο Vcc και τον πείρο γείωσης στην πλακέτα. Έτσι, ο παραπάνω τύπος ταιριάζει στην περίπτωσή μας όπως φαίνεται παρακάτω
τάση πλωτήρα = (float (val) / 1024) * 3.6; // τύποι για τη μετατροπή της τιμής ADC σε τάση
Ίσως να μπερδευτείτε με τη γραμμή float (val). Αυτό χρησιμοποιείται για τη μετατροπή της μεταβλητής "val" από τον τύπο δεδομένων int σε τύπο δεδομένων "float". Αυτή η μετατροπή είναι απαραίτητη γιατί μόνο αν έχουμε το αποτέλεσμα του val / 1024 στο float μπορούμε να το πολλαπλασιάσουμε 3.6. Εάν η τιμή ληφθεί σε ακέραιο θα είναι πάντα 0 και το αποτέλεσμα θα είναι επίσης μηδέν. Μόλις υπολογίσουμε την τιμή και την τάση ADC, το μόνο που μένει είναι να εμφανίσουμε το αποτέλεσμα στην οθόνη LCD που μπορεί να γίνει χρησιμοποιώντας τις ακόλουθες γραμμές
lcd.setCursor (0, 0); // ορίστε τον κέρσορα στη στήλη 0, γραμμή 0 lcd.print ("ADC Val:"); lcd.print (val); // Εμφάνιση τιμής ADC lcd.setCursor (0, 1); // ορίστε τον κέρσορα στη στήλη 0, γραμμή 1 lcd.print ("Voltage:"); lcd.print (τάση); // Τάση οθόνης
Εδώ έχουμε δείξει την τιμή του ADC στην πρώτη γραμμή και την τιμή της τάσης στη δεύτερη γραμμή. Τέλος δίνουμε καθυστέρηση 100 mill δευτερόλεπτα και καθαρίζουμε την οθόνη LCD Αυτή ήταν η τιμή που θα ενημερώνεται για κάθε 100 mils.
Δοκιμή του αποτελέσματός σας!
Τέλος, καταλήγουμε στο διασκεδαστικό μέρος, το οποίο δοκιμάζει το πρόγραμμά μας και παίζει με αυτό. Απλώς κάντε τις συνδέσεις όπως φαίνεται στο διάγραμμα κυκλώματος. Έχω χρησιμοποιήσει ένα μικρό breadboard για να κάνω τις συνδέσεις μου και χρησιμοποίησα καλώδια jumper για να συνδέσω το breadboard στο MSP430. Μόλις ολοκληρωθούν οι συνδέσεις, η δική μου φαίνεται ως εξής.
Στη συνέχεια, ανεβάστε το πρόγραμμα που δίνεται παρακάτω στον πίνακα MSP430 μέσω του Energia IDE. Θα πρέπει να μπορείτε να δείτε το εισαγωγικό κείμενο στην οθόνη LCD, εάν δεν ρυθμίσετε την αντίθεση της οθόνης LCD χρησιμοποιώντας το ποτενσιόμετρο έως ότου δείτε καθαρές λέξεις. Επίσης, δοκιμάστε να πατήσετε το κουμπί επαναφοράς. Εάν τα πράγματα λειτουργούν όπως αναμένεται, θα πρέπει να μπορείτε να δείτε την ακόλουθη οθόνη.
Τώρα αλλάξτε το ποτενσιόμετρο και θα πρέπει επίσης να δείτε ότι η τάση που εμφανίζεται στην οθόνη LCD μεταβάλλεται. Ας επαληθεύσουμε εάν μετράμε σωστά την τάση για να το κάνουμε αυτό, χρησιμοποιήστε ένα πολύμετρο για να μετρήσετε την τάση στο κέντρο του POT και στη γείωση. Η τάση που εμφανίζεται στο πολύμετρο πρέπει να είναι κοντά στην τιμή που εμφανίζεται στην οθόνη LCD, όπως φαίνεται στην παρακάτω εικόνα.
Αυτό είναι, μάθαμε πώς να μετράμε την αναλογική τάση χρησιμοποιώντας ADC της πλακέτας MSP430. Τώρα μπορούμε να συνδέσουμε πολλούς αναλογικούς αισθητήρες με τον πίνακα μας για να διαβάσουμε παραμέτρους σε πραγματικό χρόνο. Ελπίζω να καταλάβατε το σεμινάριο και να σας άρεσε να το μαθαίνετε, εάν έχετε προβλήματα, επικοινωνήστε με την παρακάτω ενότητα σχολίων ή μέσω των φόρουμ. Ας ακολουθήσουμε ένα άλλο σεμινάριο του MSP430 με ένα άλλο νέο θέμα.