Hallo Community,
auch ich bin neu hier ich brache, wie nicht anders zu erwarten eure Hilfe. Ich arbeite erst seit ein paar Wochen mit dem Arduino Micro, bin also ein absuluter Neuling in der Welt der Microcontroller.
Ich habe folgendes Problem:
Ich möchte ein Encodersignal eines Drehgebers auswerten. Hierzu habe ich auch relativ schnell eine fertige libary gefunden und das ganze mal ausprobiert.
Encoder library
http://www.pjrc.com/teensy/td_libs_Encoder.html
Programm 'Basic'
das ganze funktioniert alerdings nur bei eher geringen Drehzahlen. Bei höheren Drehzahlen verzählt sich das System.
Also habe ich mir gedacht, kann ja nicht so schwer sein, da selbst schnell einen Programmablauf zu schreiben... doch siehe da auch hier verzählt sich das Board. Hier einmal mein Code:
void setup() {
Serial.begin(9600);
}
int sig_1_old = digitalRead(4);
int sig_2_old = digitalRead(6);
long pos = 0;
void loop() {
int sig_1 = digitalRead(4);
int sig_2 = digitalRead(6);
if (sig_1 == sig_1_old && sig_2 == sig_2_old)
{}
else
{
if (sig_1 == 0 && sig_2 == 0 && sig_1_old == 0 && sig_2_old == 1)
{
pos = pos + 1;
Serial.println({pos});
}
if (sig_1 == 0 && sig_2 == 0 && sig_1_old == 1 && sig_2_old == 0)
{
pos = pos - 1;
Serial.println({pos});
}
}
sig_1_old = sig_1;
sig_2_old = sig_2;
}
Mein Drehgeber ist ein 05.2400.1222.0100 von der Firma Kübler
Das Ding hat 100 Rastpunkte, somit 400 Schaltwechsel auf den beiden Kanälen.
Ich möchte den mit maximal 10 Umdrehungen pro Sekunde betreiben.
Nur leider verpassen die bisher ausprobierten Varianten zwischenzeitlich den HIGH - LOW wechsel, was zu Fehlern bei der Position führt, die Kanäle also nicht schnell genug abgetastet werden. Habt ihr eine Idee wodran das liegen könnte?
Ich hab schon recht viel gelesen, und das was sich so rauskristallisiert hat ist, dass man Encodersignale mit Timer Interrupts und fester Frequenz abtasten sollte. Hier habe ich schon einige sachen ausprobiert, bin jedoch zu keiner Verbesserung gekommen. Auch hab ich gelesen, dass der Befehl "digitalread()" (oder viel mehr alle Befehle aus den Arduino libraries) recht langsam arbeitet und man hier auf anderem Wege evtl etwas mehr Zeit raushohlen kann.
Der Hintergrund des Ganzen:
Der Sensor soll genutzt werden, um den Lenkradwinkel in einem Auto zu ermitteln. Hierfür wird am Lenkrad ein Ring montiert, über den der Sensor laufen kann. Eine Lenkradumdrehung führt also zu 14 Sensorumdrehungen.
Desswegen ist es hier recht wichtig, richtig vorwärts und rückwärts zu zählen und dies auch bei schnellen Lenkimpulsen, um die Lenkradposition genau zu ermitteln.