Hallo Community Ich habe schon ganz viel über den PID Regler gelesen aber irgendwie verstehe ich es nicht. Folgendes Szenario: Ich möchte eine genaue Drehzahlregelung für ein Masselaufwerk (Plattenspieler) machen. Ich habe eine Codescheibe mit 72 Segmenten, hier messe ich mit einer Reflexlichtschranke über den ICP Eingang die Zeit und kann damit die Drehzahl berechnen, dies funktioniert einwandfrei. 33 1/3 upm enspricht 100 000 Ticks für die Zeit Als Ausgang habe ich einen 12bit DA-Wandler, welcher über einen LeistungsOPV analog den Motor stellt (Spannungsmäßig), dies funktioniert auch einwandfrei. Nun fehlt mir aber der Ansatz den Motor zu regeln. Das Problem ist aber, dass ich ja nicht weiß bei welchem Ausgang, welche Drehzahl herauskommt. Die meisten Beispiele die ich gefunden habe waren darauf ausgelegt irgendeine Position zu erreichen und dann dort stehen zu bleiben. Wenn in meinem Fall aber IST>SOLL kommt ein negativer wert für den Ausgang raus und wenn IST=SOLL wird der regler auf 0 gesetzt, was ja auch quatsch ist. Der Bascomcode ist nach dem Motto: E = 33.33333333 - Drehzahl Esum = Esum + E Proportionalteil = Kp * E Integralteil = Ki * Ta Integralteil = Integralteil * Esum Differentialteil = E - Ealt Differentialteil = Differentialteil / Ta Differentialteil = Differentialteil * Kd Av = Proportionalteil + Integralteil Av = Av + Differentialteil Was stelle ich nun mit AV an, damit es funktioniert? Wenn ich eine einfache regelung mache ala IST>SOLL -> Decr Ausgang IST<SOLL -> Incr Ausgang funktioniert es wie erwartet, aber aufgrund der hohen Masse schwingt es nur sinnlos. Es muss also irgendwas rauskommen wie: wenn drehzahl zu klein erhöhe intelligent den ausgang aber kompensiere überschwingen.
Wenn IST sehr nahe an SOLL ist, dann darf sich der Ausgang nur mehr stark verzögert und in kleinst möglichen Schritten ändern. Eine gewisse Hysterese innerhalb sich nichts ändert sollte es auch geben.
Das hilft mir nicht weiter. Icvh weiß, dass ich die 33upm etwa bei 2500 'PWM' (ist ja analog) bekomme. wenn ich den I und den D teil auf 0 Setze müsste er ja irgendwas machen. aber egal was für ein faktor ich nehme, wenn die differenz null ist ist auch der ausgang null. wenn ich allerdings mein AV+2500 als ausgang setze, bekomme ich was raus, aber das kann es doch nicht sein, dass ich vorgeben muss wo er hingeht. wie ist hier der ansatz?
Dein AV kann doch nicht 0 sein wenn der Motor steht. Die Regelabweichung beträgt doch 100000 Ticks. Hast du dir auch ausgerechnet wie genau du die Drehzahl einstellen kannst mit den 4096 bit des D/A Wandler.
Du machst am Schluss eine simple Addition, also PWM Startwert + PID Regler Ergebnis = neuer PWM Wert.
:
Bearbeitet durch User
genau dannach habe ich gesucht. Das habe ich mir schon selber überlegt, aber es irgendwie als unsinnig verworfen und garnicht ausprobiert. funktioniert. nun muss ich noch die drehzahlmessung am anfang ordentlich hinbekommen (arbeitet mit gleitendem mittelwert, Welcher am anfang falsch berechnet wird)
Markus B. schrieb: > Das hilft mir nicht weiter. > > Icvh weiß, dass ich die 33upm etwa bei 2500 'PWM' (ist ja analog) > bekomme. > > wenn ich den I und den D teil auf 0 Setze müsste er ja irgendwas machen. > aber egal was für ein faktor ich nehme, wenn die differenz null ist ist > auch der ausgang null. Solange du nur einen P Anteil hast - ja, genau. Mit einem reinen P Regler kann man die Sollgröße nicht erreichen. Erst wenn du einen I Anteil mit dazu nimmst, ändert sich die Sache.
Markus B. schrieb: > genau dannach habe ich gesucht. > > Das habe ich mir schon selber überlegt, aber es irgendwie als unsinnig > verworfen ist es auch. Diese Aufsummierung steckt bereits im I Anteil vom P_I_D Regler.
:
Bearbeitet durch User
Beim PI(D) Regler wird wenn Du nahe bei 0 Abweichung bist der Sollwert eigentlich nur durrch den I Anteil gebildet. Vielleicht suchst Du mal unter Feedforward control
es funktioniert aber genau so. einfach den regelwert auf den ausgang zurückgeben funktionert nicht egal wiegroß der i faktor ist.
Markus B. schrieb: > es funktioniert aber genau so. > > einfach den regelwert auf den ausgang zurückgeben funktionert nicht egal > wiegroß der i faktor ist. Dann machst du was falsch. Natürlich kann man es auch so machen. Nur geht das eben am Sinn eines PID Reglers vorbei. Da wäre ein einfacher 2 Punkt Regler viel simpler
1 | Schleife |
2 | wenn zu langsam -> gib mehr Gas |
3 | wenn zu schnell -> gib weniger Gas |
4 | warte ein bischen, damit der Motor die Gasveränderung auch in eine |
5 | Drehzahländerung umsetzen kann |
6 | Ende Schleife |
Letzten Endes hast du ohnehin einen derartigen Regler gebaut. Nur halt mit dem Umweg eines PID Reglers, den du an der Arbeit hinderst. Bzw. eigentlich mit einem PID Regler, dem du den I Anteil klaust und selbst implementierst.
:
Bearbeitet durch User
Das ist ja leicht auszuprobieren, wenn du auf die P,I und D Faktoren zugreifen kannst. Setze P und D auf Null und stelle den I Faktor auf irgendeinen mittleren Wert. Der Ausgang des Reglers sollte nun langsam ansteigen, solange der Motor zu langsam dreht. In der Nähe des Sollwertes sollte der Ausgang des I Reglers sich asymptotisch einem Endwert nähern.
Karl Heinz schrieb: > Letzten Endes hast du ohnehin einen derartigen Regler gebaut. Nur halt > mit dem Umweg eines PID Reglers, den du an der Arbeit hinderst. > Bzw. eigentlich mit einem PID Regler, dem du den I Anteil klaust und > selbst implementierst. Denn das hier
1 | if( soll < ist ) |
2 | gas += Wert; |
3 | else if( soll > ist ) |
4 | gas -= Wert; |
5 | |
6 | Ausgabe = gas; |
ist genau das, was letzten Endes übrig bleibt, wenn man aus einem PID Regler den reinen I Anteil eigenständig heraus-'operiert' und ein wenig umformt. Die Variable "gas" ist nichts anderes als die Fehlersumme die im PID Regler benutzt wird und der Faktor Ki steckt in der Ausgabeanweisung (ist hier also 1.0, bzw. 'Wert', je nachdem wie man es sehen möchte).
:
Bearbeitet durch User
Um einen vorgegebenen Sollwert zu halten, ist ein I-Regler das einzig senkrechte. Ein P-Anteil wird interessant wenn der Sollwert geändert wird und das System rasch folgen soll. Ein D-Anteil wird dann interessant, wenn schnelle Störungen abgefangen werden sollen. P-Regler sind deshalb so verbreitet, weil sie zu Analogzeiten am einfachsten zu realisieren waren: alles was man braucht um die P-Stellgrüße zu ermitteln ist ein Verstärker, der die Soll-Ist Abweichung geeignet verstärkt und so die Stellgröße ermittelt. I- und D- Anteile erfordern Integratoren bzw Differentiatoren, die schaltungstechnisch anspruchsvoller sind. Bei deinem Aufbau, ist da die Stellgöße auch optimal verwertet? Decken die 4096 Schritte einen optimalen Bereich ab?
ja. 4095=52 upm ohne last 2800=33 1/3 upm 3500=45 upm ausm gedächtnis, keine ahnung ob das so stimmt. jedenfalls ist da noch luft nach oben zum nachregeln ohne auflösung zu verschenken. bekomme es jetzt auf 2 stellen nach dem komma genau eingeregelt. wichtiger ist ein guter gleichlauf, und hier muss man einen kompromiss zwischen störungen ausregeln und geschwindigkeit halten finden. es sind also hier 2 wichtige sachen: drehzahlgenauigkeit (scheinbar nicht so wichtig, ander superteure antriebe ohne regelkreis mit synchronmotoren und FU haben auch nur +-1upm) und drehzahlkonstanz (damit es nicht "leiert") danke an euch
stimmt übrigens, geht auch wenn man nur den PID wert direkt auf den ausgang schreibt, allerdingt nur wenn wie beschrieben der I-wert relativ hoch ist. es regeln aber beide methoden pid ausrechnen-> ausgang pid ausrechnen->alter pwm+pid->ausgang mit den ensprechenden passenden regelparametern gleich schnell und genau.
Markus B. schrieb: >Wenn in meinem Fall aber IST>SOLL kommt > ein negativer wert für den Ausgang raus >und wenn IST=SOLL wird der regler auf 0 >gesetzt, was ja auch quatsch ist. Das stimmt. Ein reiner P-Regler kann das nicht. Den musst du um eine drehzahlabhängige Vorsteuerung für den Arbeitspunkt ergänzen. Der P-Anteil regelt dann allein die Störungen aus. Alternativ nimmst du wie oben bereits beschrieben einen PI-Regler. Dann übernimmt der I-Anteil die Arbeitspunkteinstellung.
ernst oellers schrieb: > Decken > die 4096 Schritte einen optimalen Bereich ab? Markus B. schrieb: > ja. > 4095=52 upm ohne last > 2800=33 1/3 upm > 3500=45 upm Ich finde nein, die Werte sind nicht optimal: für den technisch uninteressanten Bereich unterhalb von 30 upm werden 60 % des zur Verfügung stehenden Stellbereiches vergeben. Und auf zwei Stellen hinter dem Komma genau ist das auch nicht: ein LSB entspricht 0,015 upm, und das auch nur im Durchschnitt, denn die drei Werte liegen nicht auf einer Geraden. Wenn Du den Bereich 0 ... 4095 einem Unterschied von 10 upm zuordnest, erhältst du theoretisch eine Auflösung von 0,000037 upm / LSB (least significant bit). Karl Heinz schrieb: > if( soll < ist ) > gas += Wert; > else if( soll > ist ) > gas -= Wert; > > Ausgabe = gas; würde ich vor der letzten Zeile noch ergänzen mit else if( soll = ist ) gas = Wert Das Verhalten des Regelkreises muss dann am lebenden Teil durch geeignete Wahl von "Wert" so getuned werden, dass sich der Sollwert möglichst schnell einstellt, ohne zu schwingen.
Markus B. schrieb: > Ich möchte eine genaue Drehzahlregelung für ein Masselaufwerk > (Plattenspieler) machen. Frage an die "Allgemeinheit": Wenn die Masse so hoch ist, also das System recht träge, kann man da eigentlich mit dem Standard-PID-Regler arbeiten? Kann man dies komplett mit den Faktoren Kp, Ki und Kd ausgleichen oder bräuchte man dann eine (irgendwie modifizierte) Version des PID-Reglers (vielleicht mit Verzögerungsglieder o.ä.). Ich kann mir vorstellen, dass der PID-Regler erkennt, dass der Motor z.B. zu langsam ist, noch oben regelt, dann immer noch erkennt, dass er zu langsam ist, noch mehr nach oben regelt, immer wieder und wieder. Da das System so träge ist, würde er vermutlich dann weit über schwingen?
Auf keinen Fall zusätzliche Verzögerungen einbauen. Ein PID ist ideal.
Ein Regelkreis mit PID würde ich eher als suboptimal betrachten. Eigentlich macht man so was mit einem Stellglied. Dazu nimmt man einen Synchronmotor und steuert den über einen FU an. Dessen Stabilität ist dann quarzgenau.
ernst oellers schrieb: > Ich finde nein, die Werte sind nicht optimal: für den technisch > uninteressanten Bereich unterhalb von 30 upm werden 60 % des zur > Verfügung stehenden Stellbereiches vergeben. Und auf zwei Stellen hinter > dem Komma genau ist das auch nicht: ein LSB entspricht 0,015 upm ich möchte den plattenteller bei "aus" ganz langsam drehen lassen, von daher brauche ich den bereich auch. die genauigkeit ist ausrechend, man muss es nicht übertreiben die drehzahlmessung allein ist nicht so genau, weil auf dem ausgedrucktem aufkleber die verzerrungen die der drucker erzeugt sich schon ordentlich bemerkbar machen. ich habe da über eine umdrehung schwankungen bis zu 1500ticks (bei den "guten messwerten" so um die 150), obwohl die theoretisch 0 sein müssten der aufkleber selbst ist mit nem usbmikroskop auf perfekten rundlauf ausgerichtet aber trotzdem muss ich paar messwerte wegwerfen und bilde auch den durchschnitt aus den letzen 64messungen für ein einigermaßen brauchbares ergebnis. was nützt mir also supertolle einstellbarkeit wenn die messung schon nicht so genau ist. synchronmotor ist abgesehen vom höherem technischem aufwand lauter und und hat keine gleichmäßige drehbewegung, außerdem gibts schlupf bei der übertragung zum plattenteller, der auch jedesmal anders ist, da muss man immer händisch nachregeln. ich bin mit meiner lösung ganz zufrieden.
Hallo Marco, > Ein Regelkreis mit PID würde ich eher als suboptimal betrachten. > > Eigentlich macht man so was mit einem Stellglied. Dazu nimmt man einen > Synchronmotor und steuert den über einen FU an. Dessen Stabilität ist > dann quarzgenau. Ach, und was glaubst du läuft im FU ab? Spätestens wenn der Motor nicht im gesteuerten U/f-Modus betrieben wird, sondern auf dem Geber geregelt wird, ist wieder ein PID im Spiel. Meist in Form von mehreren ineinander geschachtelten Regelkreisen, wobei der D-Anteil nicht immer verwendet wird. Mit freundlichen Grüßen Thorsten Ostermann
Wir haben mal sowas für einen renommierten Plattenspielerhersteller entwickelt. Der dort verwendete Synchronmotor wird z.B. mit einem 150Hz-Sinus gespeist. Ob die Quelle nun ein Sinus oder ein Rechtecksignal war, war dem Motor egal. Als Synchronmotor dreht der sich entweder schlupffrei zur Eingangsspannung, oder er blockiert. Der Integralanteil in diesem System wird von dem Gummiriemen zwischen Motor und Plattenteller übernommen. Ein leicht ruckelnder Motorlauf wird von dem kiloschweren Plattenteller ausgebügelt. Ideal ist es ja, wenn die Gleichlaufstörungen null sind. Wieviel kW soll denn da der Motor haben, damit die Regelung eine Chance hat. Unser Drehzahlsteller läuft 1a und der Hersteller ist hochzufrieden mit uns.
Sowas hier? http://img2.audio.de/0400000034629-3126290-jpg-f630x378-ffffff-C-ec3dddec-48118634.jpg Mit freundlichen Grüßen Thorsten Ostermann
Genau. Halt da, wo ein Plattenspieler auch mal 40.000€ kosten darf.
Hehe, da kommt mein Kunde wesentlich besser weg. Der Spieler sieht aber ähnlich aus. Schlupf gibt es definitv zwischen Motor und Plattenteller durch den Riemen.
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.