How to Read the Signal from a Hall Effect Sensor Using an Arduino

Πώς να διαβάσετε το σήμα από έναν αισθητήρα φαινομένου Hall χρησιμοποιώντας Arduino

Οι αισθητήρες φαινομένου Hall είναι μία από τις επιλογές Ανάδρασης που προσφέρουμε στους γραμμικούς ενεργοποιητές μας για παροχή πληροφοριών θέσης και Ταχύτητας. Τα PA-04-HS και PA-100 διαθέτουν αισθητήρες φαινομένου Hall στις τυπικές μονάδες. Ενώ αρκετοί από τους υπόλοιπους ενεργοποιητές μας μπορούν να παραγγελθούν κατόπιν ζήτησης με αισθητήρες φαινομένου Hall.

Περιηγηθείτε στη γκάμα μικροελεγκτών Arduino για απόλυτο έλεγχο ενεργοποιητών!

ΤΙ ΕΙΝΑΙ ΕΝΑΣ ΑΙΣΘΗΤΗΡΑΣ ΦΑΙΝΟΜΕΝΟΥ HALL;

Ένας αισθητήρας φαινομένου Hall είναι ένα ηλεκτρονικό εξάρτημα που παράγει τάση βάσει της έντασης του μαγνητικού πεδίου που διέρχεται από αυτό. Όταν αυτός ο αισθητήρας συνδυάζεται με κύκλωμα ανίχνευσης κατωφλίου τάσης, μπορεί να παραχθεί σήμα με δύο καταστάσεις. Στους ενεργοποιητές μας, ο αισθητήρας φαινομένου Hall έχει σχεδιαστεί ώστε να παράγει σήμα δύο καναλιών με κυματομορφές ποσοτικοποιημένες σε μία από δύο δυαδικές καταστάσεις: on ή off. Αυτά τα δύο σήματα ανεβαίνουν και πέφτουν καθώς ο ηλεκτρικός Κινητήρας περιστρέφεται, με διαφορά φάσης 90° μεταξύ τους, όπως φαίνεται παρακάτω. Η συχνότητα αυτών των παλμών σε σχέση με την αλλαγή θέσης στον ενεργοποιητή εξαρτάται από τη συνολική τους ανάλυση και διαφέρει μεταξύ των διαφόρων ενεργοποιητών μας.

Hall effect sensors 

ΠΩΣ ΔΙΑΒΑΖΟΝΤΑΙ ΑΥΤΑ ΤΑ ΣΗΜΑΤΑ HALL;

Πώς να χρησιμοποιήσετε έναν αισθητήρα φαινομένου Hall

Κατά την ανάγνωση ενός ψηφιακού σήματος σε έναν μικροελεγκτή υπάρχουν δύο βασικές μέθοδοι: polling και interrupts. Το polling είναι μια προγραμματισμένη μέθοδος κατά την οποία ένας μικροελεγκτής ελέγχει περιοδικά την κατάσταση μιας εισόδου για να δει αν υπήρξε αλλαγή. Οι διακοπές (interrupts), αντίθετα, είναι ένας μηχανισμός υλικού που μετατοπίζει άμεσα την εστίαση του προγράμματος του μικροελεγκτή όταν το σήμα αλλάζει σε μια είσοδο. Καθεμία από αυτές τις μεθόδους έχει πλεονεκτήματα και μειονεκτήματα και καθεμία ταιριάζει καλύτερα σε διαφορετικές εφαρμογές. Στη δική μας περίπτωση, θέλουμε να γνωρίζουμε την ακριβή στιγμή που ένα σήμα αλλάζει κατάσταση, επομένως θα χρησιμοποιήσουμε interrupts. Για να χρησιμοποιήσετε έναν αισθητήρα φαινομένου Hall με μικροελεγκτές Arduino χρησιμοποιείται μια διακοπή (interrupt). Δημιουργώντας μια ISR (Interrupt Service Routine – ρουτίνα εξυπηρέτησης διακοπής), το Arduino μπορεί να εκτελεί άμεσα ένα τμήμα κώδικα όταν ανιχνευτεί μια ορισμένη αλλαγή σε μια καθορισμένη είσοδο. Ένα παράδειγμα ISR για Arduino φαίνεται παρακάτω· μια τροποποιημένη εκδοχή που κατευθύνει τα ανιχνευμένα σήματα σε LEDs είναι ένας τρόπος δοκιμής ενός αισθητήρα φαινομένου Hall.

Προγραμματισμός ενός Arduino για ανάγνωση αισθητήρων φαινομένου Hall - μέθοδος interrupt

// απαιτούνται καθολικές volatile μεταβλητές για να περαστούν δεδομένα μεταξύ

// του κύριου προγράμματος και των ISR

volatile byte signalA;
volatile byte signalB;

// τα pins που μπορούν να χρησιμοποιηθούν με interrupts εξαρτώνται από την πλακέτα που

// χρησιμοποιείτε
const byte inputA = 2;
const byte inputB = 3;

void setup() {
  // ενεργοποιήστε τις εσωτερικές αντιστάσεις στις εισόδους
  pinMode(inputA, INPUT_PULLUP);
  pinMode(inputB, INPUT_PULLUP);
  // διαβάστε την αρχική κατάσταση των εισόδων
  signalA = digitalRead(inputA);
  signalB = digitalRead(inputB);

  // θα ανιχνεύει ανερχόμενο ή κατερχόμενο μέτωπο
  attachInterrupt(digitalPinToInterrupt(inputA),signalA_ISR,CHANGE);
  attachInterrupt(digitalPinToInterrupt(inputB),signalB_ISR,CHANGE);

}

void loop() {
  // Εδώ μπορεί να χρησιμοποιηθεί η πληροφορία του σήματος στο πρόγραμμα
}

void signalA_ISR() {
  // όταν ανιχνεύεται μεταβολή, θα είναι πάντα

  // το αντίθετο της τρέχουσας κατάστασης

  signalA = !signalA;
}

void signalB_ISR() {
  signalB = !signalB;
}

Το PA-04-HS μας διαθέτει ενσωματωμένη Ανάδραση φαινομένου Hall!

ΤΙ ΠΡΕΠΕΙ ΝΑ ΛΑΒΕΤΕ ΥΠΟΨΗ ΣΤΗΝ ΕΦΑΡΜΟΓΗ;

Δεδομένου ότι τα σήματα που διαβάζουμε θα είναι υψηλής συχνότητας, πρέπει να γίνουν ορισμένες σκέψεις. Πρώτον, πόσο χρόνο θα χρειαστεί το πρόγραμμα για να εκτελέσει τον κώδικα στην ISR; Πόσα ξεχωριστά σήματα χρειάζεται να έχουν ISR; Πόσο γρήγορη είναι η συχνότητα ρολογιού του μικροελεγκτή;

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

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

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

ΤΙ ΣΥΜΒΑΙΝΕΙ ΑΝ Ο ΜΙΚΡΟΕΛΕΓΚΤΗΣ ΔΕΝ ΕΙΝΑΙ ΑΡΚΕΤΑ ΓΡΗΓΟΡΟΣ;

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