Die letzten Prozente Genauigkeit zu holen kostet ja bekanntlich unverhältnismässig viel Aufwand. So geht es mir gerade.
Ein bisschen bin ich vorangekommen. Die ausführlichen Diagramme, Beispiele siehe oben, zeigten mir, dass gelegentlich der Ansteuerungswert iy12/~34 der PwM unter Null geht - dann wird das beschränkt auf den Nullwert. Es ist in den Diagrammen klar zu sehen, dass in diesem Fall auch die Ist-Geschwindigkeit wirklich hoch ist - und ein Auslaufenlassen bedeutet real ne recht niedrige Verzögerung. PwM kann nicht negativ werden. Regelungstechnisch bedeutet es ganz klar, dass die Istgeschwindigkeit zu hoch ist und schnell(!?) gesenkt werden müsste. ALSO musste eine Fallunterscheidung her und ein Bremsvorgang bei zu hoher Drehzahl. Erforderlich wäre sogar ein Bremsvorgang mit dosierter Verzögerung.
Code:
// ### Auszug aus Modul ~mot~:
// Hier ist der "alte", einfache code. Wird durch Fallunterscheidung ersetzt
//if ( iy12 < 0 ) { iy12 = 0;} // Stellwert (PWM) begrenzen
//if ( iy12 > 255 ) { iy12 = 255;}
// ---------------------------------------------------------------------------------
// ----- Hier folgt der geänderte/neue code - ab 17.Sept. 2009 -------------------
// Aufgabenstellung des neuen Codes:
// Wenn iy < 0 => Bremsen durch aktive Motorbremse
// iy >= 0 => Bei iy > 255 begrenzen auf 255
// iy = 0 <=> PWM = 0 = Leerlauf, sonst "Normaler"
// Lauf, ABER Motorbremse ausschalten
// ### Auszug aus Modul ~com~:
volatile int8_t mdir12, mstop12; // Fahr+Richtungsflags #####>>>>>
// mdir12 >0 => vorwärts = 0 => stop <0 => rückwärts
// Stopflag mstop ( =0 => "Normalfall") =1 => Bremsen
Damit wird in etwas aufwendiger Weise bei Werten unter Null die Bremse eingeschaltet. Dummerweise ist jetzt weiterer Aufwand nötig, weil der Motortreiber bei Rückkehr "Normalbetrieb" ab dem Wert Null wieder auf "vorwärts" oder "rückwärts" geschaltet werden muss. Macht nix. Je zwei Flags: mdir12 und mstop12 und ihre ~34-Pendants erlauben die Organisation der Bremserei.
Und der Gewinn? Ich will euch mit langweiligen Diagrammen nicht anöden (pssst - ich hab noch garkeine gemacht) - aber die Standardtestfahrt sieht schon besser aus. Das Vehikel läuft recht präzise die vorgegebene Strecke (siehe Kreuzchen am Schreibtisch im Testfahrtvideo) - weder zu kurz, noch zu lang, und ich habe den deutlichen Eindruck, dass die Änderungen auch das Vorbeifahren (Länge wird erreicht, aber Endpunkt liegt "daneben") deutlich verringert haben.
Was steht noch aus? Ich beabsichtige eine anderen Fahrvorgabe. Es sollen a) saubere Beschleunigungsrampen gefahren und b) die Wegpunkte abgeprüft werden. Mal sehen, ob es dann besser geht. Später kommt dazu c) Übertrag des Vor-/Nacheilens von einem Antrieb sinngemäß auf die Regelung des anderen - und damit endlich das ursprüngliche Ziel einer Art Differential-Sperrwirkung.
Nachtrag 19. Sept. 2009, 17:13
Interessant wäre es für mich zu erfahren, ob jemand mit diesem Bremsen bei PWM-Vorgabe unter Null schon gearbeitet oder sonstwie Überlegungen oder Erfahrungen dazu hat.
PS: Schon dumm, wenn man beim Editieren statt [edit] auf [x]=Löschen klickt
Lesezeichen