PID Drehzahlregelung AVR DC-Motor / Skalierung

#3672585
Lesenswert?

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.
#3672661
Lesenswert?

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?
#3672909
Lesenswert?

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)
#3672943
Lesenswert?

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.
#3673012
Lesenswert?

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.
(Firma: matzetronics) #3673027
Lesenswert?

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.
#3673030
Lesenswert?

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).
#3673113
Lesenswert?

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?
#3673367
Lesenswert?

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
#3673409
Lesenswert?

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.
Gast #3673439
Lesenswert?

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.
#3673467
Lesenswert?

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.
Gast #3673502
Lesenswert?

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?
Gast #3673516
Lesenswert?

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.
#3673670
Lesenswert?

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.
(Firma: mechapro GmbH) Persönliche Seite #3673673
Lesenswert?

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
Gast #3673735
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren