Stepper Motor Control - one revolution, stepsPerRevolution = 200

I have a stepper motor with a GT2 gear hooked up via a belt to a 3D printed pulley (a much larger gear). In this case my arduino/L298N is running the Stepper Motor Control - one revolution program software program by Tom Igoe.

Given the larger gear, I needed to increase the "stepsPerRevolution = 200", and changed it from 200 to 800 and it worked fine.

However, I need the larger gear to turn more, so increased the stepsPerRevolution to 1000 (and later higher), but and in this case, the motor whined and barely moved and that movement was exceptionally jerky.

If I returned the stepsPerRevolution value to 800 it worked again so it wasn't a belt slipping etc.

is it possible that the speed and stepsPerRevolution are out of sync when I use such large values for stepsPerRevolution?

That is the stepper is going so fast, the stepper can not keep up, and this creates a jerky movement?

If so, can that be fixed?,

Any ideas or suggestions would be appreciated

Thanks
Mitchell

JIC the program is below.

/*
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 would be using a different driver like an A4988 or DRV8825 or similar better instead of L298 which is more suited for DC motors while the others are specific to steppers. The stepper you have requires 200 steps or pulses to revolve once. And when attached to different pulleys and belts can be converted to steps to move one tooth of the belt a certain distance like 1 mm (steps/mm). So its not the 200 part you need to change it is more the number of rotations you want to make the stepper do. If we want it to turn 5 times we send 200*5= 1000 steps. The drivers I specified have what is called micro stepping features set up with actual jumpers on the little boards and allow for more finer precise control of a stepper like a 3d printer or cnc machine. If you research those parts there is more info on micro stepping and calculations. I avoid the stepper libraries and write my own code to drive the stepper drivers. I haven't studied the library but there must be a command to make it rotate a number of times other than the 200 variable that is a physical function of the stepper and is changed using micro stepping but I don't think you need micro stepping you need more 200 revolution of your current stepper. Study the stepper library closer

Since the speed is fixed (60 RPM) you may be exceeding the steps-per-second capability of your hardware. What happens if you set the steps-per-revolution to 1000 and the speed to 30 RPM? That should give you 500 steps per second.

I don't know what's going on but you should be able to adapt/adjust your higher-level code without "faking" the steps per revolution for the motor... That is, if you want to make 1000 steps (5 revolutions), go-ahead and make 1000 steps.

It almost sounds like a bit-overflow problem... i.e. If you have a byte (8-bits) you can only count ot 255 and if you count to 256, you'll overflow/roll-over back to zero. But, 1000 failing and 800 working doesn't make sense with that problem.... Unless there's some kind of conversion going-on... I saw a problem like that once involving a pressure measurement - With the pressure measured as some ADC reading, converted to PSI, converted to a voltage for a chart recorder, it wasn't obvious what binary value was rolling-over and it was very-hard to diagnose.

I see common ground in the comments in Replies#1, #2 and #3

The stepsPerRevolution figure should be the appropriate number for the motor - not for something driven by the motor. And the speed should also be appropriate for the motor.

If you have a 200 step motor and need it to turn 5 times to make the driven wheel rotate once then just get the motor to do 1000 steps.

And, to pick up on Reply #1, an L298 is a poor choice for driving a stepper motor. Have a look at these links
Stepper Motor Basics
Simple Stepper Code

also look up the AccelStepper library

...R