B4R Question Stepper motor + L298N

BaGRoS

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


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

Administrator
Staff member
Licensed 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

BaGRoS

Active Member
Licensed 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.
 

Cableguy

Expert
Licensed 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
 

BaGRoS

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

Beja

Expert
Licensed 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.
 
Top