Hallo, ich habe hier ein kleines Gefährt mit 2 Getriebemotoren, dem ich zur Geradeausfahrt verhelfen will. Zur Drehzahlregelung bietet sich ja ein PID-Regler an, aber damit regel ich ja nur die Drehzahl eines Motors. Wie kann ich das mit dem anderen Motor verknüpfen, sodass ich zu einer Geradeausfahrt gelange? Bitte um Denkanstöße Gruß Martin
Zwei Dinge sind nötig: Identische Sensorik zur Drehzahlerfassung an den Rädern und identische Regelungen für jedes Rad. Erfassung der Fahrtrichtung (kleines Rad, das mitläuft, gekoppelt mit Drehwinkelerfassung) als Istwert für die Regelung. Weiterdenken erwünscht. ;)
Ja ich habe Encoderscheiben an jedem Rad, jede liefert 40 Impulse pro Umdrehung, die werden mit Lichtschranken generiert. Mein Ansatz ist auch eher genereller Natur. Ziel ist zu sagen fahre x Impulse geradeaus, und zwar wirklich geradeaus. Und hier ist das Problem für mich, ich stelle gerade mal exemplarisch etwas Code ein: [c] while(bisherige_Impulse<gewünschte Impulse) { diff=impulse_links - impulse_rechts if(diff>0) rechts mehr spannung oder links weniger if(diff<0) rechts weniger spannung oder links mehr wait_ms(300) zb. } Leider komme ich so nicht auf einen guten Geradeauslauf, da bricht es immer mal wieder zu Seite weg.
Wenn du einen Regler für die Geschwindigkeit hast, der einen Motorwert ausspuckt und einen Regler für die Lenkung hast, musst du die Ergebnisse der Regler kombinieren. Das macht man mit einem Mixer. Im einfachsten Falle ist das einfach Motor1 = MotorReglerAusgang - LenkReglerAusgang; Motor2 = MotorReglerAusgang + LenkReglerAusgang; Wenn der LenkReglerAusgang 0 ist werden beide Motoren gleich angesteuert.
Dein exemplarischer Code gibt auch nicht sonderlich viel her. Wie sind die Variablen z.B. deklariert? Bei 'unsigned' führt ein negatives Ergebnis z.B. zu Überraschungen. ;) Es ist vermutlich einfacher, die Richtung per Sensor zu erfassen und diesen als Istwert zu verwenden, da 'Schlaglöcher' an nur einem Rad einen weiteren Weg zur Folge haben, als das andere Rad zurücklegen muss, um das Fahrzeug auf Kurs zu halten.
Nein ich glaube so einfach ist es nicht, einen Regler für die Lenkung brauche ich für die Geradeausfahrt ja nicht, es ist quasi eine Panzersteuerung. Die Regelparameter die ich beeinflussen kann sind lediglich die 2 PWM Werte die ich den Motoren vorgebe. Und hier komme ich nicht weiter, wie ich das am Besten mache.
Jetzt haben wir usn überschnitten ;) Die Variable diff ist im richtigen code int, und das klappt auch.
>es ist quasi eine Panzersteuerung
Ist das ein Differentialgetriebe, das per Motor gesteuert wird (wie im
original-Panzer)?
Du musst die Regelabweichung (Verstärkung) auf die PWM-Bereiche
anpassen, z.B. PWM 0..1023 entspricht einer Regelabweichung von 0..10
Impulsen für den einen Motor, PWM 0..1023 entspricht einer
Regelabweichung von 0..-10 Impulsen für den anderen Motor.
Ich habe diese Reglung mal für Linearantriebe simuliert, es hat richtig gut funktioniert. Ich hoffe ich habe keinen Fehler in der Zeichnung. Ursprüngliche Version: Altenburg / Mobile Roboter Gruß Volly
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.