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.
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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.
Habe eher gehofft sich die Werte halbwegs errechnen zu können. Oder ist es besser einfach zu probieren und die Werte so zu ermitteln.
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.
:
Bearbeitet durch User
Gut, dann werde ich mal meine Werte ermittel. Danke für die schnellen Rückmeldungen :)
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...
:
Bearbeitet durch User
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=108468 DerSchonWieder 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.
PI - Reglerentwurf für Wechselstrommotor schrieb: >> 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=108468 Entweder ich bin doof oder du willst uns veräppeln. Das ist doch ein Kondensatormotor, den kann man doch gar nicht mir Phasenanschnitt regeln. Dazu brauchst du einen Umrichter oder zumindest Vorwiderstand/Kondensator, wobei das schon grenzwertig sein kann.
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?
:
Bearbeitet durch User
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 :-)
:
Bearbeitet durch User
Das ist ja das schöne an so einem Digitalregler. Der kann seine Parameter an den aktuellen "Arbeitspunkt" anpassen: Ki(soll)
Ja daran hab ich schon gedacht aber für heute lass ichs
1 | err = istRpm - sollRpm; |
2 | |
3 | maxErr = 100; |
4 | if (err > maxErr) { |
5 | err = maxErr; |
6 | } else if (err < -maxErr) { |
7 | err = -maxErr; |
8 | }
|
9 | |
10 | |
11 | errIntegral += err * dt; |
12 | |
13 | |
14 | maxErrIntegral = 1000; |
15 | |
16 | if (errIntegral <= -maxErrIntegral) { |
17 | errIntegral = -maxErrIntegral; |
18 | } else if (errIntegral > maxErrIntegral) { |
19 | errIntegral = maxErrIntegral; |
20 | }
|
21 | |
22 | propFact = (15.0 - 0.005 * sollRpm); // Regelgeschwindigkeit |
23 | |
24 | r = 70 + sollRpm - 1 * errIntegral - err * propFact; |
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.
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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.
Wie macht man das in der Praxis weis gerade nicht genau wie man das umsetzt.
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.