Schrittmotortreiber mit dem L6208 – Der Entwurf

Auch für mich ist das Thema „Motorenansteuerung“ sehr interessant, damit endlich Bewegung ins Spiel kommt. Mal ehrlich, erst die Kombination von Sensorik, Steuerung und Aktoren machen faszinierende Projekte aus. Wer einmal einen Industrieroboter in Aktion gesehen hat, der weiß wovon ich hier schreibe.

Hier die Verknüpfung zu den folgenden Artikeln und zum Onlineshop:

shopbuttonOK, soweit, so gut. Ich habe mich entschieden, dieses Thema mit einer Schrittmotor – Steuerung zu erschließen und ein Board zu entwerfen, das einfach zu bauen und zu verstehen ist. Wie immer, liegt mein Schwerpunkt in der praktischen Umsetzung, weniger in den Tiefen der Theorie.

Alternative zu L297 und L298

Bei meiner Suche nach einer Schaltung zur Ansteuerung eines Schrittmotor bin ich, wie wahrscheinlich jeder vor mir, auf die L297/298-Kombination gestoßen. Mir gefällt die Schaltung gut, da sie nur einfache Bauteile benötigt, leicht verständlich ist und auf vielen Internetseiten erklärt wird. Daher habe ich auch bereits einige Schaltungen ent- und wieder verworfen, so dass ich mittlerweile mit einer fertigen Platine (Größe: 1/2 Modul) aufwarten könnte. Aber noch vor dem Aufbau und Test, musste ich mehrmals lesen, dass diese Schaltung schon sehr alt ist und es es bessere Alternativen gibt. Damit setzte sich die Suche nach einem Schrittmotortreiber fort.

Nach ein paar Tagen landete ich somit beim L6208 (Datenblatt) von STMicroelectronics. Dieser Baustein ist in der Lage einen Schrittmotor direkt anzusteuern. Dabei sind Voll-/ Halb- und Mikroschritte möglich. Es entfällt somit die Kombination von zwei ICs, wobei die Anbindung an den Mikrocontroller ebenso einfach erscheint, wie beim L297. Ob der L6208 deutlich jünger als die L297/298-Kombination ist, weiß ich nicht. Da er aber auf nicht so vielen Seiten beschrieben und erklärt wird, fühle ich mich herausgefordert das zu ändern. Wer weiß, welches Fazit ich ziehen werde.

Der Motor

Bei der Durchsicht des L6208 Datenblatts fiel mir auf, dass es vielleicht besser sein könnte, den Schrittmotor vorab zu bestimmen. Dadurch sind bereits einige Eckdaten der zukünftigen Schaltung definiert. Ich habe den Trinamic QSH4218-35-026 (Link) ausgewählt. Er ist der Kleinste seiner Art bei Reichelt und hat ein Datenblatt, mit den eventuell benötigten Informationen, welches der Testmotor leider nicht hat.

Die Schaltung

Wie bereits erwähnt, ist der L6208 in der Lage Voll-/ Halb- und Mikroschritte zu erzeugen. Für Mikroschritte ist die Nutzung von zwei PWM-Signalen notwendig, die zu den üblichen Signalen des Mikrocontroller hinzukommen. Gerne würde ich die Möglichkeit von allen drei Schrittarten auf einem Board kombinieren, so dass die Schwierigkeit des Ansteuern nach und nach gesteigert werden kann. Im Halb- und Vollschrittbetrieb soll ein einzelner RJ12-Anschluss ausreichend sein. Hier die Anforderung zusammengefasst:

  1. Alle Schrittarten sollen nutzbar sein
  2. Im Halb- und Vollschrittbetrieb soll nur ein RJ12-Anschluss verwendet werden
  3. Der IC soll durch einen Aufsatz kühlbar sein.

Sehr interessant sind hierfür die beiden Application Notes 1495 (Microstepping stepper motor drive using peak detecting current control) und 1451 (L6208 fully integrated two phase stepper motor driver). Vor allem die Dimensionierung der einzelnen Peripherie-Beschaltung kann aus diesen abgeleitet werden, worauf ich später noch näher eingehen werde. Leider gibt es in beiden App Notes keine Schaltung, die alle drei Schrittarten unterstützt, so dass ich eine Kombination aus beiden Versionen erstellt habe.

Treiberschaltung des L6208-Boards - Schrittmotor

Schaltung des L6208-Boards

Auswahl des Elkos

In dieser Schaltung werden die Mikrocontroller-Anschlüsse noch nicht über RJ12 Buchsen geführt, da es sehr wahrscheinlich erst einmal einen Lochrasterplatinen-Aufbau geben wird. Jetzt erkläre ich aber noch wie die Werte der wichtigsten Bauteile zustande gekommen sind.

Auswahl des Elkos

Auswahl des Elkos

Ich beginne mit der, für mich, härtesten Nuss, dem Elko. Welche Kapazität sollte dieser haben, dass war meine erste Frage. Ein Blick in die Beispielschaltung zeigte einen 100µF/63V Elko. Jedoch werden in anderen Schaltungen auch andere Werte genutzt, was mich verunsicherte. Daraufhin habe ich versucht eine Berechnungsmöglichkeit zu finden oder abzuleiten, womit ich mich sicherlich vier Tage beschäftigt habe ohne einen nennenswerten Fortschritt zu machen. Am Ende haben mich dann einige Dinge überzeugt, denn 100µF/63V Elko zu nehmen:

  1. Die Beispielschaltung der AN1451 (S. 35)
  2. Die Grundschaltung des Datenblatts auf Seite 19

Ob es klappt, werden wir sehen…

Einen Punkt muss ich noch hervorheben, nämlich die Verbindung von AGND und GND. Die Masseflächen der Steuer- und Motorversorgung sollen an einem Punkt zusammengeführt werden. Dieser  Punkt sollte an der Stelle liegen, an der sich die RSense und der Elko treffen. Dabei sollten die Bauteile nicht weit auseinander liegen. Das habe ich mit dem Widerstandssymbol gekennzeichnet (soll ein Jumper sein, werde ich noch ändern).

Sensing Widerstände

Sensing Widerstände

Sensing Widerstände

Die Sensing Widerstände werden von einem Strom durchflossen, der dem Motorstrom entspricht. Über diese Widerstände misst der L6208 den Motorstrom, weshalb ihr Wert auch mit 0,25-1 Ohm sehr gering ausfällt.

Auswahltabelle für Sensing-Widerstände anhand des Motorstroms

Auswahltabelle für Sensing-Widerstände anhand des Motorstroms

Entsprechend dieser Tabelle werden die RSense Widerstände empfohlen. Durch Parallelschaltung von 1 Ohm Widerstände können kleinere Leistungsarten verwendet werden. Weiter oben habe ich bereits den geplanten Motor erwähnt. Dieser hat einen maximalen Motorstrom von 2A, woraus sich die 4x 1 Ohm Variante aus der Tabelle ergibt.

Ladungspumpe

Die Ladungspumpe des L6208

Die Ladungspumpe des L6208

Der Begriff „Pumpe“ deutet bereits darauf hin, dass hier entweder gefördert oder „aufgeblasen“ wird. Tatsächlich benötigen einige Elemente des L6208 eine höhere Spannungsversorgung, als es die maximale Versorgungsspannung von 52V hergibt. Aus diesem Grund wird die Spannung durch die Ladungspumpe erhöht. Entsprechend des Datenblatts werden die folgenden Werte der externen Bauteile empfohlen:

D1, D2: 1N4148
R4: 100 Ohm (1/8W)
C5: 10nF (100V, Keramik)
C8: 220nF (100V, Keramik)

Die Jumper

PWM und VRef Jumper zur Auswahl der Schrittarten

PWM und VRef Jumper zur Auswahl der Schrittarten

Dieser Abschnitt beinhaltet die größte Änderung zu den beiden Beispielschaltungen der Application Notes. Ganz links befinden sich die beiden Jumper um zwischen Slow/Fast Decay und zwischen Halb-/ Voll- und Mikroschritten zu wählen. Dabei ist wichtig, dass mit einem Low-Pegel Voll- und Mikroschritte nutzbar sind.

Für die Schrittwahl sind jedoch noch zwei weitere Jumper nötig, die dazu dienen, die PWM-Signale (Mitte) oder den Spannungsteiler für VRef (Rechts) an die Anschlüsse VREF_A und VREF_B zu verteilen. Wie auf dem Schaltplan zu erkennen ist, reicht ein einzelner Spannungsteiler, der beide Anschlüsse das L6208 versorgt. Für den Mikroschrittbetrieb wiederum werden zwei separate PWM-Signale benötigt. Somit werden die drei Schrittvarianten mit insgesamt drei Jumper eingestellt.

Jumpereinstellungen der verschiedenen Schrittarten

Jumpereinstellungen der verschiedenen Schrittarten

Als nächstes werde ich nun die Schaltung auf einer Lochrasterplatine aufbauen und kontrollieren, ob alles funktioniert. Sicherheitshalber werde ich noch einen Kühlkörper mitbestellen.

Update 22.08.2013:

Da ich mich gegen den Mikroschrittbetrieb mit dem L6208 zu realisieren, arbeite ich momentan an einem weiteren Schrittmotorprojekt mit dem Allegro A3979. Vielleicht ist dies auch interessant? Dann geht es hier zum ersten Artikel über den Schaltplan des A3979-Moduls.

Ein Gedanke zu „Schrittmotortreiber mit dem L6208 – Der Entwurf

  1. Hallo Timo
    hast du schon eine Möglichkeit gefunden einen Motor über I2C zu steuern? Vielleicht über den L6208 + ATi 2313 oder einem TMC222?
    achim seeger

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.