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.
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...
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.
> 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
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.
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.
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
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.
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
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)
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.
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.
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.
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.
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.
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.
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.
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
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.
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.
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.
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.
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.
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.
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.
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.