Forum: Mikrocontroller und Digitale Elektronik Hitzeprobleme beim L298 !?


von Benjamin Munske (Gast)


Lesenswert?

Hallo Leute,

ich habe einen Schrittmotortreiber auf Grundlage des L298 aufgebaut.
Der Schrittmotor ist 5-Phasig (nicht bipolor und nicht unipolar!) Die
Phasen sind sternförmig geschaltet. Die Schaltung funktioniert ganz
wunderbar, allerdings werden die beiden L298, die an einen großen
Kühlkörper geschraubt sind unglaublich heiß nach kurzer Zeit (man kann
sie kaum anfassen!). Im Datenblatt steht, dass der L298 insgesamt bis
zu 4A Strom schalten kann und pro Kanal bis zu 3A. Mein Schrittmotor
zieht (laut Datenblatt) aber maximal 1,4A bei 24V pro Phase (ich
benutze 12V / bei 5V soll der Motor laut Datenblatt nur 0,1A pro Phase
ziehen), wobei immer abwechselnd 3 und 2 Phasen gleichzeitig geschaltet
sind.
Gerade habe ich mal gemessen, wie viel Strom durch eine Phase fließt
und kam zu meinem Unbehagen auf 3,2A pro Phase! Das ist natürlich viel
zu viel: Beim L298 gibt es doch diese Sense-Pins, an denen man den
maximalen Strom einstellen kann - wie berechnet man den Wert für diesen
Widerstand?

von Benjamin Munske (Gast)


Lesenswert?

Es muss doch jemanden geben, der mit diesem IC schon gearbeitet hat!?

von Rahul (Gast)


Lesenswert?

Der Sense-Pin ist zur Strommessung gedacht. Sprich man schaltet da einen
Widerstand gegen Masse dazwischen, und misst darüber dann eine dem
Motorstrom propoertionale Spannung.
Bei 12V und 1,4A hast du auch noch eine nette Verlustleistung am L298.
Bei 3,2A natürlich noch mehr.
Laut Datenblatt hat der L298 eine maximale Verlustleistungvon 25W. Da
wird er schon richtig warm.

Das Problem bei deiner Schatung vermute ich im Bereich der Taktung.
Vielleicht kommst du in den Resonanzbereich des Motors.
Was hat der Motor denn für einen Gleichstromwiderstand?

Eine Skizze o.ä. von der Schaltung würde das Problem vereinfachen...

von Benjamin Munske (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

im Datenblatt steht doch "Between this pin and ground is connected the
sense resistor to control the current of the load."
Ich dachte immer, dass "to control" steuern bedeutet und man halt so
den Strom begrenzen kann. Aber ok, dann bin ich jetzt schlauer.
Anbei ist die Schaltung der Motoransteuerung.

Ich glaube nicht, dass es an der Taktung liegt, da ich ja gemessen
habe, dass durch eine Spule 3,2A fließen, egal ob sich der Motor dreht,
oder steht (d.h. die Kraft hält). Die 3 Ampere fließen min durch 2
Spulen  und max durch 3 Spulen (je nach Stellung). Eine Spule hat einen
Widerstand von 1,2 Ohm.
So ist der Motor bei mir geschaltet (die Transistoren wegdenken - dafür
habe ich ja den L298)

http://www.bendrich.com/bilder/5eck.gif

Ich steuere den Motor mit einem Takt von 50Hz an.

von Rahul (Gast)


Lesenswert?

Naja, mit dem Widerstand kannst du natürlich auch den Strom
einstellen... Spannungsteiler halt...

12V / 1,2Ohm sind doch 10A, oder? (eine Spule)
Bei zwei Spulen dann 5A, bei 3 dann ca. 3,3A.

Die Schaltung finde ich auch interessant... irgendwie fliesst da meiner
Meinung nach durch alle Spulen Strom, wenn zwei Halbbrücken
durchschalten, weil die Spulen dann teilweise in Reihe und teilweise
parallel geschaltet sind.
Sicher, dass das genau so gehen soll?
Bin gerade nicht ganz in der Lage, das nachzuvollziehen. Bei längerer
Betrachtung sieht es aber irgendwie gut aus.

Du solltest vielleicht die Spannung erst mal senken.
In irgendeinem anderen Thread (irgendwas mit Folienschneider oder so,
Lexmark-Drucker-Umbau)ging es auch um ein ähnliches Problem.
Da ging es dann darum, die Spannung per PWM zu senken. Also nur im
ersten Schaltmoment die hohe Spannung zu benutzen, bis sich der Rotor
in Bewegung gesetzt hat. Das wird wohl auch hier das Problem sein, dass
die zum "Loslaufen" notwendige Spannung im "Ruhezustand" immer noch
anliegt, obwohl sie nicht mehr nötig wäre. Das Haltemoment ist auch
durch eine niedrigere Spannung und dementsprechend einem geringeren
Strom möglich.
Schalte den Motor doch einfach erstmal aus, wenn die Sollposition
erreicht ist. Dann wäre zwar kein Haltemoment da, aber man könnte
testen, ob die Erwärmung damit zusammenhängt.

von Benjamin Munske (Gast)


Lesenswert?

Also die Schaltung funktioniert ganz gut, d.h. der Motor dreht sich
ruhig und gleichmäßig.
Bei 5V schafft mein Motor es tatsächlich nicht, die Last anzuschieben.
Eine Strombegrenzung von 1,4 Ampere wäre dann doch eine elegantere
Lösung.
Ist die Rechnung nicht etwas unlogisch: Es liegen ja an jeder 2. Spule
12V an, d.h. der Strom unterteilt sich nicht, sondern wäre nach deiner
Rechnung an jeder Spule so hoch. Wie soll ich denn den Motor
abschalten?

von Rahul (Gast)


Lesenswert?

Wie gesagt: Die Schaltung müsste ich mir mal anders aufmalen...
Den Motor zum "Ausschalten" einfach stromlos schalten.
Die Strombegrenzung wird bei vielen Steuerungen durch eine
Stromregelung gemacht.

von Benjamin Munske (Gast)


Lesenswert?

Und wie regel ich den Strom am einfachsten?

von Arno (Gast)


Lesenswert?

Was Du da aufgemalt hast ist aber keine Strernschaltung! Sondern wie der
Titel schon sagt Fünfeck. Was ist jetzt die richtige?
Arno

von Benjamin Munske (Gast)


Lesenswert?

Ok, du hast natürlich echt - ich benutze eine Fünfeckschaltung - das lag
wohl daran, dass ich das Fachwort nicht wusste, bevor ich das Bild
geladen hatte.

von Arno (Gast)


Lesenswert?

Hast Du Deine Schaltfolge der einzelnen Wicklungen mal als Diagramm da.
So kann ich mir den Drehverlauf mit mal 3, mal 2 Spulen bestromt nicht
so richtig vorstellen.
Arno

von Benjamin Munske (Gast)


Lesenswert?

Ja, kein Problem, hier ist der c-code:

void turn_motor(int position)
{
  switch (position)
  {
    case 0:
      PORTB = (1<<0)|(0<<1)|(1<<2)|(0<<3)|(1<<4);
      PORTD |= (1<<Enable);
      break;
    case 1:
      PORTB = (0<<0)|(0<<1)|(1<<2)|(0<<3)|(1<<4);
      PORTD |= (1<<Enable);
      break;
    case 2:
      PORTB = (0<<0)|(1<<1)|(1<<2)|(0<<3)|(1<<4);
      PORTD |= (1<<Enable);
      break;
    case 3:
      PORTB = (0<<0)|(1<<1)|(0<<2)|(0<<3)|(1<<4);
      PORTD |= (1<<Enable);
      break;
    case 4:
      PORTB = (0<<0)|(1<<1)|(0<<2)|(1<<3)|(1<<4);
      PORTD |= (1<<Enable);
      break;
    case 5:
      PORTB = (0<<0)|(1<<1)|(0<<2)|(1<<3)|(0<<4);
      PORTD |= (1<<Enable);
      break;
    case 6:
      PORTB = (1<<0)|(1<<1)|(0<<2)|(1<<3)|(0<<4);
      PORTD |= (1<<Enable);
      break;
    case 7:
      PORTB = (1<<0)|(0<<1)|(0<<2)|(1<<3)|(0<<4);
      PORTD |= (1<<Enable);
      break;
    case 8:
      PORTB = (1<<0)|(0<<1)|(1<<2)|(1<<3)|(0<<4);
      PORTD |= (1<<Enable);
      break;
    case 9:
      PORTB = (1<<0)|(0<<1)|(1<<2)|(0<<3)|(0<<4);
      PORTD |= (1<<Enable);
      break;
  }
}

von Rahul (Gast)


Lesenswert?

Gehe ich recht in der Annahme, dass "Enable" alle Ausgänge
einschaltet, also die Signale auf den Motor schaltet?
Schaltest du das auch irgendwann wieder aus?
Prinzipiell müsste es dann nämlich gehen, über eine PWM am
Enable-Eingang, den Strom zu regeln.
Also beim Schaltvorgang volle Energie, und einen Moment später nicht
mehr.

Zum Thema "+Schrittmotor +PWM" (Beitragssuche) gibt es diverse
Threads...

von Benjamin Munske (Gast)


Lesenswert?

Mich wundert es nur, dass eine Phase so viel Strom zieht, da wie gesagt
im Datenblatt von anderen Werten die Rede ist (wenn ich das richtig
interpretiert habe). Ihr könnt euch ja mal das Datenblatt anschauen
(Anhang). Laut Rechnung ist das natürlich richtig, aber das ist ja auch
kein ohmscher Widerstand - wie berechnet man eigentlich den Widerstand
von stromdurchflossenen Spulen?

Die Idee mit der PWM ist ganz gut, allerdings dazu noch einige
Anmerkungen / Fragen:

1. Ich habe die Motoren über eine 2m lange Leitung verbunden - kann es
da auf Grund der Schwingungen bedingt durch die PWM nicht zu Störungen
kommen?

2. Ich denke mal, dass man die PWM dann bei jedem Vektor von 0 (keine
PWM) auf irgendeinen Wert (Pulsbreite) hochfahren muss, oder?

von Benjamin Munske (Gast)


Angehängte Dateien:

Lesenswert?

Anhang vergessen - hier ist er!

von Sven (Gast)


Lesenswert?

Och nee. Die Angabe von 1.1A / 1.5A im Datenblatt für 24V bezieht sich
auf den zugehörigen Treiber, das ist also der Strom, den der Treiber in
die Motorwicklung schickt. Die 0.1A bei 5V sind die Stromaufnahme der
Steuerelektronik des Treibers. Für den Motor ist je nach Typ ein
Widerstand von 0.7..2.8ohm angegeben, Du schreibst, Dein Motor hat
1.2ohm. Und da wunderst Du Dich über den Strom? Wie oben schon jemand
schrieb, sollte bei 12V ein Strom von 10A möglich sein, der L298
begrenzt das dann auf 3.2A, am Motor werden pro Phase rund 12W
umgesetzt, klar dass der leicht warm wird.

Hol Dir mal bei www.st.com das Datenblatt vom L6506. Das ist ein
Schrittmotor-Treiber, der mit dem L298 eine Stromregelung per Chopper
aufbaut. Allerdings für bipolare SM, brauchst Du 2 1/2 davon.

Sven

von Benjamin Munske (Gast)


Lesenswert?

Ups, das ist aber ein peinlicher Fehler! Der Hinweis zum L6506 ist gut,
wobei ich anmerken muss, dass ich eigentlich einen stärkeren Treiber
bräuchte, als den L298, da dieser ja unglaublich heiß wird. Kennt
jemand so etwas?

von gernot (Gast)


Lesenswert?

Kann mir igrnedjemand einen Hinweis geben wie man den Sense Resistor
dimensioniert! Der ist doch dazu gedacht um den Strom den der L298
abgibt zu messen oder!? Naja und wenn dieser Brückentreiber angenommen
2A abgibt und ich einen Widerstand von 0.5 ohm verwende, wird mir
dieser Widerstand sicher abbrennen oder!? Der hält ja nur ein Paar Watt
aus! Brauch ich nun einen Leistungswiderstand!?

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
Noch kein Account? Hier anmelden.