Hallo, Leute!
Erstmal besten Dank für allen, die mir eine Hilfe mit meiner
mathematischen Probleme gegeben haben.
Jetzt habe ich noch ein komisches Problem (diesmal hat es mit Mathe
nichts zu tun), und zwar: wenn ich die PWM-Werte für die Geschwindigkeit
der Motoren ändern (und die Motoren laufen gerade), ab und zu, total
Random (oder mindestens, ich konnte keine echte Ursache finden), der µC
macht ein Reset...
Hier wie ich die PWM für die Motoren definiere:
(die zwei PWM-Werte sind weil ich später die einzelne Geschwindikeit
anpassen soll, je nachdem, was ich für Rückmeldungen vom Encoder
bekomme).
Ich starte dann die Motoren:
1
TCCR1B=_BV(WGM12)|_BV(WGM13)|_BV(CS10); \
2
TCCR1A|=_BV(COM1A1)|_BV(COM1B1)|_BV(WGM11); \
3
ICR1=0xEFFF; \
4
OCR1A=OCR1B=(pwmL<<8)|0xFF;\
Und dann habe ich eine Funktion, die in der Hauptschleife aufgerufen
wird, und die die Korrekturen macht (hier nur für ein Rad, aber für den
anderen ist gleich):
Nun, wie gesagt, das Programm läuft 'ne Weile (einige Sekunden, manchmal
sogar eine Minute, manchmal sogar keine Sekunde), dann wird ein Reset
durchgeführt.
Und ich verstehe absolut nicht warum...
Kann jemand mir ein Tipp geben?
Besten Dank!
Luca Bertoncello
Hubert G. schrieb:> Wie sieht die Schaltung und Board aus, es könnte ein Reset durch> Motorstörungen sein.> Hänge anstelle der Motoren eine Led mit Vorwiderstand an.
Die Schaltung sieht so aus.
Bestimmt ist es ein Problem bei dem Setzten der Geschwindigkeit, denn
jetzt laufen die Motoren seit gute 10 Minuten (aber ohne Korrekturen!!)
und das Programm hängt nicht...
Meinst du, es konnte ein Problem der Schaltung sein? Wie kann ich es
korrigieren?
Danke
Luca Bertoncello
Luca Bertoncello schrieb:> Hubert G. schrieb:>> Wie sieht die Schaltung und Board aus, es könnte ein Reset durch>> Motorstörungen sein.>> Hänge anstelle der Motoren eine Led mit Vorwiderstand an.>> Die Schaltung sieht so aus.> Bestimmt ist es ein Problem bei dem Setzten der Geschwindigkeit, denn> jetzt laufen die Motoren seit gute 10 Minuten (aber ohne Korrekturen!!)> und das Programm hängt nicht...>> Meinst du, es konnte ein Problem der Schaltung sein? Wie kann ich es> korrigieren?
Noch was: wenn ich die Motoren laufen lasse, und die Geschwindigkeit auf
12 Schritte/Sekunde (wenig mehr als das Minumum) reduzieren geht, wenn
ich aber dann die Geschwindigkeit auf 80 setze (Maximum), dann hängt.
Setze ich die Geschwindigkeit auf 76 ist kein Problem, aber sobald mehr
als 76 ist, dann hängt...
Also, ich denke, daß das Problem das sein kann, denn das Programm wird
bestimmt ab und zu auch solche Geschwindigkeiten setzen. Die Frage ist,
warum solche Geschwindigkeiten machen Probleme...
Danke
Luca Bertoncello
Luca Bertoncello schrieb:> Also, ich denke, daß das Problem das sein kann, denn das Programm wird> bestimmt ab und zu auch solche Geschwindigkeiten setzen. Die Frage ist,> warum solche Geschwindigkeiten machen Probleme...
Wenn ich mir deine Schaltung ansehe, wundert mich das nicht wirklich.
Keinerlei Abblockkondensatoren, keine Absicherung von Reset,
wahrscheinlich hast du die Brownout-Fuse nicht gesetzt, etc ...
Wenn deine Motoren plötzlich Vollgas bekommen, dann ziehen die Strom!
Die veranstalten höchst wahrscheinlich ein Feuerwerk an Störungen auf
der Versorgungsspannung. Und du ... du hast keinerlei Vorkerhrungen
getroffen, dass diese Störungen deinen µC nicht ausser Tritt bringen.
Mach wenigstens fürs erste ein paar Blockkondensatoren rein. 100nF an
Vcc-GND, AVcc-GND. Jeweils möglichst dicht ans µC Gehäuse!
Karl heinz Buchegger schrieb:> Wenn ich mir deine Schaltung ansehe, wundert mich das nicht wirklich.> Keinerlei Abblockkondensatoren, keine Absicherung von Reset,> wahrscheinlich hast du die Brownout-Fuse nicht gesetzt, etc ...
Also, Brownout-Fuse ist definitiv nicht gesetzt (Fuses: EE-C9), kannte
ich es aber auch nicht.
Warum sollte mir es helfen? Wenn ich die Dokumentation lesen (und
richtig verstehe), sollte das Bit ein Reset machen, wenn unter eine
bestimmte Spannung geht. Also, noch ein Reset hinzufügen...
> Wenn deine Motoren plötzlich Vollgas bekommen, dann ziehen die Strom!> Die veranstalten höchst wahrscheinlich ein Feuerwerk an Störungen auf> der Versorgungsspannung. Und du ... du hast keinerlei Vorkerhrungen> getroffen, dass diese Störungen deinen µC nicht ausser Tritt bringen.>> Mach wenigstens fürs erste ein paar Blockkondensatoren rein. 100nF an> Vcc-GND, AVcc-GND. Jeweils möglichst dicht ans µC Gehäuse!
1) Die Motoren bekommen ihrer Strom über andere Wege als der µC
2) MIST! Wieder eine alte Version der Schaltung online gesetzt! Als
Anhang, die letzte. Dort GIBT es ein Kondensator (C5), ziemlich dicht an
µC, genau 100nF zwischen Vcc+ARef+AVcc und GND.
Andere Ideen?
Danke
Luca Bertoncello
Hallo,
Wo kommt überhaupt die Versorgungsspannung des Controllers her?
Vermutlich von Extern über Anschluss JP2 ...
(Dann sollte man dort wie bei VCC mehrere Pins als Masse-Anschlüsse
vorsehen. Und ein Elko zwischen VCC und GND von z.B. 10uF wäre da auch
sinnvoll als VCC-Puffer.)
Wie hoch ist die "Batteriespannung" am Anschluss JP3? Wie hoch ist der
max. Motorstrom?
> Die Motoren bekommen ihrer Strom über andere Wege als der µC
Wo ist der GND-Anschluss der Batterie im Layout angeschlossen? Er sollte
direkt an die Sense-Pins des L298 gehen. Dort wird dann der GND vom L298
(Pin 8) angeschlossen, und dann gehts weiter zum GND des Controllers.
Wird dies nicht beachtet, fliessen die Motorströme über den GND des
Controllers, und das mag der überhaupt nicht ...
BTW: C4 mit 100nF als Pufferkondensator für die Motorversorgungsspannung
ist ja wohl ein Witz. Hier ist ein zusätzlicher grösserer Elko
erforderlich (Grösse ist abhängig vom Motorstrom; geschätzt:
1000-4700uF).
Die angesprochenen Abblock-Kondensatoren sind ja offensichtlich
vorhanden ...
Hallo, Leute!
Ich habe das Problem gefunden.
Ich habe also den Wert von ICR1 von 0xEFFF auf 0xFFFF erhöht.
Jetzt laufen die Motoren seit 5 Minuten problemlos mit den Korrekturen
(die allerdings noch nicht richtig funktionieren, das ist aber ein
anderes Problem). Kein Reset mehr.
Ich denke, das Problem ist einfach, daß ich mal versucht habe OCR1A und
OCR1B auf 0xF0FF zu setzen, was größer als 0xEFFF ist.
Kann es sein, daß das das Problem ist?
Danke
Luca Bertoncello
> Kann es sein, daß das das Problem ist?
Es wird sicherlich EIN Problem sein, aber wohl nicht das einzige. Die
Hardware sollte auch noch überarbeitet werden ...
Denn einen Reset des Controllers im Betrieb bewirkt dein beschriebener
Fehler nicht; eher schon das kurzzeitige Ab- bzw. Anschalten des Motors
durch zu grossen PWM-Wert.
Sporadische Resets sind bei Vorhandensein von PWM-Motorsteuerungen meist
auf Störungen durch die Schaltimpulse zurückzuführen.