Heim > Artikel > Web-Frontend > Verschiedene Möglichkeiten, die absolute Positionierung von Encodern zu verstehen
Ein Encoder ist ein häufig verwendeter Positionssensor, mit dem die Verschiebung von Rotation und linearer Bewegung gemessen und in ein digitales Signal umgewandelt werden kann. Die absolute Positionierungsfunktion des Encoders ermöglicht es uns, die Position des Objekts genau zu kennen, sodass er in vielen Bereichen wie Robotern, Automobilen, medizinischen Instrumenten usw. weit verbreitet ist.
Es gibt viele Möglichkeiten, die absolute Positionierung von Encodern zu verstehen. Die gebräuchlichsten sind die folgenden:
Die binäre Kodierungsmethode ist eine Möglichkeit, physische Bewegung in digitale Signale umzuwandeln. Der Encoder erkennt über einen Positionssensor, ob sich das Objekt bewegt, und ändert den von ihm ausgegebenen digitalen Code basierend auf der Position der Objektbewegung. Jeder digitale Code entspricht einem eindeutigen physischen Standort, sodass wir den Standort des Objekts bestimmen können, indem wir die Ausgabe des Encoders lesen.
Hier ist ein Beispielcode für einen mit Arduino implementierten Binär-Encoder:
const int encoderPinA = 2; const int encoderPinB = 3; volatile int encoderPos = 0; volatile bool aSet = false; volatile bool bSet = false; void setup() { pinMode(encoderPinA, INPUT); pinMode(encoderPinB, INPUT); attachInterrupt(digitalPinToInterrupt(encoderPinA), updateEncoderA, CHANGE); attachInterrupt(digitalPinToInterrupt(encoderPinB), updateEncoderB, CHANGE); } void loop() { // 读取编码器当前位置 int newPos = encoderPos; Serial.println(newPos); } void updateEncoderA() { aSet = digitalRead(encoderPinA); if (aSet && !bSet) { encoderPos++; } else if (!aSet && bSet) { encoderPos--; } bSet = digitalRead(encoderPinB); } void updateEncoderB() { bSet = digitalRead(encoderPinB); if (bSet && !aSet) { encoderPos--; } else if (!bSet && aSet) { encoderPos++; } aSet = digitalRead(encoderPinA); }
Gray-Code ist eine Variante der Binärkodierung. Ihr Vorteil besteht darin, dass nur eine Positionsänderung zu einem Kodierungsbit führt Änderungen. Die Ausgabe eines Gray-Code-Encoders ähnelt der eines Binär-Encoders, die Kodierung muss jedoch in eine binäre Darstellung konvertiert werden, bevor sie dekodiert werden kann. Dies kann durch Nachschlagen einer Konvertierungstabelle oder durch die Verwendung eines bestimmten Decoder-Chips zur automatischen Konvertierung erfolgen. 🔜 Pulssignal. Jede Impulsbreite entspricht einer Position, sodass wir die Position durch Ablesen der Impulsbreite bestimmen können.
Das Folgende ist ein Beispielcode für einen PWM-Encoder, der mit dem PWM-Modul von ESP32 implementiert wurde:
const int encoderPinClock = 4; const int encoderPinData = 5; const int encoderPinLatch = 6; unsigned int encoderValue = 0; void setup() { pinMode(encoderPinClock, OUTPUT); pinMode(encoderPinData, OUTPUT); pinMode(encoderPinLatch, OUTPUT); } void loop() { // 读取编码器当前位置 unsigned int newPos = 0; for (int i = 0; i < 16; i++) { digitalWrite(encoderPinLatch, LOW); shiftOut(encoderPinData, encoderPinClock, MSBFIRST, 1 << i); digitalWrite(encoderPinLatch, HIGH); delayMicroseconds(10); newPos |= digitalRead(encoderPinData) << i; } encoderValue = newPos; Serial.println(encoderValue); }
Das obige ist der detaillierte Inhalt vonVerschiedene Möglichkeiten, die absolute Positionierung von Encodern zu verstehen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!