INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Schrittmotor mit l298n Sequenz
21.04.2017, 08:06
Beitrag #1
Schrittmotor mit l298n Sequenz
Hallo,

also ich habe mir jetzt eine fertige Platine mit dem Treiber l298n Gekauft, jetzt wollte ich einen ganz simplen Code zum Test schreiben. Und damit einen Bipolaren Motor betreiben in irgend eine Richtung.


[code
]
int i = 1000;

void setup()

{
DDRD |= (1<<PD1)|(1<<PD2)|(1<<PD3)|(1<<PD4);
}

void loop()
{

PORTD &= ~(1<<PD4);
PORTD |= (1<<PD1);
delay(i);
PORTD &= ~(1<<PD1);
PORTD |= (1<<PD3);
delay(i);
PORTD &= ~(1<<PD3);
PORTD |= (1<<PD2);
delay(i);
PORTD &= ~(1<<PD2);
PORTD |= (1<<PD4);
delay(i);

}[/code]

Angeschlossen ist es so:: PD1 = IN1, PD2 = IN2, PD3 = IN3, PD4 = IN4
aber irgendwie geht da gar nichts, ausser das er viel Strom zieht.


hätte vielleicht jemand eine ganz simple Sequenz Tabelle für mich, mit half step oder two phase on, denn ich glaube ich Suche nicht nach dem Richtigen, ja ich habe goole benutzt, denn das datenblatt von meinem billig motor ist auch bescheiden.

Grüsse Huber
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.04.2017, 10:28 (Dieser Beitrag wurde zuletzt bearbeitet: 21.04.2017 10:39 von MicroBahner.)
Beitrag #2
RE: Schrittmotor mit l298n Sequenz
Du musst bei jedem Schritt alle 4 Ausgänge in eine definierte Lage bringen, wobei Du natürlich nur die Ausgänge ansteuern musst, die sich ändern. Bei jedem Schritt ändert sich die Ansteuerung einer Spule, d.h. es ändert sich immer In1/In2 bzw In3/In4 zusammen.
Eine gute Beschreibung der Schrittmotoren ist dies. Im unteren Drittel der Seite findest Du auch Tabellen für die Ansteuerschritte.
Warum benutzt Du nicht digitaWrite()? So zeitkritisch ist deine Anwendung doch nicht.

Und welchen Motor und welchen Arduino setzt Du ein?

P.S. Zur Ansteuerung von Schrittmotoren gibt es auch fertige Lib's Wink

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.04.2017, 18:04
Beitrag #3
RE: Schrittmotor mit l298n Sequenz
Ok, also das von rn habe ich durchgelesen, aber irgendwie komme ich nicht auf mein Problem. Ich habe ein Arduino Uno und einen Wantai stepper 42BYGHW609 1,7A . Und einen L298P Treiber. Den betreibe ich mit nachfolgenden Code in WAVE-MODE. Und einem Netzteil mit 24v 500mA.

Mein Problem ist das der Treiber zu Heiß wird(in WAVE-MODE ), wenn ich den Code auf TWO-PHASE-ON umschreibe dann bleibt er kühl. Warum ist das so ?

Code:
int i = 1;
int z = 0;

void setup()

{
  DDRD |= (1<<PD1)|(1<<PD2)|(1<<PD3)|(1<<PD4);
  pinMode(9,OUTPUT);
  pinMode(10,OUTPUT);
}

// PORTD |=  (1<<PD);
// PORTD &= ~(1<<PD);

void loop()

{
  digitalWrite(9,HIGH);
  digitalWrite(10,HIGH);

  
  PORTD |=  (1<<PD1);
  PORTD &= ~(1<<PD2);
  //PORTD |=  (1<<PD3);
  PORTD &= ~(1<<PD4);
  delay(i);
  PORTD &= ~(1<<PD1);
  //PORTD |=  (1<<PD2);
  PORTD |=  (1<<PD3);
  PORTD &= ~(1<<PD4);
  delay(i);
  PORTD &= ~(1<<PD1);
  PORTD |=  (1<<PD2);
  PORTD &= ~(1<<PD3);
// PORTD |=  (1<<PD4);
  delay(i);
  //PORTD |=  (1<<PD1);
  PORTD &= ~(1<<PD2);
  PORTD &= ~(1<<PD3);
  PORTD |=  (1<<PD4);
  delay(i);
  
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.04.2017, 20:59
Beitrag #4
RE: Schrittmotor mit l298n Sequenz
(22.04.2017 18:04)huber5093 schrieb:  Ich habe ein Arduino Uno und einen Wantai stepper 42BYGHW609 1,7A . Und einen L298P Treiber. Den betreibe ich mit nachfolgenden Code in WAVE-MODE. Und einem Netzteil mit 24v 500mA.
Irgendwie passt das jetzt aber nicht zusammen? Der Motor hat eine Nennspannung von 3,4V und einen Nennstrom von 1,7A. Und dann nimmst Du ein Netzteil 24V/500mA ???

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.04.2017, 12:11
Beitrag #5
RE: Schrittmotor mit l298n Sequenz
Ja, ich dachte im Digramm stehen ca 24V. Aber selbst wenn ich ihn mit 3V betreibe wird der Treiber auch heiss.

Code:
volatile int counter = 0;
volatile int counterFlag = 0;
volatile int i = 5;

volatile int motor_pin_1 = 8;
volatile int motor_pin_2 = 9;
volatile int motor_pin_3 = 10;
volatile int motor_pin_4 = 11;


void setup()
{
  DDRB|= (1<<PB5);
  
  cli(); // disable interrupts
  
  // reset
  TCCR1A = 0; // set TCCR1A register to 0
  TCCR1B = 0; // set TCCR1B register to 0
  TCNT1  = 0; // reset counter value
  
  OCR1A = 200; // compare match register

  // set prescaler
  TCCR1B |= (1 << CS12) | (1 << CS10);  
  TCCR1B |= (1 << WGM12); // turn on CTC mode
  TIMSK1 |= (1 << OCIE1A); // enable timer compare interrupt
  sei(); // allow interrupts
   Serial.begin(9600); // start serial connection
  
   pinMode(motor_pin_1,OUTPUT);
   pinMode(motor_pin_2,OUTPUT);
   pinMode(motor_pin_3,OUTPUT);
   pinMode(motor_pin_4,OUTPUT);
}

ISR(TIMER1_COMPA_vect)
{
counterFlag = 1;
}

void loop()
{
  Serial.println(counter);
  if(counterFlag == 1)
  {
    counterFlag = 0;
    counter++;
  }
      if(counter == 0)
      {
        digitalWrite(motor_pin_1, HIGH);
        digitalWrite(motor_pin_2, LOW);
        digitalWrite(motor_pin_3, HIGH);
        digitalWrite(motor_pin_4, LOW);
      //delay(i);
      }
      if(counter == 1)
      {
        digitalWrite(motor_pin_1, LOW);
        digitalWrite(motor_pin_2, HIGH);
        digitalWrite(motor_pin_3, HIGH);
        digitalWrite(motor_pin_4, LOW);
      //delay(i);
      }
      if(counter == 2)
      {
        digitalWrite(motor_pin_1, LOW);
        digitalWrite(motor_pin_2, HIGH);
        digitalWrite(motor_pin_3, LOW);
        digitalWrite(motor_pin_4, HIGH);
     //delay(i);
      }
      if(counter == 3)
      {
        digitalWrite(motor_pin_1, HIGH);
        digitalWrite(motor_pin_2, LOW);
        digitalWrite(motor_pin_3, LOW);
        digitalWrite(motor_pin_4, HIGH);
       //delay(i);
      }
      if(counter == 4)
      {
        counter = 0;
      }
  

  
}

Also grunsätzlich muss man ja nur die Spulen in richtiger Reihenfolge (hier two Phase on) über den Treiber in1-in4 ansteuern, und je nach dem ich die Frequenz ändere, arbeitet er die Schritte schneller oder langsamer ab oder ?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.04.2017, 16:26
Beitrag #6
RE: Schrittmotor mit l298n Sequenz
(23.04.2017 12:11)huber5093 schrieb:  Also grunsätzlich muss man ja nur die Spulen in richtiger Reihenfolge (hier two Phase on) über den Treiber in1-in4 ansteuern, und je nach dem ich die Frequenz ändere, arbeitet er die Schritte schneller oder langsamer ab oder ?
Ja, im Prinzip ist das so.
Wenn man sich das Datenblatt des L298 genau anschaut, bin ich mir aber nicht sicher, ob der für dich richtig ist. Da steht, dass VS, also die Versorgung des Motors, mindest 2,5V höher sein muss, als Vin(HIGH), was bei dir ja wohl 5V sind. D.h. Vs min ist 7,5V , was für deinen Motor (ohne Stromsteuerung ) aber schon zu viel ist.

Deine Verwendung des Timer 1 für die Taktung ist aber 'oversized'. Das geht auch ganz einfach mit dem millis() Aufruf. (Es sei denn, man will ganz einfach auch etwas mit den Timern 'spielen' ).

Die ganzen volatiles sind auch nicht nötig und hindern den Compiler eher daran, ein optimales Programm zu erzeugen. Nur beim counterFlag brauchst Du ein volatile.
Die motorPins solltest Du eher mit 'const byte' definieren.

Was die Verlustleistung angeht: der L298n ist ein bipolarer Baustein, und da fallen bei 1,7A schon 2 oder sogar mehr Volt ab. Da ergibt sich schon einiges an Verlustleistung. Wenn Du es 'kühl' haben willst, solltest Du eher eine FET Brücke einsetzen.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.04.2017, 12:12
Beitrag #7
RE: Schrittmotor mit l298n Sequenz
Mahlzeit,

so jetzt klappts war wohl ein Fehler rauf der Platine, Jetzt habe ich noch einen andere Frage zur Frequenz berechnung in der Arduino libary. Und zwar habe ich dort den Befehl
Code:
myStepper.setSpeed(60);
. wie brechne ich den Wert jetzt richtig?
angenommen ich will den Motor mit 1400 Hz betreiben und habe 200 Schritte, dann Rechne ich 1400/200 = 7Hz = 0,142 sec. Dann 60Rpm/0,142= 422 für set speed, aber irgendwie passt das nicht zusammen, da steht der Motor und summt F zu hoch
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.04.2017, 17:22
Beitrag #8
RE: Schrittmotor mit l298n Sequenz
(25.04.2017 12:12)huber5093 schrieb:  Jetzt habe ich noch einen andere Frage zur Frequenz berechnung in der Arduino libary. Und zwar habe ich dort den Befehl
Code:
myStepper.setSpeed(60);
. wie brechne ich den Wert jetzt richtig?
angenommen ich will den Motor mit 1400 Hz betreiben und habe 200 Schritte, dann Rechne ich 1400/200 = 7Hz = 0,142 sec. Dann 60Rpm/0,142= 422 für set speed, aber irgendwie passt das nicht zusammen, da steht der Motor und summt F zu hoch
Bisher hast Du die Stepperimpulse doch selbst erzeugt. Von welcher Lib redest Du jetzt, da gibt's verschiedene. Meinst Du die in der IDE integrierte Lib?

Im Prinzip ist deine Rechnung schon richtig, aber hast Du beim Einrichten des Steppers auch die richtigen Werte angegeben? Wenn Du nur so eine einzelen Zeile deines Sketches postest kann man da nichts rechtes sagen.
Und kann dein Stepper die 1,4kHz überhaupt?

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Stromversorgung Arduino in Verbindung mit Motortreiber L298N delay 12 944 20.07.2019 15:44
Letzter Beitrag: rolf hegewald
  Wegbegrenzung für Schrittmotor Scouter 62 4.929 10.02.2019 13:48
Letzter Beitrag: Scouter
  Projekt Portionierer mit Schrittmotor, Bluetooth hilfe Flieger 3 1.076 09.08.2018 13:02
Letzter Beitrag: Hilgi
  Endschalter für Schrittmotor clemens5555 10 3.553 18.04.2018 14:37
Letzter Beitrag: Tommy56
  Schrittmotor mit Puls/Richtung Steuern Günni 6 2.761 19.01.2018 10:30
Letzter Beitrag: Tommy56
  Schrittmotor Geschwindigkeit mit Wägezelle + HX711 Modul steuern Schrittmotor 10 4.302 30.08.2017 23:45
Letzter Beitrag: hotsystems
  Haltestrom Schrittmotor reduzieren TimF 3 3.196 24.10.2016 12:33
Letzter Beitrag: Binatone
  Schrittmotor Clemens55555 9 4.589 25.08.2016 10:15
Letzter Beitrag: Binatone
  Schrittmotor soll auf Tasterdruck bis zum Endschalter fahren Wurstbemme 11 8.352 08.01.2016 11:56
Letzter Beitrag: hotsystems
  Piezosummer und Schrittmotor Gilbert Neon 0 1.410 20.12.2015 15:40
Letzter Beitrag: Gilbert Neon

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste