Hallo,
Meine Aufgabenstellung:
Ich muss einen Wechselstrommotor regeln und dazu einen passenden Regler
entwerfen.
Die Drehzahlstellung erfolgt über einen Triac der die Halbwellen
schaltet.
Die aktuelle Drehzahl bekomme ich über einen Hall Sensor.
Das funktioniert auch bereits.
Der Motor hat ein PT1 Verhalten und die Zeitkonstante T=2.379s
(Ermittelt aus der Sprungantwort des Motors)
Daher wiederhole ich den Regelalgorithmus alle 0.2s (Tregler/T <= 0.1)
Anschließend habe ich laut
http://rn-wissen.de/wiki/index.php/Regelungstechnik
meine Regelparameter mit der Schwingungsmethode ermittelt.
Kpkrit = 14 und die Motordrehzahl schankt regelmäßig mit 1,5s
Die daraus resultierenden Werte sind:
Kp = 6,3
Tn = 1,275
Ki =8,0325
Mein Code für den Regler ist:
diff = sollRpm - istRpm;
esum = esum + diff;
rpm = kp*diff + ki*dt*esum; //dt = 0.2
diffalt = diff;
Nun zu meinem Problem:
Wenn ich nun die Drehzahl auf z.B.:2000U/min einstelle, dreht der Motor
bis zur max Drehzahl und das ca. 2-4 Sekunden, anschließend verringert
er die Drehzahl und schwankt unregelmäßig auf und ab.
Könnt ihr mir bitte Helfen. Was mache ich falsch? Ich komme zu keiner
Lösung wenn ich mit diesen Reglerentwurf laut rn-wissen arbeite.
Vielen Dank für im Voraus für Eure Bemühungen
Debuggen ...
Ein Oszilloskop ist vorhanden ? Falls nicht - ganz falsch.
Kommuniziert der Regler ? Falls nicht - schon falsch.
Etwas besser waere ein mehrkanal DAC, der irgendwelche Werte ueber die
Zeit ausgeben kann.
Zum code... den Bereich der summanden pruefen und limitieren, den Berech
des stellgliedes pruefen, Summe initialisieren, das Ganze natuerlich als
Ganzzahl rechnung. Was macht diff_alt? Was macht dt, resp Tn?
Wie wird rpm auf das Stellglied abgebildet ?
Halbwellen schaltet ... ist eher ein Witz. Weshalb nicht Phasenwinkel ?
Nimm mal eine Kurve auf, wie Drehzahl, Stellwert und Stellglied
zusammenhaengt. Ist es linear ? Was geschieht mit Lastaenderungen ?
Der PID ist fuer Leute, die sich wenig fuer das Problem interessieren.
Gar nicht geht nicht.
Ich denke mal, dass die Informationen von dir für eine Beurteilung noch
nicht reichen. Damit die Werte für den Regler überhaupt vergleichbar
werden, muss man die Skalierung der Eingangs- und Ausgangsgrößen mit
beachten.
z.B. Wenn ein ADC einem Wertebereich von 0-1024 hat und die PWM mit
Werten zwischen von 0-256 arbeitet, hat man eine zusätzliche Verstärkung
von 4 in seinem Regler. Die ganze Literatur geht aber hier von 1 aus.
Das heißt in dem Beispiel, dass das Ergebnis deines Reglers auch wieder
durch 4 geteilt werden muss um die Koeffizienten vergleichen zu können.
Jede andere Scalierung ist natürlich auch möglich. Sowohl Festkommawerte
als auch Fließkommawerte sind denkbar.
Die Werte von Dir mit Kp von 6,3 bedeuten ja eigentlich nur, dass der
Eingangsfehler mit 6,3 multipliziert als Stellgröße verwendet wird. Das
erscheint mir ziemlich hoch für den Fall, dass keine weitere Verstärkung
im Regler vorhanden ist. Um das beurteilen zu können, müsstest du uns
aber sagen wie deine Eingangs- und Ausgangswerte aussehen. Deine
Berechnung wird mit Fließkomma gemacht wie ich denke. d.h. Wenn du
direkt mit 5000 für 5000U/min arbeitest als max. Drehzahl, dann sollte
auch die Zahl 5000 für PWM maximal auf gelten (ich sage mal PWM, weil
keiner das Stellglied kennt).
Weitere Punkte wie das Begrenzen der Errorwerte (Windup) u.s.w lasse ich
da erst mal völlig aussen vor, obwohl das für einen realen Regler sicher
noch wichtig wäre.
Siebzehn Zu Fuenfzehn schrieb:> Nimm mal eine Kurve auf, wie Drehzahl, Stellwert und Stellglied> zusammenhaengt. Ist es linear ? Was geschieht mit Lastaenderungen ?
Das habe ich jetzt mal völlig raus gelassen. Wenn die Theorie aber zur
Praxis passen soll, müsste man die Nichtliniaritäten neben der
Skalierung natürlich auch noch berücksichtigen.
> Ein Oszilloskop ist vorhanden ? Falls nicht - ganz falsch.
Ist vorhanden
> Kommuniziert der Regler ? Falls nicht - schon falsch.
mit was kommunizieren?
> Zum code... den Bereich der summanden pruefen und limitieren, den Berech> des stellgliedes pruefen, Summe initialisieren, das Ganze natuerlich als> Ganzzahl rechnung. Was macht diff_alt? Was macht dt, resp Tn?
Drehzahl rpm wird limitiert (0-2600(maxDrehzahl))die Werte Ki, Kp und dt
werden initialisiert.
diffalt hat keinen Verwendungszweck habe ich unabsichtlich mit hinein
kopiert sorry...
soll ich diff und esum auch limitieren?
dt wiederholungszeit des Regelalgorithmus
Tn ist ein Wert den man zur berechnung von Ki braucht meinst du das?
> Halbwellen schaltet ... ist eher ein Witz. Weshalb nicht Phasenwinkel ?
Sorry schlecht beschrieben, es wird der Phasenwinkel angesteuert.
> Nimm mal eine Kurve auf, wie Drehzahl und Stellglied zusammenhaengt. Ist> es linear ? Was geschieht mit Lastaenderungen ?
ja ist linear, die ansteuerung selbst funktioniert und erreicht ohne
Regelung ziemlich genau seinen Sollwert. Der Motor treibt ein
Rauchgasgebläse an. Somit erreiche ich die Drehzahl nur bei
Zimmertemperatur ohne Regelung. Da ich aber Rauch mit verschiedener
Temperatur habe verändert sich die Last, so das die Drehzahl um ca 5-10%
abweichen kann (ohne regelung)
Hoffe es ist jetzt besser verständlich.
temp schrieb:> Ich denke mal, dass die Informationen von dir für eine Beurteilung noch> nicht reichen. Damit die Werte für den Regler überhaupt vergleichbar> werden, muss man die Skalierung der Eingangs- und Ausgangsgrößen mit> beachten.
Die Eingangsgröße wird bereits so umgerechnet, dass ich die Drehzahl in
U/min erhalte somit ist die Einheit von istRpm U/min wie auch bei
sollRpm und rpm
Die Ausgangsgröße rpm wird wiederum richtig umgerechnet, dass ich ein
richtiges PWM Signal erhalte.
Mein Problem ist nur, dass der Regler schwingt sonst nichts.
temp schrieb:> Weitere Punkte wie das Begrenzen der Errorwerte (Windup) u.s.w lasse ich> da erst mal völlig aussen vor, obwohl das für einen realen Regler sicher> noch wichtig wäre.
Habe jetzt den error wert esum begrenz auf +-1000
funktioniert so weit sehr gut
Problem: Jetzt habe ich eine Regelabweichung von 100U/min
Wie kann das sein? ist ja kein P-Regler
PI - Reglerentwurf für Wechselstrommotor schrieb:>> Kommuniziert der Regler ? Falls nicht - schon falsch.> mit was kommunizieren?
Mit euch.
Zb über eine UART auf ein Terminal.
Damit man auch mal die sich ergebenden Werte live und 'in Echtzeit'
sieht.
Dann kann man zb beurteilen ob das Problem darin liegt, das der I Regler
zu sehr den Stellwert in die Höhe treibt, so dass der I Regler seine
liebe Mühe damit hat seine Fehlersumme wieder auf 0 zu bringen wenn die
Solldrehzahl erreicht bzw. überschritten ist.
Es ist fast immer ein strategischer Fehler in der Entwicklung, wenn man
komplexe Systeme entwickelt ohne eine Möglichkeit zu haben, dem Programm
bei der Arbeit zuzusehen und sich ausgewählte Werte irgendwo anzeigen zu
lassen. Das Weglassen derartiger Dinge in der Entwicklungsphase ist dann
das berühmte 'Stochern im Nebel', bei dem man ohne ausreichende
Erfahrung in der Erkennung unf Bewertung von szenentypischen
Fehlerbildern dann eben nicht mehr weiter weiss und auf Raten angewiesen
ist.
Edit:
> Jetzt habe ich eine Regelabweichung von 100U/min> Wie kann das sein?
Jep. Genau davon rede ich bzw. "Siebzehn Zu Fuenfzehn"
Wenn dir der Regler die Istdrehzahl ausgeben würde, die Fehlersumme
sowie den Stellwert wüsstest du schon längst was da passiert.
Der erfahrene Entwicklungsingenieur rechnet damit, dass etwas nicht auf
Anhieb funktioniert und plant von vorne herein ein, dass er
Möglichkeiten zum debuggen braucht. Nur Neulinge denken, sie könnten
dynamische Systeme auf Anhieb beherrschen und sie würden daher so etwas
profanes wie eine Ausgabemöglichkeit nicht brauchen. Das heisst ja
nicht, dass diese Schnittstelle auf immer und ewig im System bleiben
muss. Läuft alles, wird die SChnittstelle wieder abgehängt und man hat
ein funktionierendes System, dem keiner mehr ansieht, dass da mal ein
LCD drann war oder eine UART.
Karl Heinz schrieb:> Nur Neulinge denken, sie könnten> dynamische Systeme auf Anhieb beherrschen und sie würden daher so etwas> profanes wie eine Ausgabemöglichkeit nicht brauchen.
Jaaaaaa wie glaubst du weis ich was ich für eine Regelabweichung habe?
Richtig ich lasse sie mir über ein Terminal ausgeben.
Und Neuling, ja aber nur in der Regelungstechnik. Wir wollen ja nicht
vorschnell Urteilen.
Also ich habe mir den Stell, Ist und Sollwert ausgeben lassen
Bei einer Soll von 2000 habe ich einen Stellwert von ca 2140 und einen
Istwert von ca. 1907 diese Wert ändern sich eig nur im Einer bereich.
Somit währe die Regelung gar nicht mal so schlecht wenn nicht die
bleibende Regelabweichung währe.
PI - Reglerentwurf für Wechselstrommotor schrieb:> Bei einer Soll von 2000 habe ich einen Stellwert von ca 2140 und einen> Istwert von ca. 1907 diese Wert ändern sich eig nur im Einer bereich.> Somit währe die Regelung gar nicht mal so schlecht wenn nicht die> bleibende Regelabweichung währe.
Und was hast du an Fehlersumme im I Regler?
Die müsste ja eigentlich immer größer werden, solange die Istdrehzahl zu
klein ist. Wird die Fehlersumme größer muss davon abegeleitet laut
1
Stellwert = P_Regler_Wert + I_Regler_Wert
ja auch der Stellwert größer werden.
Offensichtlich tut er das bei dir aber nicht, wenn der Stellwert
konstant bleibt.
Da sich der Wert für 'I_Regler_Wert' aber zu
1
Ki * Fehlersumme
errechnet, hast du daher wahrscheinlich mittels
> Habe jetzt den error wert esum begrenz auf +-1000
die esum zu sehr eingeschränkt, so dass I_Regler_Wert nicht mehr gross
genug wird, sodass der Stellwert die notwendige Höhe nicht mehr erreicht
um den Motor in der Drehzahl hoch zu kriegen.
Beachte auch:
Wenn der Regler eingeschwungen ist, dann ist es alleine der I_Regler,
der den Motor auf der Solldrehzahl hält. Bei eingeschwungenem Regler ist
der P_Regler_Wert gleich 0! D.h. es kann durchaus sein, dass der
P-Regler am Anfang einen Stellwert errechnet, mit dem der Motor erst mal
richtig Gas gibt, den du aber dann durch die Begrenzung der Fehlersumme
nie wieder erreichst.
Abhilfe könnte jetzt sein, das Ki größer zu machen, oder die Begrenzung
der Fehlersumme weiter zu fassen. Beide Modifikationen haben das Ziel
den Wert des I-Anteils größer werden zu lassen, so dass der Stellwert
auch größer werden kann.
Welches davon zum Ziel führt, wirst du ausprobieren müssen, wobei dir
die mitgeschriebenen Werte bzw. der Motor selber sagt (Schwingneigung),
was welche Änderung bewirkt.
Karl Heinz schrieb:> die esum zu sehr eingeschränkt, so dass I_Regler_Wert nicht mehr gross> genug wird, sodass der Stellwert die notwendige Höhe erreicht um den> Motor in der Drehzahl hoch zu kriegen.
Danke das war der Fehler.
Im ganzen funktioniert es jetzt eig ziemlich gut.
Frage kann ich jetzt irgendwie ermitteln ob der Regler 100% stabil
läuft.
PI - Reglerentwurf für Wechselstrommotor schrieb:> Karl Heinz schrieb:>> die esum zu sehr eingeschränkt, so dass I_Regler_Wert nicht mehr gross>> genug wird, sodass der Stellwert die notwendige Höhe erreicht um den>> Motor in der Drehzahl hoch zu kriegen.>> Danke das war der Fehler.
:-)
Siehst du. Und das alles hab ich aus der Information abgeleitet, dass
dein Stellwert konstant bleibt.
> Frage kann ich jetzt irgendwie ermitteln ob der Regler 100% stabil> läuft.
Häng eine Last drann und sieh nach wie sehr die Drehzahl einbricht bzw.
was der Regler dagegen tut. Auch mal ein paar untreschiedlich schnelle
Lastwechsel durchführen.
Karl Heinz schrieb:> Häng eine Last drann und sieh nach wie sehr die Drehzahl einbricht bzw.> was der Regler dagegen tut. Auch mal ein paar untreschiedlich schnelle> Lastwechsel durchführen.
Es ist ein Gebläse Motor
Problem ist mein Regler ist noch nicht stabil habe ich gerade
festgestellt.
Wenn ich eine kleine Drehzahl anfahren möchte (200 U/min) Dreht der
Motor auf hoch und geht wieder auf Drehzahl 0 und das dauernd.
Wie kann ich die richtigen Reglerparameter feststellen, da es mit der
Schwingungsmethode anscheinend nicht so wirklich geht. Oder muss ich
hier die Grenzstabilität bei einer kleinen Drehzahl feststellen?
PI - Reglerentwurf für Wechselstrommotor schrieb:> Problem ist mein Regler ist noch nicht stabil habe ich gerade> festgestellt.> Wenn ich eine kleine Drehzahl anfahren möchte (200 U/min) Dreht der> Motor auf hoch und geht wieder auf Drehzahl 0 und das dauernd.
Du hast doch die Werte vor dir auf dem Terminal.
Sieh halt nicht immer nur auf die Drehzahl sondern auch auf die
einzelnen Terme der Reglergleichung
1
Stellwert = P_Wert + I_Wert
wie entwickeln sich die?
Das ist doch die für dich relevante und wichtige Information um
einzuschätzen, was in deinen Parametern nicht stimmt.
> Wie kann ich die richtigen Reglerparameter feststellen, da es mit der> Schwingungsmethode anscheinend nicht so wirklich geht.
Werte studieren. Erkennen wie und aus welchen Komponenten sich der
Stellwert zusammensetzt. Wenn ein Regler schwingt, dann sind
normalerweise die Faktoren Kp bzw. Ki zu hoch, ich schätze mal bei dir
wird eben Ki zu hoch sein. Die Folge ist dann, dass der Regler
überkorrigiert und wieder in die Gegenrichtung korrigieren muss, was er
als Folge eines zu großen Ki dann wahrscheinlich wieder 'übertreibt'.
Müsste man aber alles in den Werten sehen können.
PI - Reglerentwurf für Wechselstrommotor schrieb:> Habe eher gehofft sich die Werte halbwegs errechnen zu können.
Wie ich das sehe:
Die Werte errechnen ist alles schön und gut. Nur brauchst du dazu eine
Beschreibung der Regelstrecke, die 100% mit der Realität übereinstimmt.
Und das tut sie in den seltensten Fällen. Denn wo in der Modellierung
der Regelstrecke ist denn zb ein Lager enthalten, dass bei bestimmten
Drehzahl aus welchem Grund auch immer eine höhere Reibung aufweist. Wo
sind Resonanzphänomäne berücksicht. etc.
Die Realität ist meistens komplexer als ein einfaches Modell glauben
machen lässt.
Hast du ein Anti Windup eingebaut?
Hast du deinen Regelalgorithmus mal mit einer simulierten PT1 Strecke
regeln lassen? Wenn das funktioniert weisst du schonmal ob dein
Algorithmus stimmt.
PI - Reglerentwurf für Wechselstrommotor schrieb:> Wenn ich eine kleine Drehzahl anfahren möchte (200 U/min) Dreht der> Motor auf hoch und geht wieder auf Drehzahl 0 und das dauernd.
Das liegt vermutlich daran, dass bei kleinen Phasenwinkeln (kleine
Drehzahl, kleiner Stellwert für Phasenanschnittsteuerung) der Motor ein
völlig anderes Drehmomentverhalten hat wie bei großen Phasenwinkeln. Der
Motor ist kein lineares System und hat da als PT1 betrachtet
wahrscheinlich deutlich andere Streckenparameter.
Was für ein Motortyp ist überhaupt eingesetzt? Link?
Hallo PI - Reglerentwurf für Wechselstrommotor (Gast),
wieter oben schriebst Du, daß Dein Stellglied linear sei.
Ich behaupte mal, daß dies nicht stimmt, denn:
1. Bewirkt eine Phasenanschnittsteuerung keine zum Zündwinkel
proportionale Ausgangsspannung
2. Ist die Drehzahl des Gebläses nicht proportional zur Spannung
Ich würde erst mal das Übertragungsverhalten des Stellgliedes überprüfen
und gegebenenfalls linearisieren:
Lege doch mal Deinen Regler lahm und erhöhe schrittweise den Stellwert
von 0 bis 100% und nimm dazu die sich einstellende Drehzahl auf.
Die sich ergebene Kurve könntest Du ja mal hier einstellen.
Jörg
DerSchonWieder schrieb:> Das liegt vermutlich daran, dass bei kleinen Phasenwinkeln
Das denke ich auch, mach mal dein Ki kleiner, dann reißt der Regler
nicht so schnell auf... Du hast eben keine lineare Abhängigkeit deines
Drehmomentes zu deinem Anschnittwinkel:
Beitrag "Phasenanschnitt (Zündwinkel berechen)"
Der Effektivstrom von Alpha lässt sich mit folgendem Polynom recht genau
beschreiben:
y = 2,27013E-09x4 - 5,39760E-07x3 - 8,85239E-06x2 + 2,81651E-04x +
9,98302E-01
Normiert auf 1
Wenns dir hilft...
Bezüglich Zündwinkel:
Also es ist so das ich aus der Stellgröße eine Wert ein PWM Signal
errechne.
Das heißt mein Motor läuft bei einer vorgegebenen Drehzahl auch ziemlich
genau auf dieser Drehzahl (im Leerlauf was bei mir heißt der Lüfter
transportiert Luft mit Zimmertemperatur)
joergk schrieb:> Lege doch mal Deinen Regler lahm und erhöhe schrittweise den Stellwert> von 0 bis 100% und nimm dazu die sich einstellende Drehzahl auf.> Die sich ergebene Kurve könntest Du ja mal hier einstellen.
Und genau das habe ich bereits gemacht. D.h es funktioniert alles bis
auf den Regler. Um alle anderen Sachen habe ich mich bereits gekümmert.
Ich möchte rein meine Drehzahlschwankungen bei auftretenden
Laständerungen ausgleichen.
DerSchonWieder schrieb:> Was für ein Motortyp ist überhaupt eingesetzt? Link?http://www.ebmpapst.com/de/products/hot-air-blowers/hot_air_blowers_detail.php?pID=108468DerSchonWieder schrieb:> Hast du ein Anti Windup eingebaut?
Ja habe ich mitlerweile
> Hast du deinen Regelalgorithmus mal mit einer simulierten PT1 Strecke> regeln lassen? Wenn das funktioniert weisst du schonmal ob dein> Algorithmus stimmt.
Nein wie mache ich das am besten?
PI - Reglerentwurf für Wechselstrommotor schrieb:>> Hast du deinen Regelalgorithmus mal mit einer simulierten PT1 Strecke>> regeln lassen? Wenn das funktioniert weisst du schonmal ob dein>> Algorithmus stimmt.>> Nein wie mache ich das am besten?
na ja du wirst doch ein PT1 programmieren können. Siehe
http://de.wikipedia.org/wiki/PT1-Glied
beim Zeitdiskreten PT1 Glied.
In das packst du deine errechneten Parameter für deine Motorstrecke und
simulierst mal. Dann sollte dein regler funktionieren. Das gibt dir
zumindest die Sicherheit daß die Programmierung stimmt.
Wenns dann beim realen Motor nicht geht, dann liegt das an den oben
angegebenen Gründen.
Und warum hat er dann 230V und einen 1uF Kondensator!?!
Es gibt 4 Buttons oberhalb der Technischen Beschreibung. Klick auf den
linken, dann siehst du die Nenndaten!
DerSchonWieder schrieb:> Siehe auch den Beitrag:> Beitrag "230V Lüfter die Drehzahl reduzieren"
Ich will Regeln und nicht reduzieren. Das ganze ist ein Teil einer
Steuerung d.h ich habe eine Steuerung für ein Gesamtes System in der
dieser Motor vorkommt. D.h ich möchte auch andere Drehzahlen anfahren.
Jedoch soll der Motor dann auch mit genau dieser Laufen. Deshalb mache
ich das über einen Mikrocontroller.
PI - Reglerentwurf für Wechselstrommotor schrieb:> Und warum hat er dann 230V und einen 1uF Kondensator!?!
Weil es ein Kondensatormotor ist (1phasig mit Hilfsphase über den
Kondensator)
PI - Reglerentwurf für Wechselstrommotor schrieb:> Es gibt 4 Buttons oberhalb der Technischen Beschreibung. Klick auf den> linken, dann siehst du die Nenndaten!
Ja und, liest du da was von Drehzahl von bis, Spannung von bis, ...?
Ich hoffe ich bin jetzt nicht unhöflich.
Bitte denkt nicht über das drumherum nach. Ich weis schon was ich mache.
Das einzige wovon ich nicht wirklich eine Ahnung habe ist Regeln.
Deshalb brauche ich Tipps zum Erstellen eines Reglers und nicht um das
Drumherum.
Wie kann ich die Informationen über die zu Regelnde Strecke genau
ermitteln?
Wie ermittle ich halbwegs genau meine Parameter?
Was muss man alles begrenzen (WindUp), gibt es da noch anderes zu
beachten?
Auf solche Fragen suche ich eine Antwort?
PI - Reglerentwurf für Wechselstrommotor schrieb:> Wie kann ich die Informationen über die zu Regelnde Strecke genau> ermitteln?
Wie ich oben schrieb: Übertragungsfunktion des Stellgliedes ermitteln.
Im unteren Drehzahlbereich einmal steigend und einmal fallend
(Anlaufverhalten).
Dann gehts weiter...
Jörg
DerSchonWieder schrieb:> Ja und, liest du da was von Drehzahl von bis, Spannung von bis, ...?
Es ist ein Wechselstrommotor der über einen Triac gesteuert wird
(Phasenanschnitt). Habe ich bereits oben erwähnt.
Drehzahl bis 2400 U/min geht aber in der Praxis bis ca. 2550 U/min
joergk schrieb:> Wie ich oben schrieb: Übertragungsfunktion des Stellgliedes ermitteln.>> Im unteren Drehzahlbereich einmal steigend und einmal fallend> (Anlaufverhalten).>> Dann gehts weiter...
Die Sprungantwort habe ich bereits ermittelt.
Daraus lässt sich ja schon mal erkennen das der Motor ein PT1 Verhalten
hat und das die Zeitkonstante T = 2.379s ist.
joergk schrieb:> Wie ich oben schrieb: Übertragungsfunktion des Stellgliedes ermitteln.>> Im unteren Drehzahlbereich einmal steigend und einmal fallend> (Anlaufverhalten).>> Dann gehts weiter...
Nix geht weiter. Wenn er keinen Motor hat, der überhaupt für eine
Drehzahlstellung ausgelegt ist, dann geht da nichts mehr weiter. Und ich
sehe in dem link keinen Motor den man drehzahlsteuern kann.
PI - Reglerentwurf für Wechselstrommotor schrieb:> Daraus lässt sich ja schon mal erkennen das der Motor ein PT1 Verhalten> hat und das die Zeitkonstante T = 2.379s ist.
Vor allem die 9 ist wichtig! Ich bin raus, viel Erfolg noch.
DerSchonWieder schrieb:> Nix geht weiter. Wenn er keinen Motor hat, der überhaupt für eine> Drehzahlstellung ausgelegt ist, dann geht da nichts mehr weiter. Und ich> sehe in dem link keinen Motor den man drehzahlsteuern kann.
Gut das ich das aber bereits mache :D sorry aber einen Einphasen
Wechselstrommotor kann man sehrwohl drehzahlgesteuert betreiben. Auch
ohne FU
PI - Reglerentwurf für Wechselstrommotor schrieb:> Wie ermittle ich halbwegs genau meine Parameter?
Wie, was?
Soll das heissen, du hast in 2 Stunden es immer noch nicht geschafft das
Ki von mir aus in 0.1 Schritten kleiner zu machen, bis der Regler auch
bei kleinen Drehzahlen nicht mehr schwingt?
Doch aber das gewünschte Ergebnis blieb aus.
Ich habe es zwar geschafft das er nicht mehr schwingt jedoch ist das
Regelverhalten auf dem Gesamten Drehzahlbereich nicht optimal.
vorallem wenn man eine drehzahl von 0 weg anfährt muss der regler erst
einschwingen und bleibt dan konstant oder er braucht sehr lange bis er
die drehzahl erreicht meist auch mit einem überschwingen verbunden
PI - Reglerentwurf für Wechselstrommotor schrieb:> Doch aber das gewünschte Ergebnis blieb aus.> Ich habe es zwar geschafft das er nicht mehr schwingt jedoch ist das> Regelverhalten auf dem Gesamten Drehzahlbereich nicht optimal.> vorallem wenn man eine drehzahl von 0 weg anfährt muss der regler erst> einschwingen und bleibt dan konstant oder er braucht sehr lange bis er> die drehzahl erreicht meist auch mit einem überschwingen verbunden
Nun.
Pragmatisch wie ich bin. Niemand schreibt dir vor, dass dein Ki über
alle Soll-Drehzahlbereiche dasselbe sein muss :-)
So ich habe jetzt einen Regelalgorithmus gefunden der funktioniert. (Ist
im bestehenden System implementiert) Jedoch gibt es hier und da
einzelfälle wo dieser zu schwingen beginnt.
Daher wollte ich auch einen eigenen Entwickeln.
Frage kann diesen Algorithmus irgendwer nachvollziehen. Ich nicht ganz.
zur Erklärung:
dt ist die Zeit in der der Regelalgorithmus immer wieder aufgerufen wird
ist auf 0.5s festgelegt
r ist die Stellgröße ist glaub ich ersichtlich
err und errIntegrall ist glaube ich selbsterklährend
aber was ist der propFact und iwi ist die Formel für r nicht ganz
nachvollziehbar für mich
Hallo Gast,
also das mit dem Überschwingen usw. ist ganz einfach.
Ich bin damals auf das gleiche Problem reingefallen.
Der PID Regler arbeitet nur wenn er die Möglichkeit hat zu regeln.
ein Sprung von 0% auf 100% geht nicht.
Es fehlt die Rampe.
Also.... wenn der Motor 100U/1s seine Geschwindigkeit verändern kann,
so sollte eine Rampe z.B. 8U/0,1s aufgebaut werden.
Damit hat der Regler immer Luft zu korrigieren.
Die Rampe ist das Geheimnis......
Gruß Thomas
Aaahh ok...
Das heißt ich soll die Drehzahl erst einmal anfahren und wenn der Motor
diese halbwegs erreicht hat, dann erst Regeln. Stimmt das?
Und kannst du mit diesem Code oberhalb etwas anfangen?
Hallo "PI",
> Problem ist mein Regler ist noch nicht stabil habe ich gerade> festgestellt.> Wenn ich eine kleine Drehzahl anfahren möchte (200 U/min) Dreht der> Motor auf hoch und geht wieder auf Drehzahl 0 und das dauernd.
Wie misst du denn genau die Drehzahl? Gibt es nur einen Hall-Puls pro
Umdrehung, oder mehrere? Bei einem Puls/U hast du bei 200 U/min gerade
mal 3,3 Pulse/U. Selbst bei deinem sehr niedrigen Reglertakt von 5 Hz
ist die Auflösung der Drehzahl sehr bescheiden. Zwisschen 0 und 200
U/min liegen gerade mal 16,667 Pulse/Reglertakt, d.h. dein Sollwert wird
nur mit 4 bit dargestellt.
Mit freundlichen Grüßen
Thorsten Ostermann
PI - Reglerentwurf für Wechselstrommotor schrieb:> err = istRpm - sollRpm;>> maxErr = 100;> if (err > maxErr) {> err = maxErr;> } else if (err < -maxErr) {> err = -maxErr;> }>> errIntegral += err * dt;>> maxErrIntegral = 1000;>> if (errIntegral <= -maxErrIntegral) {> errIntegral = -maxErrIntegral;> } else if (errIntegral > maxErrIntegral) {> errIntegral = maxErrIntegral;> }>> propFact = (15.0 - 0.005 * sollRpm); // Regelgeschwindigkeit>> r = 70 + sollRpm - 1 errIntegral - err propFact;
Hmm, da fehlt ja fast alles. Die einzigen Programmteile, sie ich hier
sehe ist die Klemmung von minimalen und maximalen Werten, ein wenig I
Behandlung und hardcodiertes P.
Ich empfehle dir eine einfache Einführung in PID Regler, wie z.B. die
AVR Application Note 221, die einen universell implementierbren PID
Regler beschreibt inklusive Code und schönem PDF.
http://www.atmel.com/Images/doc2558.pdf
Grob gesagt dämpft I Schwingungen und verlangsamt bei höheren Werten die
Reaktionszeit, während höhere D für schnellere Reaktionen sorgen und im
Extremfall für Überschwingen sorgen. P sorgt dafür, das der Regelkreis
überhaupt verstärkt.
Implementiert habe ich den Atmel PID Regler z.B. im hier beschriebenen
3-Phasen Umrichter mit AVR:
http://www.mikrocontroller.net/articles/3-Phasen_Frequenzumrichter_mit_AVR
Da kannst du über das LCD und die Knöppe die Werte im Betrieb verändern
und dabei den Motor Lastwechseln unterziehen, beobachten oder
wasauchimmer.
Du wirst vermutlich nicht umhin kommen, auf Karl-Heinz zu hören und die
Werte
* dem Benutzer zu zeigen
* interaktiv veränderbar zu machen. Nicht unbedingt, um den Motor stabil
zu bekommen, aber um dabei was über die einzelnen Faktoren zu lernen.
Thomas schrieb:> Die Rampe ist das Geheimnis......
Eigentlich sollte sich bei korrekten Werten von P,I und D die Rampe von
alleine einstellen.
Matthias Sch. schrieb:> Du wirst vermutlich nicht umhin kommen, auf Karl-Heinz zu hören und die> Werte> * dem Benutzer zu zeigen> * interaktiv veränderbar zu machen. Nicht unbedingt, um den Motor stabil> zu bekommen, aber um dabei was über die einzelnen Faktoren zu lernen.
Das mache ich sowieso.
Thorsten Ostermann schrieb:> Wie misst du denn genau die Drehzahl? Gibt es nur einen Hall-Puls pro> Umdrehung, oder mehrere? Bei einem Puls/U hast du bei 200 U/min gerade> mal 3,3 Pulse/U. Selbst bei deinem sehr niedrigen Reglertakt von 5 Hz> ist die Auflösung der Drehzahl sehr bescheiden. Zwisschen 0 und 200> U/min liegen gerade mal 16,667 Pulse/Reglertakt, d.h. dein Sollwert wird> nur mit 4 bit dargestellt.
Habe leider auf die schnelle nichts gefunden.
Aber ich werde das beachten und hoffe später Infos zum Hallsensor zu
finden.
Matthias Sch. schrieb:> AVR Application Note 221, die einen universell implementierbren PID> Regler beschreibt inklusive Code und schönem PDF.> http://www.atmel.com/Images/doc2558.pdf
Werde ich später ausprobieren. Muss jetzt noch an anderen Problemen
arbeiten.
Danke jedenfalls für die Denkanstöße :)
Matthias Sch. schrieb:> Thomas schrieb:>> Die Rampe ist das Geheimnis......>> Eigentlich sollte sich bei korrekten Werten von P,I und D die Rampe von> alleine einstellen.
Also ich hab die Erfahrung gemacht, das ein Regler nur dann
funktioniert, wenn er Platz zum Regeln hat.
Kann sein, dass die Rampe alleine kommt. Nur ich bin den anderen Weg
gegangen.
Und der funktioniert bei allen unseren CNC Steuerungskunden.
Und das sind rund 100 verschiede.
Unabhängig von wechselden Einflüssen wie
Temperatur, staub usw...
Gruß Thomas
Thomas schrieb:> Also ich hab die Erfahrung gemacht, das ein Regler nur dann> funktioniert, wenn er Platz zum Regeln hat.
Jeder Regler hat ein limitierten Stellwert. Das muss man bei starken
Verstärkungsfaktoren und gleichzeitig starken Sollwertsprüngen
berücksichtigen.
Thomas schrieb:> Der PID Regler arbeitet nur wenn er die Möglichkeit hat zu regeln.> ein Sprung von 0% auf 100% geht nicht.
Jedes Heizungsthermostat ist ein Regler. Nach deiner Theorie dürfte man
also in einem kalten Raum das Thermosstat erst auf 1 nach einiger Zeit
auf 2, dann auf 3 etc stellen.
Also mein Thermostat arbeitet auch einwandfrei wenn ich es von 0 auf 3
oder auch direkt auf 5 stelle.
Mit Regelungstechnik hat diese Theorie auf jeden Fall eher nichts zu
tun.
Ihr habt beide recht. Beim Heizungsthermostat sind die Zeitkonstanten
hoch und ein leichtes Überschwingen ist tolerabel. Beim Antrieb von
beweglichen Bauteilen sieht das anders aus. Da verwendet man gerne in
Beschleunigung und Ruck (engl. jerk) begrenzte Rampen, weil ein
dynamischer Antrieb sonst gerne die ganze Maschine zum wackeln bringt,
und auf Dauer sonst die Maschine oder sich selbst zerlegt.
Mit freundlichen Grüßen
Thorsten Ostermann
Ich finde eine Zeitkonstante von 2.4 sekunden und eine Regler Abtastzeit
von 0.5 sekunden zu nahe beieinander. Ich wuerde den Regler alle 20ms,
phasensynchron zum Netz laufen lassen.
Siebzehn Zu Fuenfzehn schrieb:> Ich finde eine Zeitkonstante von 2.4 sekunden und eine Regler Abtastzeit> von 0.5 sekunden zu nahe beieinander. Ich wuerde den Regler alle 20ms,> phasensynchron zum Netz laufen lassen.
An das habe ich auch schon gedacht und auch schon probiert. Ich habe die
Zeit von 500ms auf 200ms herabgesetzt und dadurch schon eine bessere
Regelung erhalten.
Ich muss nur prüfen ob ich dadurch keine Probleme bekomme, da der
Prozessor schon sehr ausgelastet ist mit meinem Programm, aber wird
wahrscheinlich e funktionieren.
Auf jedenfall werde ich, wenn ich auf eine gute Lösung komme sie hier
reinstellen.
Das Problem ist dermassen von trivial, da kann ein controller noch nicht
mal ansatzweise ausgelastet sein... wenn man's richtig macht. Also :
- weg mit printf()
- weg mit float
- ein alfaelliger dispay ist zufieden mit 2
updates pro sekunde, schneller sieht man ohnehin nicht.
Siebzehn Zu Fuenfzehn schrieb:> Das Problem ist dermassen von trivial, da kann ein controller noch nicht> mal ansatzweise ausgelastet sein... wenn man's richtig macht. Also :
Mit diesem Problem natürlich nicht
Jedoch steuert der Controller nicht nur dieses Gebläse. Dies ist nur
eine von vielen Aufgaben die er zu bewältigen hat.
Frage gibt es eine Formel/Richtwert nach der man die Wiederholungszeit
des Algorithmus einstellen muss.
Bin einmal auf diese hier gestoßen.
Wiederholzeit/Zeitkonstante(Regelstrecke) = 1/10
Stimmt die?
Ich würde ein Kennfeld aufnehmen mit Eingangsspannung über Drehzahl.
Für die Regelung dann einfach mit der Solldrehzahl ins Kennfeld rein und
die resultierende Spannung aufschalten. Dazu dann noch den Ausgang vom
PI-Regler addieren um die schwankende Last zu kompensieren.
Hat den Vorteil, dass der PI-Regler "etwas vom der Drehzahl entkoppelt
ist".
Oder wurde dieser Ansatz schon erfolglos probiert?
Eventuell könnte man auch probieren zwischen Reglerausgang und System
das invertierte Kennfeld zu legen um vorhandene Nichtlinearitäten
halbwegs zu linearisieren und die PI-Parameterwahl zu vereinfachen.
Was haltet Ihr davon?
LG David
Ja. Das sowieso. Das nennt sich Linearisierung des Stellgliedes am
System.
Ohne das muss der integrator mehr arbeiten, und die Regelung wird
langsamer, man muss den I-Anteil verkleinern.