Forum: Mikrocontroller und Digitale Elektronik Drehzahlregelung PID Regler


von Regelmeister (Gast)


Lesenswert?

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

von Thilo M. (Gast)


Lesenswert?

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. ;)

von Regelmeister (Gast)


Lesenswert?

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.

von Simon K. (simon) Benutzerseite


Lesenswert?

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.

von Thilo M. (Gast)


Lesenswert?

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.

von Regelmeister (Gast)


Lesenswert?

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.

von Regelmeister (Gast)


Lesenswert?

Jetzt haben wir usn überschnitten ;) Die Variable diff ist im richtigen 
code int, und das klappt auch.

von Thilo M. (Gast)


Lesenswert?

>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.

von volly (Gast)


Angehängte Dateien:

Lesenswert?

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
Noch kein Account? Hier anmelden.