INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Encoder auslesen
23.03.2016, 20:27
Beitrag #1
Encoder auslesen
Hallo,

ich habe 2 Encoder die ich auslesen möchte.

Der eine ist ein normaler Drehencoder den ich mit folgender Funktion auslese:
Code:
bool aktuellerRadPinAStatus =0;
bool letzterRadPinAStatus =0;
unsigned long RadLetztesMalGedreht = 0;
int RadEntprellZeit = 200;

// Rückgabewert 0 = nicht gedreht, 1 = links rum, 2 = rechts rum
byte radGedreht()
{
  aktuellerRadPinAStatus = digitalRead(radPinA);
  if ((letzterRadPinAStatus != aktuellerRadPinAStatus) && ((millis() - RadLetztesMalGedreht) > RadEntprellZeit))
  {
    RadLetztesMalGedreht = millis();  
    if ((letzterRadPinAStatus != aktuellerRadPinAStatus ))
    {  
      if (digitalRead(radPinB) == letzterRadPinAStatus)
      {      
        letzterRadPinAStatus = aktuellerRadPinAStatus;
        return 1;                            
      }
      else
      {
        letzterRadPinAStatus = aktuellerRadPinAStatus;
        return 2;                              
      }
    }
  }
  else if (letzterRadPinAStatus != aktuellerRadPinAStatus)
  {
    letzterRadPinAStatus = aktuellerRadPinAStatus;
    return 0;  
  }
  else
  {
    return 0;  
  }
}

Der andere ist ein optischer Encoder der die Umdrehungen des Motors feststellen soll.
Ausgelesen wird dieser momentan so:

Code:
bool encoderStatusVorher = 1;
bool encoderStatusJetzt = 1;

bool schrittCount()
{
  encoderStatusJetzt = digitalRead(motorEncoder);
  if (encoderStatusVorher != encoderStatusJetzt)
  {
    encoderStatusVorher = encoderStatusJetzt;
    return 1;
  }
  else
  {
    return 0;
  }
}

Nun zu den Problemen.
Der Drehencoder funtioniert zwar und auch das "Entprellen" klappt wunderbar, aber es kommt ab und zu vor, dass bei einer linksdrehung, eine rechtsdrehung festgestellt wird.
Rechts herum gibt es NIE Probleme.
Das links herum Problem lässt sich einigermaßen reproduzieren, wenn ich ganz schnell fortwärend links drehe.
Es wäre super, wenn jemand einen Fehler entdecken würde oder mir sagen könnte, was ich tun müsste, damit das links drehen sauber erkannt wird.

Zu dem optischen Encoder:
Der optische Encoder schaut auf ein Zahlrad, mit reflektierenden Lippen und erkennt somit eine Logische 0 oder 1.
Da die Drehungen schnell passieren, kann ich natürlich nicht wissen, ob bestimmte Schritte nicht gezählt werden, aber irgendwie sind die Drehungen nicht wirklich gleich, bei einem einigermaßen gleichbleibenden Fahrweg (direkt mit den Umdrehungen des Motors gekoppelt).
Momentan zähle ich bei einem Wechsel am Enocer von 0 auf 1 UND bei 1 auf 0, also pro Umdrehungen werden 2 gezählt.

Ich weiß leider nicht, warum es nicht sauber zählt:
Entweder ist die funktion nicht schnell genug um zu zählen oder irgendwas anderes ist das Problem.
Zu erwarten sind etwa 80 NULLEN und 80 EINSEN vom EncoderPin pro Sekunde...

Ich hoffe das reicht erstmal, dass man mir helfen kann, weil mein Code auf 5 Tab jeweils 1000+ Zeilen hat.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.03.2016, 21:40
Beitrag #2
RE: Encoder auslesen
Was der Drehencoder betrifft, solltest du es mal mit dem Programm aus dem Link
http://www.arduinoforum.de/arduino-Threa...4#pid13314 probieren.
Das funktioniert bei mit super.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Windmesser auslesen will noch nicht so recht klappen.. Stargazer 12 528 05.04.2018 10:54
Letzter Beitrag: amithlon
Star BME680 IAQ Wert auslesen Bitklopfer 9 1.115 18.03.2018 02:33
Letzter Beitrag: Wampo
  Serial auslesen > 64 Byte uk1408 18 858 09.03.2018 16:05
Letzter Beitrag: Tommy56
  API auslesen von Coindesk! Gandalf 1 349 15.01.2018 15:34
Letzter Beitrag: Tommy56
  Kleiner Denkanstoß - Auslesen eines KY-040 Encoders Stargazer 26 1.419 20.12.2017 16:13
Letzter Beitrag: Stargazer
  Arduino Uno - einen digitalen Pin mit nodeMCU 12E auslesen Stargazer 6 508 17.12.2017 17:40
Letzter Beitrag: hotsystems
  MPU6050 / GY521 auslesen und verstehen Hitikatus 3 825 30.09.2017 11:48
Letzter Beitrag: Hitikatus
Wink per Rotary Encoder Bewegungsmelder aktivieren Davidsen74 34 2.360 09.03.2017 18:17
Letzter Beitrag: Davidsen74
  Dc Getriebemotor mit encoder clemens5555 3 711 12.02.2017 14:07
Letzter Beitrag: Binatone
  Arduino Serielle Schnittstelle auslesen mit Visual Basic Obermuda 1 981 29.01.2017 17:02
Letzter Beitrag: hotsystems

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste