Hallo,
ich habe einen Arduino Mega 2560 und möchte mit ihm einen MKS TMC2208 V2 Steuern und per Uart konfigurieren.
Ich habe den Beispielcode von GitHub - teemuatlut/TMC2208Stepper genommen und ein wenig verändert.
#define EN_PIN 53 // LOW: Driver enabled. HIGH: Driver disabled
#define STEP_PIN 52 // Step on rising edge
#define DIR_PIN 51 // Direction Pin
#include <TMC2208Stepper.h> // Include library
TMC2208Stepper driver = TMC2208Stepper(&Serial2); // Create driver and use
// HardwareSerial2 for communication
void setup() {
Serial.begin(115200); // Init used serial port
Serial2.begin(115200); // Init used serial port
while(!Serial); // Wait for port to be ready
while(!Serial2);
Serial.println("TMC2208: Hi!"); //print a message
if(Serial2.available()>0)
{
Serial.println("TMC2208: Noob!"); //print a message
}
// Prepare pins
pinMode(EN_PIN, OUTPUT);
pinMode(STEP_PIN, OUTPUT);
driver.pdn_disable(1); // Use PDN/UART pin for communication
driver.I_scale_analog(0); // Adjust current from the registers
driver.rms_current(700); // Set driver current 700mA
driver.microsteps(256); // Set driver microsteps
driver.toff(0x2); // Enable driver
digitalWrite(53, LOW); // Enable driver
digitalWrite(51, HIGH); // CW or CCW
}
void loop() {
digitalWrite(STEP_PIN, !digitalRead(STEP_PIN)); // Step
delayMicroseconds(500);
}
ich habe alles so angeschlossen wie im beispiel (und vref auf 1,5v eingestellt) aber wenn ich microsteps verändere verändert sich die geschwindigkeit vom motor nicht.
Wäre nice wenn mir jemand helfen könnte.
Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Dann ist er auch auf mobilen Geräten besser lesbar.
Das kannst Du auch noch nachträglich ändern.
Gruß Tommy
Hast du das denn auch mal mit dem originalen Beispielsketch probiert ?
Die beiden while im Setup darfst du gern wegnehmen.
ja, ich hatte lediglich die step/enable pins geändert und bei "TMC2208Stepper driver = TMC2208Stepper(&Serial);" serial zu serial2 geändert
ManMadeDesaster:
ja, ich hatte lediglich die step/enable pins geändert und bei "TMC2208Stepper driver = TMC2208Stepper(&Serial);" serial zu serial2 geändert
Das sehe ich anders, wenn ich die beiden Sketche vergleiche hastdu mehr verändert.
Das solltest du rückgängig machen, dann wirds auch funktionieren.
Z.B. die while-Schleifen im Setup. Wozu brauchst du die ?
ich habe mich falsch ausgedrückt. Ich hatte es am Anfang mit dem Originalen Sketch probiert jedoch mit den Geänderten Pins und Serial zu Serial2 geändert. Danach habe ich den anderen Code hinzugefügt (so wie es im Hauptpost aussieht). Ich versuche es dennoch nochmal mit dem originalen.
ManMadeDesaster:
ich habe mich falsch ausgedrückt. Ich hatte es am Anfang mit dem Originalen Sketch probiert jedoch mit den Geänderten Pins und Serial zu Serial2 geändert. Danach habe ich den anderen Code hinzugefügt (so wie es im Hauptpost aussieht). Ich versuche es dennoch nochmal mit dem originalen.
Das ist gut so.
In deinem Sketch sind Dinge drin, die du nicht brauchst und nur stören.
Und was ich in deinem Sketch vermisse, ist ein "driver.push".
Denke ohne dem gehts nicht.
#define EN_PIN 53 // LOW: Driver enabled. HIGH: Driver disabled
#define STEP_PIN 52 // Step on rising edge
#include <TMC2208Stepper.h> // Include library
TMC2208Stepper driver = TMC2208Stepper(&Serial2); // Create driver and use
// HardwareSerial0 for communication
void setup() {
Serial2.begin(115200); // Init used serial port
// Prepare pins
pinMode(EN_PIN, OUTPUT);
pinMode(STEP_PIN, OUTPUT);
driver.pdn_disable(1); // Use PDN/UART pin for communication
driver.I_scale_analog(0); // Adjust current from the registers
driver.rms_current(500); // Set driver current 500mA
driver.toff(0x2); // Enable driver
digitalWrite(53, LOW); // Enable driver
}
void loop() {
digitalWrite(STEP_PIN, !digitalRead(STEP_PIN)); // Step
delayMicroseconds(500);
}
jetzt kann ich die Stromstärke einstellen. Kann es sein, dass der befehl für die Microsteps falsch war und deswegen keine Drehzahlveränderung passierte? Ich hatte ja anfangs auch versucht die Stromstärke zu verändern, hatte aber keine Veränderung im Drehmoment gefühlt (eventuell war der unterschied der Stromstärken zu gering) und deswegen die Microsteps hinzugefügt, damit ich definitiv sehe, ob sich was ändert.
Liest du eigentlich auch, was wir dir schreiben ?
Und wo ist jetzt im Setup deine 2. Serielle??
sorry, ich hatte nochmal den original code genommen und bei den zwei unteren serial vergessen sie zu serial2 umzubenennen, dann hat es logischerweise nicht funktioniert. Ich wollte dann schreiben, dass ich noch immer nichts per uart verändern kann und hatte den code schon hier in den Post kopiert. Dann ist mir aufgefallen, dass diese beiden noch geändert werden müssen, was ich dann auch gemacht habe, aber hier im Post habe ich vergessen es umzuändern.
Liest du eigentlich auch, was wir dir schreiben ?
Ja, wieso?
Weil du wieder die while im setup hast.
Wozu ist die da ?
Und dann ändere deinen letzten geposteten Sketch. Das irritiert doch nur.
Ich sehe die while immer noch.
Ein drittes mal, die brauchst du nicht.
das while ist im Original code auch drin.
der andere Post ist schon geändert. Ich habe es jetzt im übrigen hinbekommen, die Microsteps verändern zu können.
Ich musste noch beim Setup " driver.mstep_reg_select(1);" hinzufügen.
Also scheint jetzt soweit alles zu funktionieren. Danke trotzdem für die Hilfe 
Das ist jetzt der komplette code:
int incomingByte = 0;
#define EN_PIN 53 // LOW: Driver enabled. HIGH: Driver disabled
#define STEP_PIN 52 // Step on rising edge
#define DIR_PIN 51 // Direction Pin
#include <TMC2208Stepper.h> // Include library
TMC2208Stepper driver = TMC2208Stepper(&Serial2); // Create driver and use
// HardwareSerial2 for communication
void setup() {
Serial.begin(115200); // Init used serial port
Serial2.begin(115200); // Init used serial port
// Prepare pins
pinMode(EN_PIN, OUTPUT);
pinMode(STEP_PIN, OUTPUT);
driver.pdn_disable(1); // Use PDN/UART pin for communication
driver.I_scale_analog(0); // Adjust current from the registers
driver.rms_current(700); // Set driver current 700mA
driver.mstep_reg_select(1);
driver.mres(8);
driver.microsteps(256); // Set driver microsteps
driver.toff(0x2); // Enable driver
digitalWrite(53, LOW); // Enable driver
digitalWrite(51, HIGH); // CW or CCW
}
void loop() {
digitalWrite(STEP_PIN, !digitalRead(STEP_PIN)); // Step
delayMicroseconds(5);
}
Gut, dass es jetzt funktioniert.
Ich habe den von dir angezeigten Beispielsketch vor mir, da ist keine while-Schleife drin.
K.A. wo du das her hast.
Die wird bei einem Arduino micro o.ä. gebraucht, aber nicht beim Mega oder Uno.
in dem Sketch in der von mir im Hauptpost verlinkten Seite steht das While drin. Aber ist auch im Prinzip egal 
... Millionen an Fliegen könne nicht irren ... Scheiße schmeckt gut ...
Ja, im Prinzip ist's egal - wenn man eine Fliege ist!
ManMadeDesaster:
in dem Sketch in der von mir im Hauptpost verlinkten Seite steht das While drin. Aber ist auch im Prinzip egal 
Ok, hast Recht.
Ich bin davon ausgegangen, du verwendest ein Beispiel aus der Library.
Dieses Beispiel ist komplett mit 2 seriellen Schnittstellen.
Dennoch....egal ist es nicht, weil nicht nötig und irritierend.