B4R Question Stepper motor + L298N

BaGRoS

Active Member
Licensed User
Longtime User
I am using the driver as per website:
https://coeleveld.com/arduino-stepper-l298n/
Arduino_Stepper_L298N_01.png


With the code on this page everything works fine. I can not force this IC to work with B4R.
B4X:
/*
Stepper Motor Control - one revolution

This program drives a unipolar or bipolar stepper motor.
The motor is attached to digital pins 8 - 11 of the Arduino.

The motor should revolve one revolution in one direction, then
one revolution in the other direction.


Created 11 Mar. 2007
Modified 30 Nov. 2009
by Tom Igoe

*/

#include <Stepper.h>

const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution
// for your motor

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

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

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

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

I looked at the library Stepper.cpp - Stepper library for Wiring/Arduino - Version 1.1.0 and it should be simple, but help always will be useful: D
 
Last edited:

Erel

B4X founder
Staff member
Licensed User
Longtime User
Please try the attached library.
B4X:
Sub Process_Globals
   Public Serial1 As Serial
   Private stp As Stepper
   Private StepsPerRevolution As Int = 200
End Sub

Private Sub AppStart
   Serial1.Initialize(115200)
   Log("AppStart")
   stp.Initialize2(StepsPerRevolution, 8, 9, 10, 11)
   stp.SetSpeed(60)
   Step1(0)
End Sub

Sub Step1(u As Byte)
   stp.Step(StepsPerRevolution)
   CallSubPlus("Step2", 500, 0)
End Sub

Sub Step2(u As Byte)
   stp.Step(-StepsPerRevolution)
   CallSubPlus("Step1", 500, 0)
End Sub
 

Attachments

  • rStepper.zip
    1.3 KB · Views: 728
Upvote 0

BaGRoS

Active Member
Licensed User
Longtime User
Working perfect mate, cheers!!
At very low RPM, the heatsink reaches a very high temperature. Later I will check directly at the Arduino. If it is the same and probably will be the same, I may report a bug or an idea for modification. For rotations <60rpm, it would be necessary to turn off the coil while waiting for the next step.
 
Upvote 0

Cableguy

Expert
Licensed User
Longtime User
Working perfect mate, cheers!!
At very low RPM, the heatsink reaches a very high temperature. Later I will check directly at the Arduino. If it is the same and probably will be the same, I may report a bug or an idea for modification. For rotations <60rpm, it would be necessary to turn off the coil while waiting for the next step.

That would cause a torque loss, and may not be suitable for every application...
I agree with you, but would ask to implement a "keepEnergised" Boolean so that the user can choose
 
Upvote 0

BaGRoS

Active Member
Licensed User
Longtime User
I think about something like "Break" but keepEnergised is good too.
 
Upvote 0

Beja

Expert
Licensed User
Longtime User
I think there's a latching stepper motors but not 100% sure. Will check the market tomorrow. A latching stp stepper motors can lock at each degree and don't want any current to hold on.
 
Upvote 0

ilan

Expert
Licensed User
Longtime User
Hi, i am very new to arduino and everything about it. I am trying to connect a stepper motor with L298 driver as in this example. I run the program using b4r but what i get is not what i want. Instead of the motor spinning a full circle it vibrates and looks like it is trying to spin but has not enough power.

i am powering the L298 driver with 1x9v battery connected to 2x1.5 battery in a serial connection what gives me 12v but i have the filling there is not enough current flowing. Am i right or am i doing something completely wrong?


60FA0BA9-00B8-495F-8651-E12766A1BF48.jpeg
 
Upvote 0

Cableguy

Expert
Licensed User
Longtime User
Hi Ilan...

Are you sure you have your coils correct?
The easiest way to know coil terminales is to shunt 1 - 2 and try to manually spin the shaft, if it doesn't spin easily, then you have a coil, if it spins fine, then shunt 1 - 3, and so on. You should fond 2 pairs of coil terminals. Then when running, if if tiens the wrong way, juste reverse 1 of the coils terminals.
 
Upvote 0

ilan

Expert
Licensed User
Longtime User
Hi Ilan...

Are you sure you have your coils correct?
The easiest way to know coil terminales is to shunt 1 - 2 and try to manually spin the shaft, if it doesn't spin easily, then you have a coil, if it spins fine, then shunt 1 - 3, and so on. You should fond 2 pairs of coil terminals. Then when running, if if tiens the wrong way, juste reverse 1 of the coils terminals.
Thanks for your reply @Cableguy
Do you mean with coils the wires connected from the motor to the L298 driver?

i connected everything as in the diagram. I also cheked other tutorials and all of them have the same doagram.

Maybe something wrong with the batteries connection?
 
Upvote 0

ilan

Expert
Licensed User
Longtime User
What i get is like trying to turn and but not enough power. If if help it with my finger i am able to turn the motor but alone it vibrates and tries to turn but always get back
 
Upvote 0

Cableguy

Expert
Licensed User
Longtime User
Steppers are current savy... The small trick I told about helps knowing the correct coil pins ordre. Some steppers are 1-4; 2-3, others may be 1-3;2-4, but physically the same motor.
If the motor seems to want to spin but doesn't, it usially is a coil pins error
 
Upvote 0

Cableguy

Expert
Licensed User
Longtime User
Nop. First things first. From the driver, each side corresponds to a coil. So you first need to know were your motor coil pins are.
So you disconnect all wires from driver to motor, on the driver side, and starting with one of the extremity pins, shunt it with another and try to spin it by hand. If it spins, you have the pins of 2 diffrrent coils, if it blocks, you have 2 pins of the same coil. After knowing your coil pins, you reconnect it to the driver board, one coil in each side. If the motor turns in the wrong way, then reverse thé wires of one coil.
 
Last edited:
Upvote 1

Cableguy

Expert
Licensed User
Longtime User
Don't forger to mark as solution, it's always nice and can helps others
 
Upvote 0

ilan

Expert
Licensed User
Longtime User
Don't forger to mark as solution, it's always nice and can helps others
i don't have this option. i think only who created the thread can mark as solution. i can only click the "up arrow button".
now i realize that i should have started a new thread for my question :rolleyes:

anyway thanx!
 
Upvote 0

Cableguy

Expert
Licensed User
Longtime User
i don't have this option. i think only who created the thread can mark as solution. i can only click the "up arrow button".

That's how you mark post as being the solution
 
Upvote 0
Top