Arts >> Τέχνες και Ψυχαγωγία >  >> Μαγεία >> Μαγικά κόλπα

Πώς γίνεται η αναπήδηση ενός διακόπτη;

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

Κατανόηση του προβλήματος:

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

* Πολλαπλοί κανόνες ενεργοποίησης: Αυτή η αναπήδηση μπορεί να δημιουργήσει πολλαπλά ηλεκτρικά σήματα, παρόλο που ο χρήστης σκόπευε μόνο ένα μόνο πάτημα. Αυτό μπορεί να προκαλέσει ακούσια συμπεριφορά σε κυκλώματα, ειδικά σε αυτά που είναι ευαίσθητα στο χρονισμό.

Γιατί Debounce;

* Ακριβής ερμηνεία σήματος: Αποτρέπει τα ψευδή σήματα από το να επηρεάσουν τη λογική ή τις λειτουργίες ελέγχου του κυκλώματος σας.

* Αξιόπιστη λειτουργία: Διασφαλίζει ότι το κύκλωμά σας αντιδρά μόνο μία φορά σε ένα μόνο πάτημα διακόπτη.

Μέθοδοι απελευθέρωσης:

1. Debouncing υλικού:

* Κύκλωμα RC: Η πιο κοινή μέθοδος. Μια αντίσταση (R) και ένας πυκνωτής (C) συνδέονται παράλληλα κατά μήκος του διακόπτη. Ο πυκνωτής φορτίζεται και εκφορτίζεται αργά, φιλτράροντας τα σήματα ταχείας αναπήδησης.

* Πώς λειτουργεί: Όταν ο διακόπτης κλείνει, ο πυκνωτής φορτίζεται μέσω της αντίστασης. Τα σήματα αναπήδησης είναι πολύ γρήγορα για να φορτιστεί πλήρως ο πυκνωτής, επομένως περνά μόνο ένα καθαρό σήμα.

* Βάσει διόδου: Χρησιμοποιεί μια δίοδο για να αποτρέψει την υπερβολική γρήγορη εκφόρτιση του πυκνωτή. Αυτό εξασφαλίζει ένα καθαρό σήμα, ακόμα κι αν η αναπήδηση είναι παρατεταμένη.

2. Λογισμικό Debouncing:

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

* Πώς λειτουργεί: Ένα χρονόμετρο ξεκινά όταν πατηθεί για πρώτη φορά ο διακόπτης. Οποιεσδήποτε περαιτέρω αλλαγές εντός της διάρκειας του χρονοδιακόπτη αγνοούνται. Μετά τη λήξη του χρονοδιακόπτη, η νέα κατάσταση διακόπτη γίνεται αποδεκτή.

* Κρατική μηχανή: Χρησιμοποιεί μια μηχανή κατάστασης για την παρακολούθηση της κατάστασης του διακόπτη. Το μηχάνημα αλλάζει καταστάσεις μόνο μετά από καθυστέρηση, φιλτράροντας τα σήματα αναπήδησης.

3. Εξειδικευμένα IC Debouncing:

* Απόρριψη IC: Σχεδιασμένο ειδικά για την εκτόξευση σημάτων, παρέχοντας ισχυρές και αξιόπιστες λύσεις.

Επιλογή της σωστής μεθόδου:

* Αποσύνδεση υλικού: Το καλύτερο για απλά κυκλώματα και όταν η σχέση κόστους-αποτελεσματικότητας είναι σημαντική.

* Αποτροπή λογισμικού: Προσφέρει μεγαλύτερη ευελιξία και μπορεί να χειριστεί πιο περίπλοκα σενάρια.

* Εξειδικευμένα IC Debouncing: Ιδανικό για εφαρμογές που απαιτούν υψηλή ακρίβεια, ταχύτητα ή όταν ο χώρος είναι περιορισμένος.

Βασικά ζητήματα:

* Χρόνος αναπήδησης: Η καθυστέρηση ή το χρονικό παράθυρο που χρησιμοποιείται για την αναπήδηση θα πρέπει να είναι μεγαλύτερη από τη διάρκεια της αναπήδησης του διακόπτη, αλλά μικρότερη από τον αναμενόμενο χρόνο απόκρισης του χρήστη.

* Πολυπλοκότητα κυκλώματος: Η επιλεγμένη μέθοδος εκτόξευσης θα πρέπει να είναι κατάλληλη για την πολυπλοκότητα του κυκλώματος και τους διαθέσιμους πόρους.

Παράδειγμα κώδικα (Λογισμικό που αναπηδά με Arduino):

``c++

const int switchPin =2; // Καρφίτσα συνδεδεμένη με το διακόπτη

int switchState =0; // Αρχική κατάσταση του διακόπτη

ανυπόγραφο long lastDebounceTime =0; // Την τελευταία φορά που ο διακόπτης άλλαξε κατάσταση

const unsigned long debounceDelay =50; // Καθυστέρηση σε χιλιοστά του δευτερολέπτου

void setup() {

pinMode(switchPin, INPUT_PULLUP); // Διαμόρφωση του pin για είσοδο

Serial.begin(9600);

}

void loop() {

int reading =digitalRead(switchPin);

// Εάν ο διακόπτης άλλαξε, επαναφέρετε το χρονόμετρο

if (ανάγνωση !=switchState) {

lastDebounceTime =millis();

}

if ((millis() - lastDebounceTime)> debounceDelay) {

// Εάν η καθυστέρηση είναι αρκετά μεγάλη, θεωρήστε την αλλαγή έγκυρη

switchState =ανάγνωση;

// Επεξεργαστείτε την κατάσταση του διακόπτη

if (switchState ==LOW) {

Serial.println("Πατήθηκε ο διακόπτης!");

} αλλο {

Serial.println("Ο διακόπτης κυκλοφόρησε!");

}

}

}

```

Αυτός ο κώδικας του Arduino υλοποιεί την αναπήδηση λογισμικού ελέγχοντας την κατάσταση του διακόπτη και συγκρίνοντάς την με την προηγούμενη κατάσταση. Εάν εντοπιστεί μια αλλαγή, επαναφέρει ένα χρονόμετρο. Μόνο μετά από μια ορισμένη καθυστέρηση (debounceDelay) η αλλαγή θεωρείται έγκυρη και υποβάλλεται σε επεξεργασία.

Μαγικά κόλπα

Σχετικές κατηγορίες