Zwei 28bj-48 stepper an uln2003 gleichzeitig und entgegengesetzt drehen lassen

Hallo,

der unten angefügte, leicht abgewandelte Versuchssketch funktioniert so weit, die Stepper laufen auch ziemlich ruhig.

Allerdings macht erst einer der beiden Motoren eine Drehung in Drehrichtung, stoppt dann, dann macht der zweite Motor
die gleiche Drehung, stoppt, danach der erste Motor die Drehung in die Gegenrichtung, stoppt, danach dann erst der zweite Motor in die Gegenrichtung.

Ich möchte gern, dass beide Motoren gleichzeitig laufen jeweils entgegengesetzt laufen.
Habt Ihr Vorschläge?

Danke im voraus

Frank

/*
Stepper Motor Control - one revolution
This is the examply by Tom Igoe delivered with th Arduino IDE.

Adapted by Stefan Thesen for 28BYJ-48 stepper motor
https://blog.thesen.eu
*/
//leicht abgewandelt durch sunsailor

#include <Stepper.h>

// Get steps per turn and RPM out of datasheet:
// ============================================
// 5.625/64 deg per step --> 4096 steps for 360 deg
// step relates to half-step sequencing, which means 8 steps
// We use 4 full steps ==> 2048 steps per turn
//
// recommended frequency range 600-1000Hz for 8 half-steps
// 1000Hz/4096 half-steps --> approx 4sec per turn is max speed 
// ==> 15rpm
// Note: actually we will use ~500Hz using the 4 step approach
// but motor will not be able to turn faster.

// Get stepping sequence out of datasheet:
// =======================================
// Stepping sequence as given in datasheet
// this is an 8-step half-step approach
//         Steps
// Wire  1  2  3  4  5  6  7  8
// 1                    x  x  x
// 2              x  x  x 
// 3        x  x  x
// 4     x  x                 x
// 
// We use only even / full steps thus:
//         Steps
// Wire  2  4  6  8
//   1         x  x
//   2      x  x 
//   3   x  x 
//   4   x        x
// 
// Code of Arduino Stepper Lib has implemented:
//         Steps
// Wire  1  2  3  4
//   1         x  x
//   2   x  x      
//   3      x  x 
//   4   x        x
//
// ==> Simple Solution: exchange wire 2&3


const int stepsPerRevolution = 2048;  // here go the 2048 steps
// for your motor

// initialize the stepper library on pins 8 through 11 -> IN1, IN2, IN3, IN4
// as shown above, we need to exchange wire 2&3, which we do in the constructor
Stepper myStepper1(stepsPerRevolution, 8, 10, 9, 11);
Stepper myStepper2(stepsPerRevolution, 4, 6, 5, 7);

void setup() 
{
 // set the speed at 8 rpm:
 myStepper1.setSpeed(8);
 myStepper2.setSpeed(8);
 // initialize the serial port:
 Serial.begin(9600);
}

void loop() 
{
 // step one revolution  in one direction:
 Serial.println("clockwise");
 myStepper1.step(stepsPerRevolution);
 myStepper2.step(stepsPerRevolution);
 delay(500);

 // step one revolution in the other direction:
 Serial.println("counterclockwise");
 myStepper1.step(-stepsPerRevolution);
 myStepper2.step(-stepsPerRevolution);
 delay(500);
}

Hi

In Code-Tags könnte man Deinen Sketch besser lesen. (vor und hinter dem Code ein (code)...(/code), nur in eckigen Klammern oder im Editor die </> Schaltfläche).
(Du kannst JEDEN Deiner Posts beliebit editieren, solltest Das aber nur sinnvoll einsetzen)
Nun ja - Du hast Es genau so programmiert.
-Stepper 1 1x rechts rum
-Stepper 2 1x rechts rum
-Pause
-Stepper 1 1x links rum
-Stepper 2 1x links rum
-Pause

Diese Library blockiert, bleibt also so lange aktiv, bis der Befehl ausgeführt ist.

Schau Dir Mal die AccelStepper (oder so) an, Die müsste nicht-blockierend sein.

MfG

Bei AccelStepper hilft Dir das Beispiel MultiStepper.

Hallo und vielen Dank für Eure Hilfe,

die Stepper laufen jetzt in entgegengesetzte Richtungen und halten an einem festen Punkt an. Jetzt gibt es noch viel Arbeit um AccelStepper zu erkunden.

Hiermit lief es:

// MultiStepper.pde
// -*- mode: C++ -*-
//
// Shows how to multiple simultaneous steppers
// Runs one stepper forwards and backwards, accelerating and decelerating
// at the limits. Runs other steppers at the same time
//
// Copyright (C) 2009 Mike McCauley
// $Id: MultiStepper.pde,v 1.1 2011/01/05 01:51:01 mikem Exp mikem $
#include <AccelStepper.h>

// Define some steppers and the pins the will use
AccelStepper stepper1(AccelStepper::FULL4WIRE, 8, 10, 9, 11);
AccelStepper stepper2(AccelStepper::FULL4WIRE, 4, 6, 5, 7);

void setup()
{  
stepper1.setMaxSpeed(12.0);
stepper2.setMaxSpeed(12.0);

stepper1.moveTo(2048);
stepper2.moveTo(-2048);
  
}
void loop()
{
  stepper1.run();
  stepper2.run();
}

sunsailor:
Hiermit lief es:
(Code natürlich wieder nicht in Code-Tags)

Jetzt postest Du bitte 100 mal

„Ich werde nie wieder Code ohne Code-Tags posten“

Wir kontrollieren, ob Du das wirklich getippt und nicht einfach nur kopiert und eingefügt hast!

Gruß

Gregor

Hallo Gregor,

sorry, wird nicht wieder passieren (hoffe ich).

Ihr seid aber ganz schön streng hier :slight_smile: .

Herzliche Grüße

Frank

sunsailor:
Ihr seid aber ganz schön streng hier :slight_smile: .

Nein, es ist sinnvoll!

a = werte + 56789;
* *a = werte[i] + 56789;* *
Siehst Du den Unterschied?

sunsailor:
Ihr seid aber ganz schön streng hier :slight_smile: .

Naja ... es nervt halt vor allem bei längeren Sketchen. Statt der Straftipperei kannst Du Dir auch mein Geschreibsel zu schönem Code durchlesen :slight_smile:

Gruß

Gregor