Wie der Titel schon sagt muss ich für ein Schulprojekt eine Schrittmotoransteuerung für den TB6600(EasyDriver) entwerfen, darf jedoch nicht auf Stepper Libarys zurückgreifen. Das ich zur Pulserzeugung mit Interrupts arbeiten muss weiß ich bereits. Hier mal mein Code.
#include "TimerOne.h"
int pin = 3;
bool status = LOW;
void setup() {
pinMode(pin, OUTPUT);
Timer1.initialize(400);
Timer1.attachInterrupt(Step);
//Serial.begin(115200);
}
void Step() {
if (status)
{
digitalWrite(pin, HIGH);
status = LOW;
}
else
{
digitalWrite(pin, LOW);
status = HIGH;
}
}
void loop() {
}
Das Problem bei diesem Code ist das Puls-Pausen-Verhältniss ist gleich. Also bräuchte ich eine Möglichkeit die mir einen 10µs Puls generiert und nicht auf die Funktion Delay(); zurückzugreift.
geforce1994:
... TB6600(EasyDriver) entwerfen, darf jedoch nicht auf Stepper Libarys zurückgreifen.
EasyDriver und Stepper-Bibliothek passen nicht zusammen. Daher ein richtiger und notwendiger Ansatz.
geforce1994:
Das ich zur Pulserzeugung mit Interrupts arbeiten muss weiß ich bereits. Hier mal mein Code.
Das kannst Du, mußt Du aber nicht. Ich würde es mit micros() versuchen.
geforce1994:
Das Problem bei diesem Code ist das Puls-Pausen-Verhältniss ist gleich. Also bräuchte ich eine Möglichkeit die mir einen 10µs Puls generiert und nicht auf die Funktion Delay(); zurückzugreift.
Ich habe mir ein kleines Testprogramm geschrieben, das den Motor erst in die eine, dann in die andere Richtung dreht. Es ist blockierend und damit schlechter Stil, also viele Möglichkeiten für Verbesserungen für Dich!
Der Easydriver von Schmelzhaus hat keinen TB6600 drauf sondern einen A4988. Habe ich mich da im Modell verfehlt?
Der TB6600 und der A4988 haben beide als Eingabe 2 Pin: Richtung und Schritte. und dazu noch ander Einstellungen. Die sind aber meist fest gewählt und müssen nicht während des Betriebs verändert werden.
Wie schnell muß sich der Motor drehen?
Mußt Du als Vorgabe den Timer verwenden?
Welche Microschritte Hast Du gewählt?
agmue:
EasyDriver und Stepper-Bibliothek passen nicht zusammen. Daher ein richtiger und notwendiger Ansatz.Das kannst Du, mußt Du aber nicht. Ich würde es mit micros() versuchen. Ich habe mir ein kleines Testprogramm geschrieben, das den Motor erst in die eine, dann in die andere Richtung dreht. Es ist blockierend und damit schlechter Stil, also viele Möglichkeiten für Verbesserungen für Dich!
Leider erzielt dein Programm bei mir keine Funktion. Außerdem habe ich wenn ich dein Code richtig verstehe ein gleiches Puls-Pausenverhältniss das ja nicht gewünscht ist.
geforce1994:
Leider erzielt dein Programm bei mir keine Funktion.
Ich habe das Programm zum Testen vom A4988 und DRV8825 Treiber erfolgreich eingesetzt. Bei tb6600 gibt es einen Enable-Eingang, der möglicherweise noch beschaltet werden muß. Alle Eingänge scheinen Optokoppler zu sein.
geforce1994:
Außerdem habe ich wenn ich dein Code richtig verstehe ein gleiches Puls-Pausenverhältniss das ja nicht gewünscht ist.
Gibt es dafür eine technische Notwendigkeit, oder hat sich das Dein Lehrer ausgedacht, um es etwas interessanter zu machen? Das ist aber nicht schwierig zu realisieren, die Lösung findest Du, wenn Du meinem Link von #2 folgst.
Zunächst sollte sich aber der Motor mit dem Testprogramm bewegen.
Leider haben nur ausgewählte Mitglieder des Forums eine Kristallkugel, um sehen zu können, was sich auf Deinem Schreibtisch so tut. Für Deine Arbeit hast Du natürlich einen Schaltplan gezeichnet -> her damit. Dann hast Du den Projektfortschritt mit scharfen, hochauflösenden Fotos dokumentiert -> her damit.