DC Motorregelung

Gast #5552358
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.
Gast #5552460
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...
Gast #5552551
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.
Gast #5552556
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
Gast #5552582
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.
Gast #5552628
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
(Firma: matzetronics) #5552630
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.
Gast #5552692
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.
Gast #5552697
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.
Gast #5552730
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.
Gast #5552740
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.
#5552747
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.
Gast #5552753
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.
Gast #5552782
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.
Gast #5552862
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.
Gast #5552893
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.
Gast #5556231
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.
Gast #5556258
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.

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