$ 5 Schrittmotorsteuerung

6 Schritt:Schritt 1: Andere Teile Schritt 2: Programmierung ATtiny. Schritt 3: Schrittcode. Schritt 4: Stromkreis Schritt 5: Echt Code Schritt 6: El Fin

$ 5 Schrittmotorsteuerung

$ 5 Schrittmotorsteuerung

$ 5 Schrittmotorsteuerung

Hinweis: Ich habe vor kurzem neu gestaltet und verbessert die Schrittmotor-Treiber, da diese keinen Mikro, Strombegrenzung, und ist anfällig für Richtung sprunghaft ändern. Die verbesserte Version ist hier: http://www.instructables.com/id/45-better-stepper-driver/

Ich wollte, um einen 3D-Drucker oder ein CNC für eine ganze Weile, aber so habe ich nicht viel Geld, noch kann ich häufig Komponenten bestellen online, ich in ein Hindernis lief immer. Fast alle Projekte erforderlich Schritttreiber mit Schritt-für Richtungssteuerung. Diese Arten von Teile sind nicht in den Geschäften avaliabe, und die billigste und am populärsten sind etwa 15 € pro Stück. Ich will das nicht fast so viel auf einer einzigen Komponente, die in einer zweiten braten könnte zu verbringen, so dass ich beschloss, etwas ein wenig billiger und entbehrlich zu machen. Ich landete der Entscheidung über Herstellung meiner Fahrer mit einem ATtiny und getrennte H-Brücken-Chip. Es verwendet einen ATtiny85 und die ständig gemeinsame L293 Motortreiber. zusammen, sie kosten weniger als € 5, und benötigen fast keine Hilfsschaltungen. Schritt 1: Andere Teile



$ 5 Schrittmotorsteuerung

$ 5 Schrittmotorsteuerung

$ 5 Schrittmotorsteuerung

Alle Teile mit Ausnahme des ATtiny und L293 sind optional, aber sehr zu empfehlen. In der Menge, die meisten kostet nur ein paar Cent.
1x> 47uf Kondensator-je größer desto besser
8x ~ 1k Ohm-Widerstand-doesn't müssen 1K, jeder Wert 330-2K2 wird wahrscheinlich zu arbeiten
1x 1N4001 Diode oder eine Diode, die> = 1 A, wieder nehmen können je größer desto besser
Lochrasterplatinen-könnten Sie Freiform, aber es ist am besten zu protoboard / perfboard verwenden.
Kopfbolzen-wenn Sie mit dem Fahrer Steckbrett oder machen es leicht zu ersetzen. Ich habe nicht mit ihnen, aber die in der Regel eine gute Idee, dies zu tun.
IC Sockel für die beiden Chips, eine 8-Pin, einen 16-Pin. Auch hier habe ich nicht verwenden Sie sie, aber sehr zu empfehlen.
Finially, benötigen Sie ein Arduino. Jeder Geschmack, hausgemachte oder was auch immer, solange es serielle und eine atmega es funktionieren wird. Schritt 2: Programmierung ATtiny.

$ 5 Schrittmotorsteuerung

$ 5 Schrittmotorsteuerung

Es ist schon viele, viele Male in anderen Tutorials gezeigt, und seine ziemlich einfach. Hier ist ein Link auf das Original Blog-Post über sie: http://toasterbotics.blogspot.com/2011/08/using-arduino-with-attinys.html dann hier: http://toasterbotics.blogspot.com/2011/08 /programming-attiny85-arduino-style.html
Nachdem Sie einige Test-Code läuft, gehen Sie zum nächsten Schritt. Schritt 3: Schrittcode.

$ 5 Schrittmotorsteuerung

$ 5 Schrittmotorsteuerung

Nun, auf dem Code! Kopieren und diese Vergangenheit in die Arduino IDE und Upload.
Dieser Code ist nur ein Test und wird die Motor foward Schritt und nach hinten, um die Elektronik zu testen. Wir werden die echten Code später hochzuladen.
Beachten Sie, dass der Schritt-Richtungs-Eingang nicht mit diesem Code zu arbeiten.

// dies ist ein Test des Fahrers. Beachten Sie, dass, wenn Sie Stifte ändern, müssen Sie auch
// sie in der wirklichen Code zu ändern. Ändern sich nie einen Stift zu Stift 2,
// wie das Stift zum Erhöhen des gewünschten Abstand zu bewegen benötigt

Byte stepporty;
float val = 15; // Kehrwert der Geschwindigkeit, bedeutet niedrigeren Wert schnellere Bewegung.
Kurz x;
Byte-db = 4;
byte da = 3;
Byte-pb = 1;
Byte pa = 0;
Byte = 5; // hier nicht verwendet
Leere Setup () {

pinMode (db, OUTPUT);
pinMode (da, OUTPUT);
pinMode (pb, OUTPUT);
pinMode (pa, OUTPUT);
pinMode (in, INPUT);
}

Leere Schleife () {
for (int x = 0, x <408; x ++) {// Schritte 408 Halbschritte oder eine volle Umdrehung über 200 stufen rev Motoren (wie die meisten der NEMA-Motoren sind)
FWD ();
Verzögerung (val);
}
Verzögerung (200);
for (x = 0, x <408; x ++) {
BCK ();
Verzögerung (val);
}
Verzögerung (200);

}

Leere FWD () {
Schalter (stepporty) {
Bei 0:
einem ();
stepporty = 1;
Unterbrechung;
Fall 1:
eine Hälfte();
stepporty = 2;
Unterbrechung;
Fall 2:
zwei ();
stepporty = 3;
Unterbrechung;
Fall 3:
twohalf ();
stepporty = 4;
Unterbrechung;
Fall 4:
drei ();
stepporty = 5;
Unterbrechung;
Fall 5:
threehalf ();
stepporty = 6;
Unterbrechung;
Fall 6:
vier ();
stepporty = 7;
Unterbrechung;
Fall 7:
fourhalf ();
stepporty = 0;
Unterbrechung;
}}

Leere BCK () {
Schalter (stepporty) {
Fall 2:
einem ();
stepporty = 1;
Unterbrechung;
Fall 3:
eine Hälfte();
stepporty = 2;
Unterbrechung;
Fall 4:
zwei ();
stepporty = 3;
Unterbrechung;
Fall 5:
twohalf ();
stepporty = 4;
Unterbrechung;
Fall 6:
drei ();
stepporty = 5;
Unterbrechung;
Fall 7:
threehalf ();
stepporty = 6;
Unterbrechung;
Bei 0:
vier ();
stepporty = 7;
Unterbrechung;
Fall 1:
fourhalf ();
stepporty = 0;
Unterbrechung;
}}

nichtig fourhalf () {
digital (db, HIGH); // 4
digital (da, LOW);
digital (pb, LOW);
digital (pa, HIGH);
}
Leere vier () {
digital (db, HIGH);
digital (da, LOW);
digital (pb, LOW);
digital (pa, LOW);
}
nichtig threehalf () {
digital (db, HIGH);
digital (da, HIGH);
digital (pb, LOW);
digital (pa, LOW);
}
Leere drei () {
digital (db, LOW);
digital (da, HIGH);
digital (pb, LOW);
digital (pa, LOW);
}
nichtig twohalf () {
digital (db, LOW);
digital (da, HIGH);
digital (pb, HIGH);
digital (pa, LOW);
}
Leere zwei () {
digital (db, LOW);
digital (da, LOW);
digital (pb, HIGH);
digital (pa, LOW);
}
Leere onehalf () {
digital (db, LOW);
digital (da, LOW);
digital (pb, HIGH);
digital (pa, HIGH);
}
Leere einem () {
digital (db, LOW); // 1
digital (da, LOW);
digital (pb, LOW);
digital (pa, HIGH);
} Schritt 4: Stromkreis

$ 5 Schrittmotorsteuerung

$ 5 Schrittmotorsteuerung

$ 5 Schrittmotorsteuerung

$ 5 Schrittmotorsteuerung

Nicht viel von einer Schaltung, nur Verbindungsbolzen und einige Widerstände. Ich habe keine schematische / CAD-Software und kann nicht scheinen, zu einem an die Arbeit machen, so ist es von Hand gezeichnet. Ich würde auf einem Versuchsaufbau Prototypen vor dem Löten, um für Ihre Motorphase zu korrigieren und sicherzustellen, dass die ATtiny richtig programmiert ist. Die Zahlen in den Feldern sind gepaart, und diese miteinander verbunden sind. Ich finde es viel weniger verwirrend auf diese Weise als Zeichnung jeden Draht. Alle Widerstände 1K mit Ausnahme der 10K und 33K in der oberen rechten Ecke. Beachten Sie, dass alle Pins mit Ausnahme der dir-Schritt-Pin kann nachbestellt werden, aber Sie müssen nur die Pins 0,1,3 verwenden und 4. "IN" müssen mindestens 1 bleiben

Ich würde auch vorschlagen, einige High-Wattage Widerstände (vielleicht zu 10ohm Wert) zwischen dem Angebot und der Diode, nur sicherstellen, dass der Strom bleibt unten. Schritt 5: Echt Code

$ 5 Schrittmotorsteuerung

$ 5 Schrittmotorsteuerung

Einer der Elektronik arbeiten, laden Sie diesen Code. Dann wird der Schritt-Richtungs-Pins zu verbinden, um Ihre Eingabe (Ich habe ein Arduino läuft GRBL). Sobald Sie überprüft haben, dass dieser Code funktioniert, löten Ihren Kreislauf. und testen Sie es noch einmal.

Byte stepporty; // welche Teil der Stufe um zu gehen
Byte val = 3; // Verzögerung zwischen den Schritten
Byte-db = 4; // db, da, pb, PA, und kann alle beliebigen Stift AUSSER Pin 7 sein (digital Pin2, andalog in1) auf die Standard-Anschlussbelegung
// dass Pin muss die Uhr / Schritt Eingangsstift sein.
// db ist out4
byte da = 3; // out3
Byte pa = 0; // out1
Byte-pb = 1; // out2
Byte = 1; // Richtung Eingangsstift NICHT ÄNDERN DIESE
Lang DSD = 100; //, wo wir wollen, dass der Motor zu sein
Lang pos; //, wo es ist
Leere Setup () {
// Serial.begin (9600);
attachInterrupt (0, Anzahl, RISING); // führt "Leere count", wenn Pin 7 (Interrupt 0) auf HIGH gebracht
pinMode (db, OUTPUT); // setzt Aus- und Eingänge
pinMode (da, OUTPUT);
pinMode (pb, OUTPUT);
pinMode (pa, OUTPUT);
// PinMode (in, INPUT);
}

Leere Schleife () {// dies nur überprüft, ob es braucht, um zu bewegen foward oder rückwärts und bewegt dementsprechend
// If (DSD! = Pos) {
if (DSD <pos) {
BCK ();
Verzögerung (val);
}
if (DSD> pos) {
FWD ();
Verzögerung (val);
//}
}}

Leere count () {// Dies erhöht die gewünschte Position, wenn dieser Pin hoch gebracht
// Es muss die gleiche Pin, weil verwenden
// Der ATtiny85 hat nur 5 Pins (obwohl zurückgesetzt könnte als ein I / O-Pin verwendet werden, kann es nicht
// neu programmiert werden, nachdem dies geschehen ist.
if (analogRead (in)> 1) {// Dies legt fest, ob Richtung hoch oder niedrig ist
// nicht fragen mich, warum man arbeitet, aber es funktioniert. Nach ca. 7 Stunden am Stück zu versuchen, zu beheben
// Diese eine Zeile Code, ich gebe nicht einer Ratte hinter warum es funktioniert so lange, wie es funktioniert
dsd- = 1; // foward, wenn positive
} else {
DSD + = 1; // rückwärts, wenn ihr nicht
}}

Leere FWD () {// sowohl FWD und BCK Figur, die Teil der nächsten Schritt ist, und erhöhen Sie die Position
// und Macht der Motor entsprechend.
pos ++;
Schalter (stepporty) {
Bei 0:
einem ();
stepporty = 1;
Unterbrechung;
Fall 1:
eine Hälfte();
stepporty = 2;
Unterbrechung;
Fall 2:
zwei ();
stepporty = 3;
Unterbrechung;
Fall 3:
twohalf ();
stepporty = 4;
Unterbrechung;
Fall 4:
drei ();
stepporty = 5;
Unterbrechung;
Fall 5:
threehalf ();
stepporty = 6;
Unterbrechung;
Fall 6:
vier ();
stepporty = 7;
Unterbrechung;
Fall 7:
fourhalf ();
stepporty = 0;
Unterbrechung;
}}

Leere BCK () {
pos--;
Schalter (stepporty) {
Fall 2:
einem ();
stepporty = 1;
Unterbrechung;
Fall 3:
eine Hälfte();
stepporty = 2;
Unterbrechung;
Fall 4:
zwei ();
stepporty = 3;
Unterbrechung;
Fall 5:
twohalf ();
stepporty = 4;
Unterbrechung;
Fall 6:
drei ();
stepporty = 5;
Unterbrechung;
Fall 7:
threehalf ();
stepporty = 6;
Unterbrechung;
Bei 0:
vier ();
stepporty = 7;
Unterbrechung;
Fall 1:
fourhalf ();
stepporty = 0;
Unterbrechung;
}}

nichtig fourhalf () {
digital (db, HIGH); // 4
digital (da, LOW);
digital (pb, LOW);
digital (pa, HIGH);
}
Leere vier () {
digital (db, HIGH);
digital (da, LOW);
digital (pb, LOW);
digital (pa, LOW);
}
nichtig threehalf () {
digital (db, HIGH);
digital (da, HIGH);
digital (pb, LOW);
digital (pa, LOW);
}
Leere drei () {
digital (db, LOW);
digital (da, HIGH);
digital (pb, LOW);
digital (pa, LOW);
}
nichtig twohalf () {
digital (db, LOW);
digital (da, HIGH);
digital (pb, HIGH);
digital (pa, LOW);
}
Leere zwei () {
digital (db, LOW);
digital (da, LOW);
digital (pb, HIGH);
digital (pa, LOW);
}
Leere onehalf () {
digital (db, LOW);
digital (da, LOW);
digital (pb, HIGH);
digital (pa, HIGH);
}
Leere einem () {
digital (db, LOW); // 1
digital (da, LOW);
digital (pb, LOW);
digital (pa, HIGH);
} Schritt 6: El Fin

$ 5 Schrittmotorsteuerung
Nun, da Sie fertig sind, genießen Sie die süße Herrlichkeit deines einfach zu Schrittmotoren bewegen. Ich würde etwas Klebeband hinzufügen, so dass es keine Möglichkeit gibt, dass die Stifte kurzschließen könnten, denn es ist nicht gut für Microcontroller, wenn sie direkt an die Macht ausgesetzt sind. Wenn Sie die Treiber an die Macht zu verbinden, stellen Sie sicher, Boden, dann 5V, dann Motor zu verbinden - den Boden, dann Motor +. Wenn die Schrittmotoren bewegen 50 Schritten (1/4 Umdrehung auf 200 Schrittmotoren), dann überprüfen Sie, dass Sie 5V ersten verbunden ist, wie wenn die attinys empfangen logische Leistung, werden sie schnell zu nehmen 50 Schritte. Dies hat keinen Einfluss auf Ihre Genauigkeit, wenn das Everthing richtig angeschlossen ist, wird aber, wenn Sie Kraft aus, um zu verbinden.