Robolink Schrittmotortreiber Platine

Platinenlayout (links) und erste aufgebaute Prototypenplatine (rechts).

Im Zuge meines Mechatronik Studiums habe ich im Frühjahr 2017 meine Bachelorarbeit zum Thema „Entwicklung einer Schrittmotoransteuerung für einen Assistenzroboter“ an der Hochschule Hannover, Fakultät 1 Elektro- und Informationstechnik im Fachgebiet Kommunikationstechnik geschrieben. Ziel der Arbeit war es, eine Platine zur Regelung eines bipolaren Schrittmotors zu entwickeln. Die Entwicklung umfasste eine Analyse des bisherigen industriellen Systems, die Auswahl geeigneter Hardware und den Aufbau einer Prototypen-Platine.

Aufgaben der Platine sind die Auswertung der im Roboterarm verbauten Winkelsensorik und die Ansteuerung des Schrittmotors. Auf der Platine ist eine galvansiche Trennung zwischen der Leistungselektronik und dem Mikrocontroller realisiert worden. Eine Steuerung der Platine vom Computer über die USB-Schnittstelle ist möglich. Zur Kommunikation ist eine serielle Schnittstelle definiert worden. Es lassen sich über ein Terminal Befehle versenden und Empfangen. Einstellbar sind u.a. der Schrittmotormodus. Zielkoordinaten mit einem Geschwindigkeits- und Beschleunigungsprofil können an die Platine übermittelt und ausgeführt werden. Eine Funktion zur Intialisierung des Systems wurde implementiert.

Das nachfolgende Video zeigt den Robolink Roboter, angesteuert durch die fertig aufgebaute Platine:

Bei den Antriebsmotoren handelt es sich um bipolare Schrittmotoren, welche platzsparend in der Basis des Roboters angeordnet sind. Diese Eigenschaften machen den Roboter ideal für den Einsatz in Kooperation mit dem Menschen (Mensch-Maschine-Kooperation), da durch den Aufbau und die geringe Krafteinwirkung nur ein minimales Verletzungsrisiko besteht.

Die Firma Igus GmbH aus Köln bietet unter der Bezeichnung Robolink ein Gelenkroboter-Bausatz-System an. Die Gelenke ermöglichen bis zu zwei Freiheitsgrade (Schwenk- und Drehbewegung). Die Kraftübertragung in das Gelenk erfolgt dabei über Seilzüge die im inneren des Roboters verlegt sind. Dadurch wird ein besonders leichter und schlanker Aufbau des gesamten Roboterarms ermöglicht.

robolink® W Komplettsystem 6 Achsen

Inhaltsverzeichnis

Schrittmotoren

“Ein Schrittmotor ist ein Synchronmotor, bei dem der Rotor durch ein gesteuertes schrittweise rotierendes elektromagnetisches Feld der Statorspulen um einen festgelegten Winkel (Schritt) oder ein vielfaches gedreht werden kann. Schrittmotoren existieren auch in Form von Linearmotoren. Man unterscheidet verschiedene Bauformen:

• Reluktanz-Schrittmotor

• Permanentmagnet-Schrittmotor

• Hybrid-Schrittmotor

Ein Reluktanz-Schrittmotor weist unterschiedliche Anzahl von Zähnen am Rotor und am Stator auf. Der Stator trägt die Spulen, den Rotor bildet ein gezahnter Weicheisenkern. Bei eingeschaltetem Strom fließt der magnetische Fluss durch den Weicheisenkern des Rotors. Die Drehbewegung des Rotors kommt zustande, weil vom gezahnten Stator der nächstliegende Zahn des Rotors angezogen wird, da sich so der magnetische Widerstand verringert. Die Zähne der bestromten Wicklung ziehen jeweils die nächstliegenden Zähne des Rotors wie ein Elektromagnet an und werden abgeschaltet, wenn die Zähne des Rotors den sie anziehenden Statorzähnen gegenüberstehen usw. Um im richtigen Zeitpunkt umzuschalten, wird der Motor in der Regel mit einem Rotorlagegeber versehen. Es existieren ebenfalls Geberlose Steuerverfahren. Beim Permanentmagnet-Schrittmotor besteht der Rotor aus Dauermagneten, die abwechselnd einen Nord- und einen Südpol aufweisen. Durch das Stator-Magnetfeld wird der Dauermagnetische Rotor so ausgerichtet, dass eine Drehbewegung entsteht. Da der Reluktanz-Schrittmotor keine Permanentmagneten enthält, hat er daher im Gegensatz zum Permanentmagnetschrittmotor auch kein Rastmoment bei ausgeschaltetem Strom. Beim Permanentmagnet-Schrittmotor ist die Anzahl der Pole (und damit die Auflösung) begrenzt. Der Hybridschrittmotor vereint die Eigenschaften beider Bauformen, indem auf den Permanentmagneten noch ein gezahnter Weicheisenkranz eingefügt wird. Bei nahezu allen heute erhältlichen Schrittmotoren, handelt es sich um Hybridmotoren (vgl. [25]).”

Schrittmotoren folgen – bei Einhaltung der Motorparameter – exakt dem von außen angelegten Feld und können so ohne Sensoren zur Positionierrückmeldung betrieben werden (Synchronmotor). Daher können sie im Gegensatz zu Servomotoren gesteuert betrieben werden. Wird ein Schrittmotor jedoch zu stark belastet oder zu stark beschleunigt bzw. verzögert, kann es vorkommen, dass der Rotor nicht mehr exakt dem Feld folgt und Schritte übersprungen werden.

Bipolare- und Unipolare Schrittmotoren

Schrittmotoren gibt es grundsätzlich in zwei Ausführungen. Beide besitzen zwei voneinander getrennte Erregerspulen. In ihnen wird während des Betriebes für jeden Schritt die Stromflussrichtung geändert Dadurch entstehen in den Polpaaren wechselnde Magnetpole, die bei einer sinnvollen Abfolge der Stromschaltung die Drehung des Rotors bewirken. Es wird aus Sicht der Ansteuerung zwischen zwei Arten von Schrittmotoren unterschieden. Unipolaren und Bipolaren-Schrittmotoren.

Unipolarer- und Bipolarer Schrittmotor

Beim bipolaren Schrittmotor wird die Änderung der Stromrichtung durch Umpolung des Stromflusses an der jeweiligen Spule erreicht. Der Vorteil der bipolaren Ansteuerung liegt im hohen erreichbaren Drehmoment. Für diesen Schrittmotortyp ist ein erhöhter Schaltungstechnischer Aufwand notwendig. Zur Ansteuerung wird eine H-Brücke benötigt. Beim unipolaren Schrittmotor ist jede Statorspule mit einem Mittelabgriff versehen, der an die Plus-Versorgung angeschlossen ist. Die Änderung der Stromrichtung wird dadurch erreicht, dass eine der beiden Spulenhälften auf Nullpotential geschaltet wird. Zur Ansteuerung reichen Schalttransistoren aus. Bei dem im Igus Robolink Roboter verbauten Motoren, handelt es sich um bipolare Schrittmotoren.

Ansteuerung von Schrittmotoren

Ein Schrittmotor wird bewegt, indem die Statorspulen in geeigneter Reihenfolge bestromt werden. Je nach Stromrichtung bilden die Statoranker einen Elektromagneten, nach dessen magnetischen Feld sich der Permanentmagnet im Rotor ausrichtet. Rotiert nun dieses elektromagnetischem Feld, rotiert auch der Rotor – bei jedem Wechsel um genau einen durch die Bauart vorgegebenen Winkelbetrag. Um dieses Verhalten beim Schrittmotor hervorzurufen, ist eine Ansteuerelektronik erforderlich, in der man die Parameter Geschwindigkeit und Richtung vorgeben kann. Weiterhin muss die Ansteuerelektronik unterschiedliche Schrittmuster zur Erreichung einer hohen Positioniergenauigkeit unterstützen, mit denen man die Rastposition der Welle beeinflusst.

Vollschritt:

Es werden immer zwei benachbarte Wicklungen geschaltet, damit sich der Rotor mittig zwischen den Polachsen ausrichtet. Man erreicht dadurch ein großes Drehmoment.

Halbschritt:

Es wird zwischen zwei Vollschrittpositionen nur eine Wicklung geschaltet, so wird der Schrittwinkel auf Kosten eines kleineren, ungleichförmigen Drehmoments halbiert.

Mikroschritt:

Sowohl beim Vollschritt- als auch beim Halbschrittbetrieb werden komplette Wicklungen nach einem bestimmten Impulsmuster geschaltet, der Motor schaltet schlagartig um einen festen Winkel weiter. Beim Microstepping wird durch die Ansteuerelektronik eine Pulse-width-modulation (PWM) in sehr feiner Auflösung erzeugt, so dass die Wicklungen mit einem konstanten Stromfluss in Sinus-Cosinus-Form versorgt werden. Das Drehmoment des Motors ist bei dieser Betriebsart ausschließlich von der Stromstärke abhängig.

Hardwareaufbau

Ziel ist es, eine Platine zu entwickeln, die auf die entsprechenden Eigenschaften der Schrittmotoren und der Winkelsensorik passt. Mithilfe der eigens entwickelten Platine soll eine spätere Miniaturisierung des Gesamtsystems möglich gemacht werden. Hierzu soll im ersten Schritt eine Prototypenplatine entwickelt werden, die einen Datenaustausch mit dem PC ermöglicht und die Ansteuerung des Schrittmotors übernimmt.

Bestückte Platine

Wichtigstes Ziel beim Aufbau der Hardware ist es, die Wiederverwendbarkeit des Gesamtsystems zu gewährleisten. So soll zum einen die Verfügbarkeit der Bauteile ermittelt werden, sodass auch noch in ein paar Jahren der Aufbau der Platine möglich ist und keine komplette  Neuentwicklung notwendig wird. Des Weiteren sollen die entsprechenden Bauteile sowohl im Dual in-line Package (DIP) – als auch im Surface-mounted Devices (SMD) Format verfügbar sein. Der erste Aufbau der Platine wird mit bedrahteten DIP-Bauteilen realisiert. Sie ermöglichen einen einfachen Aufbau. Die Abbildung 3.1 zeigt die fertig bestückte Platine.

Anforderungen an die Hardware

Da die vorhandene Hardware des Roboters weiter verwendet wird, müssen in Hinblick auf die Bauteile diese dementsprechend dimensioniert werden. Dies betrifft zum einen den Schrittmotor NEMA23, zum anderen die in den Gelenken vorhandene Winkelsensorik. Den beiden nachfolgenden Tabellen können die wesentlichen Spezifikationen für den Schrittmotor NEMA23 und die Winkelsensorik entnommen werden.

Technische Spezifikationen des Motors
Belegung der Sensorleitungen des Encoders

Systemübersicht

In nachfolgenden Abbildung ist eine Systemübersicht der Hardware dargestellt. Im linken Bereich befindet sich der Mikrocontroller, vom Typ Arduino Nano. Der Mikrocontroller wertet die vom PC gesendeten Daten aus und sendet diese über seine IO-Pins an den Schrittmotor weiter. In Gegenrichtung werden Daten von der Winkelsensorik in den Gelenken an den Mikrocontroller geleitet, dort verarbeitet und ggf. als Werte über die Micro-USB Schnittstelle an den PC weiter gegeben. Eine neue Programmierung kann ebenfalls über die Micro-USB Schnittstelle des Arduino Nano erfolgen. Die Spannungsversorgung des Mikrocontrollers erfolgt im Prototypenaufbau über die +5V der USB-Schnittstelle vom PC. Alternativ kann eine eigenständige Spannungsversorgung an den Mikrocontroller angeschlossen werden, da dieser über einen integrierten Spannungswandler verfügt.

Systemübersicht der Schrittmotortreiber Platine

In der Mitte der Systemübersicht werden die vom Mikrocontroller kommenden bzw. vom Treiberbaustein kommenden Logiksignale über eine galvanische Trennung, potentialmäßig getrennt. Da es sich bei den zu übertragenden Daten, nur um digitale Signale handelt, ist diese galvanische Trennung über Optokoppler realisiert. Die Spannungsversorgung der Optokoppler auf der Mikrocontroller Seite erfolgt über die +5V Versorgung des Arduino Nano. Da auf der Seite des Schrittmotortreibers Standardmäßig keine +5V zur Verfügung stehen, müssen diese erst aus den vorhandenen +24V , mittels eines DC/DC-Wandlers erzeugt werden. Hiermit werden die Optokoppler auf der Seite des Schrittmotortreiber mit der benötigten +5V Spannung versorgt. Außerdem erhält hierüber auch die Winkelsensorik ihre Spannungsversorgung.

Im rechten Teil der Systemübersicht befindet sich der Schrittmotortreiber vom Typ L6208N. Der Treiberbaustein wertet die ankommenden digitalen Signale in seiner internen Logik aus. Aus den Signalen erfolgt die Ansteuerung des angeschlossenen Schrittmotors.

Schrittmotortreiber

Aufgrund der technischen Spezifikationen des Schrittmotors erfolgt die Auswahl des Schrittmotortreibers. Bei der Auswahl des Treiberbausteins muss der mögliche Phasenstrom bzw. Nennstrom des Schrittmotors berücksichtigt werden. Der Nennstrom liegt beim NEMA23 bei 4, 2A. Die Nennspannung des Motors liegt bei 24 − 48V. Aufgrund dieser Nennwerte wurde der Schrittmotortreiber L6208N ausgewählt. Der Treiberbaustein eignet sich für Bipolare Schrittmotoren und besitzt einen maximalen Ausgangsstrom von 5, 6APeak bzw. 2, 8ARMS Root Mean Square (RMS) pro Phase. Sein Versorgungsspannungsbereich geht von 8V bis 52V.

Betriebsdaten des Treiber Bausteins

In der nachfolgenden Abbildung wird der interne Aufbau des L6208N dargestellt. Das Blockschaltbild zeigt die internen Komponenten. Der L6208 ist ein integrierter DMOS Schrittmotortreiber für Bipolare Schrittmotoren. Zur Ansteuerung verfügt der Treiber über zwei integrierte H-Brücken, zur Ansteuerung eines zweiphasigen Motors. Das IC besitzt einen integrierten Überstromschutz sowie Freilaufdioden. Der Sequenz-Generator erzeugt aus einem vorgegebenen Taktsignal die richtige Schrittreihenfolge.

Eine Verfügbarkeit des Treibers in den Bauformen PowerDIP24, PowerSO36 und SO24 ist gewährleistet.

Interner Aufbau des L6208 Schrittmotortreibers

PIN 1, CLOCK: Mit jeder steigenden Flanke erzeugt der Sequenz-Generator einen Schritt.

PIN 2, CW/CCW: Legt die Drehrichtung des Schrittmotors fest. HIGH lässt den Motor im Uhrzeigersinn drehen, LOW lässt ihn gegen den Uhrzeigersinn drehen.

PIN 3, 10, SENSE_A, SENSE_BDie Sensing-Widerstände an den Eingängen SENSE_A und SENSE_B werden vom Motorstrom durchflossen. Über diese Widerstände misst der L6208 den Motorstrom, weshalb ihr Wert auch mit 0, 25 − 1Ω sehr gering ausfällt.

Entsprechend der Tabelle 3.5 werden die Sensing-Widerstände ausgewählt. Durch die Parallelschaltung von 1Ω Widerständen können kleinere Bauformen mit niedrigerer Nennlast verwendet werden.

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

PIN 4, 9, RC_A, RC_BÜber die RC Kombination wird die Ausschaltzeit der Stromregelung der Brücken A und B eingestellt.

PIN 5, 8, 16, 21, OUT1A, OUT1B, OUT2B, OUT2A: Ausgänge der Brücken zum Schrittmotor.

PIN 6, 7, 18, 19, GND: Masseverbindungen. Die Masse Pins werden auch genutzt, um die Abwärme abzuführen.

PIN 11, 24, V REF_B V REF_A: Die beiden analogen Eingänge V REFB und V REFA, stellen die Referenzspannung für die Sensing-Widerstände zur Verfügung.

PIN 13, CONTROL: Über den CONTROL Pin kann der entsprechende Decay Modus ausgewählt werden. Beim Abschalten der Motorphasen wird der in den Induktivitäten des Motors aufgebaute Strom, je nach angelegtem Logischen Level, entweder schnell oder langsam abgebaut. HIGH Logic Level, schaltet in den SLOW DECAY Modus, LOW schaltet in den FAST DEACY Modus. Der Pin muss mit GND oder +5V belegt sein.

PIN 14, EN: Treiber Enable. Ein LOW Logic Level schaltet beide MOSFETs für Brücke A und Brücke B ab. HIGH Logic Level bestromt die Phasen des Schrittmotors. Im Fall eines Überstroms oder einer Temperaturüberschreitung des Treiberbausteins, werden die Ausgangsstufen über diesen Pin intern abgeschaltet.

PIN 15, VBOOT: Am VBOOT Eingang ist die Ladungspumpe zum Erzeugen einer höheren Spannung, als die Versorgungsspannung, angeschlossen. Diese Spannung ist zur Ansteuerung der Ausgangsstufen erforderlich.

PIN 17, 20, V S_B, V S_A: Versorgungsspannung der Brücke A und der Brücke B. Beide müssen direkt an die Versorgungsspannung angeschlossen sein.

PIN 22, VCP: Oszillator Ausgang der Ladungspumpe.

PIN 23, RESET: Ein LOW Logic Level schaltet den Treiber Baustein in den HOME Status (Status1) des Zustandsautomaten.

Das Datenblatt des L6208 weist ein Applikationsbeispiel auf, in dem beschrieben wird, wie eine Beschaltung des ICs zu erfolgen hat. Die entsprechenden Bauteilwerte für die Beschaltung sind in der nachfolgendenTabelle aufgeführt. Der Keramikkondensator C2 zwischen den Pins V SA und V SB und Ground (GND) und der Elektrolythkondensator C1 in der Nähe des L6208, filtern eventuell auftretende hohe Frequenzen in der Eingangsspannung. Außerdem schützt er die Versorgungsspannung vor Einkopplungen durch das umschalten der H-Brücken. Der Keramikkondensator CREF am Enable Pin bezogen auf Masse, legt die Ausschaltzeit fest, wenn in der Schaltung ein Überstrom erkannt wurde. Die Strom-Sensing-Eingänge SENSEA und SENSEB müssen auf möglichst kurze Distanz mit den Sensing-Widerständen verbunden sein. Ungenutzte logische Eingänge sollten zum verhindern eines undefinierten Potentials, mit +5V oder GND verbunden sein.

Bauteilwerte des Applikationsbeispiels
Beispielaufbau des L6208N aus dem Datenblatt

Die Werte der Widerstände (R_31 und R_32) und des Kondensators (C_10 = C_ref = C_off ), setzen sich nach folgenden Berechnungen zusammen.

Da diese RC-Kombination an den PIN-Eingängen V REF_A und V REF_B angeschlossen sind und die Referenzspannung der Strom-Regelung darstellen, muss die anliegende Spannung, der maximal über den Sensing Widerständen abfallenden Spannung entsprechen. Da R_SENSE = 0, 25Ω und I_PK = 2, 0A ergibt sich ein Spannungsabfall von:

Um diese Spannung ebenfalls an den Eingängen V REF_A und V REF_B anliegen zu haben,  ist ein Spannungsteiler zu dimensionieren:

Zur Dimensionierung des Kondensators C_OFF = C_10 und des Widerstandes R_OFF = R_32 gibt das Datenblatt vor:

und der Zuweisung R_OFF = R_32 = 390Ω bzw. C_OFF = C_10 = 100nF lässt sich mit der nachfolgenden Formel, die Ausschaltzeit der Stromregelung berechnen:

eingesetzt in t_OFF ergibt sich:

mit t_DT = 1μs ergibt sich:

Mikrocontroller

Zur Ansteuerung der einzelnen Funktionen des L6208 wird ein Arduino Nano verwendet. Da dieser bereits fertig aufgebaut ist, entfallen hier Planungen zum Aufbau einer Mikrocontroller-Schaltung. Bei der Auswahl ist zu beachten, dass der Mikrocontroller über eine ausreichende Anzahl von Ports verfügt. Da es sich bei den zum Schrittmotortreiber gehenden und von der Winkelsensorik kommenden Signalen um rein digitale Signale handelt, kann auf den Einsatz analoger Ports verzichtet werden.

Um sich auf einen Mikrocontroller festzulegen, musste im Vorfeld festgestellt werden, welcher Mikrocontroller die nötige Anzahl an I/O-Ports aufweist. Aufgrund der Port-Anzahl fiel die Entscheidung für einen Arduino NANO. Ein Arduino-UNO weist zwar die gleiche Anzahl an Ports auf und besitzt ebenfalls einen ATmega328 als Mikrocontroller, ist in den Abmaßen der Platine allerdings größer.

Die wesentlichen Technischen Spezifikationen sind in der nachfolgenden Tabelle aufgeführt.

Technische Spezifikationen des Arduino Nano

Galvanische Trennung

Wesentlicher Nachteil des aktuellen Aufbaues ist, dass keine galvanische Trennung zwischen der Leistungselektronik und dem Computer existiert. Sämtliche Komponenten, wie die Schrittmotorkarte, sind miteinander über ein RS485 Bussystem miteinander verbunden. Auch die Kommunikation der Karten mit dem Computer erfolgt über ein Konverterkabel ohne Potentialtrennung. Dies führt dazu, dass z.B. ein Betrieb der Steuerkarten mit Verbindung des Konverterkabels zu einem Notebooks nicht möglich ist. Der Hersteller begründet  dies mit einer bestehenden Masseverbindung der Komponenten untereinander, wodurch beim Aufladen des Notebooks ein Wechselstrom über die USB-Schnittstelle fließen würde, der somit auch die Schrittmotorkarten zerstört.

Um solche Effekte bei der Prototypenplatine zu verhindern, ist zwischen dem Mikrocontroller und dem L6208 eine galvanische Trennung realisiert. Sämtliche Signale vom und zum Arduino Nano werden über zehn Optokoppler in jeweils drei Optokoppler- Bausteinen potentialmäßig getrennt. Beim Optokoppler handelt es sich um den CNY 74-4H der Firma Vishay Semiconductors.

Berechnung des Vorwiderstandes der Optokoppler LED bei einem Strom I = 10mA , einer Spannung von U_v = 5V und einem Spannungsabfall an der LED von U_LED = 1, 3V :

Laut Berechnung kann ein Vorwiderstand von R_v = 390Ω verbaut werden. Dies gilt sowohl für die Seite vom Arduino als auch für die Seite vom Schrittmotortreiber (Widerstände R16 – R23).

Der Arbeitswiderstand R_A ist durch die Werte Betriebsspannung am Ausgang V_CC = 5V , dem Sicherheitsfaktor SF = 5, dem Strom durch die LED I_LED = 10mA und dem minimalen Stromübertragungsfaktor CTR = 0, 60 gegeben.

DC/DC Wandler

Da sich auf der Schrittmotortreiberplatine Bauteile befinden, die eine +5V Spannungsversorgung benötigen und diese standardmäßig durch den Schrittmotortreiber nicht zur Verfügung gestellt wird, muss diese Spannung durch einen DC/DC-Wandler aus den +24V erzeugt werden.

Dem Datenblatt kann die Beschaltung des DC/DC-Wandlers entnommen werden. Am Eingang des Wandlers ist ein Elektrolytkondensator mit 47μF und am Ausgang ein 100μF Elektrolytkondensator verbaut. Parallel zum Kondensator C8 ist eine POWER ON LED verbaut um den Betrieb der Platine zu signalisieren. Der Vorwiderstand der LED ergibt sich bei einer Versorgungsspannung von U = 5V , einem Spannungsabfall an der LED von U_LED = 1, 3V und einem Strom durch die LED von I_LED = 10mA zu:

Für die LED ist entsprechend den Berechnungen ein Vorwiderstand von R_29 = 390Ω verbaut.

Um den Wandler nicht zu überlasten, ist eine Leistungsbilanz mit allen +5V Verbrauchern auf der Platine erstellt worden. Der maximale Ausgangsstrom des DC/DC-Wandlers beträgt laut Datenblatt I_OUT = 500mA.

Gesamtstromverbrauch am DC/DC-Wandler

Schaltplanlayout

Nachdem in den vorherigen Kapitel die Bauteilwerte bestimmt wurden, kann aus dem Applikationsbeispiel die Erstellung des Schaltplanes erfolgen. Zur Erstellung des Schaltplanlayouts wurde die Computer-aided-Design (CAD) Software EAGLE der Firma Cadsoft verwendet. Aus dem Schaltplan lässt sich das eigentliche Platinenlayout erstellen und aufbauen. Da die Hochschule Hannover über eine eigene Fräse zur Erstellung von Platinen verfügt, wurde der erste Prototyp dahingehend aufgebaut.

Schaltplan der Schrittmotortreiber Platine

Der zweite Schaltplan in der nachfolgenden Abbildung, zeigt den Aufbau der Mikrocontroller Platine, bestehend aus dem Mikrocontroller Arduino Nano und einem weiterem Optokoppler vom Typ CNY 74-4H der Firma Vishay Semiconductors. Die Mikrocontroller Platine dient zur Auswertung der Winkelsensorik Signale sowie zum Senden und Empfangen von und zum PC. Der Mikrocontroller erzeugt die notwendigen Signale für den Schrittmotortreiber. Durch den weiteren Optokoppler auf der unteren Mikrocontroller Platine ist es möglich auch die Signale Control und Treiber Reset anzusteuern. Somit lassen sich sämtliche logischen Signale des Schrittmotortreibers ansteuern.

Schaltplan der Mikrocontroller Platine

Platinenlayout

Aus dem im vorherigen Kapitel erstellten Schaltplan, lässt sich mit EAGLE das Platinenlayout erzeugen.

In der oberen rechten Ecke der Platine, befindet sich die Schraubklemme für den Anschluss der 24V Versorgungsspannung. Auf der rechten Seite sind zwei Doppelklemmen angeordnet, an denen die zwei Phasen des Schrittmotors angeschlossen werden. Mittig in der rechten Hälfte der Platine befindet sich der Schrittmotortreiber, L6208N. Unter dem Schrittmotortreiber sind jeweils zwei mal vier Steckplätze für die Sensing-Widerstände vorgesehen. An der oberen Kante der Platine sind drei Klemmblöcke mit sechs Schraubklemmen platziert.

Platinenlayout

Die Klemmen versorgen die Winkelsensorik mit der +5V Versorgungsspannung und stellen den Digital Ground (DGND) zur Verfügung. Von der Winkelsensorik kommen die Signale für ChannelA, ChannelB und Index an. Eine Schraubklemme ist unbelegt. In der oberen linken Ecke befindet sich der DC/DC-Wandler zur Erzeugung der +5V Versorgungsspannung. Direkt darunter befinden sich zwei ICs mit den jeweils vier Optokopplern. Durch die Optokoppler wird die Platine in zwei unterschiedliche Masseflächen zur Potentialtrennung unterteilt. Analog Ground (AGND) ist die Massefläche links neben den Optokopplern, welche  auf dem gleichen Potential liegt wie der Mikrocontroller. Die Massefläche DGND befindet sich rechts der Optokoppler. Eine dritte Massefläche auf der Seite des L6208 dient dazu, die Sensing-Widerstände mit einer direkten Masseverbindung zur GND Versorgungsklemme zu verbinden. Die beiden Masseflächen GND und DGND werden in einem Punkt an der Versorgungsspannungsklemme zusammengeführt.  Auf der linken Seite der Platine befindet sich der Verbindungsstecker zur Mikrocontroller-Platine.

Platinenlayout – Top Layer und Bottom Layer Ansicht

Fertig aufgebaute Platine

In der nachfolgenden Abbildung ist die fertig aufgebaute Platine dargestellt. Der eigentliche Aufbau besteht dabei aus zwei Platinen. Die obere beinhaltet die 24V Spannungsversorgung, die Anschlüsse für den Bipolaren Schrittmotor, die Anschlüsse für die Winkelsensorik, den eigentlichen Leistungstreiber L6208N, mit montiertem Kühlkörper, der aus zwei Optokopplern bestehenden galvanischen Trennung und einem 20-poligen Flachbandkabel Steckverbinder, über den die Kommunikation mit dem Mikrocontroller auf der unteren Platine sichergestellt wird.

Die wichtigsten Bauteile der Schrittmotortreiber Platine bzw. Mikrocontroller-Platine, sind in den nachfolgenden Abbildungen durchnummeriert. Die entsprechende Zuordnung findet sich in den beiden Tabellen.

Beschreibung der Bauteile auf der Schrittmotortreiber Platine
Beschreibung der oberen Platine
Beschreibung der Bauteile auf der Mikrocontroller Platine

Auf der Mikrocontroller Platine befindet sich der Arduino Nano mit der Micro USB-Schnittstelle. Über den Mikrocontroller folgt die Auswertung und Erzeugung der über das 20-polige Flachbandkabel ankommenden bzw. abgehenden Signale. Um sämtliche logischen Signale des L6208 ansteuern zu können, wurde auf der unteren Platine ein dritter Optokoppler aufgebaut. Dieser dient zum ansteuern der Signale CONTROL und RESET.

Beschreibung der unteren Platine

Softwareaufbau

Zur Ansteuerung des Schrittmotortreibers L6208 wird ein Mikrocontroller-Board eingesetzt. Allein durch diese elektronische Verbindung würde die Platine nicht funktionsfähig sein. Für die serielle Kommunikation mit dem PC, dem Auswerten der Winkelsensorik und dem Erzeugen der logischen Signale für den Treiberbaustein wird eine Software auf den Flash-Speicher des Mikrocontrollers gespielt. Wird an den Mikrocontroller die Versorgungsspannung angelegt, startet der integrierte Bootloader und ermöglicht so die Ausführung der einzelnen Funktionen.

Zur Implementierung der Software auf den Arduino Nano wird die Integrierte Entwicklungsumgebung Arduino Integrated Development Environment (IDE) verwendet, wobei die Software in der Programmiersprache C oder C++ entwickelt werden kann. Als Compiler wird GNU Compiler Collection (GCC) verwendet. Zusätzlich können externe Bibliotheken eingebunden werden.

Für ein funktionsfähiges Arduino Programm müssen zwei Funktionen definiert werden, setup() und loop(). Die Setuproutine setup() wird beim Start des Programms, entweder nach dem Übertragen auf das Arduino Board oder nach drücken des Reset-Tasters aufgerufen um z.B. Pins als Ein- oder Ausgang zu deklarieren. Das Hauptprogramm wird durchgehend durchlaufen, so lange das Arduino Board eingeschaltet ist. Die nachfolgenden Kapitel enthalten den Programmablaufplan der implementierten Software sowie eine Erläuterung zu den wichtigsten Funktionen der Software.

Programmablaufplan

Die nachfolgende Abbildung zeigt den Aufbau der entwickelten Software in Form eines Programmablaufplans. Nach dem Anlegen der Versorgungsspannung, einem Reset des Mikrocontrollers oder dem Aufrufen des seriellen Monitors werden zuerst nach dem START benötigte Softwarebibliotheken geladen. Hierzu gehören neben den Standardbibliotheken auch die Bibliothek Encoder.h und AccelStepper.h. Die Bibliothek Encoder.h übernimmt die Auswertung der Winkelsensorik. Die Bibliothek AccelStepper.h übernimmt aus den vorgegebenen Parametern Geschwindigkeit, Beschleunigung und Zielposition, die entsprechende Erzeugung von Beschleunigungs- und Bremsrampen.

Programmablaufplan der Software

In der Setup Routine werden die Ports des Mikrocontrollers als Ein- oder Ausgänge deklariert. Des Weiteren wird eine serielle Schnittstelle mit einer Baudrate von 115200 Baud geöffnet, über die später die Kommunikation mit dem Computer erfolgt.

Da zu Testzwecken auch eine Bedienung des Schrittmotors über ein Terminal möglich sein soll, z.B. der in der Arduino IDE integrierte Serielle Monitor, wird hierfür über die serielle Schnittstelle ein entsprechendes Hilfe Menü mit den möglichen Befehlen im Terminal eingeblendet.

Um den Schrittmotortreiber in einen definierten Zustand zu bringen, wird dieser Standardmäßig zum Start des Programms in den Halbschrittmodus geschaltet. Dies geschieht durch Aufruf der Funktion HalfStep().

Initialisierungsprogramm

Die Setuproutine setup() beinhaltet die Parametrisierung und den Aufbau der Kommunikationsschnittstelle mit dem PC. In ihr werden die Ports des Arduino Nano als Eingänge (INPUT) oder Ausgänge (OUTPUT) definiert. Nach dem anlegen der Versorgungsspannung erfolgt standardmäßig die Anzeige eines Hilfe Menüs, in dem die möglichen Befehle und Parameter zur Eingabe angezeigt werden. Die Aus- und Eingabe erfolgt über den Seriellen Monitor in der Arduino IDE. Nach dem Aufrufen der Hilfsoptionen wird der L6208 standardmäßig in den Halbschrittbetrieb geschaltet. Dies geschieht durch den Aufruf der Funktion HalfStep(). Ein Wechsel der Betriebsart, z.B. Vollschritt oder Waveschritt Modus, ist ebenfalls über den seriellen Monitor möglich.

Hauptprogramm

Das Hauptprogramm loop() in der Software, beinhaltet die Funktionen zum Erzeugen der Drehbewegung des Schrittmotors durch die Bibliothek AccelStepper. Da jeder Durchlauf der loop() Schleife einem Schritt am Schrittmotor entspricht, ist darauf zu achten, dass die Hauptschleife möglichst schnell durchlaufen wird. Aufwendige Berechnungen und Funktionen zur Kommunikation sind in externe Funktionen ausgelagert und werden nur bei Bedarf aufgerufen.

Weitere Funktionen

Im folgenden werden einzelne Funktionen der Software auf dem Mikrocontroller genauer erläutert. Hierzu zählt die Funktion zum Auslesen der Encoder, die Funktion zur Auswahl der einzelnen Schrittmotormodi (FullStep, HalfStep, WaveStep), die Kommunikation über die serielle Schnittstelle und die Anwendung der Bibliothek AccelStepper.

Auswertung der Encoder

Da es wichtig ist, dass die Software zu jedem Zeitpunkt die genau Position des Gelenks zur Verfügung hat, ist eine exakte Überwachung des Encoders notwendig. Um einen möglichen Schrittverlust zu verhindern, sind die beiden Encodersignale (ChannelA und ChannelB) an die Interrupt Pins (2, 3) des Arduino Nano angeschlossen. Hierdurch wird gewährleistet, dass bei jeder Bewegung des Gelenks eine Auswertung der Winkelsensorik stattfindet. Wird eine Bewegung detektiert, so wird die entsprechende Interrupt Service Routine (ISR) aufgerufen. Dies erfolgt bei jeder Zustandsänderung am ChannelA oder ChannelB der Winkelsensorik. Die Auswertung findet ausgelagert in einer Header Datei (Encoder.h) statt, welche im Kopf des Arduino Programms eingebunden wird. In der Software lässt sich mit dem Befehl myEnc.read() der aktuelle Encoder Wert abrufen. Über den Befehl myEnc.write(), kann der Encoder z.B. auf Null gesetzt werden. Um im Seriellen Monitor die aktuelle Position der Winkelsensorik zu erhalten, lässt sich diese mit >P000< im Terminal ausgeben.

Auswahl der Schrittmotormodi

 

Anwendung der Bibliothek AccelStepper

Die AccelStepper Bibliothek ist eine fertige Bibliothek zur Ansteuerung von unterschiedlichen Schrittmotortypen. Durch die Bibliothek werden Unterstützungen für so genannte zwei- oder drei-Draht-Interfaces sowie Driver unterstützt. Gemeint ist damit die Ansteuerung von integrierten Treiber-Bausteinen wie dem L6208, über ein Takt- (CLOCK), sowie Richtungssignal (CwCCW). DesWeiteren lassen sich eigene Interface-Definitionen einführen. Wie aus dem Namen der Bibliothek erkennbar wird, unterstützt diese auch das erzeugen von Beschleunigungs- und Bremsrampen. Über die Bibliothek können zudem mehrere Motoren gleichzeitig angesteuert werden.

Serielle Schnittstelle

Die Arduino IDE ermöglicht mit der Funktion serialEvent(), die Verarbeitung eingehender serieller Zeichen 2. Existiert eine serialEvent() Funktion im Sketch, wird diese nach jedem Durchlauf innerhalb der loop Funktion einmal aufgerufen und die an der seriellen Schnittstelle anliegenden Daten eingelesen.

Durch das zwischenspeichern der Daten in einen Buffer, kann auf diese zu einem späteren Zeitpunkt zugegriffen werden. Verwendet wird als Speicher für die serielle Kommunikation ein Array, welches die ankommenden Daten speichert und mitzählt.

Kommt ein Zeichen mit dem ASCII Code 13, Carriage Return (CR), zu deutsch Zeilenendezeichen, betrachtet man die Datenübertragung als abgeschlossen. Um die ankommenden Daten auszuwerten, werden diese an die Funktion void evalSerialData() übergeben. In dieser Funktion werden die ankommenden Befehle interpretiert. Um verschiedene Daten übertragen und Befehle ausführen zu können, ist ein entsprechendes Protokoll definiert. Um die entsprechenden Daten oder den Befehl auf Richtigkeit zu überprüfen, wurde ein Anfangszeichen (>) und Endezeichen (<) definiert.

Im ersten Teil der Funktion void evalSerialData() werden die Daten auf Richtigkeit hin überprüft. Mithilfe einer switch() Anweisung, lässt sich der Inhalt der betrachteten Variablen (hier das Array Element buffer[1]), behandeln. Für jeden Zustand existiert eine case ”: Anweisung in der entsprechend weitere Funktionen aufgerufen werden und die durch ein break abgeschlossen wird. Bei der Umrechnung der Zeichen in Zahlenwerte, wird berücksichtigt, dass eine 1 als ASCII 49 geschickt wird. Um den nummerischen Wert zu erhalten, muss vom ASCII Wert 48 abgezogen werden.

Auswertung

In diesem Kapitel werden die unterschiedlichen Ansteuerarten näher analysiert. Der Schrittmotortreiber wird dabei in seinen drei möglichen Modi betreiben: Vollschrittmodus, Halbschrittmodus undWaveschrittmodus. Die Signale an den Motorklemmen werden mittels eines Differentialtastkopfes erfasst und auf dem Oszilloskop dargestellt. Aus den aufgezeichneten Oszillogrammen können vergleiche zu den Beispielbildern aus dem Datenblatt genommen werden.

DesWeiteren wird die Platine auf ihre Eigenschaften im laufenden Betrieb untersucht. Hierzu wurde ein einfaches Testprogramm geschrieben, welches ermöglicht einen Voll-, Halbschritt oder Waveschritt Betrieb durchzuführen. Der Motor dreht sich dabei mit einer konstanten Drehzahl um die unterschiedlichen Daten miteinander vergleichen zu können.

Vollschrittbetrieb

Um genauere Aussagen über den späteren Betrieb der Schrittmotorplatine treffen zu können wurde die Platine einem fünf-minütigen Dauerbetrieb unterzogen. Als Betriebsart wurde der Vollschrittmodus ausgewählt und der Motor mit einer konstanten Drehzahl gedreht. Während der Messung wurden alle zehn Sekunden die Temperatur am Kühlkörper des L6208N ICs in einer Tabelle erfasst und graphisch ausgewertet. Als Messgerät wurde ein digitales Multimeter (MASTECH MS8229) mit einem temperaturabhängigen Widerstand als Sensor verwendet. Der Kühlkörper ist vom Typ ICK 24 B und besitzt einen Wärmewiderstand von 19, 4K/W. Zur Verbindung des Kühlkörpers mit dem IC wird eine Wärmeleitfolie vom Typ WL Folie 404 11, mit einem Wärmewiderstand von 2, 7K/W eingesetzt.

Die nachfolgende Abbildung zeigt die aufgezeichneten Daten. Zum Vergleich wurde in das Diagramm die Raumtemperatur (grüne Linie) und die maximale Juction Temperatur des ICs eingetragen. Die rote Kurve zeigt die Temperatur am Kühlkörper des ICs. Zum Start der Messung betrug die Raumtemperatur und die Temperatur des ICs 21 Grad Celsius. Nach einer Messdauer von fünf Minuten ist die Temperatur auf 81 Grad Celsius angestiegen. Die maximale Junction Temperatur des ICs beträgt 125 Grad Celsius. Aus den Messwerten wird deutlich, dass innerhalb kurzer Zeit, dass IC einen beachtlichen Temperaturanstieg aufweist. Des Weiteren sind die Messwerte insofern als kritisch zu betrachten, dass die Prototypenplatine unter Laborbedingungen betrieben wird. Das heißt, dass aktuell kein Gehäuse um die Platine besteht und somit die Umgebungsluft frei um die  Platine und den Kühlkörper zirkulieren kann. Insofern sind für einen späteren fest in ein Gehäuse eingebauten dauerhaften Betrieb, ausreichende Maßnahmen zur Kühlung der Platine erforderlich. Entweder durch einen ausreichend groß dimensionierten Kühlkörper oder durch eine aktive Kühlung mit einem Lüfter.

Temperaturmessung am Kühlkörper des L6208

Die Auswahl des Vollschrittbetriebes erfolgt nach dem in Kapitel 4.4.2 beschriebenen Ansteuerverfahren. Durch dieses Ansteuerverfahren folgt der Sequenz-Generator einer genauen Abfolge, welche sich als Zustandsautomat darstellen lässt. Der Zustandsautomat ist in Abbildung 5.2 dargestellt. Durch einen Reset des Treibers wird der Zustandsautomat in den Ausgangszustand gebracht (Zustand 1). Über das an dem HALF/FULL Logikeingang angelegte LOW Signal befindet sich der Treiber im Vollschrittmodus. Mit jeder steigenden Flanke des CLOCK Signals bewegt sich der Zustandsautomat in den nächsten Zustand. Die Reihenfolge ergibt sich nach Abbildung 5.2. Die Drehrichtung wird durch das CW/CCW Logiksignal vorgegeben.

Zustandsautomat Vollschritt Modus

Um das Verhalten des Motors auf die Ansteuerung durch den Schrittmotor beurteilen zu können, werden die Signale an einer der Phasen untersucht. Über einen Differentialtastkopf, werden die Signale an der Phase zum Motor aufgenommen, mit dem zweiten Tastkopf wird  der Spannungsabfall über einem Sensing Widerstand der gleichen Brücke aufgezeichnet. Das nachfolgende Oszillogramm (vgl. Abbildung 5.3) zeigt die Regelung durch die interne PWM Stromregelung des L6208.

Betrieb mit Strombegrenzung, Kanal1 = IoutA, Kanal 2 = IoutB

Im L6208 existieren für jeden der beiden Brücken, eine PWM Stromregelung mit fester Ausschaltzeit. Der Stromregler-Schaltkreis erfasst dabei den Brückenstrom, indem der Spannungsabfall über den Sensing-Widerständen gemessen wird. Die Sensing-Widerstände sind auf der einen Seite mit der Power-MOS-Brücke und auf anderen Seite mit Masse verbunden. Wenn sich der Strom in den Motoren aufbaut, steig proportional dazu die Spannung über den Sensing-Widerständen. Wird der Spannungsabfall über den Widerständen größer als die Referenzspannung an den Eingängen V_REFA bzw. V_REFB, werden über einen Komparator die beiden Referenzspannungen miteinander verglichen und ggf. ein FlipFlop angesteuert, das die Brücken abschaltet. Die Ausschaltzeit der Power-MOS-Brücke wird über das Flip- Flop geregelt und der Stromabbau im Motor erfolgt jeweils nach dem eingestellten Decay Mode. Wenn die Zeit des FlipFlops abläuft, werden die Brücken eingeschaltet. Mithilfe dieser Regelung kann der Strom in den Motoren begrenzt werden.

Im Vollschrittbetrieb werden immer zwei benachbarte Ankerspulen vom Strom durchflossen, damit sich der Rotor mittig zwischen den Polachsen ausrichtet, wodurch sich ein sehr hohes Drehmoment realisieren lässt. Wenn sich der Motor im Uhrzeigersinn dreht, folgt er mit jedem Takt Signal der Reihenfolge 1, 3, 5, 7 im Zustandsautomaten. Dreht sich der Schrittmotor gegen den Uhrzeigersinn, erfolgt die Reihenfolge umgekehrt 1, 7, 5, 3.

Das Oszillogramm in der nachfolgenden Abbildung zeigt den Betrieb im Vollschrittbetrieb. Anhand des Datenblattes, lässt sich der aufgezeichnete Verlauf verifizieren.

Vollschrittmodus, Kanal 1 = IoutA, Kanal 2 = IoutB

Halbschrittbetrieb

Im Halbschrittmodus wird zwischen zwei Vollschrittpositionen nur eine Ankerspule mit Strom versorgt, so dass gegenüber dem Vollschrittmodus ein weiterer Zwischenschritt eingebaut wird. Um auf die gleiche Position wie im Vollschrittmodus zu kommen, muss im Halbschrittmodus die doppelte Anzahl an Schritten (Takten) durchlaufen werden. Vorteil dieser Ansteuerart ist: Durch die Halbierung der Schrittweite, kann ein ruhiger, gleichmäßiger Lauf des Motors erzielt werden. Nachteil des Halbschrittmodus ist, das durch das Bestromen von nur einer Spule, dass resultierende Drehmoment geringer ist als im Vollschrittmodus.

Zustandsautomat Halbschritt Modus

Dreht sich der Motor im Uhrzeigersinn, so folgt er mit jedem Taktsignal dem Schema 1, 2, 3, 4, 5, 6, 7, 8 des Zustandsautomaten. Gegen den Uhrzeigersinn folglich 1, 8, 7, 6, 5, 4, 3, 2.

In der nachfolgenden Abbildung ist das aufgezeichnete Oszillogramm für den Halbschrittbetrieb dargestellt. Der Vergleich mit dem Verlauf aus dem Datenblatt des L6208 zeigt, dass die Verläufe aus der Ansteuerung im Halbschrittbetrieb mit den Vorgaben aus dem Datenblatt übereinstimmen.

Halbschritt Modus, Kanal 1 = IoutA, Kanal 2 = IoutB

Wave-Drive-Betrieb

Im Wave-Drive Betrieb, wird nur eine Ankerspule bestromt. Hieraus ergibt sich das gleiche Schritt-Verhalten wie im Vollschrittbetrieb. Eine genauere Schrittauflösung ist in dieser Betriebsart nicht möglich. Nachteil dieser Ansteuervariante ist, dass durch das Bestromen von nur einer Spule ein geringeres Drehmoment anliegt als beim Betrieb im Vollschrittmodus.

Zustandsautomat Waveschritt Modus

In der Abbildung Zustandsautomat Waveschritt Modus ist der Zustandsautomat für den Wave-Drive Betrieb dargestellt. Nach dem Startzustand 1 folgt der Zustandsautomat mit jedem Taktsignal der Reihenfolge 2, 4, 6, 8, im Uhrzeigersinn, bzw. 8, 6, 4, 2, gegen den Uhrzeigersinn.

Die nachfolgende Abbildung zeigt das entsprechende Oszillogramm für den Wave-Drive Betrieb.

Waveschritt Modus, Kanal 1 = IoutA, Kanal 2 = IoutB

Ursachen des Laufverhaltens

Die in der Auswertung dargestellten Betriebsarten ermöglichen eine Veränderung der Schrittweite. So lässt sich durch den Betrieb im Halbschritt, die Anzahl der Schritt pro Umdrehung erhöhen. Hierdurch ergibt sich eine höhere Positioniergenauigkeit des Motors. Durch die Veränderung der Betriebsart lässt sich zum einen die Genauigkeit des Motors im Betrieb beeinflussen, zum anderen ergeben sich dadurch Auswirkungen auf das Laufverhalten des Schrittmotors.

Unruhiges Laufverhalten wird bei Schrittmotoren durch das Drehmoment hervorgerufen. Sobald an den Motorwicklungen die Spannung angelegt wird, steigt der Strom in den Windungen entsprechend der Induktivität an und der Motor dreht sich um einen Schritt weiter. Erreicht der Motor die nächste Schrittposition, geht das Drehmoment gegen null. Da die angekoppelte bewegte Masse, sich durch die Massenträgheit noch geringfügig weiter bewegt, pendelt der Motor entsprechend der mechanischen Dämpfung kurz um die nächste Schrittposition. Der Schrittmotor stellt durch diese Eigenschaft ein (unerwünschtes) Schwingungsfähiges Gebilde, entsprechend der magnetischen Federkraft und der kinetischen Bewegungsenergie von Rotor und Last dar. Daraus wiederum folgt, dass es Anregungsfrequenzen gibt, bei denen mechanische Resonanzen auftreten. Diese Resonanzfrequenz hängen auch von der der Masse der Last ab. Vermindern lassen sich unerwünschte Schwingungen durch das sogenannte Micro Stepping, bei dem während der Rotation der Motorstrom Zwischenwerte entsprechend einem Sinusförmigen Verlauf des Motorstroms annimmt. Dadurch werden Resonanzen deutlich schwächer angeregt. Die Positioniergenauigkeit des Motors wird durch diese Art der Ansteuerung nicht zwangsweise verbessert, obwohl sich durch diese Art der Ansteuerung weitere Zwischenschritte ergeben.

Schreibe einen Kommentar

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