Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Funktionsweise des Drehgebers und Verwendung mit Arduino

In diesem Tutorial lernen wir, wie Drehgeber funktionieren und wie man ihn mit Arduino verwendet. Sie können sich das folgende Video ansehen oder das schriftliche Tutorial unten lesen.

Übersicht

Ein Drehgeber ist eine Art Positionssensor, der zur Bestimmung der Winkelposition einer rotierenden Welle verwendet wird. Er erzeugt entsprechend der Drehbewegung ein elektrisches Signal, entweder analog oder digital.

Es gibt viele verschiedene Arten von Drehgebern, die entweder nach Ausgangssignal oder Sensortechnologie klassifiziert werden. Der spezielle Drehgeber, den wir in diesem Tutorial verwenden werden, ist ein inkrementeller Drehgeber und der einfachste Positionssensor zum Messen der Drehung.

Dieser Drehgeber ist auch als Quadratur-Encoder oder Relativ-Drehgeber bekannt und sein Ausgang ist eine Reihe von Rechteckimpulsen.

Funktionsweise des Drehgebers

Werfen wir einen genaueren Blick auf den Encoder und sehen wir uns sein Funktionsprinzip an. So werden die Rechteckimpulse erzeugt:Der Encoder hat eine Scheibe mit gleichmäßig verteilten Kontaktzonen, die mit dem gemeinsamen Pin C und zwei anderen separaten Kontaktpins A und B verbunden sind, wie unten dargestellt.

Wenn sich die Scheibe Schritt für Schritt zu drehen beginnt, beginnen die Stifte A und B mit dem Kontakt mit dem gemeinsamen Stift und die beiden Rechteckwellen-Ausgangssignale werden entsprechend erzeugt.

Jeder der beiden Ausgänge kann zur Bestimmung der Drehposition verwendet werden, wenn wir nur die Impulse des Signals zählen. Wenn wir jedoch auch die Drehrichtung bestimmen wollen, müssen wir beide Signale gleichzeitig betrachten.

Wir können feststellen, dass die beiden Ausgangssignale um 90 Grad gegeneinander verschoben sind. Wenn sich der Encoder im Uhrzeigersinn dreht, ist Ausgang A vor Ausgang B.

Wenn wir also jedes Mal die Schritte zählen, wenn sich das Signal ändert, von High nach Low oder von Low nach High, können wir feststellen, dass zu diesem Zeitpunkt die beiden Ausgangssignale entgegengesetzte Werte haben. Umgekehrt, wenn sich der Encoder gegen den Uhrzeigersinn dreht, haben die Ausgangssignale gleiche Werte. In Anbetracht dessen können wir unseren Controller einfach so programmieren, dass er die Encoder-Position und die Drehrichtung liest.

Drehgeber-Arduino-Beispiel

Machen wir ein praktisches Beispiel dafür mit dem Arduino. Das spezielle Modul, das ich für dieses Beispiel verwenden werde, kommt auf einem Breakout-Board und hat fünf Pins. Der erste Pin ist der Ausgang A, der zweite Pin ist der Ausgang B, der dritte Pin ist der Button-Pin und die anderen beiden Pins sind natürlich der VCC- und der GND-Pin.

Wir können die Ausgangspins mit jedem digitalen Pin des Arduino Boards verbinden.

Die für dieses Arduino-Tutorial benötigten Komponenten erhalten Sie über die folgenden Links:

  • Drehgebermodul……………….
  • Arduino-Board ……………………………
  • Steckbrett und Schaltdrähte ……… 

Quellcode

Hier ist der Arduino-Code:

/* Arduino Rotary Encoder Tutorial * * by Dejan Nedelkovski, www.HowToMechatronics.com * */ #define outputA 6 #define outputB 7 int counter = 0; int aState; int aLastState; void setup() { pinMode (outputA,INPUT); pinMode (outputB,INPUT); Serial.begin (9600); // Reads the initial state of the outputA aLastState = digitalRead(outputA); } void loop() { aState = digitalRead(outputA); // Reads the "current" state of the outputA // If the previous and the current state of the outputA are different, that means a Pulse has occured if (aState != aLastState){ // If the outputB state is different to the outputA state, that means the encoder is rotating clockwise if (digitalRead(outputB) != aState) { counter ++; } else { counter --; } Serial.print("Position: "); Serial.println(counter); } aLastState = aState; // Updates the previous state of the outputA with the current state } Codesprache:Arduino (arduino)

Beschreibung des Codes: Also müssen wir zuerst die Pins definieren, an die unser Encoder angeschlossen ist, und einige Variablen definieren, die für das Programm benötigt werden. Im Setup-Abschnitt müssen wir die beiden Pins als Eingänge definieren, die serielle Kommunikation zum Drucken der Ergebnisse auf dem seriellen Monitor starten, sowie den Anfangswert des Ausgangs A lesen und den Wert in die Variable aLastState schreiben.

Dann lesen wir im Schleifenabschnitt den Ausgang A erneut, aber jetzt fügen wir den Wert in die aState-Variable ein. Wenn wir also den Encoder drehen und ein Impuls erzeugt wird, unterscheiden sich diese beiden Werte und die erste „wenn“-Anweisung wird wahr. Gleich danach bestimmen wir mit der zweiten „if“-Anweisung die Drehrichtung. Wenn sich der Zustand des Ausgangs B vom Zustand des Ausgangs A unterscheidet, wird der Zähler um eins erhöht, andernfalls wird er verringert. Am Ende, nachdem wir die Ergebnisse auf dem seriellen Monitor ausgegeben haben, müssen wir die aLastState-Variable mit der aState-Variablen aktualisieren.

Das ist alles, was wir für dieses Beispiel brauchen. Wenn Sie den Code hochladen, starten Sie den seriellen Monitor und beginnen Sie mit dem Drehen des Encoders, wir beginnen mit dem Abrufen der Werte im seriellen Monitor. Das spezielle Modul, das ich habe, macht 30 Zählungen in jedem vollen Zyklus.

Weitere Informationen:Ultraschallsensor HC-SR04 und Arduino – vollständige Anleitung

Beispiel 2 – Steuerung eines Schrittmotors mit einem Drehgeber

Zusätzlich zu diesem einfachen Beispiel habe ich ein weiteres Beispiel für die Steuerung der Position eines Schrittmotors mit dem Drehgeber erstellt.

Hier ist der Quellcode dieses Beispiels:

/*     Stepper Motor using a Rotary Encoder
 *      
 *  by Dejan Nedelkovski, www.HowToMechatronics.com
 *  
 */

 #include <LiquidCrystal.h> // includes the LiquidCrystal Library 
 LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Creates an LC object. Parameters: (rs, enable, d4, d5, d6, d7) 

// defines pins numbers
 #define stepPin 8 
 #define dirPin  9
 #define outputA 10
 #define outputB 11

 int counter = 0;
 int angle = 0; 
 int aState;
 int aLastState;  
 
void setup() {
  // Sets the two pins as Outputs
  pinMode(stepPin,OUTPUT); 
  pinMode(dirPin,OUTPUT);
  pinMode (outputA,INPUT);
  pinMode (outputB,INPUT);
  
  aLastState = digitalRead(outputA);
  lcd.begin(16,2); // Initializes the interface to the LCD screen, and specifies the dimensions (width and height) of the display } 

}
void loop() {

  aState = digitalRead(outputA);
  
  if (aState != aLastState){     
     if (digitalRead(outputB) != aState) { 
       counter ++;
       angle ++;
       rotateCW();  
     }
     else {
       counter--;
       angle --;
       rotateCCW(); 
     }
     if (counter >=30 ) {
      counter =0;
     }
     
     lcd.clear();
     lcd.print("Position: ");
     lcd.print(int(angle*(-1.8)));
     lcd.print("deg"); 
     lcd.setCursor(0,0);
     
   }
  aLastState = aState;
}

void rotateCW() {
  digitalWrite(dirPin,LOW);
    digitalWrite(stepPin,HIGH);
    delayMicroseconds(2000);
    digitalWrite(stepPin,LOW);
    delayMicroseconds(2000); 
}
void rotateCCW() {
  digitalWrite(dirPin,HIGH);
    digitalWrite(stepPin,HIGH);
    delayMicroseconds(2000);
    digitalWrite(stepPin,LOW);
    delayMicroseconds(2000);   
}
 Codesprache:Arduino (arduino) 

Fühlen Sie sich frei, Fragen im Kommentarbereich unten zu stellen.


Herstellungsprozess

  1. C#-Warteschlange mit Beispielen:Was ist C#-Warteschlange und wie wird sie verwendet?
  2. Steuerung des Servomotors mit Arduino und MPU6050
  3. DIY Einfaches Messrad mit Drehgeber
  4. u-blox LEA-6H 02 GPS-Modul mit Arduino und Python
  5. So liest man Temperatur und Luftfeuchtigkeit auf Blynk mit DHT11
  6. Wie einfach ist es, einen Thermistor zu verwenden?!
  7. Wie man mit einem Arduino Musik macht
  8. So verwenden Sie NMEA-0183 mit Arduino
  9. So verwenden Sie Modbus mit Arduino
  10. Spracherkennung mit Arduino und BitVoicer Server