Forum: Mikrocontroller und Digitale Elektronik PID Regelung wo/wie verbessern ?


von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,


ich versuche eine PID Regelung hinzukriegen.
Geregelt werden soll später einmal ein Verbrennungsmotor.

Der Aktor wäre eine Drehschieber.
Mit einer PWM wird ein Segment gegen eine Feder gedreht und gibt so 
einen Schlitz frei.

Die Drehzahl steht mir als 8Bit Wert zur Verfügung.
(0..255 -> 0 bis 7.650)

Die Regelstrecke dürfte doch recht langsam sein.
Heisst das dass der I Anteil relativ klein sein muss,
da die Regelstrecke schon integriert ?

Stimmt es das ich beim I Anteil zwischen dem Integrationsfaktor und dem 
TauI unterscheiden muss ?


Lässt sich das so wie im angehängten Programm machen ?

Das neigt immer noch zum überschwingen, kann man das noch wegbekommen ?


Gemessen wird die Umlaufzeit, sollte ich vielleicht eher auf diese 
Regeln ?
Somit wäre die Quantelung auf 30U/min hinfällig.


Klar ist mir das sich der Motor nicht zwei punktartig verhält und nicht 
wirklich simuliert wird...

von Purzel H. (hacky)


Lesenswert?

Die Drehzahl des Verbrennungsmotors soll geregelt werden ?
Ja. Ein Verbrennungsmotor ist eine nichtlineare Geschichte. Und 
zusaetzlich von der Vorgeschichte abhaengig. Ist er auf einen Sockel, 
statisch, oder wird er in einem Fahrzeug bewegt ? Das waer dann nochmals 
was.
Ein PID ist nur ein Anfang. Man kann ihn ohne viel Vorwissen einstellen, 
er wird aber seine Limiten zeigen. Wenn man besser sein will, muss man 
Modelle von zunehmender Wirklichkeitstreue einbringen.

von UR-Schmitt (Gast)


Lesenswert?


von Thomas (Gast)


Lesenswert?

Ahha !
Das Teil bewegt ein Fahrzeug.

Also wäre es vielleicht besser über das erzeugte und benötigte 
Drehmoment zu rechnen ?

Empirisch werde ich da aber nicht sehr weit kommen, oder ? ;)
Die Einspritzzeit dürfte bei Lambda = 1 ein guter Indikator für das 
erzeugt Drehmoment sein...

Aber die Last lässt sich doch nicht genau bestimmen !?
Motor warm/kalt, Zusatzverbraucher, Schleifende Kupplung.


Ich denke ich versuche den PID mal zeitbasiert am Objekt.

von Thomas (Gast)


Lesenswert?


von Reinhard Kern (Gast)


Lesenswert?

Thomas schrieb:
> Heisst das dass der I Anteil relativ klein sein muss,
> da die Regelstrecke schon integriert ?

Das tut sie ja nicht, eine Verzögerung ist keine Integration. Hat die 
Regelstrecke eine Totzeit, passiert in dieser Zeit eben garnichts. Das 
Problem ist, dass bei einer langsamen Reaktion oder gar Totzeit der 
I-Anteil den Regler überschwingen lässt - der I-Anteil erhöht ja den 
Ausgang des Reglers immer weiter, während die Regelstrecke noch garnicht 
reagiert. Also Verzögerungen und viel I ist praktisch eine Garantie für 
Regelschwingungen.

Wenn man I unbedingt braucht, um die Regelabweichung auf Null zu 
bringen, muss die Zeitkonstante für die Integration deutlich länger sein 
als die Reaktionszeit der Regelstrecke.

Gruss Reinhard

von Thomas (Gast)


Lesenswert?

Hallo Reinhard,

wenn ich das jetzt richtig verstehe (was ich nicht tue;) wäre so eine 
Verzögerung bzw Totzeit weder mit dem Abtastintervall (=100Hz) noch mit 
dem Ti in den Griff zu bekommen.

Würde ich "einfach nur den Output verzögern" komme ich auch nicht 
weiter,
denn wenn der Motor bei 600UPM dreht wäre es vielleicht nicht ganz so 
schlecht 100% zu geben ?

Mein Problem ist, wenn ich mich ernsthaft mit Regelungstechnik befasse, 
komme ich ganz schnell an Stoff in FH Niveau.
Das geht in meine unbefleckte Birne nicht rein.

Deshalb werde ich jetzt mehr mach und weniger Labern :)

von Thomas (Gast)


Lesenswert?

Eine dumme frage habe ich noch.

Der Motor benötige wenn er "eingschwungen" ist doch genau eine bestimmte 
PWM um die Drehzahl zu halten (Summe der Drehmomente = 0 -> Drehzahl 
bleibt gleich).

Da es jetzt keinen Fehler mehr gibt liefern P und D Regler 0 zurück,
jetzt wirkt doch nur noch das I Glied.

Oder addiere ich zum Regler Ausgang einfach ein Offset hinzu ?

von Hop Triceratop (Gast)


Lesenswert?

Und das soll bewirken ? Resp was ist das problem ?

von Thomas (Gast)


Lesenswert?

Die Idee war das es eine PWM gibt bei der der Motor weder beschleunigt 
noch verzögert.
Der Punkt ist bei Betriebswarmen Motor bei ca 40%.

Wenn man jetzt genau diesen Punkt als Offset nähme wäre der Einfluss des 
Integrator nahe null.
Ich kenne diesen Punkt zwar nicht, aber dessen Bereich.

Der Regler könnte dann doch gar nicht mehr stark überschwingen ?!


Ohne Offset muss Ti grösser sein, damit er z.b. die 40% ausregeln kann.

Ist das Müll ?

von Anja (Gast)


Lesenswert?

Thomas schrieb:
> Der Aktor wäre eine Drehschieber.
> Mit einer PWM wird ein Segment gegen eine Feder gedreht und gibt so
> einen Schlitz frei.

ist das jetzt ein mechanischer Vergaser ....

Thomas schrieb:
> Die Einspritzzeit dürfte bei Lambda = 1 ein guter Indikator für das
> erzeugt Drehmoment sein...

... oder ein Einspritzsystem?

Thomas schrieb:
> Ist das Müll ?

klar. So einfach ist das nicht. Beschäftige dich erst mal mit den 
Grundlagen eines Verbrenners.
Um beim Otto überhaupt ein brennfähiges Gemisch hinzukriegen muß erst 
mal die Luftmenge zur eingespritzten Kraftstoffmenge innerhalb eines 
Bereiches passen. Der Motor läuft außerdem nicht "rund" die Drehzahl 
ändert sich ständig beim Verdichten und Verbrennen. Die Einspritzzeit 
ist bei kleinen Ansteuerdauern stark nichtlinear und auch noch 
Batteriespannungsabhängig.
Das Drehmoment ist außerdem noch vom Zündzeitpunkt abhängig.

In einer realen Motorsteuerung wird alles erst mal über Kennfelder 
gesteuert betrieben. Bestimmte Streckenteile werden modelliert 
(Prädiktionsalgorithmen um die Totzeit zu minimieren). Ein (Leerlauf-) 
Regler der dann noch überlagert wird hat nur noch ganz wenig Arbeit zu 
leisten.

Gruß Anja

von Joachim .. (joachim_01)


Lesenswert?

>klar. So einfach ist das nicht. Beschäftige dich erst mal mit den
>Grundlagen eines Verbrenners.
>Um beim Otto [...]

Der TO schreibt von einem Drehschieber den er steuern will -> Vergaser. 
Wir reden also nicht über Blue-Tec o.ä. sondern über nen rustikalen 
Zweitakter der vermutlich in einem Stromaggregat o.ä. eingebaut war.

An den TO:
Ich denke mal, ohne Trial&Error wirst du da nicht weit kommen. 
Andererseits machts ja auch Spaß so nem Biest die entsprechenden 
drehzahlabhängigen Manieren beizubringen. Was wird'n das am Ende? Nen 
Go-Cart mit Tempomat? Oder so ne Art Ackerbau- u. 
Viehzucht-Selbstfahrer?

von Stephan (Gast)


Lesenswert?

Zum Verbrenner kann ich nichts sagen.

Für Strecken mit signifikanter Totzeit und dennoch guten 
Regeleigenschaften ist ein "Beobachter" (aka Glaskugel) üblich.

Der Beobachter schätzt dann nach den Stellgrößen, Messdaten und 
bekannten Eigenschaften der Regelstrecke wohin die Reise geht und wird 
nach Bedarf den realen Messadten zugemischt.


Stephan

von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

Nein Anja,

das Teil hat eine Multipoint Saugrohreinspritzung.
Hauptgrösse für die Einspritzzeit ist der Saugrohrunterdruck.
Korrekturfaktoren sind Kühlmitteltemperatur, Drosselklappenwinkel 
(Beschleunigungsanreicherung, Volllastkurve -> Popometer) und eine 
Sprungsonde.

Umgebungsdruck wird bei Motostillstand gemessen.

Früher bei den Jetronics hies der Bypass um die Drosselklappe 
Zusatzluftschieber und war eigentlich nur für den Kaltstart.

Das Teil was bei mir verbaut ist heisst Leerlaufdrehsteller, 
Entschuldigung.
Bei 0% PWM ist das Teil im Notlauf (siehe Anhang).
Ab ca 30 - 40 % PWM ist das Teil zu.
Danach geht es bis ca 90% PWM komplett auf.
Ziemlich linear (mit leichter Temperatur und Dreckabhängigkeit)...
1
void setIdleValve (int8_t idleValue)
2
{
3
  if (idleValue >= 0) // Normalbetrieb, normiert auf 0..127
4
  {
5
      aktor.idlePWM  = IDLEVALVE_Close + (((IDLEVALVE_Open - IDLEVALVE_Close) * idleValue) / 127);
6
  }
7
  else  aktor.idlePWM  = IDLEVALVE_Fail; // Notlaufspalt
8
9
  return;
10
}

Die Bedeutung der Laufgrenze kenne ich.

Anja schrieb:
> In einer realen Motorsteuerung wird alles erst mal über Kennfelder
> gesteuert betrieben. Bestimmte Streckenteile werden modelliert
> (Prädiktionsalgorithmen um die Totzeit zu minimieren). Ein (Leerlauf-)
> Regler der dann noch überlagert wird hat nur noch ganz wenig Arbeit zu
> leisten.


Hier wird es gerade interessant.
Meinst Du wie meine Vorhaltemethode weiter oben ?
Nur um mehr Kennfeldabhängige Betriebspunkte ergänzt ?

Anfang der Neuziger gab es sowas wie eine momentenbasierte Steuerung 
noch nicht.
Hat man dort auch schon in die Zukunft geschaut ?
Hast Du eine Quelle zum lesen für mich ?

Joachim ... schrieb:
> Ich denke mal, ohne Trial&Error wirst du da nicht weit kommen.
> Andererseits machts ja auch Spaß so nem Biest die entsprechenden
> drehzahlabhängigen Manieren beizubringen. Was wird'n das am Ende? Nen
> Go-Cart mit Tempomat? Oder so ne Art Ackerbau- u.
> Viehzucht-Selbstfahrer?

Denkst Du mit einem PID ist das in den Griff zu bekommen ?
Soweit ich das richtig herausgelesen habe,
benutzen die Megasquirt Jungs auch "nur" einen PID Regler.

Nee, kein Kartoffelschlepper.
Einfach nur ein "Rennauto" mit der Philosophie Selbstgemacht.
Da brauchts keinen Tempomat ;)

von Alex (Gast)


Lesenswert?

Die wichtigste Größe bei einem Verbrenner ist immer noch die Drehzahl, 
danach richtet sich die ganze Regelung, selbst bei den modernsten 
Motoren. Erst danach kommt die ganze Spielerei mit der Drehmomentmessung 
bzw. -schätzung.
Miss einfach die Drehzahl und steuere deinen Vergaser bzw. die 
Einspritzung dementsprechend an.

von Steven S. (virus)


Lesenswert?

Hallo,

hier mal ein kleiner Tip aus der Reglungstechnik

Je genauer die Regelstrecke zum Ausgleich kommen soll, umso größer muss 
den Proportionalfaktor sein.
Ein überschwingen wird verhindert, wenn die Zeitkonstante t = ti ;)

Alternativ würde ich den I Anteil erhöhen und die nachstellzeit 
veringern (somit wird das ganze träger und ein ausgleich dauert einen 
Moment länger

Wobei ich aber nicht verstehe wieso das das über einen µC machst. 
Entweder Direkt einen Regler von der Stange kaufen, der hat alles drin 
was du brauchst und sollte für den Anfang reichen.

anschluss Regler:
X = Drezahlsteller (Position)
W = Pedalstellung ("Poti am Pedal")
Y = Ausgang zum Drehzahlsteller

Regler für Ymin auf den Wert oberhalb des Notlaufprogramm stellen...

von Miss Sing (Gast)


Lesenswert?

Hallo Thomas,
hatte das auch mal für nen Diesel gemacht.

unser Fehler war anfangs, dass wir die Zeit pro Umdrehung gemessen 
hatten und daraus hatten wir die Drehzahl berechnet. Das war viel zu 
langsam. Nachdem wir pro Umdrehung ca 100mal einen neuen Drehzahlwert 
hatten, war die Regelung viel besser.

Später hatten wir den Regler sogar noch synchron zum Drehzahlsignal 
laufen lassen. Man muss dann zwar permanent den Skalierungsfaktor für D 
und I korrigieren. Aber der Regler lief dann besser bei langsamen 
Drehzahlen.

von Anja (Gast)


Lesenswert?

Thomas schrieb:
> Hier wird es gerade interessant.
> Meinst Du wie meine Vorhaltemethode weiter oben ?
> Nur um mehr Kennfeldabhängige Betriebspunkte ergänzt ?

Im Prinzip ja.

> Anfang der Neuziger gab es sowas wie eine momentenbasierte Steuerung
> noch nicht.
> Hat man dort auch schon in die Zukunft geschaut ?
> Hast Du eine Quelle zum lesen für mich ?

Zur Historie kann ich wenig sagen.
Aber: letztendlich wird der gesamte Momentenpfad wie früher in die 
beiden Werte Füllung und Kraftstoffmasse umgerechnet und damit die 
Aktoren des Luftpfades und des Kraftstoffpfades gesteuert.
Die Momente braucht man im Prinzip nur für die einheitliche Koordination 
der externen Eingriffe über CAN von ABS/ESP, Generator ...

Auch früher gab es schon relativ dynamische Fahrzeuge.
Die Beschleunigungsanreicherung ist so ein Workaround um in die 
"Zukunft" zu schauen. Wen ein KAT im Spiel ist muß vermutlich genauer 
dosiert werden um den KAT nicht zu schädigen.
Multipoint kenne ich daher mit den Funktionen Übergangskompensation 
(Modellierung Wandfilm) sowie Prädiktion für die Füllung um ein Paar 
hundert Grad und Nachspritzer. Das Problem ist daß für die 
Gemischaufbereitung bei geringen Mengen (Leerlauf) der Anspritzbeginn 
möglichst früh gelegt wird. Der Luftsteller wirkt sich relativ schnell 
auf die Füllung aus, so daß eine laufende Einspritzung ggf. noch 
korrigiert werden muß.

http://www.patent-de.com/20080807/DE102007005381A1.html
http://www.google.com/patents/EP0820559B1?cl=de

Gruß Anja

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.