Hall-Effekt-Sensoren sind eine der Rückmeldungsoptionen, die wir in unseren linearen Aktuatoren anbieten, um Positions- und Geschwindigkeitsinformationen bereitzustellen. Unsere PA-04-HS und PA-100 haben Hall-Effekt-Sensoren in den Standardeinheiten. Während mehrere unserer anderen Aktuatoren mit Hall-Effekt-Sensoren individuell bestellt werden können.
WAS IST EIN HALL-EFFEKT-SENSOR?
Ein Hall-Effekt-Sensor ist ein elektronisches Bauteil, das eine Spannung erzeugt, die auf der Stärke des durchfließenden Magnetfeldes basiert. Wenn dieser Sensor mit einer Schaltung zur Spannungsgrenzwertdetektion kombiniert wird, kann ein Signal mit zwei Zuständen erzeugt werden. In unseren Aktuatoren ist der Hall-Effekt-Sensor so konzipiert, dass er ein Zwei-Kanal-Signal mit den quantifizierten Wellenformen in einem der beiden binären Zustände erzeugt: ein oder aus. Diese beiden Signale steigen und fallen, während der Elektromotor mit einem Phasenunterschied von 90° zwischen ihnen rotiert, wie unten gezeigt. Die Frequenz dieser Pulse in Bezug auf die Positionsänderung im Aktuator hängt von ihrer Gesamtauflösung ab und variiert zwischen unseren verschiedenen Aktuatoren.
WIE WERDEN DIESE HALL-SIGNALE GELESEN?
Wie man einen Hall-Effekt-Sensor verwendet
Beim Lesen eines digitalen Signals auf einem Mikrocontroller gibt es zwei Hauptmethoden: Abfragen und Interrupts. Abfragen ist eine programmierte Methode, bei der ein Mikrocontroller regelmäßig den Zustand eines Eingangs überprüft, um zu sehen, ob es eine Änderung gegeben hat. Interrupts sind hingegen ein Hardwaremechanismus, der sofort den Fokus des Mikrocontroller-Programms verschiebt, wenn sich das Signal an einem Eingang ändert. Jede dieser Methoden hat ihre Vor- und Nachteile, und jede hat Anwendungen, für die sie besser geeignet ist. In unserem Fall möchten wir den genauen Moment wissen, in dem sich ein Signal ändert, daher verwenden wir Interrupts. Um einen Hall-Effekt-Sensor mit Arduino-Mikrocontrollern zu verwenden, wird ein Interrupt verwendet. Durch die Erstellung einer ISR oder Interrupt-Service-Routine kann der Arduino so programmiert werden, dass er einen Codeabschnitt sofort ausführt, wenn eine definierte Änderung an einem bestimmten Eingang erkannt wird. Ein Beispiel für eine ISR für einen Arduino ist unten gezeigt; eine modifizierte Version, die die erkannten Signale an LEDs weiterleitet, ist eine Möglichkeit, einen Hall-Effekt-Sensor zu testen.
Programmierung eines Arduinos zum Lesen von Hall-Effekt-Sensoren - Interrupt-Methode
|
// Globale volatile Variablen sind erforderlich, um Daten zwischen dem // Hauptprogramm und den ISRs zu übergeben volatile byte signalA; // Die Pins, die mit Interrupts verwendet werden können, hängen von dem Board ab, das Sie // verwenden // wird einen steigenden oder fallenden Flankenwechsel erkennen // dem Gegenteil des aktuellen Zustands entsprechen signalA = !signalA; |
WAS MUSS IN DER ANWENDUNG BEACHTET WERDEN?
Da die Signale, die wir lesen, hochfrequent sein werden, müssen einige Überlegungen angestellt werden. Zunächst, wie lange wird das Programm benötigen, um den Code in der ISR auszuführen? Wie viele separate Signale müssen ISRs haben? Wie schnell ist die Taktfrequenz des Mikrocontrollers?
Ein Problem, das in einem Programm mit einer langen ISR auftreten kann, ist, dass die ISR erneut ausgelöst wird, bevor sie den Code, den sie beim vorherigen Mal enthielt, abgeschlossen hat. Es wird empfohlen, die minimale Menge an notwendigem Code in einer ISR zu halten, um dieses Problem zu vermeiden.
Im obigen Beispielcode werden zwei Signale mit separaten Interrupts eingerichtet. Beide Signale sind erforderlich, um die Bewegungsrichtung des linearen Aktuators zu erkennen; dies geschieht, indem überprüft wird, welches Signal zuerst von niedrig auf hoch wechselt. Der Nachteil der Aktivierung von Interrupts für beide Signale besteht darin, dass doppelt so viel ISR-Code ausgeführt wird. In Anwendungen, in denen die Bewegungsrichtung des Aktuators nicht erforderlich ist oder bereits aus dem laufenden Programm ersichtlich ist, müsste nur ein Signal mit einer Interrupt-Service-Routine eingerichtet werden.
Einige Mikrocontroller haben die Fähigkeit, die Taktfrequenz zu erhöhen, um schneller zu sein. Die Taktfrequenz ändert die Geschwindigkeit, mit der der Mikrocontroller das Programm ausführen kann. Wenn die Frequenz der gelesenen Signale hoch ist, muss die Taktfrequenz möglicherweise erhöht werden, um Schritt zu halten. Es ist jedoch energieeffizienter, eine so langsame Taktfrequenz wie möglich zu verwenden, die die Anwendung zulässt.
WAS PASSIERT, WENN DER MIKROCONTROLLER NICHT SCHNELL GENUG IST?
Nachdem die obigen Überlegungen angestellt wurden, ist manchmal der Mikrocontroller einfach nicht schnell genug, um den Hauptcode zu durchlaufen und mit den ISRs Schritt zu halten. In diesen Fällen möchten Sie möglicherweise einen zusätzlichen Mikrocontroller verwenden. Ein Mikrocontroller kann verwendet werden, um die ISRs auszuführen, die Daten zu lesen und dann die benötigten Daten an einen anderen Mikrocontroller zu übertragen, wo der Hauptcode ohne Unterbrechung ausgeführt werden kann.