Forum: Mikrocontroller und Digitale Elektronik DC Motorregelung


von DerController (Gast)


Lesenswert?

Hallo,

ich versuche vergeblich einen DC Motor zu regeln. Ich habe den Motor und 
messe in der PWM Pause die Motorspannung (Gegen EMK). Strom kann ich 
auch messen. Sowas wie Inkrementalgeber oder ähnliches ist nicht drin 
das damit zu machen, es muss so gehen.


Ich bekomme Werte zwischen 0 und 255 grob. 0 = Stillstand, 255 wenn ich 
ihn stark belaste (dann hoher Strom, idR so 3A). Läuft bei 24V.
Ich habe einen Regler PI, der funktioniert als Regler 
(Temperatursteuerung mal damit gemacht).


Mein riesen Problem ist. Ich gebe dem Motor einen PWM-Sollwert (0 - 255) 
vor, dann steuert die Software diesen Motor langsam an (Rampe). Wenn 
jetzt Belastung kommt (egal ob positiv (Motor wird langsamer) oder 
negativ (Motor dreht schneller), soll der Controller dies gegen regeln 
zumindest grob, dass ca. die Geschwindigkeit gehalten wird.

´
Ich habe 0 Ahnung wie ich das machen soll, ich habe gefühlt alles im 
Netz abgesucht, nichts gescheites dazu gefunden. Mir fehlt der komplette 
Bezug, was mir der Gegen EMK Wert (vll. noch mit dem Motorstrom?) bringt 
und wie ich das ins Verhältnis setze. Die Änderung bei Last ist auch 
minimal. Also bspw. der Motor dreht PWM 150 und der Gegen EMK Wert ist 
67. Belaste ich dann geht der Wert runter auf 30. Ich kann nichts mit 
den Werten anfangen.

Kann mir da jmd. helfen, ich wäre so dankbar.

von Manni (Gast)


Lesenswert?

Du musst die Drehzahl des Motors messen (optisch oder induktiv)und mit 
dem Sollwert vergleichen. Danach die PWM nachregeln.

von Michael B. (laberkopp)


Lesenswert?


von SonicHazard (Gast)


Lesenswert?

Hier die Grundlagen der Gleichstrommaschine:
https://de.wikipedia.org/wiki/Gleichstrommaschine

(Erregerkreis hast Du keinen, Permanentmagnete geben einen konstanten 
Fluß)

Im o.g. Beitrag wird die Drehzahl über die Gegen-EMK gemessen.
Das geht aber nur im "lückenden Betrieb". Das heißt der Strom muss 
abgeschaltet werden und  auf 0 fallen. Die hierzu nötige Zeit ist 
abhängig von der Induktivität der Ankerwicklung und dem Ankerstrom. (und 
damit von der Last!)
Die PWM Frequenz ist also auch hierdurch begrenzt.

Aber es gibt ja auch andere Methoden...

von imperator (Gast)


Lesenswert?

Servus,
was dir fehlt ist das regelungstechnische Verständnis. Die 
herangehensweise ist immer dieselbe:
-Streckenidentifikation
-Simulation (SIL)
-Simulation (HIL)

Try and error ist für Dummies mit zu viel Zeit.

Besser kann man dir nur helfen, wenn du dein Code postest.

von Olaf (Gast)


Lesenswert?

> Du musst die Drehzahl des Motors messen (optisch oder induktiv)und mit
> dem Sollwert vergleichen. Danach die PWM nachregeln.

Noe, das muss er nicht. Es geht mit GegenEMK und noch einer Korrektur. 
Ich hab das vor einigen Jahren mal rein analog gemacht um mal ein 
besseres Gefuehl fuer die Technik unserer Vorfahren zu bekommen. :)
Das ist natuerlich nicht so genau wie eine explizite Drehzahlmessung, 
aber man erreicht eine deutlich lastunabhaengige Drehzahl.

Zumindest damals konnte man auch einiges an Grundlagen im Internet 
finden, man muss nur mit Google umgehen koennen. :-p

Probleme gibt es eventuell wenn man sehr langsam drehen will. Ich meine 
so unter 20% von der Solldrehzahl wird es muehsam.

> Im o.g. Beitrag wird die Drehzahl über die Gegen-EMK gemessen.
> Das geht aber nur im "lückenden Betrieb".

Ja, das stimmt. Ich hab da bei mir (aus der Erinnerung) so 5-10% der 
Einschaltzeit vorgesehen. Das ist eigentlich kein Problem. Dann hat der 
Motor halt nur 90% seiner Nennleistung. Aber dafuer spart man sich halt 
den ganzen mechanischen Aufwand zur Drehzahlmessung und kann einfach 
jeden Motor nehmen.

Olaf

von zyxw (Gast)


Lesenswert?

Der Strom muss auf 0 fallen, damit du die EMK messen kannst.
Dafür reicht die PWM-Lücke vermutlich nicht.
Mich wundert es, wie du da unterschiedliche Werte messen konntest.

von Alexxx (Gast)


Lesenswert?

zyxw: Dafür reicht die PWM-Lücke vermutlich nicht.

Doch reicht sie gut! Wie schon von Olaf dargestellt, auch bei 90%.
...Mit sinnvoller PWM-Frequenz (unter 400Hz). Außerdem, je höher man die 
Induktionsspitze werden lässt, desto schneller klingt sie ab.
=> Mit Zenerdioden geht es schneller als mit Freilaufdioden!
Wer ein Oszi hat ist da klar im Vorteil, denn er sieht dann wie lange es 
wirklich dauert.
Meine analogen Erfahrungen hatten gezeigt, dass eh' der beste 
Messzeitpunkt
direkt vor dem Anfang der PWM-Phase ist. Hat man einen sinnvolles 
RC-Glied vor dem ADC (1/10 PWM-Per. ~ 5 Tau), könnte man den ADC mit der 
steigenden Flanke der PWM triggern, falls das "hardwaremäßig" im µC 
verdrahtet ist.
(Im XMega kann man dafür das Eventsystem benutzen)

Wie schon erwähnt, regelst du die PWM so, dass die gemessene EMK 
konstant bleibt. Dazu gibst du den Drehzahlsollwert als EMK-Sollwert 
vor.

von georg (Gast)


Lesenswert?

Olaf schrieb:
> die Technik unserer Vorfahren

Ich erinnere mich dunkel, dass im vorigen Jahrhundert in 
Bastlerzeitschriften häufig einfache Schaltungen für die 
Drehzahlstabilisierung von Bohrmaschinen beschrieben wurden, die hatten 
das damals noch nicht standardmässig. Die bestanden nur aus wenigen 
Bauteilen, u.a. einem Potentiometer, mit dem man die Rückkopplung so 
einstellen konnte, dass die Drehzahl fast konstant war. Die Regelung 
beruhte letztlich auch auf Gegen-EMK.

Das Knowhow ist wohl verlorengegangen.

Georg

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Hier werden so gut wie alle Praktiken für sensorlose Drehzahlregelung 
eines Bürsten-DC Motors betrachtet:
https://www.precisionmicrodrives.com/content/ab-026-sensorless-speed-stabiliser-for-a-dc-motor/

Die aufwändigste Schaltung findet sich am Schluss des Artikels und 
entspricht dem PWM Prinzip des TE.
Hier findet man auch die einfachen Schaltungen aus den Antrieben für 
Cassettengeräte und billigen Plattenspielern.
Lustigerweise hatte ich gerade damit zu tun bei der Restauration meines 
Akai Recorder Flaggschiffs.

: Bearbeitet durch User
von georg (Gast)


Lesenswert?

SonicHazard schrieb:
> Die PWM Frequenz ist also auch hierdurch begrenzt.

Es gab da einen Schaltungsvorschlag mit Einweggleichrichtung und 
Phasenanschnitt - also eine 50 Hz-Halbwelle lang Zeit zur Bestimmung der 
Gegen-EMK.

Georg

von Dietrich L. (dietrichl)


Lesenswert?

zyxw schrieb:
> Der Strom muss auf 0 fallen, damit du die EMK messen kannst.

Alternative:
Spannung während bei Einschaltphase der PWM messen und Spannungsabfall 
am Innenwiderstand des Motors abziehen.

Der TO sagt ja:
DerController schrieb:
> Strom kann ich auch messen.

Also: U_EMK = U_MESS - (I_MESS * Ri_MOTOR)

von DerController (Gast)


Lesenswert?

Danke für die Antworten, ich weiß nicht ob ich mich richtig ausgedrückt 
habe:

1. KEINE Externen Bauteile oder ähnliches, auch nicht analog.
2. Gegen EMK messe ich schon korrekt, Strom auch
3. Es ist ein normaler DC Gleichstrommotor 24V (jeder sollte da gehen).


Mein Problem ist nicht das Messen oder ähnliches. Mein Problem ist, dass 
ich nicht weiß, wie ich den gegen EMK wert verwurschtel. Ich habe kein 
Verständnis dafür.


Ich bekomme bei dem Motor und 24V (das ganze ist Spannungsabhängig) bei 
einer Leerlaufdrehzahl bei PWM = 150 einen EMK Wert von 67. Das ist auch 
recht konstant.

Belaste ich jetzt den Motor geht der Wert runter. Teilweise nur 4 Punkte 
bei leichter Belastung oder um die Hälfte bei voller Belastung.


Mein Konkretes Problem dabei:

Mein EMK Wert aktuell ist 0 (da PWM 0). Jetzt starte ich und gebe PWM = 
150 vor. Auf was soll ich da regeln?! Auch die 67 kann ich das wohl 
schlecht machen, denn da müsste ich ja für jeden PWM Wert den EMK Wert 
hinterlegen - zumal der je Motor und je Betriebsspanung anders ist. Dann 
kann es ja auch sein das der Motor schon belastet ist während ist 
starte. Ich habe keine Ahnung wie ich das lösen soll. Das ist mein 
Problem, nicht die EMK zu messen oder eine analoge Regelung aufzubauen, 
das will ich ja gar nicht.

von DerController (Gast)


Lesenswert?

Dietrich L. schrieb:
> zyxw schrieb:
>> Der Strom muss auf 0 fallen, damit du die EMK messen kannst.
>
> Alternative:
> Spannung während bei Einschaltphase der PWM messen und Spannungsabfall
> am Innenwiderstand des Motors abziehen.
>
> Der TO sagt ja:
> DerController schrieb:
>> Strom kann ich auch messen.
>
> Also: U_EMK = U_MESS - (I_MESS * Ri_MOTOR)

Die Formel habe ich auch schon gesehen.

Ri Motor ist 10 Ohm
Umess = Betriebsspannung?!

Beispiel: Motor zieht 3,5A => 24V - (3,5A * 10 ohm) = -11V.
Mit den Werten kann ich ebenso nichts anfangen. Die gegen EMK die ich 
messe per ADC liegt zwischen 0-5V ca.

von Michael B. (laberkopp)


Lesenswert?

DerController schrieb:
> Ich habe keine Ahnung wie ich das lösen soll

Sicher, offenkundig völlig auf dem Holzweg.

> KEINE Externen Bauteile oder ähnliches, auch nicht analog.

Ein uC der 24V mit Strom am PWM Ausgang liefern kann ?

> Jetzt starte ich und gebe PWM = 150 vor.

PWM ist NICHT der Sollwert.

von DerController (Gast)


Lesenswert?

Michael B. schrieb:
> DerController schrieb:
>> Ich habe keine Ahnung wie ich das lösen soll
>
> Sicher, offenkundig völlig auf dem Holzweg.
>
>> KEINE Externen Bauteile oder ähnliches, auch nicht analog.
>
> Ein uC der 24V mit Strom am PWM Ausgang liefern kann ?
>
>> Jetzt starte ich und gebe PWM = 150 vor.
>
> PWM ist NICHT der Sollwert.

Ey bitte nicht so dumme scheiße reden. Entweder helfen oder lassen, aber 
nicht mit dieser Eierlegerei immer "Controller mit 24V usw".

Sollwert = 150. Ist doch klar was ich meine im Beispiel.

von DerController (Gast)


Lesenswert?

Das Problem ist, wenn ich als Sollwert = 150 vorgebe, dann habe ich im 
Leerlauf eine EMK von 67 bzw das schwankt leicht 65-70.

Jetzt könnte ich das *2 nehmen, das geht aber über den gesamten Bereich 
nicht so.

Ich habe einfach keinen Plan, ich habe eine Steinplatte vor dem Kopf, 
ich verstehe die Zusammenhänge nicht.

von Vincent H. (vinci)


Lesenswert?

Alexxx schrieb:
> zyxw: Dafür reicht die PWM-Lücke vermutlich nicht.
>
> Doch reicht sie gut! Wie schon von Olaf dargestellt, auch bei 90%.
> ...Mit sinnvoller PWM-Frequenz (unter 400Hz). Außerdem, je höher man die
> Induktionsspitze werden lässt, desto schneller klingt sie ab.
> => Mit Zenerdioden geht es schneller als mit Freilaufdioden!
> Wer ein Oszi hat ist da klar im Vorteil, denn er sieht dann wie lange es
> wirklich dauert.
> Meine analogen Erfahrungen hatten gezeigt, dass eh' der beste
> Messzeitpunkt
> direkt vor dem Anfang der PWM-Phase ist. Hat man einen sinnvolles
> RC-Glied vor dem ADC (1/10 PWM-Per. ~ 5 Tau), könnte man den ADC mit der
> steigenden Flanke der PWM triggern, falls das "hardwaremäßig" im µC
> verdrahtet ist.
> (Im XMega kann man dafür das Eventsystem benutzen)
>
> Wie schon erwähnt, regelst du die PWM so, dass die gemessene EMK
> konstant bleibt. Dazu gibst du den Drehzahlsollwert als EMK-Sollwert
> vor.

10% von 400Hz sind 0.25ms

Erfahrungsgemäß kann das Abbaun des Stroms je nach Motortyp und 
Belastung(!) gerne mal das 10x bis 100x davon brauchen. Man darf nicht 
vergessen dass man, wenn man fälschlicherweise in diesem Zeitraum misst, 
theoretisch eine negative EMK Spannung messen würde... In so einem Fall 
ist dann recht schwierig zu unterscheiden ob sich der Motor nun 
überhaupt dreht oder ob die Belastung einfach nur sehr hoch ist.

von DerController (Gast)


Lesenswert?

Vincent H. schrieb:
> Alexxx schrieb:
>> zyxw: Dafür reicht die PWM-Lücke vermutlich nicht.
>> Wie schon erwähnt, regelst du die PWM so, dass die gemessene EMK
>> konstant bleibt. Dazu gibst du den Drehzahlsollwert als EMK-Sollwert
>> vor.
>
> 10% von 400Hz sind 0.25ms
>
> Erfahrungsgemäß kann das Abbaun des Stroms je nach Motortyp und
> Belastung(!) gerne mal das 10x bis 100x davon brauchen. Man darf nicht
> vergessen dass man, wenn man fälschlicherweise in diesem Zeitraum misst,
> theoretisch eine negative EMK Spannung messen würde... In so einem Fall
> ist dann recht schwierig zu unterscheiden ob sich der Motor nun
> überhaupt dreht oder ob die Belastung einfach nur sehr hoch ist.


Ich habe 16 kHz PWM Frequenz.

von Vincent H. (vinci)


Lesenswert?

Schalt die Brücke mal für einen Zeitraum von 1-2ms ab und schau dir die 
EMK Spannung am Oszilloskop an. Überleg dir in welchem Zustand sich die 
Brücke befinden muss um überhaupt messen zu können.

Microchip hat das zum Beispiel recht gute Erklärungen:
http://ww1.microchip.com/downloads/en/AppNotes/00000893B.pdf

von DerController (Gast)


Lesenswert?

Vincent H. schrieb:
> Schalt die Brücke mal für einen Zeitraum von 1-2ms ab und schau
> dir die
> EMK Spannung am Oszilloskop an. Überleg dir in welchem Zustand sich die
> Brücke befinden muss um überhaupt messen zu können.
>
> Microchip hat das zum Beispiel recht gute Erklärungen:
> http://ww1.microchip.com/downloads/en/AppNotes/00000893B.pdf

Das sollte ich korrekt machen, ich setze den entsprechenden Pol des 
Motors auf Masse und messe dann die Spannung.

von Vincent H. (vinci)


Lesenswert?

Auf der richtigen Seite, sprich den FET gegen GND den die PWM nicht 
schaltet und ohne die Brücke kurzzuschließen?

von Michael B. (laberkopp)


Lesenswert?

DerController schrieb:
> Sollwert = 150.

Eben nicht.

DerController schrieb:
> Ich habe 16 kHz PWM Frequenz.

Kann nicht gehen.

DerController schrieb:
> Ich habe einfach keinen Plan, ich habe eine Steinplatte vor dem Kopf,
> ich verstehe die Zusammenhänge nicht.

Richtig.

DerController schrieb:
> Ey bitte nicht so dumme scheiße reden.

Spiel noch schön weiter.

von imperator (Gast)


Lesenswert?

Guck dir bei wikipedia die Motorgleichung an (Physikalisches Modell). 
Dort siehst du, dass letztendlich die Drehzahl proportional zur 
induzierten Spannung ist. Nur ein Faktor, hervorgerufen aus den 
spezifischen Motoreigenschaften, vervollständigt die Gleichung.

Uind = k*omega;

https://de.wikipedia.org/wiki/Gleichstrommaschine

Beim erfassen der Messdaten muss dieser Zusammenhang sich erschließen 
bevor du irgendwas regelst.

Den PI Regler hast du ja schon digital erstellt. Du musst jetzt nur noch 
den P- und I-Anteil bestimmen, damit Regelkreis funktioniert.

von DerController (Gast)


Lesenswert?

Vincent H. schrieb:
> Auf der richtigen Seite, sprich den FET gegen GND den die PWM
> nicht
> schaltet und ohne die Brücke kurzzuschließen?

Klar.

Wie gesagt: Es geht um die Umsetzung und Verwurstung von Ist und EMK 
wert.

von DerController (Gast)


Lesenswert?

imperator schrieb:
> Guck dir bei wikipedia die Motorgleichung an (Physikalisches
> Modell).
> Dort siehst du, dass letztendlich die Drehzahl proportional zur
> induzierten Spannung ist. Nur ein Faktor, hervorgerufen aus den
> spezifischen Motoreigenschaften, vervollständigt die Gleichung.
>
> Uind = k*omega;
>
> https://de.wikipedia.org/wiki/Gleichstrommaschine
>
> Beim erfassen der Messdaten muss dieser Zusammenhang sich erschließen
> bevor du irgendwas regelst.
>
> Den PI Regler hast du ja schon digital erstellt. Du musst jetzt nur noch
> den P- und I-Anteil bestimmen, damit Regelkreis funktioniert.

Ich werde mal morgen hier eine Messreihe posten, anfangen PWM = 0 bis 
PWM = 255 (das da keine Regelung geht ist klar). Aber dann sieht man mal 
die einzelnen EMK Werte.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

DerController schrieb:
> Das Problem ist, wenn ich als Sollwert = 150 vorgebe, dann habe ich im
> Leerlauf eine EMK von 67 bzw das schwankt leicht 65-70.

Dein Regler benötigt Sollwert und EMK als Eingang. Der Sollwert gibt die 
gewünschte EMK vor und der Regler regelt dann auf stabile EMK = Drehzahl 
geregelt.

von DerController (Gast)


Lesenswert?

Matthias S. schrieb:
> DerController schrieb:
>> Das Problem ist, wenn ich als Sollwert = 150 vorgebe, dann habe ich im
>> Leerlauf eine EMK von 67 bzw das schwankt leicht 65-70.
>
> Dein Regler benötigt Sollwert und EMK als Eingang. Der Sollwert gibt die
> gewünschte EMK vor und der Regler regelt dann auf stabile EMK = Drehzahl
> geregelt.

Hallo,

ja okay. Sollwert Vorgabe ist okay. Aber wie gibt der Sollwert die EMK 
vor?
Dann müsste ich ja eine Tabelle haben mit sämtlichen Werten?!

Die Regelung auf stabile EMK ist auch wieder klar.


Ich bekomme es nicht in meinen Kopf, wie ich genau diesen Bezug, 
Sollwertvorgabe => EMK-Wert x bekomme.

von Der Andere (Gast)


Lesenswert?

DerController schrieb:
> Ich bekomme es nicht in meinen Kopf, wie ich genau diesen Bezug,
> Sollwertvorgabe => EMK-Wert x bekomme.

Das ist doch wohl nicht so schwer.
Dein Sollwert ist eine Zahl zwischen 0 und 255, die einer Solldrehzahl 
von 0 - XXXX U/min entspricht.
Jetzt kriegst du einen "EMK" Wert der proportional zu der tatsächlichen 
Drehzahl ist.
Also musst du deinen Wert umrechnen, daß er die selbe Verhältnis zur 
Drehzahl hat wie dein Sollwert.
Das ist ein einfacher Dreisatz, bzw Multiplikation mit einem konstanten 
Faktor.
Wo ist das Problem, das ist Mathe 8 Klasse und Physik max. 10. Klasse.

Du musst nur den Faktor durch einen Versuch ermitteln, in dem du die 
Drehzahl irgendwie misst oder vorgibst und dazu deinen "EMK-Wert" misst.

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
Noch kein Account? Hier anmelden.