Hi, BlackDevil,

Zitat von
BlackDevil
Du freust Dich? ? ? Bist ein Masochist, oder ? Ich war irgendwie in die Klausurausgabe RT hineingeraten (wollte garnicht hin... 4Loch reichte mir völlig - siehe unten) "Ach SIE sind das. . .!" (...sagte der Assi. Da hatte ich dämlich geguckt) "Na ja, von 46 bearbeiteten Punkten sind 45 richtig - und sogar DIESE Aufgabe, die fast alle falsch haben! Warum haben sie nicht mehr Punkte bearbeitet?" Antwort: "Ach wissen sie - eine Woche Winterpiste ist mir lieber als ne 1 Loch in Regelungstechnik". Nun hatte ER dämlich geguckt
.

Zitat von
BlackDevil
... im moment ist das doch sehr sehr harter Tobak *g* Aber ich schaus mir mal an ...
Tu das. Bitte. Es ist wirklich soooo easy - - wenn man es mal glaubt, dass es nicht schwer ist. Ich hatte mir dazu ein paar Notizen in den Ausdruck gemacht (um es besser zu verstehen):
.............................Bild hier
Dann hatte ich auch mal die Sprungantwort gemessen.
.............................Bild hier
Einfach Motoren auf einen bestimmten Wert stellen, und Deine Geschwindigkeitsangaben so schnell festhalten, wie es nur geht. Danach ausgeben über die RS232 (dazu hat man die in der Entwicklungsphase) und z.B. Export nach Excel. Die Tangente an den Kurvenbeginn schneidet den maximalen Geschwindigkeitswert => daraus die Zeitkonstante ablesen. Die (maximale) Geschwindigkeit im Verhältnis zum Ansteuerwert gibt die Reglerverstärkung. <<== Diese Erklärungen sind hier stark vereinfacht
, lies dazu das Tutorial.
Was kommt heraus? Dieser Code:
Code:
/* ============================================================================== */
/* === Regelungsroutine für Motor 12 ========================================== */
/* Die gemessene Zeitdifferenz Iz_diff0 zwischen zwei Encodersignalen
aus extINT0 wird zur Regelung verwendet */
void rgl_mo_12(void) // Regelung für Motor 12
{
if (stupsi12 <= 5) // Soll überhaupt gefahren werden?
{
OCR0A = 0; // Wenn nicht, dann PWM auf Null
return;
}
tupsi12 = Iz_diff0; // Übernahme Iz-Wert in Regelung
ndrz12 = stupsi12; // Sollwert Drehzahl
if ( tupsi12 > 100 ) { tupsi12 = 100; } // Eingrenzen Encoderwert=Fehler abfangen
idrz12 = 1000 / tupsi12; // Istwert Drehzahl
ie_mot12 = ndrz12 - idrz12; // Vergleich => Regelabweichung
iesum12 = iesum12 + ie_mot12;
if (iesum12 < -10) { iesum12 = -10;}
if (iesum12 > 500) { iesum12 = 500;}
iy12 = iesum12/2;
iy12 = iy12 + ie_mot12 + ie_mot12 + ie_mot12 + ie_mot12 + ie_mot12;
// Diese Rechenoperation benötigt in float 0,20 bis 0,25 ms!
// daher wird hier alles integer gerechnet
if ( iy12 < 0 ) { iy12 = 0;} // PWM-Minimum abfangen
if ( iy12 > 255 ) { iy12 = 255;} // und Maximum
OCR0A = iy12; // Ansteuerung der PWM direkt
return;
}
/* ============================================================================== */
Und damit läuft mein Miniroboter. Und jetzt sag noch mal, dass das schwer sei. Wirklich nicht (ok, ich hatte viele Tage für diese Erkenntnis gebraucht
.

Zitat von
BlackDevil
... weil ich mit 2
Sensoren kein Schönes Ergebnis erziele und mit 3en schon wieder sehr Kompliziert fahre ...
Ich hatte doch gesagt: fünf ist recht gut
.
So - nun noch etwas zur Entspannung. Soweit ich die Linienspezialisten verstanden habe, braucht ein Linienfolger keine Geschwindigkeitsregelung nach obigem Muster. Der wird auf die Abweichung von der Linie geregelt. Daher ändert sich schon ein bisschen was . . .
Trotz allem viel Glück und Erfolg
Nachtrag: Habe grad Dein Posting gesehen:

Zitat von
BlackDevil
... Ich denke ich bau den Spaß einfach mal auf und schau was passiert. ...
So findest Du Dich sicher gut rein. So ähnlich hatte ich vor ein paar Monaten auch angefangen.
Lesezeichen