Digitale Welle

Hi Leute hatte leider paar Tage keine Zeit das Thema weiter zu bearbeiten.

@michael_x mit dem zu schnell war quatsch habe ich festgestellt, es passiert immer.

@combie was dein Problem ist versteh ich ne aber ok ist deine Ding :slight_smile:

Hier mal das Sketch was soweit funktioniert, ich nutze seit heute das TOS-100 Motortreiber Board:

#include <SPI.h>
#include <TMC26XStepper.h>
#include <SSI.h>

SSI RM08(3, 4, 12); //Pins für den Drehgeber und die Genauigkeit (12 Bit)
SSI RM08_m(6, 7, 12); //Pins für den Drehgeber und die Genauigkeit (12 Bit)

//we have a stepper motor with 200 steps per rotation, CS pin 2, dir pin 6, step pin 7 and a current of 300mA
TMC26XStepper tmc26XStepper = TMC26XStepper(200,2,6,7,1000);

float Angle1 = 0;
float Angle2 = 0;
int schritte = 0;
int motorschritte = 0;
int encoderWert = 0;
int pause = 300;

void setup()
{

Serial.begin(9600);
Serial.println("==============================");
Serial.println("TMC26X Stepper Driver Demo App");
Serial.println("==============================");
//set this according to you stepper
Serial.println("Configuring stepper driver");
//char constant_off_time, char blank_time, char hysteresis_start, char hysteresis_end, char hysteresis_decrement
//tmc26XStepper.setSpreadCycleChopper(2,24,8,6,0);
tmc26XStepper.setSpreadCycleChopper(1,1,1,3,0);
tmc26XStepper.setRandomOffTime(0);

tmc26XStepper.setMicrosteps(4);
tmc26XStepper.setStallGuardThreshold(10,0);
Serial.println("config finished, starting");
tmc26XStepper.start();
Serial.println("started");

encoderWert = ((RM08.SSIread() - Angle1)*800/4096); //den Wert einlesen

}
void loop()
{

schritte = (((RM08.SSIread()) - Angle1)*800/4096); //den Wert einlesen
motorschritte = ((RM08_m.SSIread() - Angle2)*800/4096); //den Wert einlesen

if(schritte - encoderWert > 1) //grösser 0
{

digitalWrite(6,HIGH);

}

if(schritte - encoderWert < 1) //kleiner 0
{

digitalWrite(6,LOW);

}

if(abs(schritte - encoderWert) > 1)
{

for(int i=0; i <= abs(schritte - encoderWert); i=i+1)
{

Step();

}

motorschritte = ((RM08_m.SSIread() - Angle2)*800/4096) * -1; //den Wert einlesen

while(abs(schritte - motorschritte) > 5)
{

Step();

motorschritte = ((RM08_m.SSIread() - Angle2)*800/4096); //den Wert einlesen

}

encoderWert = schritte; //Wert des Encoders wieder auf 0 stellen

}

Serial.print(schritte);
Serial.print(", ");
Serial.println(motorschritte);

}

void Step() {

digitalWrite(7, HIGH);
delayMicroseconds(pause);
digitalWrite(7, LOW);
delayMicroseconds(pause);

}