Archiv verlassen und diese Seite im Standarddesign anzeigen : Motorcontroller 230V
McFloppY
02.01.2018, 22:26
Hallo Leute,
ich habe hier eine kleine Tischbohrmaschine (Flott TB10 Plus) und versuche da den Regler zu entwerfen.
Wieso ich das mache? naja die Maschine habe ich ausm Schrott weil das Gehäuse und die Elektronik zerbrochen war.... Wieso auch immer.
Mitlerweile ist ein Arduino Nano mit I2C LCD sowie ein Phasenanschnittsdimmer mit ZCD im Gerät und ein neues Blechgehäuse geschweißt.
Zur Software: Timer 1 liest mir die Drehzahl aus und Timer 2 stellt den Dimmer usw. dar. Ich muss nun nur den gewünschten Wert in OCR2A werfen: 0 ist Vollgaß und 130 ist Aus.
Jetzt gehts an die Auslegung des Reglers... Das Studium liegt lange zurück und Regelungstechnik war nie mit viel Praxis gekrönt.
Bei euch im Wiki habe ich die tolle Reglerseite gefunden. Leider komme ich nicht so ganz vorran.
Ich habe verschiedene Methoden probiert und bin nun bei folgender Formel hängen geblieben:
out = (int)((0.35 * (float)e) + (0.010 * (float)esum));
Die Casts mache ich später noch weg, aber zuerst bin ich vorsichtig mit meinen Äpfeln und Birnen :)
ESum ist zwischen -2000 und 2000 begrenzt und Out zwischen 0 und 130.
Status quo: ab 250 RPM geht die obige Formel... Darunter ist es ein Geschwinge nach Noten weil der Regler auf out=0 geht und direkt darauf mit relativ hohen werten den Motor anwirft.
Sobald ich die Welle über 250RPM belaste fängt auch ein Ruckeln an.
Weiterhin belastet mich das Startverhalten... Auch das geht mit einem richtigen Ruck los.
Zu den "kontinuierlichen" Problemen hab ich mal 2 Bilder im Anhang.
Ich hoffe ihr könnt mir folgen und helfen :)
Viele Grüße
Hessibaby
03.01.2018, 12:45
Hi, poste mal das Schaltbild Deiner Anschnittschaltung, so wie ich das sehe hast Du Dir einen netten Schwingkreis gebastelt. Dazu solltest Du mal die Daten des verbauten Motors angeben. Beruflich habe ich täglich mit geregelten Antrieben zu tun. Die hängen zwar meist an Frequenzumrichtern aber die physikalischen Eigenschaften sind identisch.
Wichtig ist unter anderem das Du die Motortemperatur überwachst.
Eventuell kommst Du auch mit einer Phasenabschnittregelung oder einer Pulspaketregelung besser klar.
Wenn ich mir die Oszillogramme so anschaue tippe ich darauf das der Motor aus dem Tritt kommt.
McFloppY
03.01.2018, 13:00
Hallo Hessibaby,
klar gerne:
http://www.fritzler-avr.de/HP/tipps/dimm.php
Die Idee dahinter:
http://www.fingers-welt.de/info/MOTORSTEUERUNGEN_SCHALTUNGE.PDF
bzw. Wikipedia:
https://de.wikipedia.org/wiki/Einphasen-Reihenschlussmotor
Phasenanschnittsteuerung (https://de.wikipedia.org/wiki/Phasenanschnittsteuerung) Mit der Phasenanschnittsteuerung ist eine praktisch verlustlose und feinstufige Regelung der Drehzahl möglich. Während einer Halbperiode wird der Strom jeweils für eine bestimmte Zeit unterbrochen, das heißt, Effektivwert von Strom und Spannung werden verändert, dies führt zu einer Änderung des Moments und der Drehzahl.[2] (https://de.wikipedia.org/wiki/Einphasen-Reihenschlussmotor#cite_note-Quelle_4-2)
Das ist die Beschaltung die ich gewählt habe - meine ZCD hängt mit einem Brückengleichrichter direkt an den 230V da ich wegen dem Verzug nicht noch den Trafo dazwischen haben wollte.
Der Motor ist ein FISE SPA U9655TS1D010 - ich denke mit Wicklungstemperaturschalter.
http://www.fise-spa.it/en/serie-u-motors/motor-u96/
Mehr Daten müsste ich heute Abend raussuchen.
Was mich wundert ist, wenn ich den Regler sehr träge auslege dann funktioniert es schön.
Hessibaby
03.01.2018, 13:45
Da das offensichtlich ein Allstrommotor ist würde ich das Pferd anders aufzäumen, indem ich die beiden Statorwicklungen und den Läufer separat ansteuern würde und zwar als Nebenschlußmotor. https://de.wikipedia.org/wiki/Gleichstrommaschine#Nebenschlussmaschine.
Der Vorteil liegt darin das Du den Läufer mit einem Konstantstrom bestromen kannst und somit ein relativ konstantes Drehmoment hast und über eine PWM-Feldregelung eine feinfühlige Drehzahleinstellung realisieren kannst. Hoher Feldstrom = geringe Drehzahl, kleiner Feldstrom = hohe Drehzahl.
Nachteil: Du benötigst einen Trafo der Dir bei ca. 60V mindestens 350-400VA (Watt) an Leistung liefert. Einen Gleichrichter mit 100V und 10-25A Belastbarkeit sowie einen Elko 3.300 - 4.700µF/100V.
Der Wirkungsgrad des Motors wird, wegen der entfallenden Ummagnetisierungsverlusten bei Wechselstrom, deutlich erhöht. Aber auch hier gilt Thermistor dran und Temperatur überwachen.
Viel Spaß dabei.
McFloppY
03.01.2018, 18:28
Hallo Hessibaby,
ich habe leider keinen Platz für einen Trafo. Mir steht nur der Raum zur Verfügung den auch die alte Steuerung hatte.
Meinst du ich bin auf dem absoluten Holzweg? Gefühlt sind es nur ein paar "bessere" Zahlen und das Ding läuft.
Evtl. noch Drehzahlabhängige Kp / Ki Werte, aber auch das sollte der kleine Arduino schaffen.
McFloppY
04.01.2018, 14:51
So liebe Leute,
ich bin weiter :)
Ich habe mir die Nacht mal alles durch den Kopf gehen lassen (mit 16 war damit noch was anderes gemeint ;) ).
Ich habe ja eine absolut nichtlineare Kennlinie im Anfangsbereich. Bei out = 0 brummt der Motor nur und bei 5 dreht er los, bei 20 irgendwo ist er schon sehr schnell. Also habe ich geschaut und gesehen dass die minimal gewünschte Drehzahl bei 15 - 17 etwa erreicht wird. Danach wurde out bei 13 abgeriegelt - und siehe da: das Rucken war weg.
Weiterhin habe ich den I Anteil auch im "negativen" begrenzt: Der minimale Schlepp ist im Leerlauf und kann nicht weniger werden. Wird er "fälschlicherweise" weniger komm ich wieder ins Ruckeln da out wieder an 13 ran geht. Daher die Begrenzung von esum auf ca. 2000 - im Betrieb braucht er 2500 und mehr.
Im Anhang seht ihr ein Screenshot.
Nun muss ich nur noch das "aufschwingen" unter Last in den Griff bekommen - Siehe Anhang "belastet".
Da hab ich mit den Fingern leicht ans Bohrfutter gedrückt und wieder losgelassen. Gegen ende hab ich immer fester gedrückt bis zum Stillstand. Dann kolabiert das System - ich denke da muss ich einfach eine "Überlastabschaltung" einbauen. Aber bis dahin könnte es mehr "Schmackes" haben :)
Edit: achso nochwas: das "Schwingen" ist Drehzahlabhängig - der Regler läuft Netzsyncron. Somit denke ich ist es was vom Motor und nicht ein zu langsamer Regler.
VG
McFloppY
05.01.2018, 19:52
Soooo,
ich bin weiter :)
viel weniger P, mehr I und etwas D und alles geht gut :)
Das Rattern unter last würde man ausgemerzt bekommen wenn man den I Anteil langsamer fallen lassen würde als steigen. aber gefühlt ist das Vergewaltigung des Reglers.
Status Quo:
esum = esum + e;
if (esum < 0) {esum = 0;} //Begrenzung I-Anteil
if (esum > 20000) {esum = 20000;}
out = (int)((0.05 * (float)e) + (0.02 * (float)esum)+ (0.2 * (float) ealt));
if(out>117) out = 117; // Out begrenzen
if(out<0) out = 0; // "standgaß" begrenzen
OCR2A = 127 - out; // Maschine läuft grade an ; regelung mit out 0...117
ealt = e;
McFloppY
06.01.2018, 23:13
Hallo Leute,
da ich es immer Hasse wenn Sachen gefragt werden und die Leute dann keine Antwort schreiben:
Ich habs nun:
e sollte float sein :)
Dann gehts auch wieder mit viel P und wenig I...
Hier die relevanten glob. Variablendefinitionen:
volatile int motorsoll = 0, out=0, esum = 0;
volatile float e = 0, ealt = 0;
e = motorsoll - umin;
esum = esum + e/10; // esum wird sehr groß - /10 wegen Typ int
if (esum < 0) {esum = 0;} //Begrenzung I-Anteil
if (esum > 30000) {esum = 30000;}
out = (int)((0.2 * (float)e) + (0.01 * (float)esum)+ (0.1 * (float) ealt)); // perfekt für 1krpm 0.4 und 0.015
if(out>117) out = 117;
if(out<0) out = 0; // "standgas" begrenzen
OCR2A = 127 - out; // Maschine läuft grade an ; Regelung mit out 0...117
ealt = e;
Ich hoffe es hilft noch dem einen oder anderen Suchenden
Hessibaby
12.01.2018, 18:37
Hallo McFloppY, nein Du bist nicht auf dem Holzweg - aber ich war die ganze Woche offline da beruflich unterwegs.
So wie es ausschaut bist Du ja auf dem richtigen Weg :-)
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.