Inhaltsverzeichnis:

Einen Schrittmotor mit einem AVR-Mikroprozessor antreiben - Gunook
Einen Schrittmotor mit einem AVR-Mikroprozessor antreiben - Gunook

Video: Einen Schrittmotor mit einem AVR-Mikroprozessor antreiben - Gunook

Video: Einen Schrittmotor mit einem AVR-Mikroprozessor antreiben - Gunook
Video: Schrittmotor Treiber mit dem Arduino UNO richtig verwenden! | #EdisTechlab #nema17 2024, Juli
Anonim
Antrieb eines Schrittmotors mit einem AVR-Mikroprozessor
Antrieb eines Schrittmotors mit einem AVR-Mikroprozessor

Haben Sie einige gesäuberte Schrittmotoren von Druckern/Plattenlaufwerken/etc herumliegen?

Einige Sondierungen mit einem Ohmmeter, gefolgt von einem einfachen Treibercode auf Ihrem Mikroprozessor, und Sie werden mit Stil eintreten.

Schritt 1: Stepper kennenlernen

Lernen Sie Stepper kennen
Lernen Sie Stepper kennen
Lernen Sie Stepper kennen
Lernen Sie Stepper kennen

Grundsätzlich müssen Sie herausfinden, wohin all die kleinen Drähte gehen.

Der erste Schritt besteht darin, herauszufinden, ob es sich um einen unipolaren oder bipolaren Motor handelt. Werfen Sie einen Blick auf Jones on Steppers, um einen tieferen Hintergrund zu erhalten, und dann auf Ian Harries' Site, um eine einfache Methode zu finden, um einen unbekannten Motor herauszufinden. Lesen Sie sich ein wenig durch und machen Sie dann mit mir eine exemplarische Vorgehensweise zu diesem Motor, den ich günstig bekommen habe. (Sie sind gerade für 0,99 $ im Angebot. Sie sind klein, relativ leicht, haben aber nicht viel Drehmoment. Ich weiß noch nicht, wofür sie gut sein werden.)

Schritt 2: Gemeinsame Masse finden

Gemeinsamkeit finden
Gemeinsamkeit finden
Gemeinsamkeit finden
Gemeinsamkeit finden

Sie haben also fünf (oder vier oder sechs) Drähte. Ihr Motor wird zwei Hälften haben, und Sie können wahrscheinlich sogar feststellen, zu welcher Seite jeder Draht gehört.

Wenn Sie nur vier Drähte betrachten, haben Sie Glück - es ist ein bipolarer Motor. Alles, was Sie tun müssen, ist herauszufinden, welche beiden Kabelpaare zusammenpassen. Wenn Sie einen unipolaren Motor oder mehr als 4 Drähte haben, müssen Sie Ihr Ohmmeter ausbrechen. Was Sie suchen, ist der gemeinsame (Masse-) Draht für jede Hälfte. Sie können erkennen, welche Masse in einem bipolaren Motor geerdet ist, da er gegen einen der Pole den halben Widerstand hat als die Pole über sich selbst. Abgebildet sind meine Notizen vom Anschließen von Drähten an Drähte und dem Notieren des Widerstands (oder wenn sie überhaupt verbunden sind). Sie können sehen, dass Weiß der Boden für das unterste Trio b/c ist, es hat den halben Widerstand gegen Rot oder Blau, den sie zueinander haben. (Dieser Motor ist seltsam und hat keinen Mittelabgriff an der oberen Magnetspule. Es ist, als wäre er halb bipolar, halb unipolar. Vielleicht könnten Sie dies verwenden, um die Drehung in der Rot-Weiß-Blau-Spule zu erfassen, wenn die Schwarz-Gelb Spule wird angetrieben.)

Schritt 3: Ermitteln Sie die Schrittreihenfolge

Finde die Schrittreihenfolge heraus
Finde die Schrittreihenfolge heraus

Ich wollte diesen Motor als bipolaren Motor fahren, also ignoriere ich das weiße Massekabel. Ich habe nur vier Drähte, um die ich mir Sorgen machen muss.

Möglicherweise möchten Sie Ihren unipolaren Motor sowieso bipolar betreiben, da er die gesamte Spule in beiden Phasen verwendet, anstatt zwischen den beiden Hälften jeder Spule abzuwechseln. Mehr Spule = mehr Drehmoment. Lassen Sie Strom durch ein Paar (beachten Sie die von Ihnen gewählte Polarität) und lassen Sie dann gleichzeitig Strom durch das andere Paar. Achten Sie beim Anschließen des zweiten Paars darauf, in welche Richtung sich der Motor dreht. Schreib das auf. Vertauschen Sie nun die Polarität am ersten Paar, das Sie ausgewählt haben. Schließen Sie dann das zweite Paar wieder mit umgekehrter Polarität an. Beachten Sie die Richtung. Daraus sollten Sie in der Lage sein, die Reihenfolge zum Drehen des Motors in beide Richtungen herauszufinden. In meinem Beispiel drehten sich beide gegen den Uhrzeigersinn. Wenn Sie also die Sequenz auf die gleiche Weise durchlaufen, die ich gewählt habe, wird der Motor gegen den Uhrzeigersinn geschaltet.

Schritt 4: Nehmen Sie den Motor für eine Probefahrt

Mit dem Motor zur Probefahrt
Mit dem Motor zur Probefahrt

Wenn Sie noch nicht mit der Programmierung von Mikroprozessoren vertraut sind, könnten Sie schlechter abschneiden als das Ghetto Development Kit oder einer der verschiedenen PIC-Programmierer. Schließen Sie die Drähte direkt an Ihren Microproc an und verbrennen Sie ihn mit dem folgenden Code:

/* Spielen damit, die kleinen Schrittmotoren anzutreiben. */

/* Verzögerungsfunktion einschließen */ #define F_CPU 1000000UL #include /* Pin-Defs für ATTiny2313 */ /* Reihenfolge im Uhrzeigersinn */ #define BLUE _BV(PB0) #define BLACK _BV(PB1) #define ROT _BV(PB2) #define YELLOW _BV(PB3) #define DELAY 200 /* Millisekunden zwischen den Schritten */ int main(void){ DDRB = 0xff; /* Ausgabe an allen B-Pins aktivieren */ PORTB = 0x00; /* Setze sie alle auf 0v */ while(1){ /* Hauptschleife hier */ PORTB = BLUE; _verzögerung_ms (VERZÖGERUNG); PORTB = SCHWARZ; _verzögerung_ms (VERZÖGERUNG); PORTB = ROT; _verzögerung_ms (VERZÖGERUNG); PORTB = GELB; _verzögerung_ms (VERZÖGERUNG); } } Wie einfach ist dieser Code? Wirklich einfach. Alles, was es tut, ist, einige nette Definitionen zu machen, damit ich die Drähte nach Farbe anstatt nach ihren Pin-Namen beziehen kann, und dann schaltet es sie nacheinander mit einer einstellbaren Verzögerung dazwischen ein. Für den Anfang habe ich eine Verzögerung von einer halben Sekunde zwischen den Schritten ausgewählt. Sehen Sie das kurze Video für die Ergebnisse. Wenn Sie wirklich fit sind, zählen Sie die Anzahl der Schritte pro Zyklus, um die Einzelschritt-Winkelauflösung des Motors zu ermitteln. (Oh ja. PS. Läuft problemlos ohne Last bei 3,6 V. Siehe Batterie im Video.)

Schritt 5: Schwingen Sie es hin und her

Sie haben es also im Uhrzeigersinn laufen lassen. Etwas Interessanteres? Eine kleine Code-Bereinigung, und wir können es hin und her laufen lassen. Ich habe die Sequenz im Uhrzeigersinn in ein Array eingefügt, damit Sie mit einer einfachen for-Schleife durch die Phasen gehen können. Jetzt können Sie die Schleife nach oben oder unten laufen lassen, um im oder gegen den Uhrzeigersinn zu gehen.

int main (void) { const uint8_t delay = 50; const uint8_t im Uhrzeigersinn = {BLAU, SCHWARZ, ROT, GELB}; uint8_t i; DDRB = 0xff; /* Ausgabe an allen B-Pins aktivieren */ PORTB = 0x00; /* Setze sie alle auf 0v */ while(1){ /* Hauptschleife hier */ for (i=0; i<=3; i++){ /* Schritt durch die Farben im Uhrzeigersinn */ PORTB = im Uhrzeigersinn; _delay_ms (Verzögerung); } for (i=3; i>=0; i--){/* Schritt durch die Farben ccw */ PORTB = im Uhrzeigersinn; _delay_ms (Verzögerung); } }} Sehen Sie das rasante Video für das Hin und Her.

Schritt 6: Ich mache nie einen Halbschritt, weil ich kein Halbschritt bin …

Abgesehen von der Quest-Lyrik ist es, wenn Sie Ihren Motor halb antreten. Sie erhalten mehr Spitzenstrom, mehr Momentandrehmoment und die doppelte Winkelauflösung. Halber Schritt auf den Punkt gebracht: Statt Blau, Schwarz, Rot, Gelb treiben Sie den Motor mit Blau, Blau+Schwarz, Schwarz, Schwarz+Rot, Rot, Rot+Gelb, Gelb, Gelb+Blau an. Das Ergebnis ist, dass Sie für die Hälfte der Zeit beide Magnete gleichzeitig angreifen. Und während der Zeit, in der beide Sätze aktiviert sind, zeigt der Motor auf halbem Weg zwischen den beiden, wodurch der Winkel zwischen den "Schritten" kleiner wird und der Motor ruhiger läuft. Kannst du aus dem Video sagen? Ich bin mir nicht sicher… Nun sieht der Teil des Codes, der die Halbschritte ausführt, so aus:

Void HalfStepping (uint16_t Verzögerung, uint8_t Richtung) { uint8_t i; für (i=0; i<=3; i++){PORTB = Richtung; /* Single-Coil-Teil */ _delay_ms(delay); PORTB |= Richtung[i+1]; /* Halbschritt hinzufügen */ _delay_ms(delay); }} Der erste PORTB-Befehl setzt einen einzelnen Pol auf Plus und alle anderen auf Minus. Dann wartet es. Dann setzt der zweite PORTB-Befehl einen zweiten Pol (an der anderen Wicklung) auf Plus, wobei beide Wicklungen für das 1,4-fache des Drehmoments (und das 2-fache des Stroms) aktiviert werden. Eine vollständige Programmliste ist unten beigefügt. Jetzt sind zwei Arrays definiert (im Uhrzeigersinn, gegen den Uhrzeigersinn) und beide haben jeweils 5 Elemente, um den i+1-Eintrag in der halfStepping-Funktion zu ermöglichen.

Schritt 7: Einen Motortreiber hinzufügen

Einen Motortreiber hinzufügen
Einen Motortreiber hinzufügen
Einen Motortreiber hinzufügen
Einen Motortreiber hinzufügen
Einen Motortreiber hinzufügen
Einen Motortreiber hinzufügen

So weit, ist es gut.

Das einzige Problem ist, dass der Motor nicht so viel Drehmoment zu haben scheint, was daran liegen könnte, dass der Mikroprozessor nur ~ 50 mA pro Pin ausgibt. Der naheliegende nächste Schritt wäre, es an einen Motortreiber anzuschließen, um es mit mehr Saft zu versorgen. Aber dann ein bisschen nachdenken: Ich fahre es nur mit 5V und der Spulenwicklungswiderstand beträgt ~125 Ohm. Das bedeutet, dass der Motor nur 40 mA pro Pin zieht und er vom (starken!) AVR-Chip problemlos angesteuert werden sollte. Um den Motor mit mehr Spannung anzutreiben, habe ich ihn an einen SN754410 H-Brücken-Chip angeschlossen. Die Schaltung ist ziemlich einfach. Jeder Pin vom AVR geht an einen Eingang und die entsprechenden Ausgangspins gehen an den Motor. Der Chip benötigt 5 V für den Logikabschnitt und kann im Motorabschnitt viel mehr Spannung aufnehmen. Es hat ein wenig geholfen, es mit 11,25 V (drei 3,6 V-Batterien) zu betreiben. Spürbar mehr Drehmoment für meinen Finger, aber es ist immer noch kein Kraftpaket. Nicht schlecht für einen Motor, der kleiner als ein Nickel ist. Und jetzt ist die Schaltung ein universeller bipolarer Schrittmotortreiber. Hinzugefügt am 29. November: Habe den Motor letzte Nacht eine Weile mit 12 V laufen lassen und er wurde heiß. Ich bin mir nicht sicher, ob es ein Resonanzfrequenzproblem war oder ob es einfach zu viel Strom für die Wicklungen war. Seien Sie in jedem Fall etwas vorsichtig, wenn Sie diesen kleinen Motor mit größeren Spannungen fahren.

Schritt 8: Das Ende

Was habe ich also gelernt? Das Ansteuern eines Schrittmotors mit einem AVR (und einem H-Brücken-Chip) ist sogar im "fancy" Halbschrittmodus ziemlich einfach.

Ich bin mir aber noch nicht sicher, was ich mit den kleinen Schrittmotoren machen werde. Irgendwelche Vorschläge?

Empfohlen: