Schrittmotoren sind oft teuer für einen großen Motor. Mit einem leistungsstarken Standard-Gleichstrommotor und einem Drehgeber können Sie jedoch einen Schrittmotor "simulieren". Wie genau sind Drehgeber mit Arduino nur mit einer einfachen Schleife und nicht viel anderem Code? Wird es einen Puls "verfehlen" und nicht oft genug drehen? Wie kann ich mit viel mehr Code umgehen? Gibt es einen besseren Weg, dies zu tun? Würden Interrupts helfen? Gibt es eine Art von Schaltung, die bei diesem Problem helfen würde?
Hinweis: Wahrscheinlich werden es nicht mehr als 4 Umdrehungen pro Sekunde sein ... (Das mag eine Menge sein, aber wenn Sie einen Mechanismus mit Gewindespindel verwenden, wären es nur 24 Zoll pro Minute, wenn es 10 Umdrehungen pro Zoll Linearbewegung gibt. )
quelle
Antworten:
Interrupts würden Sie in dieser Situation verwenden.
Die von Ihnen erwähnten Raten sind langsam genug, sodass Sie sie wahrscheinlich innerhalb einer Schleife zählen können. Dies wird jedoch nicht empfohlen, da eine typische Schleife viele Taktzyklen in Anspruch nimmt und von der Anzahl der Instuktionen pro Schleife abhängt Sie können einige Zählungen verpassen.
Zu diesem Zweck werden Interrupts erstellt, die unabhängig vom Zustand der Schleife jederzeit ausgelöst werden können.
Es gibt eine Funktion mit dem Namen
attachInterrupt()
, die drei Argumente akzeptiert.Unten sehen Sie ein Beispiel für das Zählen eines Interrupts
Die Modi sind wie folgt:
Weitere Informationen zur Verwendung von Interrupts finden Sie hier .
Abhängig vom verwendeten Encoder müssen Sie den Code an Ihre Bedürfnisse anpassen und weitere Berechnungen durchführen, um Ihre Position zu bestimmen. Dies sollte jedoch ein guter Ausgangspunkt sein.
Bearbeiten Hier ist ein Beispielcode von Arduino Sandbox für die Verwendung eines Drehgebers.
quelle
ISR_NAKED()
), können Sie das automatische Speichern des C-Kontexts überspringen und Interrupt-Raten von 100-500 kHz ohne Probleme erzielen, aber Sie schreiben Assembler an diesem Punkt im Grunde genommen in C.ISR()
direkt verwendet wird.Hinzufügen einiger Verweise auf bereits geschriebene Bibliotheken und Beispiele, um einen Vergleich zwischen verschiedenen Ansätzen und Erfahrungen mit Geschwindigkeit und Anfälligkeit für fehlende Schritte zu ermöglichen.
Drehgeber lesen: http://playground.arduino.cc/Main/RotaryEncoders
Quadratur-Encoder zu schnell für Arduino (mit Lösung): http://www.hessmer.org/blog/2011/01/30/quadrature-encoder-too-fast-for-arduino/
Teensy Encoder-Bibliothek: https://www.pjrc.com/teensy/td_libs_Encoder.html
Drehgeber auf Arduino lesen: http://www.circuitsathome.com/mcu/reading-rotary-encoder-on-arduino/
quelle