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.
Du musst die Drehzahl des Motors messen (optisch oder induktiv)und mit dem Sollwert vergleichen. Danach die PWM nachregeln.
DerController schrieb: > Ich habe 0 Ahnung wie ich das machen soll Beitrag "Drehzahlregler für DC-Motor, ATmega48-328"
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.
:
Bearbeitet durch User
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.
Auf der richtigen Seite, sprich den FET gegen GND den die PWM nicht schaltet und ohne die Brücke kurzzuschließen?
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.
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.