NEMA 34 CL Schrittmotor mit Endstufe mittels Arduino ansteuern

muss sich um 180% drehen 0,5 umdrehungen

Da für den vorgang 3sec zeit sind

15/3=. 5U/sec

5u/sec x60 = 300umin

Wo kommt die 15 her?

ok, ich glaube ich habs verstanden.

An der Presse:
0,5 U / 3 s = 0,166 U/s
0,166 U/s * 60 = 10 U/min

Am Motor:
Getriebe 1:30
Also der Motor muß 10 U/min * 30 = 300U/min machen.

Grüße Uwe

uwefed:
Wo kommt die 15 her?

ok, ich glaube ich habs verstanden.

An der Presse:
0,5 U / 3 s = 0,166 U/s
0,166 U/s * 60 = 10 U/min

Am Motor:
Getriebe 1:30
Also der Motor muß 10 U/min * 30 = 300U/min machen.

Grüße Uwe

Genau, an der stelle möchte ich mal sagen ich ha jetzt einiges gefunden an anleitungen in englisch und genau für meinen motor,

Ich werd mal was schreiben und meld mich dann wieder zurück

so hab jetzt mal das setup so geschrieben das ich den motor im hand mode mal in eine richtung fahren kann und dann hab ich noch nen 2ten taster eingebunden,

wenn der motor steht macht er ein komisches surrgeräusch und wird warm?

was kann ich da machen oder ist das normal?

int EN = 5;
int DIR = 6;
int PUL = 7;
int RIGHT = 8;     //TASTER
int LEFT = 9;     //TASTER)
int tasterstatus1 = 0;
int tasterstatus2 = 0;
int richtung = 11;
void setup()
{
  pinMode(EN,OUTPUT);
  pinMode(DIR,OUTPUT);
  pinMode(PUL,OUTPUT);
  pinMode(RIGHT,INPUT);
  pinMode(LEFT,INPUT);
  pinMode(richtung,OUTPUT);
}



void loop()

{  tasterstatus1 = digitalRead(RIGHT);
  if (tasterstatus1 == HIGH)  //TASTER EIN
  {
digitalWrite (DIR,HIGH);            //DREHRICHTUNG RECHTS
digitalWrite (richtung,LOW);
digitalWrite (EN,HIGH);    
digitalWrite (PUL,HIGH);                
delayMicroseconds(350);                   //PULSE ON
digitalWrite (PUL,LOW);
delayMicroseconds(350);                    //PULSE OFF
  }
else {                         // TASTER AUS

digitalWrite (DIR,LOW);
digitalWrite (EN,LOW);    //MOTOR STEHT
digitalWrite (DIR,LOW);    
digitalWrite (PUL,LOW);
}




{  tasterstatus2 = digitalRead(LEFT);
  if (tasterstatus2 == HIGH)  //TASTER EIN
  {
digitalWrite (DIR,LOW);         //DREHRICHTUNG LINKS
digitalWrite (richtung,HIGH);
digitalWrite (EN,HIGH);    
digitalWrite (PUL,HIGH);                
delayMicroseconds(350);                   //PULSE ON
digitalWrite (PUL,LOW);
delayMicroseconds(350);                    //PULSE OFF
  }
else {                         // TASTER AUS

digitalWrite (DIR,LOW);
digitalWrite (EN,LOW);    
digitalWrite (DIR,LOW);     
digitalWrite (PUL,LOW);
}}}

was ich jetzt aber nicht ganz verstehe ich hab meine 5v an den motortreiber angeschlossen und am arduino auf die digitalein/ausgänge,

aber wenn ich ein high signal schalte und die +5V an der endstufe sind schaltet der arduino auch +5V drauf das macht ja iwie keinen sinn.

so gesehen fließt kein strom, wenn ich auf low schalte hat der ausgang 0V und die endstufe 5V

kann mir das wer bitte erklären?

Dein Programm ist ... fehlerbehaftet.

digitalWrite (DIR,LOW);
digitalWrite (EN,LOW);    //MOTOR STEHT
digitalWrite (DIR,LOW);   
digitalWrite (PUL,LOW);

Das gibt es zweimal. Wenn die eine Taste nicht gedrückt ist, steht der Motor, und wenn die andere nicht gedrückt ist, ebenso. Tatsächlich darf der Motor aber nur stehen, wenn beide Tasten nicht gedrückt sind (!tasterstatus1 && !tasterstatus2). Bitte die Ausrufezeichen beachten.

MartinwUNO:
kann mir das wer bitte erklären?

Leider nein, denn Deine Worte sind wirr, zumindest für mich :confused:

Hi danke das mit tasterstatus 1 und 2 stimmt,
Das muss ich ändern!

Muss ich das dann bei beiden if verbindungen einfügen?

Anderseits brauche ich den en garnicht auf low zu schalten, der kann eig. E immer freigegeben sein!
Wenn dann schalte ich nur die pulse weg!

Ich muss aber dazusagen das ich das programm jetzt genau so am laufen hatte, beide drehrichtungen funktionieren,

Aber ich manchmal einen taster 2x drücken muss damit die rotation beginnt!

Woran könnte das liegen?

Zu meiner oberen frage
Ich versuchs nochmal,

Ich hab bei der endstufe alle anschlüsse mit+ auf +5 gegeben, die minus gehen an meine arduino ausgänge,

Wenn ich dann den ausgang auf high schalte hat er ja minus dasselbe potential wie plus an der endstufe?

MartinwUNO:
Anderseits brauche ich den en garnicht auf low zu schalten, der kann eig. E immer freigegeben sein!
Wenn dann schalte ich nur die pulse weg!

Das ist Unfug. Lesestoff Schrittmotor.

Wenn Du die Pulse "wegschaltest", fließt der maximale Strom durch den Motor, um ihn festzuhalten. Bei einer Presse brauchst Du dieses Haltemoment. Je nach Konstruktionbenötigst Du auch bei offener Presse ein Haltemoment, da sie sonst durch die Gravitation zufällt. Nur in einer Ruheposition kannst Du ENA ausschalten. Andersherum könnte ein Schuh draus werden: Wenn Du im Betrieb immer ein Haltemoment benötigst, brauchst Du auch immer ENA aktiv.

MartinwUNO:
Wenn ich dann den ausgang auf high schalte hat er ja minus dasselbe potential wie plus an der endstufe?

Gleiches Potential, kein Strom fließt.

Wenn Du auf das Schaltbild schaust, dann siehst Du beispielsweise zwischen PUL+ und PUL- einen Widerstand und die LED eines Optokopplers.

  • Arduino-Ausgang LOW (GND): 5V - PUL+ - Widerstand - LED - GND => es fließt ein Strom, LED leuchtet
  • Arduino-Ausgang HIGH (5V): 5V - PUL+ - Widerstand - LED - 5V => es fließt kein Strom, LED dunkel

Das ist genau, was man haben möchte, da bei 1. der Transistor leitet, bei 2. nicht.

PUL und DIR geben Takt und Richtung vor, die Elektronik dazwischen sorgt für die richtige Bestromung der Motorwicklungen. Das darfst Du nicht vermischen.

OK das mit ENABLE verstehe ich jetzt

-Wenn sich der Motor drehen soll muss enable freigegeben sein! (HIGH)
-Wenn der Motor fest stehen soll muss enable HIGH sein (haltemoment)
-wenn der Motor aus sein soll und sich von hand drehen lassen soll muss Enable LOW stehen

soweit richtig?
da ich kein haltemoment benötige da ich noch ein planetengetriebe am motor habe brauche ich das mal nicht!

aber wenn ich den enable dauerhaft auf ein schalte brennt der motor ab? (da er wsl zu warm wird?)

Bezüglich Arduino verstehe ich jetzt auch was du meinst!
HIGH es kann strom gegen masse fließen
LOW Es kann kein strom fließen!

Hast du gut erklärt!

so habe den scetch überarbeitet und mit kommentaren versehen
könnt ihr euch das bitte mal kurz ansehen ob das passt?

danke erstmal für eure hilfe, wäre ohne die nie soweit gekommen!!!

int EN = 5;        //Freigabe 
int DIRminus = 10; //Anschlussname Endstufe
int DIRplus = 11;  //Anschlussname Endstufe
int PUL = 7;       //Pulseausgang
int RIGHT = 8;     //TASTER 1
int LEFT = 9;      //TASTER  2
int tasterstatus1 = 0;  
int tasterstatus2 = 0;

void setup()
{
  pinMode(EN,OUTPUT);    
  pinMode(DIRminus,OUTPUT);
  pinMode(PUL,OUTPUT);
  pinMode(RIGHT,INPUT);
  pinMode(LEFT,INPUT);
  pinMode(DIRplus,OUTPUT);
  
  digitalWrite (EN,HIGH);  //Freigabe Motor 

  
}


void loop()

{  tasterstatus1 = digitalRead(RIGHT);     //Drehrichtung 1
  if (tasterstatus1 == HIGH)               //TASTER EIN
  {
digitalWrite (EN,HIGH);                    //Freigabe Motor
digitalWrite (DIRminus,HIGH);              //DREHRICHTUNG RECHTS
digitalWrite (DIRplus,LOW);

digitalWrite (PUL,HIGH);                
delayMicroseconds(300);                   //PULSE ON
digitalWrite (PUL,LOW);
delayMicroseconds(300);                   //PULSE OFF
  }
else {                                    // TASTER1 AUS

digitalWrite (PUL,LOW);
}




{  tasterstatus2 = digitalRead(LEFT);      //Drehrichtung 2
  if (tasterstatus2 == HIGH)               //TASTER EIN
  {
digitalWrite (EN,HIGH);                   //Freigabe Motor
digitalWrite (DIRminus,LOW);              //DREHRICHTUNG LINKS
digitalWrite (DIRplus,HIGH);

digitalWrite (PUL,HIGH);                
delayMicroseconds(100);                   //PULSE ON
digitalWrite (PUL,LOW);
delayMicroseconds(100);                    //PULSE OFF


  }
else {                                     // TASTER AUS

digitalWrite (PUL,LOW);
}}


//Beide Taster sind nicht gedrückt Motor soll sich von hand drehen lassen


{  tasterstatus2 = digitalRead(LEFT);    
   tasterstatus1 = digitalRead(RIGHT);                       //Motor beweglich
  if (!tasterstatus1 && !tasterstatus2 == LOW)               //Beide unbetätigt
  {
digitalWrite (EN,LOW);                   //Freigabe Motor aus
digitalWrite (PUL,LOW);                   //Pulse aus
  

  }
else {                       
}}
}

MartinwUNO:
OK das mit ENABLE verstehe ich jetzt

-Wenn sich der Motor drehen soll muss enable freigegeben sein! (HIGH)
-Wenn der Motor fest stehen soll muss enable HIGH sein (haltemoment)
-wenn der Motor aus sein soll und sich von hand drehen lassen soll muss Enable LOW stehen

soweit richtig?

Ja!

MartinwUNO:
da ich kein haltemoment benötige da ich noch ein planetengetriebe am motor habe brauche ich das mal nicht!

Woher soll ich das wissen ...

MartinwUNO:
aber wenn ich den enable dauerhaft auf ein schalte brennt der motor ab? (da er wsl zu warm wird?)

Nein, dann fließt der Nennstrom durch den Motor, das muß er dauerhaft vertragen können. Warm wird er allerdings.

MartinwUNO:
Bezüglich Arduino verstehe ich jetzt auch was du meinst!
HIGH es kann strom gegen masse fließen
LOW Es kann kein strom fließen!

Hast du gut erklärt!

Habe ich wohl schlecht erklärt, denn es ist genau umgekehrt: es fließt kein Strom bei 5V an PUL+ und 5V an PUL-.

int DIRminus = 10; //Anschlussname Endstufe
int DIRplus = 11;  //Anschlussname Endstufe

Du denkst viel zu kompliziert. DIR+ kommt an 5V, DIR- an den Arduino-Ausgang.

Was Du versuchst, ist eine H-Brücke. Bei einem kleinen DC-Motor kann man damit die Drehrichtung umkehren. Bei einer Leuchtdiode geht das nicht, da fließt der Strom nur in eine Richtung.

Schmeiß mal else raus, macht alles kaputt.

agmue:
Nein, dann fließt der Nennstrom durch den Motor, das muß er dauerhaft vertragen können. Warm wird er allerdings.

Um Unfälle vorzubeugen:
Ein Schrittmotor kann schon sehr heiß werden. Bei einer Temperaturfestigkeit der Isolierstoffe weit über 100°C kann und darf der Motor schon mal deutlich über 50°C heiß werden.
Grüße Uwe

@agmue

hi also ja das mit dem haltemoment habe ich ja nirgends erwähnt sry,

zu dem:
Du denkst viel zu kompliziert. DIR+ kommt an 5V, DIR- an den Arduino-Ausgang.

das habe ich so ausprobiert wenn ich das so programmieren funktioniert die drehrichtungsumkehr,

wenn ich allerdins +5V und arduino ausgang auf - hänge habe ich nur eine drehrichtung!
egal ob high oder low

also es funktioniert obwohl dein argument mit der LED Logisch ist das die nur in eine richtung Leuchtet/Leitet

ich werd das noch testen!
Kann ich das mit der richtungsänderung so lassen, oder kanns ich mir da den eingen abschießen wenn ich den umpole?

das else werd ich entfernen, ich dachte das wäre notwendig wenn ich ein if habe brauche ich auch ein else.