Archiv verlassen und diese Seite im Standarddesign anzeigen : Schrittmotor Steuerung über MOSFET H-Brücke
daniel.weber
07.10.2010, 14:52
Hallo zusammen,
ich habe mir eine kleine Platine gebastelt die einen Mega32 und eine doppelte H-Brücke enthält. Ursprünglich war die Schaltung für die Ansteuerung zweier DC-Motoren gedacht. Nun habe ich aber noch einige von den Schaltungen über und wollte mal testen, ob ich damit Schrittmotoren betreiben kann.
Also das Programm schnell angepasst und einen bipolaren Schrittmotor an beide H-Brücken angeschlossen.
Nun mache ich das im Programm so;
Ich setze die beiden Spuhlen nach dem Schema im RN-Wissen mit der erforderlichen Polarität unter Strom, warte dann 10ms und mache den nächsten Schritt (sind ja bei Vollschritt 4 Schritte). Das mache ich 4 mal und dann gehts wieder an den Anfang.
Das Ergebniss ist, dass sich der Motor recht gemütlich dreht und dabei recht viel Strom zieht. Nun müsste ich doch durch Erhöhung der Frequenz, also durch Verringerung der Wartezeiten zwischen den einzelnen Umschaltphasen (die 4 Schritte) die Drehzahl erhöhen können? Das klappt aber so nicht - nur was mache ich falsch? Oder habe ich etwas total falsch verstanden?
Für Tipps und Anregungen wäre ich sehr dankbar.
Die Platine könnt ihr euch hier ansehen (http://projects.web4clans.com/index.php/motor-control-v1)
edit:
die MCU läuft derzeit mit 16Mhz.
... was mache ich falsch?
Vielleicht gibst Du Ihm aus dem Stillstand heraus eine zu hohe Drehzahl vor. Der Läufer kann wegen seiner mechanischen Trägheit dem Drehfeld nicht folgen und zittert allenfalls etwas oder läuft zufällig einige Schritte in die eine oder andere Richtung. Die Drehzahländerung pro Zeiteinheit darf nicht zu hoch sein.
Kannst Du etwas genauer beschreiben was sich tut (oder was sich nicht tut)?
daniel.weber
07.10.2010, 16:22
hm ja das kann sein.
Also der Motor läuft sehr unruhig und erzeugt starke Vibrationen, ich meine auch machmal zu sehen, dass er einen Schritt zurück springt.
Wie geht man dabei am besten vor? Sollte mal beim Anfahren zunächst mehr Zeit zwischen dem Umschalten der Phasen vergehen lassen und das dann langsam verringern?
Hessibaby
07.10.2010, 17:23
Eine Spule ist falsch herum gepolt
Besserwessi
07.10.2010, 18:37
Zum Anfahren sollte man die Geschwindigkeit langsam erhhöhen. Von der Software ist das meist eine Logische Ebene höher angesiedelt. Also erstmal die Routine um den Motor mit gegebener Geschwindigkeit dehen zu lassen, und dann außen rum die Routine die den Motor von A nach B fährt mit ggf. gegbener Maximaler geschwindigkeit. Da wird dann erstmal nach jedem Schritten die Geschwindigkeit vorsichtig erhöht.
Wenn man wesentlich schneller als 10 ms/Schritt werden will, wird man eventuell auch eine Stromregelung und mehr Spannung brauchen. Sonst geht der Strom zu schnell zurück und man hat zunehmend weniger Drehmoment.
Bei niedreiger Geschwindigkeit hat man eventuell noch Schwingungen um die jeweilige Sollpostion drauf. Dem könnte man noch etwas entgegenwirken mit zusätzlichen Zwischenschritten (Halbschritte).
daniel.weber
07.10.2010, 18:43
Hallo Besserwessi,
danke für die Tipps, ich hatte den Strom bereits durch einen PWM an den Gates begrenzt. Leider habe ich eben meine Treiberschaltung gegrillt, muss wohl ein Fehler im Layout gewesen sein, ich vermute, dass die Massefläche zu nah an den Hochstrombahnen liegt, somit gab es einen Funkenübersprung. Es kann natürlich auch sein, dass die Fets einen Hitzetot gestorben sind, obwohl die für min 40A ausgelegt sind.
Ich werde die Fets am Wochenende mal austauschen und es nochmal versuchen :)
edit:
habe gerade nochmal ins Datenblatt geschaut, ich habe die max. Gate Source Spannung um 4 Volt überschritten, daran könnten die dann auch gestorben sein :/
021aet04
07.10.2010, 20:18
Einen Überschlag glaube ich nicht. Als Faustformel gilt (für Luft) 1mm/kV. Der Fet dürfte durch die zu hohe GS-Spannung kaputt gegangen sein.
MfG Hannes
daniel.weber
08.10.2010, 02:17
so nach langer Suche und langem grübeln habe ich wohl das Problem gefunden. Da ich meine Treiberschaltung über Mosfets aufgebaut habe und die scheinbar eine recht lange Schaltzeit von 4ms haben, hat es beim Umschalten zwischen den Phasen immer einen kurzen Kurzschluss gegeben, das hat die Mosfets so stark erwärmt, dass sie das qualmen anfingen *g*
Nun warte ich min. 4ms beim Umschalten. Das setzt mich aber vor ein weiteres Problem, die Geschwindigkeit des Motors ist begrenzt, da ich nie unter 4ms pro Phasenumschlag kommen kann. Hat irgendwer eine Idee wie man das lösen könnte? Warum sind die Mosfets so langsam? Ich verwende IRFR1205 und IRFR5305. Das muss doch machbar sein, auch ohne extra Treiber IC.
Feuerring
08.10.2010, 04:16
wie kommst Du denn auf 4ms ... gemessen oder Datenblatt.
bei H-Brücken die mit PWM gesteuert werden ... solltest Du einen guten Gate-Driver verwenden damit die Umschaltzeit / Ladungsänderung so schnell wie möglich geht. In der Zeit der Umsteuerung hat ein Mosfet die höchste Verlustleistung, um so länger diese dauert und um so häufiger dies ist, um so mehr muss der Mosfet Verbraten ...
z.B. High Speed, High Voltage, High Side Gate Driver >>>> LTC4440
http://cds.linear.com/docs/Datasheet/44405fa.pdf
Besserwessi
08.10.2010, 11:35
Ohne Treiber wird das schalten schon etwas langsamer. Aber 4 ms müssen es nicht sein. Beim P-Mosfet kann es wegen des extra Transistors dazwischen realtiv langsam werden, es sei denn man hat da realtiv niederohmige Widerstände und braucht da schon etwas mehr strom (z.B. 10 mA).
Wenn man den N-MOSFET direkt vom Port, nur mit einem kleinen Widerstand (z.B. 33 Ohm) treibt, sollte man bei den Schaltzeiten auf Zeiten von 1-5 µs kommen können. Das ist nicht wirklich gut, sollte aber schon reichen.
Der N MOSFET hier ist allerdings nicht so die beste Wahl. Die 55 V spannungsfestigkeit braucht man wohl nicht, dafür wäre aber eine niedrigere Schaltschwelle sinnvoll.
Das Problem mit dem realtiv langsamen p-FET kann man etwas umgehen, wenn man PWM nur mit den N-MOSFET macht. Der Strom fließt dann zeitweise durch die Freilaufdioden (im N FET, oder extern).
daniel.weber
08.10.2010, 11:39
hmm schade, hatte gehofft ich bekomm das hin, ohne die Schaltung groß zu ändern, da sie ja schon fertig ist.
Hatte noch die Idee einen 100nF Kondensator an den Drain Eingang der Fets zu fummeln, so dass der, sobald der BC817 nicht mehr leitet, das Gate enlädt aber das scheint auch nicht schnell genug zu passieren, zumindest klappt es nicht. (Schaltung siehe Analage)
Ich hatte die Zeit gemessen, konnte man im Ozi recht gut erkennen und am Labornetzteil, weil ab 4-5ms keine Kurzschlüsse mehr gezeigt wurden.
daniel.weber
08.10.2010, 11:48
ah sry hatte grade erst gesehen, dass du geschrieben hast, also ich habe recht hohe Basisvorwiderstände (4,7k), wenn ich den nun auf 100 Ohm vermindere, dann sollte das die Schaltzeit doch deutlich nach unten setzen, da ich nur einen Pwm verwende, müsste der Controler den höhren Strom doch verkraften?
Muss das immer alles so kompliziert sein? *g*
edit:
hmm hab eben nochmal den Basiswiderstand nachgerechnet, ich komme auf einen Vorwirderstandswert von 300 Ohm, kA warum ich da so einen hohen Wert gewählt habe, die Schaltung ist schon recht alt :/
werde den Widerstand mal gegen 100 Ohm austauschen.
Besserwessi
08.10.2010, 14:21
Der Basiswiederstand ist mit 4,7 K schon relativ hoch, aber 100 Ohm sind wiederrum zu niedrig. Das macht der Transistor und auf Dauer auch der µC nicht mit. Richitg wäre da ein Widerstand von etwa 470 Ohm bis 1 K.
Der 100 Ohm Widerstand am Gate des N-MOSFETs könnte noch etwas kleiner werden (z.B. 22 Ohm ... 47 Ohm). Hier fleißt der Strom wirklich nur ganz kurzzeitig, und der höhere Strom stört nicht.
Viel bringt das aber auch nicht - das man macht den vielleichht den Unterschied zwischen 2 µs und 3 µs aus.
Welcher der MOSFETs schaltet denn so langsam. 4 ms kann ich mit nicht so recht vorstellen, außer das sind versehentlich 680 K statt 680 Ohm am P MOSFET.
daniel.weber
08.10.2010, 14:43
ich weiß leider nicht genau wie ich das messen kann, welcher der Mosfets so langsam schaltet, der Widerstand ist 680 Ohm, so langsam bin ich mit meinem Latein am Ende, sehr seltsam alles :/
edit:
so ich habe jetzt mal gemessen, zum Test habe ich ein Programm geladen, dass alle 10ms die Phasen umschaltet. Zwischen dem Umschalten wird nochmal 4ms gewartet.
Ich habe mal mit meinem Osci ein Bild geschossen. Gemessen von einer Phase auf GND. Ich hoffe man kann was erkennen.
Besserwessi
08.10.2010, 15:48
So ganz viel kann ich auf den Bildern noch nicht erkennen. Der richtig langsame Teil scheint aus Zeiten zu kommen, wo beiden MOSFETs aus sind. Einiges der Flanken sehen doch schon relativ Steil aus. Ganz ohne Last ist es schwierig.
Zum messen sollte man erstmal nur je einen MOSFET ein / auschalten, und als Last einen Wiederstand / Halogenlampe oder ähnliches dran haben. Für den P-MOSFET den Widerstand vom Ausgang der einen Phase nach GND. Für den N-MOSFET nach z.B. + 12 V, oder was man gerade als positive Spannung hat.
daniel.weber
08.10.2010, 16:25
so habe mal den P-MOSFET gemessen und der verwirrt mich noch weiter... Programmablauf, schaltet den FET in einer Schleife für 1ms an und dann für 1ms aus. (an PWM: 1, aus: PWM: 255).
Nun erhalte ich aber Phasen von 40ms (an/aus). Gemessen vor dem Widerstand.
so hab dann noch den N-MOSFET gemessen, der verhält sich wie gewünscht, habe Phasen von 1ms, so soll es sein.
Also pennt der P-MOSFET aus irgendwelchen Gründen, die ich jetzt nicht nachvollziehen kann.
daniel.weber
08.10.2010, 18:24
soa ich bin es nochmal; erstmal möchte ich mich bei dir für deine tatkräftige Unterstützung danken. Ich habe mir nochmal die einzelnen PWM Signale angeschaut und festgestellt, dass die Ausgangsfrequenz viel zu niedrig ist (61hz) damit kann man natürlich nicht so dolle arbeiten *g*
Ich habe die Frequenz jetzt auf 64khz erhöht und siehe da, das Umschalten klappt ohne Probleme :) die Messung vom N-Channel sieht nun genau so aus wie bei dem P-Channel.
edit:
so komme jetzt auf 2ms...
der Motor dreht jetzt viel ruhiger aber immer noch recht langsam...
Besserwessi
08.10.2010, 21:47
Bei den PWM Werten muß man noch etwas aufpassen. Bei 8 Bit PWM hat man nicht immer die Werte für ganz an und ganz aus dabei. Beim 8 Bit Timer gibt es nämlich 257 Mögliche Ausgangszustände für eine PWM Signal. Das Controllregister hat aber nur 8 Bits. Bei dem P - MOSFET sieht es ein wenig so aus, als hätte man da noch kleine Spikes drin. Reste vom PWM ? Bei den Treibern würde ich PWM nur mit den N Kanal MOSFETs machen.
500 Hz Schrittfrequenz sind für einen Schrittmotor schon nicht so wenig. Ohne Stromregelung ist das schon nicht schlecht. So wie es aussieht ist bei der Schaltung keine Strommesuung vorgesehen. Man müßte also das PWM-verhältnis nach der Pulslänge berechnen. Das wäre das dann so etwas wie eine Drehzahlabhängige Spannungsanpassung. Ich vermute mal, das das bisher noch nicht in der Software vorgesehen ist.
daniel.weber
09.10.2010, 00:41
hmm das ist mir jetzt wieder neu, ich dachte immer bei einem 8 bit PWM habe ich 256 Zustände eben 2⁸, also 0 bis 255?
Nein eine Strommessung gibt es in dieser Schaltung leider noch nicht, das habe ich erst in der nächsten Version vor, die Schaltung war auch nie dafür gedacht Schrittmotoren zu betreiben, hatte sich so ergeben, da sie ja 2 H-Brücken hat und ich endlich mal von den fertigen Motortreibern weg möchte.
Die zweite Version der Schaltung bekommt auch noch ein paar andere Dinge, so dass ich auch brushless Motoren ansteuern kann. Mir ging es bei der Schaltung nur darum rauszufinden, ob das Grundprinzip funktioniert.
Das Bild von dem P-MOSFET sieht mit der richtigen PWM Frequenz nun genau so aus, wie das von dem N-MOSFET, also einzelne Spikes sind da nicht mehr zu erkennen. Mir ist auch aufgefallen, wenn ich unter 2ms gehe, dann zeigt mein Netzteil zwar einen Kurzschluss an, ich habe aber keinen Einbruch der Spannung mehr, den Motor stört es auch nicht. Vielleicht ist es aber sinnvoll die Schaltung in der nächsten Version durch den Gatetreiber zu erweitern, nimmt ja nun nicht so viel Platz weg.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.