Hallo zusammen, ich habe eine Drehzahlregelung für einen kleinen bürstenbehafteten Gleichstrommotor aufgebaut. Die Soll-Drehzahl speise ich als Rechtecksignal über den Input-Capture in einen Atmega88 ein. Die Ist-Drehzahl erfasse ich mittels einer Lichtschranke + Lochscheibe auf der Welle des Motors. Angeschlossen ist die Lichtschranke an den Exint0 des Atmega und liest darin den aktuellen Wert eines frei laufenden Timers aus. Dann bilde ich die Differenz aus Sollwert und Istwert und addiere/subtrahiere das Ergebnis zum letzten PWM Wert und gebe diesen an den Motor aus. Das funktioniert soweit auch ganz gut und der Motor läuft rund für Wellendrehzahlen > 80 U/s Ich möchte aber die Wellendrehzahl bis auf ca 2.5 U/s herunter regeln können. Nur dann fängt der Motor sehr das pulsieren an und läuft nicht mehr vernünftig rund. Die Lochscheibe auf der Welle besitzt 8 Schlitze, ich würde also bei 2.5 U/s auf eine Interruptfrequenz von 20Hz kommen. Im Interrupt initialisiere ich eine Art Watchdog-Timer, um einen plötzlichen Stillstand des Motors erkennen zu können. Allerdings erkenne ich das ja frühstens nach Ablauf der Periodenzeit, also bei 20Hz wären das 50ms. Als Reaktion stelle ich dann die Ist-Drehzahl auf 0, so dass der Regler den Motor beschleunigt. Wie gesagt, soviel zur Theorie...in der Praxis hält der Motor bei kleinen Soll-Drehzahlen aber trotzdem kurz an und beschleunigt dann (zu viel), um dann wieder anzuhalten etc... Ich habe schon einige Dinge probiert (Zyklenzeit des Regelalgorirhmus variiert von 5ms - 60ms), Gradient der PWM begrenzt (bis zu 1/Zyklus) aber ein zufriedenstellender Rundlauf war nicht zu erreichen. Das Problem mit der Auflösung / zeitdiskreten Abtastung bei Lichtschranken als Drehzahlgeber hat man ja immer....wie löst man dieses? Einfach die Auflösung erhöhen? Anhand der Beschleunigung der Motorwelle eine Art Vorhersage auf die nächste zu erwartende Flanke berechnen? Glättung der Messwerte über digitalen Tiefpass? Danke und viele Grüße
Jay K. schrieb: > Wie gesagt, soviel zur Theorie...in der Praxis hält der Motor bei > kleinen Soll-Drehzahlen aber trotzdem kurz an und beschleunigt dann (zu > viel), um dann wieder anzuhalten etc... Das nennt sich Regelschwingung. Verringere mal die Verstärkung, also Multiplikation des Korrekturwertes mit einem Faktor kleiner 1. Restfehler könntest du durch einen Integralanteil ausgleichen.
Jay K. schrieb: > addiere/subtrahiere das Ergebnis Also nur ein P-Regler, kein PID? Jay K. schrieb: > in der Praxis hält der Motor bei > kleinen Soll-Drehzahlen aber trotzdem kurz an und beschleunigt dann (zu > viel), um dann wieder anzuhalten etc... Anders gesagt, die Regelung übersteuert. An einem P-Regler kann man eben nur an P drehen. Das grundsätzliche Problem dürfte sein, dass die Regelung sehr langsam ist, weil der Istwert in grossen Abständen erfasst wird, der Motor aber schnell auf Änderungen reagiert. Es sollte besser umgekehrt sein. Jay K. schrieb: > Einfach die Auflösung erhöhen? Nicht die einzige, aber wahrscheinliche die beste Lösung. Georg
Jay K. schrieb: > Ich möchte aber die Wellendrehzahl bis auf ca 2.5 U/s herunter regeln > können. Nur dann fängt der Motor sehr das pulsieren an und läuft nicht > mehr vernünftig rund. Falls es sich da nicht um einen Getriebemotor handelt, kannst Du bei derart niedrigen Drehzahlen auch keinen runden Lauf erwarten.
Harald W. schrieb: > Falls es sich da nicht um einen Getriebemotor handelt, kannst Du > bei derart niedrigen Drehzahlen auch keinen runden Lauf erwarten. Doch, das ist so die untere Drehzahl. Beitrag "Re: Drehzahlregler für DC-Motor, ATmega48-328" Vielleicht kannst Du die Schaltung erweitern und bei kleinen bis sehr kleinen Drehzahlen die EMK auswerten.
Hallo und Danke für das Feedback. Georg hat es sehr schön auf den Punkt gebracht. Bedingt durch die "grobe" Teilung der Lochscheibe kann ich bei geringen Drehzahlen nur langsam abtasten, der kleine Elektromotor reagiert aber sehr schnell. Den verlinkten Beitrag auf den Atmega48 mit EMK habe ich gesehen und von dort habe ich auch die Bildung des Stellglied-Werts übernommen. Vorher hatte ich einen "klassischen" PI Regler, habe dann aber den P-Anteil komplett raus geworfen. Ich integriere nun den PWM Wert auf:
1 | int32_t tRotEmPeriodeAct_s32 = ((int32_t)tRotEmPeriodeActOvf_u16); |
2 | int32_t tRotEmPeriodeTgt_s32 = ((((int32_t)tVelGbxPeriodeOvf_u16) * xRevRatio) / (int32_t)PIN_RRVALUE_PRECALC); |
3 | int32_t tRotEmPeriodeSet_s32 = abs(tRotEmPeriodeTgt_s32 - tRotEmPeriodeAct_s32); |
4 | |
5 | if(tRotEmPeriodeSet_s32 > OS_MODLR_GRAD_MAX) |
6 | {
|
7 | tRotEmPeriodeSet_s32 = OS_MODLR_GRAD_MAX; |
8 | }
|
9 | |
10 | if(tRotEmPeriodeAct_s32 < tRotEmPeriodeTgt_s32) |
11 | {
|
12 | xValPWM += (int16_t)tRotEmPeriodeSet_s32; |
13 | }
|
14 | |
15 | if(tRotEmPeriodeAct_s32 > tRotEmPeriodeTgt_s32) |
16 | {
|
17 | xValPWM -= (int16_t)tRotEmPeriodeSet_s32; |
18 | }
|
19 | |
20 | if(xValPWM < 0) |
21 | {
|
22 | xValPWM = 0; |
23 | }
|
24 | |
25 | if(xValPWM > SYSTEM_MAX_UNIT8) |
26 | {
|
27 | xValPWM = SYSTEM_MAX_UNIT8; |
28 | }
|
29 | |
30 | /* Set new PWM value to output compare register */
|
31 | OCR2B = xValPWM; |
Ich werde mal versuchen den Faktor <1 zu wählen und die AUflösung der Lochscheibe zu erhöhen....sofern der 3D Drucker mitspielt, das wird dann schon sehr filigran bei einem Scheibendurchmesser von ca 15mm. Viele Grüße
> Ich werde mal versuchen den Faktor <1 zu wählen und die AUflösung der > Lochscheibe zu erhöhen....sofern der 3D Drucker mitspielt, das wird dann > schon sehr filigran bei einem Scheibendurchmesser von ca 15mm. > > Viele Grüße Nebst der bestehenden LIchtschranke, kannst Du an die selbe Lochscheibe noch eine zweite montieren: nun aber nur n+0.5 Lochabstand versetzt. So hast Du ein Quadraturencoder der dir die Auflösung schon mal verdoppelt. Die nächste Stufe ist dann die Lichtschranke(n) nicht bloss An/Aus auszuwerten sondern gestuft (bis analog): stimmt die Lochform hast Du Sinusform. Die Sinusform kannst Du in nach dir beliebigen Stufen aufgelöst erfassen und so n-fache Auflösung erreichen ohne mechanisch filigraner zu bauen.
Nur bei niedrigen Drehzahlen: anstelle oder zusätzlich zur Lochscheibe einen kleinen metallischen Exzenter an der Welle anbringen. Statisch einen (schwachen?) Magneten und einen Hallsensor. Das Signal vom Hallsensor auch "analog" erfassen: dieses variiert nun mit f~n und von diesem Momentanwert lässt sich auch die Phase auf dem Sinus abrechnen.
Motorenfütterer schrieb: > Nur bei niedrigen Drehzahlen: anstelle oder zusätzlich zur Lochscheibe > einen kleinen metallischen Exzenter an der Welle anbringen. Statisch > einen (schwachen?) Magneten und einen Hallsensor. > Das Signal vom Hallsensor auch "analog" erfassen: dieses variiert nun > mit f~n und von diesem Momentanwert lässt sich auch die Phase auf dem > Sinus abrechnen. Exzentrisch ein Gewicht anbringen wird leider nicht gehen, da die Drehzahl der Motorwelle von 2.5 U/s bis ca 110 U/s geregelt werden soll. Das gibt wohl ne zu große Unwucht. Würde gerne versuchen das so gut es geht softwareseitig zu lösen. Vielleicht bei niedrigen Drehzahlen den Regelalgorithmus mit größere Zykluszeit ausführen, so dass er nicht mehr so schnell übersteuert....auch wenn da die Dynamik etwas flöten geht, Rundlauf hat hier Priorität. Viele Grüße
Hey, die untere Motordrehzahl klingt wirklich sehr niedrig, ich würde versuchen einen Getriebmotor mit einer größeren Übersetzung zu wählen - dann hast Du extra noch mehr Impulse pro Umdrehung Wellenabgang. MfG, Dirk
Erst einmal muss geklärt sein für welchen Drehzahlbereich das motörchen ausgelegt wurde...
Zitat Jay Kay: "....da die Drehzahl der Motorwelle von 2.5 U/s bis ca 110 U/s geregelt werden soll. "
Ok, U/s , hatte gerade U/min gelesen ... 150 U/min (2,5 U/s) ist auch noch wenig, so rein vom Gefühl her .. Datenblatt hilft da wohl
Hier ist die Lösung schrieb: > Erst einmal muss geklärt sein für welchen Drehzahlbereich das motörchen > ausgelegt wurde... Der Motor ist von Johnson und hat die Typenbezeichnung HC310 https://www.pollin.de/p/gleichstrommotor-johnson-hc310-310549
Hab mal in das DB geschaut, die I-Gerade schneidet die Drehzahl-Achse bei einer Drehzahl von 500 U/min. Für so nen kleinen Motor ist das schon wenig. 2,5 bis 110 d.h U_max = U_min * 44 Der Kollege dreht bis ca. 15 tausend U/min ohne Last und hat bei ca. 7 tausend U/min sein Drehmomentmaximum Also bei U_min = 500 rpm ---> U_max = 22 000 --> zu gross Also andersherum: 15 000 rpm / 44 = 340 U/min das ist immerhin fast doppelt soviel wie Deine 159 U/min, ich denke dadurch läuft er stabiler "Ich möchte aber die Wellendrehzahl bis auf ca 2.5 U/s herunter regeln können. " Andernfalls würde ich mir einen gescheiten Getriebemotor zulegen: https://www.reichelt.de/Getriebemotore/GM51-5-24V/3/index.html?ACTION=3&LA=446&ARTICLE=163522&GROUPID=7832&artnr=GM51%2C5+24V&SEARCH=getriebemotor&trstct=pos_5
Da das ja offensichtlich kein eisenloser Motor ist, hast Du immer ein Rastmoment durch den Anker im Magnetfeld. Das merkst Du beim Durchdrehen mit der Hand, meist 3 oder 5, bei besseren Motoren auch 7 Stellungen. Bei niedrigen Drehzahlen "springt" der Motor immer von einer zur nächsten Stellung. Da die Anzahl der Stellungen niedriger als die Anzahl Deiner Schlitze in der Blende ist, bekommt die Regelung dieses Springen mit und will gegenwirken. Das geht aber nicht. Regelungstechnisch ist Dein Motor in diesem Drehzahlbereich ein stark nichtlineares Bauteil und das verträgt sich nicht mit einem Regler, egal ob P oder PI oder PID. => Du kannst da nix machen, auch ein "Schlechtermachen" der Regelung wird nur bedingt was verbessern. Getriebemotor mit Untersetzung, Schrittmotor mit hoher Auflösung, Brushless-DC mit Vielfachwicklung oder im einfachsten Fall ein eisenloser Motor* würden helfen. *) Jaja, eisenlose Motoren sind nicht wirklich eisenlos. Der Begriff wird von Herstellern wie Faulhaber und Maxon verwendet für Motoren, deren Rotorspule nicht auf einem Eisenblechanker gewickelt ist, sondern freitragend als Scheibe oder "Glocke" (Faulhaber: Glockenankermotoren) aus Kupferdraht gewickelt und mit Gussmasse stabilisiert ist. Vorteil ist, dass diese Motoren kein Rastmoment haben und sehr gut regelbar sind.
Jay K. schrieb: > Hier ist die Lösung schrieb: >> Erst einmal muss geklärt sein für welchen Drehzahlbereich das motörchen >> ausgelegt wurde... > > Der Motor ist von Johnson und hat die Typenbezeichnung HC310 > > https://www.pollin.de/p/gleichstrommotor-johnson-hc310-310549 Ok. In dieser "Konstruktionsklasse" von billigprodukten kannst Du stabile Drehzahl (und entsprechende Regelung davon) nur im Bereich ca. 0.6...1.0 nmax erreichen. Selbst um Pmax rum (also 0.5 nmax * 0.5 Mmax) wird es schon anspruchsvoll und taugt eigentlich nur f. Kurzzeitbetrieb aus thermischen Gründen (ohne forcierte Kühlung). 2 Faktoren sind massiv einschneidend: die Konstruktionsart der Bürsten und die Anzahl der Teilwicklungen. Eine gute Bürstenkonstruktion liegt hier aus Konstengründen nicht drin. Mehr als 3 Teilwicklungen auf diesen Rotordurchmesser liegen aus Kostengründen ebenfalls nicht drin. Da muss wohl (mindestens) ein Getriebe her und für die max. Drehzahl gibst halt etwas mehr Spannung drauf um am Getriebeausgang 110 u/s (=6600 u/min) zu erreichen (so hier nicht auch mehr Drehmoment vom Motor abverlangt wird). Besser ist wohl trotz Getriebe einen anderen Motor zu wählen: bei 3:1 Untersetzung sind da für n0 schon gegen 20'000 u/min (-->110 u/s) gefragt. Trotzdem dann noch 450 u/min (-->2.5 u/s) zu regeln wird... sportlich. Die Präzisionsanforderung an das Getriebe -drehzahlbedingt- sind jedoch nicht ohne. Da ist eher ein Präzisionsmotor mit eisenlosem Glockenanker gefragt. Diese haben dann in dieser Leistungsklasse/Baugrösse auch 5 oder 7 teilige Wicklungen. Der Preis jedoch... setze dich hin dazu. Dafür ist dann die Linearität über die grosse Drehzahlspanne auch viel angenehmer.
Würde auch dazu tendieren zu sagen dass der Motor wenig geignet für diese Anwendung ist, aber das lässt sich doch testen. Nimm dir mal eine halb Stunde Zeit und teste manuell (also ohne Regelung) eine Reihe von PWM Werten bis du einen findest, der bei deiner final gewünschten Last (viel Kraft wird dieser Motor bei 2.5u/s nicht aufbringen können...), die Drehzahl einhält. Dann weisst du ob das mit dem Motor überhaupt möglich ist, denn besser als das wird es auch der automatische Regler ja nicht hinkriegen. Btw. du könntest diesen Wert dann auch fix als Minimal-Wert für deine Reglung nehmen. Dann hält der Motor zumindest nicht mehr an, was die Regelung etwas vereinfachen sollte.
:
Bearbeitet durch User
Hallo zusammen, das waren wirklich viele nützliche Infos zu Elektromotoren. Besonders die Sache mit den Teilwicklungen und dem Rastmoment des Eisenankers waren mir so nicht bewusst. Danke für die Aufklärung. Damit werde ich mich dann mal nach einem anderen Motor umsehen (müssen).
Alex G. schrieb: > Btw. du könntest diesen Wert dann auch fix als Minimal-Wert für deine > Reglung nehmen. Dann hält der Motor zumindest nicht mehr an, was die > Regelung etwas vereinfachen sollte. Anhalten wird er dann wohl nicht mehr, ja. Aber ein Pulsieren wird sich nicht ganz vermeiden lassen. Muss ich mal testen, ob das Pulsieren akzeptabel ist.
Zum Thema Pulsieren hat man dir doch weiter oben eine Reihe von Tips gegeben: Erfassungsrate erhöhen und eine aufwendigere Regelung verwenden! Für letzteres gibt es auch ziemlich sicher fertige libraries, schließlich ist das ja so in etwa das Hauptanwendungsgebiet eines Mikrocontrolers.
:
Bearbeitet durch User
Jay K. schrieb: > Vielleicht bei niedrigen Drehzahlen den Regelalgorithmus mit größere > Zykluszeit ausführen Anderer Vorschlag: die Änderungsgeschwindigkeit der Motoransteuerung begrenzen. Das ist einfach zu realisieren durch eine Art Nachlauf statt direkter Ausgabe, d.h. ist der neue Wert höher als der bisherige, nicht einfach ausgeben, sondern nur einen maximalen Wert zum bisherigen addieren, dasselbe im nächsten Zyklus, bis der Ausgabewert dem errechneten entspricht. So wird die Änderung der Motoransteuerung gedeckelt auf diesen Maximalwert pro Zyklus. Selbstredend abwärts genauso. Das ist per Software viel einfacher zu realisieren als es sich zunächst anhört. So aus dem Bauch heraus würde ich sagen, das entspricht etwa dem D-Parameter eines PID-Reglers. Im Übrigen ist es nicht schlimm, wenn dann die Regelung bei hohen Drehzahlen leidet, bei Realisierung durch einen Kontroller kann man leicht die Regelparameter von der Drehzahl abhängig machen. Georg
Alex G. schrieb: > Erfassungsrate erhöhen und eine aufwendigere Regelung verwenden! Ähm: Nein. Wie oben schon erwähnt geht das nicht, wenn der Motor ein Rastmoment hat. Einfach gesagt rastet der Motor immer so ein, dass das Magnetfeld zwischen Stator (Permanentmagnet) und Rotor maximal wird, sprich die Feldlinien am Kürzesten. Dann steht sich ein Anker mit einem Magnetpol gegenüber. Wird jetzt eine Spannung auf den Motor gegeben, passiert erstmal gar nix, solange die Haltekräfte des Eisenankers noch größer sind als die abstoßenden Magnetkräfte durch die umgepolte Ankerwicklung. Jetzt erhöht die Regelung die Spannung. Irgendwann werden die abstoßenden Kräfte größer als die Haltekräfte und der Anker setzt sich in Bewegung. Dummerweise lassen jetzt die Haltekräfte an diesem Anker-Polpaar schnell nach, während die Haltekräfte am nächsten Anker-Polpaar zunehmen. Der Anker bewegt sich zunehmend schneller, was die Regelung kompensieren muss. Die regelt also runter. Der Anker bewegt sich trotzdem auf die nächste Raststellung zu und ist dabei auch nicht mehr aufzuhalten. Da kannst Du so schnell abtasten wie Du willst. Das ist ein nichtlineares Glied in der Regelkette, das bringt Dir jeden PID-Regler durcheinander. Bei hohen Drehzahlen funktioniert das nur, weil die Massenträgheit des Ankers den Einfluss der Rastmomente unterdrückt. Achso - das wäre übrigens eine Abhilfe gegen das Pulsieren: Ein Schwungrad dran, welches die Rastmomente bei niedrigen Drehzahlen überwinden hilft. Allerdings macht das auch die Regelung bei hohen Drehzahlen träge und man muss den Regler sehr gutmütig einstellen, sonst fängt er aufgrund der Totzeit durch das Schwungrad an zu schwingen. Geht also nur, wenn keine schnellen Lastwechsel und keine schnellen Drehzahländerungen zu erwarten sind.
@Karl Das Rastmoment ist doch in deiner beschriebenen Art und Weise nur relevant wenn der Anker bzw. der Motor stehen bleibt. Dreht er sich konstant, aber beispielsweise zu langsam, dann kann die Regelung trotzdem greifen. Bei 2 Umdrehungen in der Sekunde sind das mindestens 4 solcher Punkte pro Sekunde. Das ist bereits schnell genug dass man einigermaßen gut mit der Durchschnittsgeschwindigkeit rechnen kann. Möglicherweise reagiert der Code des TE in der Tat zu empfindlich auf den Rastmoment wenn er wirklich nach jeder Wertaktualisierung, sofort den PWM output ändert, aber das ist ein Softwareproblem. Zu allererst muss er dafür sorgen dass der Motor nicht mehr anhält.
:
Bearbeitet durch User
Alex G. schrieb: > Dreht er sich > konstant, aber beispielsweise zu langsam, dann kann die Regelung > trotzdem greifen. Nee, das Rastmoment greift auch bei langsamer Drehung. Mal so einen Motor mit geringer Spannung laufen gelassen? Der ruckelt merklich. Kennt jeder, der mal eine Modellbahn - nicht Märklin - hatte. Nicht umsonst werden da in besseren Loks Glockenankermotoren eingebaut - schon lange vor Digitalsteuerung mit PWM.
Jay K. schrieb: > das waren wirklich viele nützliche Infos zu Elektromotoren. Besonders > die Sache mit den Teilwicklungen und dem Rastmoment des Eisenankers > waren mir so nicht bewusst. Da waren ja wieder viel Bedenkenträger unterwegs: Ruckeln, Rastmoment, Quadraturlöcher. Wie sich das auswirkt, hängt doch von der realen Mechanik ab. Sobald beim Antrieb rotiernede Masse vorhanden ist, werden diese Effekte gedämpft. > Damit werde ich mich dann mal nach einem anderen Motor umsehen (müssen). Probiere doch erst einmal die Regelung per EMK. Da hast Du unabhängig von der Drehzahl 200 - 300 Abtastpunkte/s, womit man schnell regeln kann. Der erwähnte Schrittmotor ist bei 110 U/s ein völlig unreflektierter Vorschlag.
Dirk U. schrieb im Beitrag #5375058 > Ok, U/s , hatte gerade U/min gelesen ... 150 U/min (2,5 U/s) ist auch > noch wenig, so rein vom Gefühl her .. Datenblatt hilft da wohl Bei meinem Artikel weiter oben war ich auch von U/min ausgegangen. Eine Drehzahlangabe in U/s ist bei Motoren aller Art auch völlig unüblich.
m.n. schrieb: > Probiere doch erst einmal die Regelung per EMK. Und was glaubst Du wieviel EMK der Motor bei 150U/min noch erzeugt? Und was glaubst Du, wie die Gegen-EMK eines Motors mit 3 Ankerwicklungen aussieht? Tipp: Genauso ripplebehaftet wie das Rastmoment. m.n. schrieb: > Sobald beim Antrieb rotiernede Masse vorhanden ist, werden > diese Effekte gedämpft. Da die Effekte nicht gedämpft werden, ist offensichtlich nicht genug rotierende Masse vorhanden. Ich regle DC-Motoren von 4000rpm auf 4rpm runter. Aber das sind Glockenankermotoren mit Encoderscheibe.
Dann zeige uns bitte doch mal das Motörchen.
Ich meine den von Karl, nicht den vom TO.
Hallo zusammen, zunächst mal vielen Dank für die starke Resonanz! Da waren echt einige gute Punkte dabei. Es stimmt schon, auf der Motorwelle sitzt eine Schwungmasse, vom Durchmesser aber eher klein (glaube 8mm oder 9mm) und ein hohes Massenträgheitsmoment würde man ja eher durch einen größeren Durchmesser des Schwungrads als durch mehr Masse bekommen (meine in Erinnerung zu haben, dass der Durchmesser bzw der Radius quadratisch ins MTM eingeht). Ein Glockenankermotor fällt wohl aus Kostengründen aus. Da legt man einen guten dreistelligen Betrag hin, wenn ichs richtig gesehen habe. Ein Getriebemotor wäre eine Alternative, sofern er nahe genug an die obere Drehzahlgrenze ran kommt...da hab ich noch nichts 100%ig passendes gefunden. Den Gradient der PWM zu begrenzen mach ich bereits, aktuell stelle ich pro Zyklus die PWM maximal um ein Inkrement hoch. Ich versuche mal noch etwas weiter runter zu gehen und schaue, wie sich das Ganze verhält. Aktuell läuft der Regler im 10ms Raster und bis ich den nächsten Zeitstempel zur Auswertung bekomme habe ich bei einer Wellenrotation von 2,5 U/s 100ms. Die EMK auswerten würde ich fürs erste als Plan B im Hinterkopf behalten, weil das natürlich eine neue Platine erfordert. Und zum Schluss: Ja, U/s ist nicht gebräuchlich, ich hielt es aber für intuitiver um in Verbindung mit der Lochscheibe gleich auf die Frequenz der Interrupts/Zeitstempel zu kommen. Vielen Dank und viele Grüße
Hallo, ich krame den Thread mal wieder raus. Mittlerweile habe ich einige Sachen probiert und erheblich verbessert hat sich das Regelverhalten nachdem ich dazu übergegangen bin, den Regelalgorithmus nicht im festen Zeitraster, sondern drehzahlsynchron zu rechnen. Also jedes Mal, wenn über die Lochscheibe auf der E-Motorwelle ein neuer Zeitstempel rein kommt, führe ich den Regler aus. In meinem Fall kommt ein Impuls alle 10ms (untere Geschwindigkeitsschwelle) bis 0,5ms (obere Geschwindigkeitsschwelle) Nun will ich noch den bisherigen Algorithmus durch einen "echten" PID ersetzen und genau dort stellt sich mir jetzt die Frage: Wie gehe ich mit der Abtastrate für den Regler um? Gebe ich dann einfach Ta als Paramter mit? Oder rechnet man den Regelalgorithmus in einem festen Raster (0,5ms) und passt die Regelparameter Kp, Ki und Kd dynamisch an? Danke und viele Grüße
Jay K. schrieb: > Wie gehe ich mit der Abtastrate für den Regler um? Da die Zeiteinheiten im PID den Trägheitsmomenten der zu regelnden Strecke entsprechen, ändern sie sich nicht, also festes Zeitraster für I und D Anteil. Da dein Spielzeugmotor https://www.pollin.de/p/gleichstrommotor-johnson-hc310-310549 nur 3 pole hat, ist allerdings eine Regelung auf 150upm nicht sinnvoll möglich, eine Polumschaltung würde nur alle 0.13 Sekunden stattfinden, dafür ist der Motor nicht träge genug. Du brauchst eine Schwungscheibe wie bei alten Dampfmaschinen, damit die Mechanik träger wird. Die bessere Lösung ist ein Getriebe, schliesslich reduziert die Drehzahlreduzierung auch die Leistung des Motors und deine erhebliche Drehzahlreduzierung reduziert die Leistung erheblich. Er bringt 4 mNm bei 11900upm mit 0.78A dauerhaft, bei dir aber nur 150upm bei denselben 4 mNm, also nur 1/100 der Nennleistung von 4W, nur 40mW. Es täte also, selbst bei nur 20% Wirkungsgrad vom Getriebe, für deine Anwendung ein erheblich kleinerer Motor mit nur 0.2W Leistung. https://www.pollin.de/p/gleichstrommotor-johnson-10435-310722
Das heißt also es wäre zielführender, den PID Regler in einem festen Raster zu rechnen und lediglich die Verstärkungsfaktoren anzupassen? Sorry ich habe nicht erwähnt, dass ich mittlerweile einen anderen Motor verwende, da sich der alte für meine Anwendung als zu schwachbrüstig erwiesen hat. Ich verwende nun diesen hier: https://www.pollin.de/productdownloads/D310551D.PDF Und mittlerweile funktioniert die Regelung bei kleinen Geschwindigkeiten auch wirklich gut. Nur bei höheren Geschwindigkeiten treten durch die (derzeit noch) konstanten Reglerparameter sichtbare Schwankungen um die Sollgröße rum auf.
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.