PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Maximalwerte DC-Motor bestimmen



Cysign
17.09.2014, 01:23
Hallo zusammen,

ich wüsste gerne, wie ich die maximale Stromaufnahme eines DC-Motors bestimme und sinnvoll begrenze. Der Hintergrund ist, dass ich einen DC-Motor, welcher für 3V vorgesehen war, problemlos auf 7V betreiben konnte - bis er letztendlich ein Hindernis zu überwinden hatte, für das er zu schwach war. Also blieb er stehen und ist dann vermutlich durchgebrannt (Widerstand bei funktionierendem Motor 4,x Ohm, bei dem defekten 0,8Ohm).
Eine Reduzierung der Spannung ist nicht machbar, da er dann für den gewünschten Anwendungsbereich zu schwach ist. Ich denke nun daran, den Strom mit einem Vorwiderstand zu begrenzen, in der Hoffnung, dass das ausreicht, den nächsten Motor vor dem Hitzetod zu bewahren. Da ich allerdings kein Amperemeter zur Anlaufstrommessung besitze, weiß ich nun nicht genau, wie ich den Vorwiderstand sinnvoll bestimmen soll.

Weiterhin möchte ich noch erwähnen, dass der Motor i.d.R. nur 3-4 Sekunden läuft, bevor er wieder anhält. Auf Softwareseite (er wird von einem µC gesteuert) plane ich nun einen virtuellen Notaus nach Überschreiten dieser Laufphase zu programmieren, falls bis dahin nicht der nächste Stop-Marker erreicht wird und der Motor ausgeschaltet wird.

Ich freu mich auf euere Ideen :)

Hubert.G
17.09.2014, 08:49
Den max. Strom errechnest du aus dem ohmschen Widerstand, bei Stillstand des Motors kommt dieser zu tragen.
Wenn du einen Vorwiderstand nimmst ist es das gleiche als würdest du die Spannung verringern.
Helfen könnte dir eventuell wenn du den Motor mit PWM ansteuerst, die Drehzahl überwachst und dann über die PWM nachregelst. Es ist natürlich ein Aufwand bei dem sich die Frage stellt ob ein stärkerer Motor nicht sinnvoller ist.

Cysign
17.09.2014, 09:07
Schön wärs, wenns so leicht wäre ;)
Das Problem ist, dass der Motor ib so ner billigen Asia-Drehplatte drin ist. Um den zu ersetzen, bräuchte ich einen mit exakt der selben Bauform.

Wie könnte mir da PWM weiterhelfen?
Die Drehzahl überwachen dürfte vermutlich auch nicht so einfach sein.
Eine Temperaturüberwachung macht vermutlich auch keinen Sinn, da man nicht genau am Motor andocken kann. Und falls doch, spielt die Umgebungstemperatur eine zu große Rolle.

Wie berechne ich denn den Maximalstrom auf Grund des Widerstands?

Hubert.G
17.09.2014, 09:43
Wenn der Motorwiderstand 4 Ohm ist und die Spannung 7V dann ist der Strom U/R=I 7/4=1,75A
PWM würde dir insofern weiterhelfen da du damit den Durchschnittstrom verringerst. Allerdings brauchst du eine Erkennung wann die Drehzahl zurückgeht und du die PWM-Pulsbreite erhöhen musst um den Motorstrom damit auch zu erhöhen.

Cysign
17.09.2014, 10:33
Ach so meinst du das. Ja, das ist klar. Meine Frage war eher darauf bezogen, wie ich den maximalen Dauerstrom, den der Motor aushält, bestimmen kann. Ursprünglich hat der nämlich ein 3V 500mA Netzteil. Das liefert aber real 4,5v unter Last ;)

Bei meinen 7V hab ich ja einen solchen Motor unter Dauerlast bereits gegrillt. Das Problem ist, dass im Normalfall nach 4 Sekunden ein Sensor sagt 'so, genug, Motor, du darfst dich jetzt wieder entspannen'. Dann scheints überhaupt kein Problem für den Motor zu sein. Da sich jedoch was verklemmt hatte, wurde die Position des Sensors nicht angefahren und der Motor lief unter Dauerlast und hang fest, wobei er natürlich überlastet wurde.

Mich würde halt interessieren, welcher Dauerlast der Motor bei erneutem Verklemmen der Mechanik standhält.

Klebwax
17.09.2014, 10:57
Die Kraft (eigentlich mechanische Leistung) eines Elektromotors hängt nur vom Strom ab. Nur der Strom erzeugt das Magnetfeld, das die mechanische Leistung erbringt. Alle Maßnahmen, die den Strom reduzieren
PWM würde dir insofern weiterhelfen da du damit den Durchschnittstrom verringerst. reduzieren auch die mechanische Leistung. Wenn du also den Strom (die mechanische Leistung) brauchst, der bei 7V fließt, kannst du ihn nicht verringern.

Dein Problem ist aber nicht der Strom. Würde er den Motor kaputt machen, wäre er sofort nach dem Einschalten hinüber (wie soetwas bei Halbleitern vorkommt). Dein Problem ist die Temperatur. Das ist das generelle Problem von Spulen, da heizen sich die Windungen gegenseitig auf. Deine Beschreibung
Widerstand bei funktionierendem Motor 4,x Ohm, bei dem defekten 0,8Ohm deutet darauf hin, daß die Lackisolierung geschmolzen ist und dabei ein Windungsschluß entstanden ist. Dazu müssen aber Temperaturen (in der Wicklung) von über 130° oder je nach Lack auch mehr Grad erreicht worden sein. Bei diesen Werten wird die Umgebungstemperatur kaum eine Rolle spielen.

Die sauberste Lösung ist eine Temperaturmessung. Wenn der Sensor nicht gut plazierbar ist, muß man den Grenzwert niedriger ansetzen.
Eine elegante Lösung wäre, die Wicklung als temperaturabhängigen Widerstand aufzufassen und damit die Temperatur zu bestimmen. Das ist aber nicht so einfach, da einem bei laufendem Motor die Gegen-EMK ins Bier spuckt.
Man kann kann auch die Erwärmung abschätzen, indem man den Strom über die Zeit aufsummiert. Dabei muß man aber auch die Abkühlungsphasen berücksichtigen.
Am einfachsten ist, die Anzeit des Motors zu begrenzen und danach eine Abkühlungszeit zu erzwingen. Die Hersteller von Motoren machen das dann so: sie schreiben Betriebsspannung 7V bei x% ED innerhalb von y Minuten ins Datenblatt. So kriegt man natürlich nicht alles aus dem Motor, was er könnte.

MfG Klebwax

Gerade noch gesehen:

Mich würde halt interessieren, welcher Dauerlast der Motor bei erneutem Verklemmen der Mechanik standhält.
Kann man nur austesten. Hängt von der Kühlung, dem Einbau und mehr ab. Tauch ihn in flüssigen Stickstoff und er schert seine Achse ab bevor die Wicklung schmilzt.:)

Peter(TOO)
17.09.2014, 12:12
Hallo,

Also, bei Überlastung, wie du schon getestet hast, brennt ein Motor durch. Die Wicklung wird zu heiss und die Isolation schmort durch.

Nun gibt's eine maximale Leistung, welche der Motor dauernd abgeben kann ohne defekt zu gehen. Das Problem liegt nur daran, dass nicht mehr Wärme im Motor produziert wird, als abgeführt werden kann.

Nun bestehen die meisten Motoren neben der Wicklung, auch noch aus einer menge Eisen.
Im ersten Moment kühlt das Eisen die Wicklung.
Dadurch kann man einen Elektromotor Kurzzeitig überlasten.

Wie viel und wie lange hängt von der Motorenkonstruktion ab, bzw. wie schnell sich das Ding aufheizt.

Bei vielen Küchen-Mixern sind überlastete Motoren eingebaut, weshalb da irgend wo z.B. "KB 3 Minuten" drauf steht. Nach 3 Minuten wird der Motor zu heiss und man muss ihn erst abkühlen lassen, bevor man weiter machen kann.

MfG Peter(TOO)

PICture
17.09.2014, 12:35
Hallo!

@ Cysign

Für mich am einfachsten wäre sowas änliches, wie im Beispiel: http://www.ebay.de/itm/THERMOSCHALTER-90-C-OFFNER-BIMETALLSCHALTER-250V-AC-DC-TEMPERATUR-SCHALTER-/321096034548?pt=Systemkomponenten_Heizung&hash=item4ac2d0a8f4 . Das würde ich isoliert an der heißester Stelle des Motors befestigen.

Geistesblitz
17.09.2014, 12:53
Ich würd mal sagen: einfache Strommessung über Shunt-Widerstand (zb. 0,5 Ohm oder so) und wenn der Strom zu hoch wird per PWM die Motorspannung absenken. Das wäre dann eine einfache Stromregelung, um den maximalen Strom zu begrenzen. So könnte man den Motor auch mit noch höheren Spannungen betreiben. Vorteil wäre ein schön schneller Motor, der bei Blockieren nicht sofort durchbrennt. Mittels der Strommessung ließe sich sogar ein Blockieren detektieren und die Maschine könnte in eine Art Störmodus gehen. Du sagst, der Motor ist für 3V zugelassen? Dann müsste der Strom so etwa bei 3V/4Ohm=0,75A liegen, oder halt niedriger bei höherem Widerstand. Kann sein, dass du die Spannung vom Shunt noch verstärken musst oder am Controller eine geeignete niedrige Referenzspannung verwendest (0,75A*0,5Ohm wären dann ja nur 0,375V). Mit einer Referenzsspannung von 0,5V könntest du dann Messtechnisch den Bereich bis 1A gut abdecken.

Klebwax
17.09.2014, 13:25
Ich würd mal sagen: einfache Strommessung über Shunt-Widerstand (zb. 0,5 Ohm oder so) und wenn der Strom zu hoch wird per PWM die Motorspannung absenken. Das wäre dann eine einfache Stromregelung, um den maximalen Strom zu begrenzen.

Das hilft Cysign aber nicht weiter. Er muß ihn mit höherer Spannung, also mit mehr Strom als bei 3V fließen, betreiben.

Eine Reduzierung der Spannung ist nicht machbar, da er dann für den gewünschten Anwendungsbereich zu schwach ist.
Es darf nur nicht zu lange sein, sonst überhitzt er wie
Bei vielen Küchen-Mixern sind überlastete Motoren eingebaut, weshalb da irgend wo z.B. "KB 3 Minuten" drauf steht. Nach 3 Minuten wird der Motor zu heiss und man muss ihn erst abkühlen lassen, bevor man weiter machen kann.

Was man rausbekommen muß ist, wie lange hier die "3 Minuten" sind, oder wie heiß er wirklich ist.

MfG Klebwax

Geistesblitz
17.09.2014, 13:43
Das hilft Cysign aber nicht weiter. Er muß ihn mit höherer Spannung, also mit mehr Strom als bei 3V fließen, betreiben.

Mit der Strombegrenzung würde man ja auch erreichen, dass der maximale Strom, den der Motor aushält, nicht überschritten wird. Wenn häufiger der Maximalstrom überschritten wird, macht der Motor das eh nicht lange mit. Da würde wirklich nur ein größerer Motor helfen.

Gibt es denn ein Bild oder so, wo man sehen kann, wie der Motor verbaut ist?

Peter(TOO)
17.09.2014, 15:07
Hallo,


Es darf nur nicht zu lange sein, sonst überhitzt er wie
Was man rausbekommen muß ist, wie lange hier die "3 Minuten" sind, oder wie heiß er wirklich ist.
Da müsste man halt messen.
Möglichst die Temperatur der Wicklung messen.
Dann den Motor 1-2s mit einem bestimmten Strom (Last) laufen lassen und wieder die Wicklungstemperatur messen.

Alles wirklich wieder abkühlen lassen und mit einem anderen Strom messen.

Die Kurven entsprechen dann e-Funktionen, also der Ladekurve eines Kondensators.

Die erste Messung sollte man mit dem gänzlich unbelasteten Motor machen.
Die Zweite würde ich mit blockiertem Motor machen.
Weitere Kurven müssten dann dazwischen liegen.

Zur Überwachung müsste man dann den Strom über die Zeit Integrieren.

Per Software würde man dann den Strom während Laufzeitzeit z.B. jede Sekunde in einer Variablen addieren.
Diese Variable wird in der Stromlosen Zeit jede Sekunde mit einem Faktor <1 multipliziert.
Wenn die Variable einen bestimmten Wert überschreitet hat der Motor zu heiss.

Kann man natürlich noch etwas genauer und komplizierter machen, indem man über die e-Funktion rechnet.

Grundsätzlich sollte man über den aktuellen Strom gehen, da die Motorbelastung ja sehr unterschiedlich sein kann.

Mf Peter(TOO)

White_Fox
17.09.2014, 15:52
Naja, wenn es ein 3V-Motörchen ist wird das Temperaturmessen schwierig.
Ich vermute mal das Ding wird nicht allzu groß sein -> wenig Masse -> geringe thermische Kapazität -> ergo wird er sich ein gutes Stück wieder abgekühlt haben bevor der Sensor ein brauchbares Ergebnis anzeigen kann (Zeit zum Auseinanderbau mit einbezogen).

Den Motor nach seiner Temperatur zu regeln wäre zwar theoretisch machbar, wird aber wahrscheinlich ziemlich aufwändig. Zum einen die Regelung selber, zum anderen wird die Temperturmessung im Betrieb ein Problem sein, dessen Lösung bei kleinen Baugrößen ebenfalls recht aufwändig sein dürfte.

Vorschlag: Bau dir eine Konstantstromquelle aus einem LM317 und schalte den davor. Dann würden zwar im Maximalfall nur noch ca. 5,7V am Motor anliegen, aber dafür kann dein Motor nicht mehr durchbrennen wenn du ihn belastest. Im Überlastfall würde er einfach stehenbleiben weil der LM317 die Spannung über dem Motor runternimmt.

Unter der Vorraussetzung, dass Wirkungsgrad und thermische Kapazität bekannt sowie die maximale Betriebszeit definitiv begrenzt sind könntest du den Motor auch definiert überlasten, dazu mußt du nur den über die Betriebszeit maximal verträglichen Dauerstrom berechnen und die LM317-Stromquelle entsprechend auslegen.

hbquax
17.09.2014, 17:23
Soo doof ist die Idee mit dem Vorwiderstand gar nicht. Wenn der Motor 4 Ohm hat und du noch einen 4 Ohm Widerstand davorschaltest, fließt beim blockierten Motor nur noch der halbe Strom, was dann nur noch ein viertel der Wärmemenge ergibt. Die Leerlaufdrehzahl wird sich kaum ändern und auch die Drehzahl, bei der du den besten Wirkungsgrad hast, die ist ungefähr 80 % der Leerlaufdrehzahl. Da fließt dann nur noch ein kleiner Strom, und der Widerstand stört nicht sehr. Allerdings wird auch der Widerstand warm, du musst also einen entprechend leistungsfähigen Typen auswählen.

Cysign
17.09.2014, 17:23
Da er prinzipiell bei etlichen Testläufen kein Problem mit den 7V hatte, habe ich vorhin mal versucht, eine Einschalttauerüberwachung in meinen Code zu implementieren. Simples C-Gefrickel, aber die While-Schleife, welche die Positionen abruft und wartet, dass der Stop-Sensor sein Auslösesignal abgibt, mag meine Ideen zur Zeitbegrenzung nicht.
Sobald die Bewegung einsetzt, speichere ich den aktuellen Zeitwert. Wenn dieser nun um 5 Sekunden überschritten wird, würde ich gerne eine Zwangspause einlegen und einen reneuten Versuch nach einer kurzen Abkühlphase starten. Aber genau da liegt das Problem.
Theoretisch sollte ich mir mit der Funktion millis() die aktuellen Millisekunden auf meinem Diyplay ausgeben können. Aber das funktioniert genau einmal, kurz nach dem Aufruf der Funktion.
Also habe ich ohne zeitliche Konstante eine Zahl inkrementiert. Das klappt super, ich kann sie mir auch auf meinem Display anzeigen lassen, rasselt schön sauber hoch.
Sobald ich das jedoch als if-Abfrage in meine While-Schleife (kopfgesteuert) einbinde, zählt da nichts mehr. Irgendwie muss es in While-Schleifen mit Abfragen geben. Auch n kurzes Delay hat keine Abhilfe geschafft...


void turn()
{
if (karusellInAction == 0)
{
karusellInAction = 1;
karusellPosition = 0;
digitalWrite(relayVoltagePin, HIGH);
digitalWrite(motorPin, HIGH);
delay(leadTime); // adjust for each model
relay1 = 0;
relay2 = 0;
relay4 = 0;
relay8 = 0;


while (analogRead(relayStop) <= 20) // A0 default: 40 active: 340
{
if (analogRead(relayeins) >= 50) { relay1 = 1; } // A1 default: 42 active: 342
if (analogRead(relayzwei) >= 50) { relay2 = 1; } // A2 default: 41 active: 341
if (analogRead(relayvier) >= 50) { relay4 = 1; } // A3 default: 40 active: 340
if (analogRead(relayacht) >= 50) { relay8 = 1; } // A4 default: 41 active: 340/341
}

writePosition();
delay(overTravelTimings[(karusellPosition-1)]); // adjust for each model
digitalWrite(motorPin, LOW);
digitalWrite(relayVoltagePin, LOW);
previousTurn = lastTurn;
buttonTime = millis();
if (jumpedOver <= 1)
{
jumpedOver++;
}
lastTurn = millis(); // moved before stop-sensing
karusellInAction = 0;
//lcd.clear();
}
}

Wenn die While-Schleife zu lange läuft, muss ich den MotorPin wieder auf low setzen. Aber irgendwie komm ich da nicht raus.