Zitat von
PICture
Angeblich wird beim Richtungwechsel nicht bis zum Stehenbleben des Motors abgewartet. Das führt zu enormen Erhöhung des Anlaufstroms und dadurch Einbruch der Versorgungsspannung, was den µC resetet.
Naja, wie gesagt, ich hab auch schon reichlich Pausen eingebaut, die aber allesamt keine Abhilfe brachten.
Es ist ja auch nicht nur ein resetten des Chips (ein resest ist aber auch häufig dabei ), sondern ein richtiger Absturz. Der Motor dreht dann endlos in eine Richtung und Arduino reagiert nicht mehr. die Letzte Ausgabe auf dem Serial Monitor sind dann nur ein paar Sonderzeichen, da wo nur zwei BOOLEAN stehen sollten...
Edit: sieht dann so ungefähr aus:
Code:
1 - 0
1 - 0
1 - 0
1 - 0
±‚j‚j
1 -�‚j‚j
1 - 0
1 - 0
1 - 0
1 - 0
Schon wieder Edit: Ich hab grad festgestellt, dass bei vorherigem Abschalten des PWM-Ausgangs das Problem nur noch viel schlimmer wird. Auch mit reichlich delays an mehreren Stellen ist hier nichts zu erreichen...
In der Verzweiflung sieht die Funktion zum Umpolen nach links momentan so aus:
Code:
void turn_left()
{
digitalWrite(pin_out_pwm, LOW);
delay(stop_ms);
digitalWrite(pin_out_right, LOW);
delay(stop_ms);
digitalWrite(pin_out_left, HIGH);
delay(stop_ms);
analogWrite(pin_out_pwm, motor_speed);
state_out_left = 1;
state_out_right = 0;
}
Wobei ich für stop_ms verschiedene Werte probiert hab, momentan bin ich bei 300 - aber ohne spürbare verbesserung
Weit besser gehts so:
Code:
void turn_left()
{
digitalWrite(pin_out_right, LOW);
delay(stop_ms);
digitalWrite(pin_out_left, HIGH);
state_out_left = 1;
state_out_right = 0;
}
Wobei auch hier der Wert in stop_ms keine größere Rolle spielt...
Keine Sorge wegen delay an der Stelle, das Timing ist vollkommen unkritisch.
Vermutlich ist Arduino mit der ganzen Geschichte einfach nur unterfordert ^^
Edit³: Lt Empfehlungen des wikis hab ich jetzt zwischen die Motorpole einen 100nF Kondensator gebaut, das Gehäuse direkt auf GND gelegt und eine luftspule für die Anschlussdrähte gebastelt. Effekt: Keiner. Langsam wirds nervig.
Lesezeichen