Inkrementaler Drehgeber

Antworten
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Inkrementaler Drehgeber

Beitrag von Admin »

Ich habe übrigens heute das erste mal die RotaryEncoder Software in Betrieb genommen und der erste Test läuft. Muss ich noch zerpflücken dass ich weiß wie das alles geht. Habe das Signal gleich Hardwaremässig entprellt, dass ich in der Software nichts tun muß. Habe noch nicht mal mein Display dran :) Die Daten gehen im Moment per Serial.println() raus :) Der Entcoder hat auch noch eine Taste mit drin, also drehen zum Einstellen und drücken zum Bestätigen.

Dann kommt der große Drehgeber dran. Der wird wohl nicht so einfach laufen. Aber wird schon werden :(oo):

Gute Nacht
Franz
.
Encoder01.jpg
Encoder01.jpg (111.88 KiB) 6213 mal betrachtet
Hier ist der Code zum Testen:

Code: Alles auswählen

Rotary // -----
// SimplePollRotator.ino - Beispiel für die RotaryEncoder-Bibliothek.
// Diese Klasse ist für die Verwendung mit der Arduino-Umgebung implementiert.
//
// Copyright (c) by Matthias Hertel, http://www.mathertel.de
// This work is licensed under a BSD 3-Clause License. See http://www.mathertel.de/License.aspx
// More information on: http://www.mathertel.de/Arduino
// -----
// 18.01.2014 created by Matthias Hertel
// 04.02.2021 Bedingungen und Einstellungen für ESP8266 hinzugefügt
// -----

// In diesem Beispiel wird der Status des Drehgebers in der Funktion loop () überprüft.
// Die aktuelle Position und Richtung wird bei Änderung auf auf Serial.println() ausgegeben.

// Hardware setup:
// Attach a rotary encoder with output pins to
// * A2 and A3 on Arduino UNO.
// * D5 and D6 on ESP8266 board (e.g. NodeMCU).
// Swap the pins when direction is detected wrong.
// The common contact should be attached to ground.

#include <Arduino.h>
#include <RotaryEncoder.h>

#if defined(ARDUINO_AVR_UNO) || defined(ARDUINO_AVR_NANO_EVERY)
// Example for Arduino UNO with input signals on pin 2 and 3
#define PIN_IN1 2
#define PIN_IN2 3

#elif defined(ESP8266)
//Beispiel für ESP8266 NodeMCU mit Eingangssignalen an Pin D5 und D6
#define PIN_IN1 D5
#define PIN_IN2 D6

#endif

// Richten Sie einen RotaryEncoder mit 4 Schritten pro Latch für die 2 Signaleingangspins ein:
RotaryEncoder encoder(PIN_IN1, PIN_IN2, RotaryEncoder::LatchMode::FOUR3);

// Richten Sie einen RotaryEncoder mit 2 Schritten pro Latch für die 2 Signaleingangspins ein:
//RotaryEncoder encoder(PIN_IN1, PIN_IN2, RotaryEncoder::LatchMode::TWO03);

void setup()
{
  Serial.begin(115200);
  while (! Serial);
  Serial.println("Simples PollRotator-Beispiel für die RotaryEncoder-Bibliothek.");
} // setup()


// Lesen die aktuelle Position des Encoders aus und gebe sie aus, wenn sie sich ändert.
void loop()
{
  static int pos = 0;
  encoder.tick();

  int newPos = encoder.getPosition();
  if (pos != newPos) {
    Serial.print("pos:");
    Serial.print(newPos);
    Serial.print(" dir:");
    Serial.println((int)(encoder.getDirection()));
    pos = newPos;
  } // if
} // loop ()

// The End

Jetzt habe ich es mal auf dem Mega instaliert mit nem Display:

Code: Alles auswählen

#include <Arduino.h>
#include <RotaryEncoder.h>
#include <LiquidCrystal_I2C.h> // LCD Display
// LCD Display´s haben Adresse 0x27 oder 0x3F !!
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

//Arduino MEGA mit Eingangssignal auf pin 8 und 9
#define PIN_IN1 8
#define PIN_IN2 9

// Richten Sie einen RotaryEncoder mit 4 Schritten pro Latch für die 2 Signaleingangspins ein:
RotaryEncoder encoder(PIN_IN1, PIN_IN2, RotaryEncoder::LatchMode::FOUR3);

// Richten Sie einen RotaryEncoder mit 2 Schritten pro Latch für die 2 Signaleingangspins ein:
//RotaryEncoder encoder(PIN_IN1, PIN_IN2, RotaryEncoder::LatchMode::TWO03);

int newPos;

void setup()
{
  Serial.begin(115200);
  while (! Serial);
  //-----------LCD Display Start----------------------------------------
  lcd.begin(20, 4);
  lcd.backlight();
  lcd.clear();
  lcd.setCursor (3, 0);
  lcd.print (F("RotaryEncoder"));
  lcd.setCursor (0, 2);
  lcd.print (F("Ausgabe = "));
}
void loop()
{
  static int pos = 0;
  encoder.tick();

  newPos = encoder.getPosition();
  if (pos != newPos) {
    //Serial.print("pos:");
    //Serial.print(newPos);
    //Serial.print(" dir:");
    //Serial.println((int)(encoder.getDirection()));
    lcd.setCursor (12, 2);
    lcd.print (F("    "));
    lcd.setCursor (12, 2);
    lcd.print (newPos);
    pos = newPos;
  }
}
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Incrementaler Drehgeber

Beitrag von Admin »

1pc Inkrementaler Drehgeber 600 p / r 6mm Shaft 5-24v

Spezifikationen:
Impulse: 600 p / r (einphasige 600 Impulse / R, Zweiphasen-4-Frequenzverdopplung auf 2400 Impulse)
Maximale mechanische Geschwindigkeit: 5000 U / min
Antwortfrequenz: 0-20 kHz
Stromquelle: DC 5-24V
Welle: 6mm, 13 mm
Kabellänge: 1,5 m
Ausgang: Rechteckige orthogonale Impulsschaltung mit AB 2-Phasen-Ausgang, Ausgang für den Ausgangstyp NPN Open Collector
Größe: 38 x 35,5 mm

Verwendet:
1. Er kann verwendet werden, um die Rotationsgeschwindigkeit, den Winkel und die Beschleunigung des Objekts und die Längenmessung zu messen

Hinweis:
Ein zweiphasiger Ausgang darf nicht direkt mit dem VCC verbunden werden. Nur über Widerstände

Anschlusse:
Grün = A-Phase
Weiß = B-Phase
Rot = VCC 5-24 Volt
Schwarz = GND

Hier noch ein Bild:
.
Incrementaler_Drehgeber.jpg
Incrementaler_Drehgeber.jpg (80.5 KiB) 6214 mal betrachtet
Benutzeravatar
e69-fan
Beiträge: 282
Registriert: Mi 20. Jan 2021, 10:32
Wohnort: Murnau am Staffelsee

Re: Incrementaler Drehgeber

Beitrag von e69-fan »

:(V): Servus,

wie schaut das mit der Längenmessung aus - ( Frästisch ) ?


https://de.aliexpress.com/i/33014488692 ... ttachment]

Wir hatten sowas ähnliches in der Kabelablängmaschine.

mfg Wolfgang
Dateianhänge
Roller-Rad-L-nge-Position-Meter-Mess-Puls-Drehgeber-Hohe-Aufl-sung-Fr-hling-Halterung-Lift.jpg_q50.jpg
Roller-Rad-L-nge-Position-Meter-Mess-Puls-Drehgeber-Hohe-Aufl-sung-Fr-hling-Halterung-Lift.jpg_q50.jpg (38.97 KiB) 6213 mal betrachtet
Grüße aus der Heimat der E69
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Incrementaler Drehgeber

Beitrag von Admin »

Ja genau. Das Ding ist recht genau.

Der den ich schon am Tisch habe, ist nur z.B. zum verstellen von Werten in einem Menü gedacht.

Der hier macht bis 5000 Umdrehungen wo dann bis 20000 Herz als Zählimpulse rauskommen :O:
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Incrementaler Drehgeber

Beitrag von Admin »

Hier ist jetzt mal noch der kleine, den ich für die Enstellung von Werten im Menü verwenden möchte. Das Ding hat auch noch einen Taster eingebaut. Also man kann auch noch auf den Stellknopf drücken, um z.B. die Eingabe zu bestätigen / zu übernehmen.

Beschreibung:
Ein Drehgeber, auch als Drehgeber bezeichnet, ist ein elektromechanisches Gerät, das die Winkelposition oder Bewegung einer Welle oder Achse in digitale Ausgangssignale umwandelt
Spezifikationen:
Anpassungsmethode: 360 Grad
Anzahl der PIN´s : 7
Bewertet Stromspannung: 5 Volt
Schafttyp: D Typ
Wellendurchmesser: 6mm/0.24"
Schafthöhe: 20mm/0.79"
Gewindedurchmesser: 6.8mm/0.27"
Gesamtgröße: 15mm x 12.5mm x 30mm / 0.59" x 0.49" x 1.18"(L*B*H)
Hinweis:
Lagern Sie die Produkte nicht an Orten mit hoher Temperatur, hoher Luftfeuchtigkeit und in ätzenden Gasen.
Berühren Sie das Produkt nicht mit Wasser.

Hier noch ein Bild davon:
.
Drehgeber_Maße.jpg
Drehgeber_Maße.jpg (61.88 KiB) 6212 mal betrachtet
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Incrementaler Drehgeber

Beitrag von Admin »

e69-fan hat geschrieben: Fr 9. Apr 2021, 08:35 .......wie schaut das mit der Längenmessung aus - ( Frästisch ) ?
Ich denke schon gut. Werden wir sehen, wenn ich ihn in den nächsten Tagen dann mal in Betrieb habe. Da muss ich auch noch die Ausgänge mit Widerständen gegen VCC legen, dass man die Impulse zur Auswertung bekommt. Entprellen muss ich den nicht, weil der Optisch arbeitet, nicht mit Kontakten. Der wird auch mit dem Programm arbeiten können, das ich für den kleinen schon benutze, nur kann ich bei dem kleinen jede Veränderung der Impulswerte sofort auf das Display bringen, wofür bei dem hier keine Zeit bleibt. Da muss wahrscheinlich eine kleine Programm-Änderung machen, dass das Programm mit der Diplayausgabe wartet, bis der Wert wieder auf der Stelle bleibt, also bis er nicht verändert wird, dann kann ich schnell mal aufs Display ausgeben. Und dann wieder auf neue Werte warten. Wird sich zeigen. Die Ausgabe auf das Display ist immer eine Verzögerung.
Benutzeravatar
e69-fan
Beiträge: 282
Registriert: Mi 20. Jan 2021, 10:32
Wohnort: Murnau am Staffelsee

Re: Incrementaler Drehgeber

Beitrag von e69-fan »

Admin hat geschrieben: Fr 9. Apr 2021, 08:47 Hier ist jetzt mal noch der kleine, den ich für die Enstellung von Werten im Menü verwenden möchte. Das Ding hat auch noch einen Taster eingebaut. Also man kann auch noch auf den Stellknopf drücken, um z.B. die Eingabe zu bestätigen / zu übernehmen.

Beschreibung:
Ein Drehgeber, auch als Drehgeber bezeichnet, ist ein elektromechanisches Gerät, das die Winkelposition oder Bewegung einer Welle oder Achse in digitale Ausgangssignale umwandelt
Spezifikationen:
Anpassungsmethode: 360 Grad
Anzahl der PIN´s : 7
Bewertet Stromspannung: 5 Volt
Schafttyp: D Typ
Wellendurchmesser: 6mm/0.24"
Schafthöhe: 20mm/0.79"
Gewindedurchmesser: 6.8mm/0.27"
Gesamtgröße: 15mm x 12.5mm x 30mm / 0.59" x 0.49" x 1.18"(L*B*H)
Hinweis:
Lagern Sie die Produkte nicht an Orten mit hoher Temperatur, hoher Luftfeuchtigkeit und in ätzenden Gasen.
Berühren Sie das Produkt nicht mit Wasser.

Hier noch ein Bild davon:
.
Drehgeber_Maße.jpg

Für ein Auswahlmenü habe ich mal sowas für 2,49 € verwendet:
I810923.1-JOY-IT-Kodierter-Drehschalter.jpg
I810923.1-JOY-IT-Kodierter-Drehschalter.jpg (29.88 KiB) 6207 mal betrachtet
Wann könnte ich mir die CAT-Platinen abholen ?
Grüße aus der Heimat der E69
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Incrementaler Drehgeber

Beitrag von Admin »

Hat der schon die Widerstände und die Kondensatoren zum Entprellen drauf?

Ansonsten ist das wohl der selbe wie der, den ich hier habe. Nur dass der von dir schon schön auf einer Platine drauf ist. Das macht Sinn besonders wenn auch die Widerstände und die Kondensatoren drauf sind.

Hier ist mal der Test am MEGA:
.
RotaryDekonder01.jpg
RotaryDekonder01.jpg (173.83 KiB) 6206 mal betrachtet
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Inkrementaler Drehgeber

Beitrag von Admin »

Jetzt habe ich den großen Drehgeber mit 600 Impulsen je Umdrehung auch mal soweit ausgewertet, dass es passt. Bei jedem LOOP wird kontrolliert ob sich der Impulszähler-Wert erhöht hat. Wenn er sich größer 500x also bei mehr als 500 Loop´s nacheinander nicht erhöht hat, nimmt sich das Programm die Zeit den neuen Zählerwert ins Display zu schreiben. Das Problem war, dass das wegschreiben des erhöhten Wertes, bei jeder Änderung des Wertes, zuviel Zeit in Anspruch nahm. Also teste ich jetzt erst ob der Drehgeber gerade nicht betätigt wird, und schreibe dann schnell den aktuellen Wert weg. So bekomme ich jetzt die 600 Impulse bei einer Umdrehung tatsächlich gezählt.

Das ist jetzt das Programm dazu:

Code: Alles auswählen

#include <Arduino.h>
#include <RotaryEncoder.h>
#include <LiquidCrystal_I2C.h> // LCD Display
// LCD Display´s haben Adresse 0x27 oder 0x3F !!
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

//Arduino MEGA mit Eingangssignal auf pin 8 und 9
#define PIN_IN1 8
#define PIN_IN2 9

unsigned long Sekundenablauf01 = 0; // Tastenabfrage von Taster02 300ms aussetzen
const unsigned long Pausezeit01 = 2000;
int pausezaehler = 0;
// Richten Sie einen RotaryEncoder mit 4 Schritten pro Latch für die 2 Signaleingangspins ein:
RotaryEncoder encoder(PIN_IN1, PIN_IN2, RotaryEncoder::LatchMode::FOUR3);

// Richten Sie einen RotaryEncoder mit 2 Schritten pro Latch für die 2 Signaleingangspins ein:
//RotaryEncoder encoder(PIN_IN1, PIN_IN2, RotaryEncoder::LatchMode::TWO03);

int newPos;

void setup()
{
  Serial.begin(115200);
  while (! Serial);
  //-----------LCD Display Start----------------------------------------
  lcd.begin(20, 4);
  lcd.backlight();
  lcd.clear();
  lcd.setCursor (3, 0);
  lcd.print (F("RotaryEncoder"));
  lcd.setCursor (0, 2);
  lcd.print (F("Ausgabe = "));
}
void loop()
{
  static int pos = 0;
  encoder.tick();

  newPos = encoder.getPosition();
    if (pos != newPos) {
      pausezaehler = 0;
      //Serial.print("pos:");
      //Serial.print(newPos);
      //Serial.print(" dir:");
      //Serial.println((int)(encoder.getDirection()));
      pos = newPos;
    }
    else {
      pausezaehler ++;
      if (pausezaehler >= 500) {
        lcd.setCursor (12, 2);
        lcd.print (F("    "));
        lcd.setCursor (12, 2);
        lcd.print (newPos);
        pausezaehler = 0;
      }
    }
    Sekundenablauf01 = millis();
}
Hier ein Bild von der Anschaltung. Man sieht, dass ich keine Kondensatoren brauche, weil bei diesem Entcoder die Impulse durch eine Optische Lichtschranke erzeugt wird. 600 Impulse pro Umdrehung. Das ist verdammt viel. :) Der kleine Mechanische macht nur 20 Schritte je Umdrehung. Ist halt wie ein Poti Ersatz. Der Große mit 600 Pulse! je Umdrehung und bis zu 5000 Umdrehungen! wird wohl bei teuren Geräten auch als Poti verwendet, weil es extrem leichtgängig ist. Ich könnte mir das auch vorstellen. Dann braucht man allerdings noch zwei Tasten. "Fein" und "Grob" Auswahl. Dann kann ich mit "Grob" sehr schnell in die Nähe des Einstellungszieles, und dann mit "Fein" Punktgenau nachregulieren, indem ich die Impulse 20 zu 1 oder 50 zu 1 teile. Ich denke ich werde als nächstes ein Menüprogramm machen. Im Display mit rauf - runter und links - rechts (also 4 Tasten) auswählen welchen Wert ich ändern will, und den dann mit "fein" - "grob" plus Drehgeber verändern. Ein Problem ist wieder, dass man bei großen Drehgeber nicht durch den Druck auf den Regelknopf "bestätigen" kann. Das geht wieder nur beim kleinen also beim einfachen Drehgeber. :sad: So richtig gut wäre also der große Drehgeber, bei dem man auch noch auf den Regelknopf zum Bestätigen drücken kann. Muss ich mal schauen ob es sowas gibt. Würde ich mir zwar jetzt nur zum Testen nicht kaufen, aber im Hinterkopf behalten dass es den gibt :) :idea: Der große Drehgeber mit der Regelscheibe mit Fingermulde ist einfach zum zügigen einstellen super. Sowas hat man am hochwertigen Funkgeräte, Funkscannern, Labornetzteilen, u.v.m. Natürlich kommt man mit den Anforderungen an die Technik, immer mehr an den Punkt, wo der Arduino zu langsam wird :sad: Kann also passieren, dass man plötzlich den DUE oder den ESP32 braucht. Aber dann ist es eben so. :)
.
RotaryEntcoder02-01.jpg
RotaryEntcoder02-01.jpg (179.66 KiB) 6188 mal betrachtet
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Inkrementaler Drehgeber

Beitrag von Admin »

Ich fürchte, um neben dem Drehgeber auszählen noch was anderes Problemlos machen zu können, muss ich wirklich sehr viel schneller werden als ich es mit einem Mega oder Uno sein kann. Daher muss ich mir wohl demnächst mal einen DUE anlachen, und ein ESP32 wäre auch nicht übel. 600 Imp. je Umdrehung auszählen ist wohl schon eine Aufgabe, wenn man keine Impulse verpassen will, und trotzdem auch andere Arbeiten noch im Echtzeit Rahmen erledigen will. :O:

Ich werde mal demnächst überprüfen, wieviel Zeit da in der Lib. im Hintergrung hängen bleibt. Und ob es für sinnvolles Arbeiten mit diesem großen Drehgeber, z.B. an einem Schrittmotor wichtig ist, mit einer wesentlich schnelleren CPU zu arbeiten, dass man nicht am Limet kratzt.

Ich werde mal ein Programm so langsam aufblasen. Also mit den MobTools und RotaryEncoder. Wenn da alles gut läuft mal Display Ausgaben LiquidCrystal_I2C einfügen, wo dann die gefahrenen Schritte laut MobaTools und die gezählen Schritte vom Drehgeber am Display gegenüber gestellt werden. Wenn das noch gut geht, Tastenabfragen mit reinhängen. u.s.w :) Natürlich von Anfang an ins Programm Microsekunden zählen je Durchgang, dass ich erkennen kann, wie sehr das an der Durchlaufzeit des Loop´s knabert. Da müßen eigentlich der Mega und der Uno gleich am Anfang schon mächtig ins Schwitzen kommen, beziehungsweise ins Aus gehen.

Franz
Antworten

Zurück zu „Hardware / Schaltungstechnik“

Wer ist online?

Mitglieder in diesem Forum: Ahrefs [Bot] und 5 Gäste