Ανιχνευτής αφής χωρητικότητας με μικροελεγκτή EFM8

Spy κρυφή κάμερα usb καταγραφικό με ανίχνευση κίνησης (Ενδέχεται 2019).

$config[ads_text] not found
Anonim

Ανιχνευτής αφής χωρητικότητας με μικροελεγκτή EFM8


Αυτό το πρόγραμμα διερευνά την τεχνολογία ανίχνευσης χωρητικότητας αφής χρησιμοποιώντας μια πλακέτα αξιολόγησης για έναν μικροελεγκτή EFM8 Sleepy Bee.

Σχετική πληροφορία

  • Έλεγχος μιας οθόνης LCD μέσω SPI: Εισαγωγή στην ανάπτυξη έργου με μικροελεγκτή EFM8
  • Έλεγχος περιβάλλοντος: Εμφανίζει μετρήσεις σε οθόνη LCD
  • Εισαγωγή στην χωρητική αισθητήρα αφής
  • Κυκλώματα και τεχνικές για την εφαρμογή χωρητικής αφύπνισης

Απαιτούμενο υλικό / λογισμικό

  • SLSTK2010A Κιτ εκκίνησης για ύπνο μελισσών
  • Studio απλότητας

Η επιτροπή Dev

Εκτός από έναν μικροελεγκτή που διαθέτει ενσωματωμένη μονάδα χωρητικότητας, η πλακέτα αξιολόγησης SLSTK2010A έχει μια δομή PCB που μπορεί να λειτουργήσει ως διεπαφή capacitive-touch. Μπορείτε να το δείτε στο κάτω δεξιά μέρος του πίνακα:

Στην πραγματικότητα υπάρχουν τέσσερις αισθητήρες εδώ. Το εσωτερικό του κύκλου είναι ένας μεμονωμένος αισθητήρας. Η περιοχή μεταξύ του μικρότερου κύκλου και του μεγαλύτερου κύκλου είναι στην πραγματικότητα τρεις αισθητήρες που αλληλεπιδρούν κατά τέτοιο τρόπο ώστε να σχηματίζουν ένα κυκλικό ρυθμιστικό, δηλαδή τα σήματα των τριών αισθητήρων μπορούν να υποβληθούν σε επεξεργασία έτσι ώστε να εντοπιστεί η θέση ενός πρέσσου. Στην επόμενη φωτογραφία μπορείτε να δείτε το εξειδικευμένο σχήμα αισθητήρα αλληλομανδαλισμού που καθιστά δυνατή αυτή τη λειτουργία και στη συνέχεια το σχέδιο αισθητήρα υποδεικνύεται πολύ πιο σαφώς στο διάγραμμα που ακολουθεί.

Γραφική ευγένεια του Mark Hughes.

Δεν έχουμε ανάγκη από την ικανότητα κυκλικής ολίσθησης σε αυτό το άρθρο. Παρόλα αυτά, θα χρησιμοποιήσουμε έναν από τους αισθητήρες κυκλικής ολίσθησης. Γιατί ρωτάς? Απλή: Ο μεμονωμένος αισθητήρας που αντιστοιχεί στον μικρότερο κύκλο δεν είναι συνδεδεμένος στον μικροελεγκτή από προεπιλογή και ο μόνος τρόπος για να επιτευχθεί η εν λόγω σύνδεση είναι μέσω ενός αποτυπώματος αντιστάσεων μηδενικού ωμού που είναι ελαφρώς μεγαλύτερο από έναν κόκκο άμμου. Επιπλέον, το εν λόγω αποτύπωμα είναι επικίνδυνα κοντά σε άλλα εξαρτήματα, συμπεριλαμβανομένου του μικροελεγκτή. Έτσι, αντί να χρησιμοποιήσω το κολλητήρι μου για να λιώνω το EFM8 και να κακοποιήσω μια κοντινή αντίσταση ή δύο, αποφάσισα να χρησιμοποιήσω μόνο έναν από τους άλλους αισθητήρες.

Αλλαγή χωρητικότητας

Θα ξεκινήσουμε χρησιμοποιώντας ένα από τα demo έργα που διατίθενται στο Simplicity Studio:

Πραγματοποιήστε λήψη του προγράμματος και πατήστε κάπου στον κυκλικό ρυθμιστικό και στην οθόνη LCD θα εμφανιστεί ένα λευκό οκτάγωνο που αντιστοιχεί στη θέση του δακτύλου σας.

Ας χρησιμοποιήσουμε αυτό το πρόγραμμα για να δούμε τι ακριβώς συμβαίνει με το σήμα κεφαλής. Εάν δεν είστε εξοικειωμένοι με την τεχνολογία capacitive-touch-sense, είναι καλή ιδέα να διαβάσετε τα δύο άρθρα σχετικά με το καπέλο που αναφέρονται παραπάνω στην ενότητα "Σχετικές πληροφορίες". Εάν δεν γνωρίζετε πολλά για την ανίχνευση χωρητικότητας και δεν έχετε τη διάθεση για ένα τεχνικό άρθρο, εδώ είναι η κατώτατη γραμμή: Ένα τμήμα του PCB έχει σχεδιαστεί έτσι ώστε να σχηματίζει έναν (συνήθως πυκνωτή) πυκνωτή. Όταν το δάχτυλό σας έρχεται σε επαφή με αυτόν τον πυκνωτή PCB, η συνολική χωρητικότητα αυξάνεται. Ο πυκνωτής PCB ενσωματώνεται σε κάποιο είδος κυκλώματος το οποίο μπορεί να ανιχνεύσει αυτή την αλλαγή στην χωρητικότητα με την ανάλυση των μεταβολών στα χαρακτηριστικά χρονισμού ενός εφαρμοζόμενου σήματος.

Δεν έχω διαβάσει κάθε λέξη στο κεφάλαιο με το κεφάλαιο του εγχειριδίου αναφοράς Sleepy Bee, αλλά μου φαίνεται ότι δεν υπάρχουν σαφείς πληροφορίες σχετικά με την συγκεκριμένη τεχνική ανίχνευσης μεταβολής χωρητικότητας που χρησιμοποιείται από το υλικό του EFM8. Ας δούμε λοιπόν μία από τις καρφίτσες και να δούμε τι συμβαίνει. Έχω δει το P0.2 και η οθόνη LCD μου λέει με ευλάβεια ποια ενότητα του κυκλικού ρυθμιστικού αντιστοιχεί στο σήμα P0.2 (περισσότερα για αυτό αργότερα).

Το πεδίο αποκαλύπτει μια περιοδική κυματομορφή ράμπας:

Η ακόλουθη δέσμη πεδίων δείχνει το πλάτος του παλμού ράμπας όταν δεν έχω το δάχτυλό μου πουθενά κοντά στην περιοχή P0.2 του κυκλικού ρυθμιστικού.

Η επόμενη λήψη εμβέλειας σάς δείχνει την εμφάνιση της κυματομορφής όταν πιέζω σταθερά τον αισθητήρα P0.2.

Μπορεί να μην είναι πολύ προφανές στις λήψεις ενός πλαισίου, αλλά όταν κοιτάζω τη ζωντανή οθόνη βλέπω καθαρά ότι η επαφή με το δάκτυλο προκαλεί μείωση της τάσης αιχμής και αλλαγή στο τμήμα εκφόρτισης της κυματομορφής ράμπας. Η αλλαγή στο χαρακτηριστικό απόρριψης είναι ακριβώς αυτό που θα περιμένατε με αυξημένη χωρητικότητα: η μείωση της τάσης είναι ελαφρώς πιο σταδιακή και επομένως χρειάζεται ελαφρώς περισσότερος χρόνος για να επιστρέψει η τάση στα 0 V.

Δεν έχω δει μια σημαντική αλλαγή στη συχνότητα που προκύπτει από την επαφή με τα δάχτυλα, οπότε μπορώ μόνο να υποθέσω ότι η χωρητικότητα του Sleepy Bee σε "ψηφιακό μετατροπέα" (όπως φαίνεται στο μπλοκ διάγραμμα παρακάτω) ανιχνεύει τις αλλαγές στην χωρητικότητα με βάση τις αλλαγές στο τμήμα εκροής της κυματομορφής ράμπας, ίσως σε συνδυασμό με μεταβολές εύρους.

Δομικό διάγραμμα για το δομοστοιχείο χωρητικότητας, που λαμβάνεται από το εγχειρίδιο αναφοράς Sleepy Bee, σελ. 154.

Το φαινόμενο του παρατηρητή

Θα ήθελα να μάθω λίγα περισσότερα σχετικά με τις μετρήσεις της EFM8, αλλά η ανίχνευση με παλμογράφο δεν είναι ο καλύτερος τρόπος για να το κάνετε αυτό. Ο λόγος θα πρέπει να είναι ξεκάθαρος από το μικρό λευκό οκτάγωνο που εμφανίστηκε μόλις ερευνήσαμε το σήμα αισθητήρα κεφαλής - στην περίπτωση αυτή ο αισθητήρας παλμογράφου και το κύκλωμα εισόδου λειτουργούν ως μάλλον ογκώδες και ακριβό αντικαταστάτη για ένα δάκτυλο. Δεν μπορούμε να δούμε την προεπιλεγμένη κατάσταση της κυματομορφής επειδή με την εφαρμογή του καθετήρα προσθέτουμε στον αισθητήρα μια σχετικά μεγάλη χωρητικότητα.

Αντίθετα, χρειαζόμαστε μια οθόνη πραγματικού χρόνου που αναφέρει τις μετρήσεις χωρητικότητας χωρίς να παρεμβαίνει στον αισθητήρα. Για αυτό θα χρειαστούμε την οθόνη LCD και κάποια προσαρμοσμένη firmware.

Μια παρακολούθηση χωρητικότητας πραγματικού χρόνου

Το σχέδιο εδώ είναι να ενεργοποιήσετε τη βασική λειτουργία συναγερμού cap-cap στο EFM8 και στη συνέχεια να εμφανίσετε τις μετρήσεις χωρητικότητας στην οθόνη LCD. Αυτό θα μας επιτρέψει να δούμε τις ακριβείς αλλαγές στη μετρούμενη χωρητικότητα που συμβαίνουν σε απόκριση σε οποιοδήποτε είδος αλληλεπίδρασης μεταξύ του αισθητήρα και του δακτύλου.

Η πλειοψηφία των εργασιών υλικολογισμικού που εμπλέκονται σε αυτό το έργο σχετίζεται με την οθόνη LCD, ενσωματώνοντας πίνακες δεδομένων pixel για τα ψηφία, γράφοντας δεδομένα εικονοστοιχείων στη μονάδα LCD, εμφανίζοντας μια δυαδική τιμή ως δέκατη βάση. Δεν πρόκειται να πω πολλά για αυτά τα θέματα επειδή συζητούνται σε προηγούμενα άρθρα. αυτό είναι ιδιαίτερα σημαντικό επειδή η αριθμητική απεικόνιση είναι παρόμοια με αυτή που κάνω σε αυτό το έργο. Ο σύνδεσμος προς το κάτω μέρος αυτού του άρθρου σας δίνει πρόσβαση σε όλα τα αρχεία προέλευσης και έργου και θα πρέπει να είστε σε θέση να συγκεντρώσετε αρκετές πληροφορίες μελετώντας τον κώδικα, ο οποίος χρησιμοποιεί περιγραφικά αναγνωριστικά στοιχεία και σχολιάζει καλά.

Μια σημαντική διαφορά που θα αναφέρω είναι η διασύνδεση SPI. Σε προηγούμενα έργα χρησιμοποίησα υλικολογισμικό με διακοπή για επικοινωνία SPI μεταξύ του EFM8 και της μονάδας LCD, αλλά σε αυτό το έργο χρησιμοποιώ μια απλούστερη ερμηνεία υλοποίησης (θυμηθείτε την αρχή KISS).

Εδώ είναι το pinout:

CS0: Ο ελεγκτής Cap-Sense

Η ενότητα Sleepy Bee's cap-sense είναι ένα περιφερειακό υψηλής απόδοσης που διαχειρίζεται τις περισσότερες λεπτομέρειες που αφορούν τη μέτρηση μικρών μεταβολών της χωρητικότητας. Περιέχει διάφορα χαρακτηριστικά που πιθανότατα δεν θα χρησιμοποιήσω ποτέ ούτε θα δώσω προσοχή, αλλά είμαι βέβαιος ότι είναι πολύτιμα για τους ανθρώπους που σχεδιάζουν τα προϊόντα ηλεκτρονικών ειδών ευρείας κατανάλωσης.

Ένα χαρακτηριστικό που μου αρέσει είναι η ολοκληρωμένη συσσωρευμένη και μέση λειτουργικότητα. Οι μετρήσεις χωρητικής ανάλυσης μπορούν να είναι θορυβώδεις, επομένως είναι πρακτικό το γεγονός ότι το EFM8 μπορεί να συσσωρευτεί αυτόματα και να μετρήσει μόνο 64 δείγματα.

Όταν ενεργοποιείτε τη "Βιβλιοθήκη ανίχνευσης χωρητικότητας" στο διαμορφωτή υλικού, θα παρατηρήσετε ότι το IDE εισάγει αυτόματα δύο λειτουργίες που σχετίζονται με την έννοια της κεφαλίδας στην ρουτίνα main (). Δεν ξέρω τι κάνουν αυτά, και για να είμαι ειλικρινής, έχω περιορισμένη υπομονή για τον κώδικα βιβλιοθηκών με αυτόματο πιλότο που με αφήνει μόνο πιο αστείο σε αυτό που πραγματικά συμβαίνει μέσα στον μικροελεγκτή μου. Έτσι, διαγράψαμε αυτές τις κλήσεις λειτουργίας και διαμορφώσαμε τη μονάδα CS0 με μη αυτόματο τρόπο. (Για να είμαι δίκαιος, εκτιμώ σίγουρα τα εργαλεία διαμόρφωσης υλικού που μειώνουν σημαντικά την περίπλοκη και επιρρεπή σε σφάλματα διαδικασία ρύθμισης και εκκαθάρισης όλων των σωστών δυαδικών ψηφίων σε πολλά μητρώα ειδικών λειτουργιών.)

Εδώ είναι η κύρια λειτουργία ():

 int main(void) { //call hardware initialization routine enter_DefaultMode_from_RESET(); //give the EFM8 control over the LCD module EFM_DISP_ENABLE = HIGH; //initialize chip select to LOW (inactive) SPI_CS = LOW; //clear the LCD screen LCD_Clear_All(); SFRPAGE = CAPSENSE_PAGE; //enable the cap-sense module CS0CN0_CSEN = TRUE; //select 16-bit conversions CS0MD2 &= ~(BIT7|BIT6); CS0MD2 |= (BIT7|BIT6); //make sure that the end-of-measurement interrupt flag is cleared CS0CN0_CSINT = CLEARED; while(1) { //initiate a capacitance measurement CS0CN0_CSBUSY = TRUE; while(!CS0CN0_CSINT); CS0CN0_CSINT = CLEARED; //print the measured value on the LCD Update_LCD(CS0D); Delay_10ms(10); } } 

Η ρύθμιση συσσώρευσης που θέλω είναι 64 δείγματα, αλλά δεν χρειάζεται να εκτελέσω με μη αυτόματο τρόπο αυτό το βήμα ρύθμισης παραμέτρων επειδή η ρύθμιση συσσώρευσης μεταφέρεται από την επιλογή που επέλεξα στο εργαλείο διαμορφωτή υλικού. Επίσης, η προεπιλεγμένη ενέργεια έναρξης μέτρησης γράφει ένα 1 σε CSBUSY (bit 4 στο μητρώο CS0CN0), οπότε δεν είχα να το ρυθμίσετε αυτό γιατί το CSBUSY είναι το πώς θέλω να ξεκινήσω τις μετρήσεις. Έβαλα το κέρδος σε 4x (η προεπιλογή είναι 8x), επειδή, με το κέρδος στα 8x, φαινόταν σαν να έφτασα ή να πλησιάσω τη μέγιστη τιμή μέτρησης όταν πιέζω πολύ σταθερά στον αισθητήρα. το κέρδος, όπως και η ρύθμιση συσσώρευσης, μπορεί να επιλεγεί μέσω του διαμορφωτή υλικού.

Όπως μπορείτε να δείτε από τη δήλωση Update_LCD (CS0D), ο αριθμός που εμφανίζεται στην οθόνη είναι μόνο η ακατέργαστη τιμή από τον καταχωρητή δεδομένων της μονάδας αισθητήρα cap-sense. Δεν είναι η μετρηθείσα χωρητικότητα σε picofarads ή σε οποιαδήποτε άλλη μονάδα, και επιπλέον η απόλυτη χωρητικότητα είναι άσχετη - η χωρητική τεχνολογία βασίζεται σε μεταβολές της χωρητικότητας.

Το υλικολογισμικό σε δράση

Μπορείτε να κατεβάσετε τον κωδικό εδώ:

Αρχεία προέλευσης και έργου

Εδώ είναι μια μικρή λεπτομέρεια που θα μπορούσε να σας εξοικονομήσει κάποιο πρόβλημα: Όταν ήμουν για πρώτη φορά δοκιμάζοντας τη διασύνδεση LCD, παρατήρησα φαινομενικά τυχαίες δυσλειτουργίες εμφάνισης. Τελικά κατάλαβα ότι το πρόγραμμα εντοπισμού σφαλμάτων παρεμποδίζει τις επικοινωνίες SPI, επειδή το πρόβλημα συνέβη μόνο όταν τρέχω το πρόγραμμα ως μέρος μιας περιόδου εντοπισμού σφαλμάτων. Όταν έκλεισα τη σύνδεση μεταξύ του Simplicity Studio και του μικροελεγκτή και άφησα το πρόγραμμα EFM8 να τρέξει ανεξάρτητα, όλα ήταν καλά.

Στο επόμενο βίντεο μπορείτε να δείτε ότι μια πρέσα με το δάχτυλο δημιουργεί μια μεγάλη αλλαγή στη μετρούμενη χωρητικότητα - πολύ μεγαλύτερη από τις μεταβολές θορύβου, οι οποίες είναι μερικές μόνο μετρήσεις όταν το δάκτυλο δεν βρίσκεται κοντά στον αισθητήρα. Αυτό δείχνει πόσο αποτελεσματικά θα μπορούσατε να ανιχνεύσετε ένα δάχτυλο απλά επιλέγοντας ένα κατάλληλο όριο.

συμπέρασμα

Γνωρίζουμε τώρα μια καλή υπόθεση για το 1) πως η υπομονάδα αισθητήρα cap-sleep αισθάνεται τις αλλαγές στην χωρητικότητα και 2) πώς να ενεργοποιήσετε τη μονάδα και να εκτελέσετε τις βασικές μετρήσεις. Θα συνεχίσουμε να εργαζόμαστε με τη λειτουργικότητα αυτής της αξιολόγησης της ικανότητας επαφής της επιτροπής αξιολόγησης στα μελλοντικά άρθρα.

Δώστε αυτό το έργο μια δοκιμή για τον εαυτό σας! Αποκτήστε το BOM.