Hallöle.
Ich hab hier zwei Motoren (die berühmtem gelben TT-Motoren).
Motortreiber ist ein MX1508.
Unter den Motoren hockt jeweils eine Gabellichtschranke (fertige Module), und die werden von selber gedruckten Encoderscheiben auf der Abtriebswelle unterbrochen.
Die Scheiben haben 20 Öffnungen, das müsste also pro Radumdrehung 40 Ticks geben.
Ausgelesen wird per Interrupts:
Code:
attachInterrupt(digitalPinToInterrupt(odoLinksPin), odometerLinks, CHANGE); // Gabellichtschranken an Interrupts
Die ISR haben ne kleine Entprellung (20ms) drin:
Code:
void odometerLinks() // ******************** ISR linkes Odometer ****************************************
{
if((millis() - alteZeitL) > entprellZeit) {
odoTickLinks ++;
alteZeitL = millis(); // letzte Schaltzeit merken
}
Das Testprogramm, was da läuft, sieht so aus:
Code:
void motorTest()
{
analogWrite(motorR1,255); // einmal Vollgas bitte
analogWrite(motorR2,0);
analogWrite(motorL1,255);
analogWrite(motorL2,0);
delay(3000);
analogWrite(motorR1,0); //alles stop
analogWrite(motorR2,0);
analogWrite(motorL1,0);
analogWrite(motorL2,0);
Serial.print("Links= "); // was haben wir denn da....
Serial.print(odoTickLinks);
Serial.print(" ");
Serial.print("Rechts= ");
Serial.println(odoTickRechts);
odoTickLinks=0; // Odos auf Null setzen
odoTickRechts=0;
Serial.println("Odometer zuerueckgesetzt!");
Serial.println();
Also nix besonderes: Motoren starten, 3 Sekunden laufen lassen, stoppen, die Odoticks ausgeben, zurücksetzen und das Ganze von vorne.
Das läuft auch, nur sieht die Ausgabe so aus:
Das Ganze ist reproduzierbar- immer die ersten vier Male tauchen wesentlich weniger Odoticks auf als dann später.
Ausser den Odoticks, die in jeder Pause zurückgesetzt werden, wird _nichts_ im Programmablauf während der Zeit geändert.
Die Ausgabe der Odoticks nach dem zurücksetzen hab ich als Kontrolle eingebaut, weil ich dachte, das zurücksetzen klappt nicht- aber das tut es ja, wie man sieht.
Jemand eine Idee?
Lesezeichen