Zitat Zitat von Dirk Beitrag anzeigen
Hi MEgg,

deine Encoder Werte sind doch gar nicht so schlecht!
Angegeben sind 1000 Encoder-Flanken pro 3 Umdrehungen, also 333 Flanken pro Umdrehung.
Das kommt deinen Werten schon nahe (Mittel: 289): 87% vom Soll.

Dabei stellen sich mir die 2 Fragen:
1. Wie bestimmst du denn GENAU EINE Umdrehung?
Das ist ja beim Kettenantrieb und der Getriebeübersetzung von 86,8:1 fast unmöglich!!
2. Bist du sicher, alle Flanken (per Interrupt) zu erfassen?

Also zur Frage Umtausch: Ich sehe keinen Grund: Das Chassis ist ok.
Ad 1) "GENAU" ist das sicher nicht, da mit blossem hinschauen bestimmt, ich könnte noch ne Lichtschranke o.ä. bauen und dann noch mal messen, aber da ich keine Brille brauche,
wird das so ungefähr schon passen.
Die Zeit/encoder Werte sind auch linear, wenn auch von Motor zu Motor mit unterschiedlicher Steigung, was dann wieder zu den Encoderwerten pro 1 Umdrehung passt.

ad 2) das Programm zum Encoder-Interrupt-zählen macht nur
void encodercountHL_intproc()
{
encodercountHL++;
}

und in der loop ist dann ein
if (Serial2.available())
{
}
in dem ich die PWM Werte und direction via Keyboard input via serieller Verbindung setze, aber das Ausgeben der Zeit/Encoder-Werte erfolgt ausserhalb.
Wenn ich interrupts verlieren würde, würden die Werte imho keine Gerade ergeben.
Ungenauigkeit bei der Ausgabe der Zeit/Encoder-Wertepaare wäre demnach Serial2.available() selbst und das delta zwischen Zeitmessung
und Ausgabe der Encoderwerte (= 3 * Serial2.print() dazwischen).