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.

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
  Mit dem Arduino JSON Webseiten auslesen seb201 3 88 05.12.2016 22:25
Letzter Beitrag: Tommy56
  Messchieber auslesen mit nem UNO roadcaptain 8 304 15.11.2016 14:30
Letzter Beitrag: Tommy56
  U-blox Neo 6M GPS auslesen Matthias_Arduino 15 874 09.11.2016 16:40
Letzter Beitrag: AvrRobot
  encoder clemens5555 17 393 20.10.2016 15:48
Letzter Beitrag: hotsystems
  mit Attiny85 Feuchtigkeitssensor auslesen toto1975 17 574 19.08.2016 22:40
Letzter Beitrag: hotsystems
  LCD Menue mit u8glib und Encoder stefanch 1 359 04.06.2016 21:02
Letzter Beitrag: hotsystems
  Drehgeber - Encoder - Wertebereich eingrenzen Nimes 3 473 14.03.2016 12:38
Letzter Beitrag: Nimes
  "WORT" über die serielle Schnittstelle auslesen hannes77 1 527 08.03.2016 12:13
Letzter Beitrag: Binatone
  Probleme beim Auslesen eines IR Empfängers linuxpaul 7 574 06.03.2016 14:44
Letzter Beitrag: hotsystems
  Elro HIS20m Wandsender 433MHz auslesen mayrst 6 950 10.02.2016 12:33
Letzter Beitrag: mayrst

Gehe zu:


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