Forum: Mikrocontroller und Digitale Elektronik Drehzahlregelung mit Lichtschranke bei langsamer Rotation


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Jay K. (deeplyembedded)


Bewertung
0 lesenswert
nicht lesenswert
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

von Wolfgang (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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.

von georg (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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

von Harald W. (wilhelms)


Bewertung
0 lesenswert
nicht lesenswert
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.

von m.n. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Jay K. (deeplyembedded)


Bewertung
0 lesenswert
nicht lesenswert
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

von Motorenfütterer (Gast)


Bewertung
1 lesenswert
nicht lesenswert
> 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.

von Motorenfütterer (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Jay K. (deeplyembedded)


Bewertung
0 lesenswert
nicht lesenswert
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

von Dirk U. (Firma: ----) (dirk_u)


Bewertung
0 lesenswert
nicht lesenswert
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

von Hier ist die Lösung (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Erst einmal muss geklärt sein für welchen Drehzahlbereich das motörchen 
ausgelegt wurde...

von Dirk U. (Firma: ----) (dirk_u)


Bewertung
0 lesenswert
nicht lesenswert
Zitat Jay Kay: "....da die
Drehzahl der Motorwelle von 2.5 U/s bis ca 110 U/s geregelt werden soll. 
"

von Dirk U. (Firma: ----) (dirk_u)


Bewertung
0 lesenswert
nicht lesenswert
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

von Jay K. (deeplyembedded)


Bewertung
0 lesenswert
nicht lesenswert
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

von Dirk U. (Firma: ----) (dirk_u)


Bewertung
1 lesenswert
nicht lesenswert
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

von Karl (Gast)


Bewertung
1 lesenswert
nicht lesenswert
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.

von Motorenfütterer (Gast)


Bewertung
1 lesenswert
nicht lesenswert
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.

von Alex G. (dragongamer)


Bewertung
0 lesenswert
nicht lesenswert
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
von Jay K. (deeplyembedded)


Bewertung
1 lesenswert
nicht lesenswert
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).

von Jay K. (deeplyembedded)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Alex G. (dragongamer)


Bewertung
0 lesenswert
nicht lesenswert
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
von georg (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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

von Karl (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Alex G. (dragongamer)


Bewertung
0 lesenswert
nicht lesenswert
@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
von Karl (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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.

von m.n. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Harald W. (wilhelms)


Bewertung
1 lesenswert
nicht lesenswert
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.

von Karl (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Hier ist die Lösung (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Dann zeige uns bitte doch mal das Motörchen.

von Alex G. (dragongamer)


Bewertung
0 lesenswert
nicht lesenswert

von Hier ist die Lösung (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ich meine den von Karl, nicht den vom TO.

von Jay K. (deeplyembedded)


Bewertung
0 lesenswert
nicht lesenswert
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

von Jay K. (deeplyembedded)


Bewertung
0 lesenswert
nicht lesenswert
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

von Michael B. (laberkopp)


Bewertung
1 lesenswert
nicht lesenswert
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

von Jay K. (deeplyembedded)


Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.