Hallo Leute,
nicht ohne eure Unterstützung habe ich meinen Regler endlich fertig (na
ja schön wär's wenn es so wäre). Der Regler regelt, allerdings nicht bei
Drehzahlen unter 50 U/min. Die max. Drehzahl beträgt 3300U/min.
Manche von euch werden sagen, dass es auch unmöglich ist, einen
Schnellläufer bei niedrigen Drehzahlen sauber zu regeln (möchte bei min.
20U/min noch regeln), aber es ist mit Sicherheit nicht unmöglich.
Ein paar Angaben:
µC: XC167
Soft: Keil µVision
Abtastperiode Regler: 1,6 ms
Frequenz PWM: 1KHz (damit der Strom Zeit hat, anzusteigen)
Mit Last läuft der Motor sauberer als ohne.
WAs ich schon gemacht hab: ich hab für niedrige Drehzahlen andere
Reglerparameter definiert, denn die können ja nicht über die ganze
Bandbreite optimal sein. Da es mir aufgefallen ist (mit alten
Reglerparametern), dass der Motor so große Sprünge macht, habe ich Kp
niedriger gewählt, seit dem ist es ein bisschen besser, aber noch lange
nicht optimal.
Habt ihr vllt. Ideen, was ich noch machen könnte?
Danke schön
Ein DC Kollektormotor ? Der hat gegen den Stillstand hin eine
Kollektorspannung, die Ueberwunden werden muss, sowie eine Reibung.
Enthaelt das modell diese beiden Komponenten oder ueberlaesst man es dem
I-Anteil ?
Wie mißt Du denn die Drehzahl?
Bei den geforderten 20/min braucht das Teil fast 3 Sekunden für eine
Umdrehung. Da wird ein Tachogenerator wohl nix gescheites liegern.
Also, erzähl mal!
guude
ts
@ 3357:
Das ist ein DC Kollektormotor, ja.
Also ich überlasse es alles dem I-Anteil, hab nämlich einen ganz
"normalen" PI-Regler programmiert.
Wie soll man die Komponenten, die du erwähnt hast, ins Modell
übernehmen?
@ klodeckel:
Die Drehzahl messe ich mittels Encoder, der am Motor dranhängt :).
Die Drehzahlmessung müsst schon passen. Hab die ausgegebenen Werte mit
einem Drehzahlmessgerät überprüft, passt, sitzt, hat Luft!
Je besser das Streckenmodell ist, desto besser ist das Regelverhalten.
Wenn man dem I-Regler eine Nivhtlineare strecke anhaengt, ist das immer
suboptimal. Man solle bei erhoehten Anforderungen daher linearisieren.
Und ein Linearisierter Motor braucht zum Anlaufen eine Mindestspannung.
@3357:
du meinst, dass wenn ich z.B. ne Drehzahl von 50 brauch, dass ich dann
den Motor mit der dafür berechneten (angenommen linearen) beaufschlage +
die GegenEMK?
> Der Regler regelt, allerdings nicht bei Drehzahlen unter 50 U/min.
Das sind typische Probleme.
Lies mal hier:
http://www.wescottdesign.com/articles/Friction/friction.html> Mit Last läuft der Motor sauberer als ohne.
Mit Last hast du selbstverstaendlich eine andere Regelstrecke und
musst alle deine Parameter erneut anpassen. Und wenn die Last im
Betrieb wechselt wird es erneut interessanter.
> Die Drehzahl messe ich mittels Encoder, der am Motor dranhängt :).
Ich hoffe der hat genug Aufloesung. Die Frage nach der Art
der Drehzahlmessung war naemlich nicht dumm. Wenn deine Regelung
ansonsten
sehr gut ist, was derzeit sicher nicht der Fall ist, dann haengt davon
in der tat die minimale Drehzahl ab.
> Man solle bei erhoehten Anforderungen daher linearisieren.
I second that. :-)
Aber er hat ja einen mordsmaessig ueberfetteten Controller fuer so
eine Anwendung, da ist das ja alles kein Problem.
Brauchst du eigentlich nur Drehzahlregelung oder auch Lageregler?
Wenn du nur ersteres brauchst so scheint mir ein Encoder etwas viel
Aufwand. Das geht auch einfacher indem man die BackEMF misst.
Olaf
Zum Encoder: er hat 500 Impulse pro Umdrehung.
Drehzahlmessung: Periodendauermessung (Zeit zw. 2 Encoderimpulsen), ist
ja für niedrige Umdrehungszahlen besser.
Ich brauche nur eine Drehzahlregelung, aber dass ich den Encoder nutze,
das ist Vorgabe.
Die Drehzahlbestimmung ist scho fertig.
Schade, dass der Artikel auf Englisch ist, aber ich werd mich
durchbeißen.
Ach ja: ich bin eine Sie!
> Drehzahlmessung: Periodendauermessung (Zeit zw. 2 Encoderimpulsen), ist> ja für niedrige Umdrehungszahlen besser.
Gut, kann man machen wenn man nicht zu schnell drehen will.
> aber dass ich den Encoder nutze, das ist Vorgabe.
Ist ja auch keine schlechte Loesung wenn Geld keine Rolle spielt.
> Schade, dass der Artikel auf Englisch ist, aber ich werd mich> durchbeißen.
Ist ab einem bestimmten Level aber normal. Ausserdem habe ich schon
Regelungstechnikbuecher gesehen die auf Deutsch schwerer zu
verstehen waren. Und wer will schon "Losbrechkraft" lesen. :-)
> Ach ja: ich bin eine Sie!
Suesskartoffel?
Das ist keine Variable der Regelstrecke und daher fuer den Regler
vollkommen irrelevant. :-P
Olaf
@Olaf:
ich mein ja nur, du hast geschrieben :"Aber er hat ja einen mordsmaessig
ueberfetteten Controller fuer so eine Anwendung, da ist das ja alles
kein Problem."
Ich wollt's ja nur berichtigen, nichts persönliches :-)
Zur Linearisierung des Motors ... Du misst den Motor aus als Graph
rpm(U), mit dem Drehmoment als Parameter. Angefangen mit Drehmoment
Null. Die Funktion rpm vs volt ist eine Gerade, die aber nicht durch
Null geht. Die verbleibende Spannung muss man hinzuzaehlen. Wichtig in
dieser Hinsicht ist ein U(Null+) und ein U(Null-) je nachdem man von
Positiv oder von Negativ kommt. Die beiden Werte muessen nicht gleich
sein. Heisst die Kollektorspannung fuer Null Drehzahl kann von der
Drehrichtung abhaengen.
@3357:
ich hab ja sogar eine Motorkennlinie vom Hersteller.
Hab da nur einen Strom als Achse.
Nach deinem Vorschlag könnte ich schon vorgehen, aber ich kann kein
Drehmoment messen, hab nix dafür.
Aber ich könnte ja nach der Spannung im Datenblatt schauen, die
überwunden werden muss.
Ja, das mach ich.
> Hab da nur einen Strom als Achse.
Und? Kommt das aus dem Regler als Stellgroesse raus?
Nein? Sieht nach einer guten Chance aus noch mehr zu linearisieren. .-)
> Nach deinem Vorschlag könnte ich schon vorgehen, aber ich kann kein> Drehmoment messen, hab nix dafür.
Notfalls bau irgendeinen Stab an die Achse und lass den auf eine Waage
druecken.
Olaf
Also ich hab da ein paar andere Berechnungen gemacht:
Meine niedrigste Solldrehzahl beträgt 20 U/min. Das entspricht 166
Imp/s.
Das wiederum heißt, ich habe alle 6 ms einen Impuls. Und somit die
Drehzahlberechnung. Und abfragen tue ich alle 1,6 ms. Der Regler braucht
die Istdrehzahl als Übergabeparameter.
Das heißt: bei 20 U/min regel ich ja trotzdem alle 1,6ms, obwohl eine
Drehzahlberechnung alle 6ms stattfindet (wenn man auf 1/4 der Umdrehung
mittelt), dann steht mir eine frisch ermittelte Drehzahl alle
6*125=750ms zur Verfügung.
Bei Änderungen kann der Regler natürlich nicht schnell reagieren, denn
der arbeitet die meiste Zeit mit einem eingefrohrenen Wert der Drehzahl.
Daher könnte das Schwingen kommen. Verletzung des Abtasttheorems!
Der Regler kann NICHT LANGSAMER gemacht werden, ganz sicher!!!! Ich hab
dazu noch in ein paar Büchern was gefunden. Tabtast = 1/10 der
Streckenzeitkonstanten!
Was mir geraten wurde: den P-Anteil viel kleiner machen und den I-Anteil
viel langsamer. Dann bräucht der Regler länger und würde sich nicht über
den Sollwert hinaus intergrieren.
Was hält ihr davon????
Gibt es da noch ne andere Möglichkeit?
versuch die eingangsgröße (ist-drehzahl) als gleitenden mittelwert aus
mehreren messungen (z.b. aus 3..10 messungen) zu bilden, dann springen
deine eingangswerte nicht so sehr
@tom:
das würde ja die Sache noch mehr verschlechtern, weil ich dann noch
länger für die Drehzahlberechnung brauchen würde. Heißt, mein Regler
würde denken: 20 U/min -> Gas geben, oh immer noch 20 -> noch mehr Gas,
das führt dann zu Schwingungen!
> ich kann sie ja nicht öfter berechnen, als die Impulse kommen!
Dann musst du eine anderen Tachogenerator verwenden. Ohne Eingangssignal
hast du nunmal keinen Regler.
Olaf
> ich habe einen Encoder, keinen Tachogenerator.
Das bleibt sich ja gleich.
> Einen anderen bekomme ich leider nicht für dieses Projekt :-(
Dann musst du halt schneller drehen. Ich sehe keine Moeglichkeit einen
Regler laufen zu haben wenn du keine Eingangsignale hast.
BTW: Was soll das eigentlich werden?
Olaf