Einfache Regelung einer Leistung via Geschw.

OP #4026849
Hallo liebes Forum,

ich hoffe ihr könnt mir vielleicht helfen, bin ansonsten nirgends fündig 
geworden. Konkret geht es um folgendes:
Ich programmiere in C# gerade eine Art "Simulation" mit einem 
Elektro-Fahrzeug. Der E-Motor hat eine gewisse PMax. Aktuell kann ich 
100% Leistung geben und der Motor beschleunigt solange (bis zu einer 
gewissen V), bis die Widerstände zu groß werden.
Nun möchte ich aber die Geschwindigkeit regeln können, soll heißen: ich 
gebe eine V_soll vor und der beschleunigt mit P dorthin (mit P erhalte 
ich an der aktuellen geschw. eine Kraft => beschleunigung => neue 
geschw.). Der geregelte P-Wert muss zwischen -100...+100% von Pmax 
liegen (negativ=bremsen im generatorbetrieb).

Mein Problem ist: ich erhalte einen gewissen Regelfehler in 
(beispielsweise) km/h oder m/s, weiß aber nicht so recht wie ich damit 
den Leistungsgrad regle...

Ich wäre um jegliche Hilfe sehr dankbar!!
#4026891
Julian Nachname schrieb:

> Nun möchte ich aber die Geschwindigkeit regeln können, soll heißen: ich
> gebe eine V_soll vor und der beschleunigt mit P dorthin

so so.
Und wie macht er das?

Wie ist deine jetzige Regelschleife aufgebaut?

> Mein Problem ist: ich erhalte einen gewissen Regelfehler in
> (beispielsweise) km/h oder m/s, weiß aber nicht so recht wie ich damit
> den Leistungsgrad regle...

na ja.
offensichtlich, wenn die Geschwindigkeit niedriger ist als V_Soll, dann 
muss mehr P gegeben werden (aber nicht mehr als P_max). Ist sie zu hoch, 
dann muss P verringert werden.

> Ich wäre um jegliche Hilfe sehr dankbar!!

PID Regler
#4026956
Julian Nachname schrieb:
> Bin erst ganz neu in der thematik, also war Simulation vielleicht auch
> etwas übertrieben ;) Wie könnte hierbei die Formel für einen Regler
> aussehen (welche dann im code implementiert wird)?

Im allereinfachsten Fall?
1
   if( Geschwindigkeit zu klein && P kleiner als P_max )
2
     P++;
3

4
   else if( Geschwindigkeit zu gross && P größer als P_Min )
5
     P--;

und das dann alle paar Millisekunden zb mit einem Timer ausführen 
lassen.

so richtig glücklich wirst du damit nicht werden. Der Regler wird 
Schwingen wie Sau. Aber - vielleicht auch nicht.

Man könnte jetzt natürlich auch hergehen und die Erhöhung bzw. 
Erniedrigung von der Größe der Abweichung abhängig machen.

Ansonsten: dann eben ein PID Regler.

(mal danach googeln)
#4026965
Julian Nachname schrieb:
> Wie könnte hierbei die Formel für einen Regler
> aussehen (welche dann im code implementiert wird)?

Suche nach "pi regler c#" und du erhälst einen Haufen Treffer incl. Code 
für einen PI Regler.
Den D (differnzierender Regler) brauchst du erst mal nicht, wenn du den 
PI Regler im Schlaf beherrschst kannst du dann auf einen PID erweitern.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.