Run Stepper motor with more torque and smoothly

I have a stepper motor and its torque curve is below.

I am trying to get more torque from the motor. Therefore, I decided to setup my driver to half step. I am using an Arduino for generate the pulses as below code.

void move() {
if (micros() - lastStepTime >= stepDelay) {
lastStepTime = micros();
digitalWrite(STEP_DOWN, HIGH);
delayMicroseconds(1000);
digitalWrite(STEP_DOWN, LOW);
}

}


I have used delayMicroseconds(1000) for get 1000PPS output.

Unfortunately, when I use this 1000PPS pulse rate, motor cannot run smoothly.

Greatly appreciate someone can give a solution for that.

• Half-stepping the motor reduces torque, not increases it. Although it does help motor run smoothly. What is your stepper driver and how did you set it up for half-stepping? Does it work well at different pulse rates? – Maple Aug 14 '18 at 9:55
• @Transistor variable delay is between pulses, fixed is pulse length. Looks OK to me, except pulse length is way too long, 100 uS should be enough. – Maple Aug 14 '18 at 10:30
• @NSiri I don't know why you "cannot use full step", unless you are trying to increase precision. The only way to get maximum torque from this driver is to configure switches for maximum running current and full step mode. Also, that delayMicroseconds() call does not define PPS, it only limits maximum possible rate. stepDelay is what changes PPS. – Maple Aug 14 '18 at 10:45
• The reason for this could be wrong stepDelay value. Another reason could be use of wrong data types and not handling timer overflow properly. Or thousand other issues. You did not show enough of you code to answer this. But if your motor generates any sound with 100 us pulse it means the controller recognizes the pulse, i.e. 100 us is enough. – Maple Aug 15 '18 at 7:30
• Torque has absolutely nothing to do with pulse width. You only need pulse long enough so driver can detect it as pulse. It is the delay between pulses that defines speed, or PPS. The torque depends on speed, but not much between 100 and 1000 PPS. – Maple Aug 16 '18 at 9:38