To be used in a stepper controlled rotating table steppers have been tried.
One is a 23HS9430B and the other is a 23HS8430. The driver was bought some year or two ago and they have fallen out of the Ebay orders list. I have the idea that it is some TB66xx type. It 's set for 2.5 Amp. Single step, micro stepping * 4, 8 and 32 has been tested. The common issue for all the stepping rates is overshooting. Using a test factor of 0.7 to the number of steps makes it come close to the target.
The power supply is a 24 volt 17 Amp switched supply.
The speer also move in a jerky, rattling way. Varying the stepper puls rate make no difference.
Fiddling with steppers for a few years this behaviour has never been seen.
The controller is an UNO supplied via USB. No common GND for Vcc resp. the 24V motor pwr.
what am I missing? Anybody having new ideas to try?
Test code below:
//#include <Stepper.h>
#define Low 0
#define High 1023
#define fwd HIGH
#define bwd LOW
#define motorX 1
#define motorY 2
#define motorZ 3
void setup()
{
Serial.begin(115200);
Serial.println("NEMA 23 3.0 Nm test 201110");
delay(5000);//Show program name
pinMode(2, OUTPUT); //can be used as x-step
pinMode(5, OUTPUT); //can be used as x-dir
pinMode(8, OUTPUT); //enable active low
pinMode(13, OUTPUT);
}
void stepmotor(int, int);
void stepmotor(int (motor), int(dir))
{
int adir;
unsigned long start;
start = millis();
// Serial.print("Dir: ");Serial.println(dir);
digitalWrite(8, LOW);//enable motorpower
if ( dir == fwd )
{
adir = High;
Serial.println("Forward");
}
else
{
adir = Low;
Serial.println("Backward");
}
//Serial.print("Start :"); Serial.println(millis());
for (unsigned int count = 0; count < 800 * 37 / 50; count++)
//for (unsigned long count = 0; count < 6400ul * 7ul / 10ul; count++)
// for (unsigned long count = 0; count < 6400ul * 56ul / 80ul; count++)
// for (unsigned long count = 0; count < 6400ul * 2ul / 3ul; count++)
{
if (motor == motorX )
{
digitalWrite( 5, dir);//digital dir does not owerride analoWrite(5, dir)
digitalWrite( 2, HIGH);// digital x-step
delayMicroseconds(10);
digitalWrite( 2, LOW);// digital x-step
delayMicroseconds(2990);
}
if (motor == motorY)
{
digitalWrite( 6, dir);
digitalWrite( 3, LOW);
digitalWrite( 3, HIGH);
delay(5);
}
if (motor == motorZ)
{
digitalWrite( 7, dir);
digitalWrite( 4, LOW);
digitalWrite( 4, HIGH);
delay(5);
}
}
Serial.print("Stopp :"); Serial.println(millis() - start);
// digitalWrite(8, HIGH);//disable motorpower
}
void loop() {
// put you()r main code here, to run repeatedly:
// analogWrite( 0, Low);//tst
// analogWrite( 1, Low);//tst
// analogWrite( 2, Low);// x-step analog KLAR
// analogWrite( 3, Low);// y-step analog KLAR
// analogWrite( 4, Low);// z-step analog¨KLAR
// analogWrite( 5, Low);// x-dir analog KLAR
// digitalWrite(2, LOW);// x-step digitalt
// digitalWrite(3, LOW);// y-step digitalt
// digitalWrite(4, LOW);// z-step digitalt
// digitalWrite(5,LOW); // x-dir digitalt
// digitalWrite(6,HIGH);// y-dir KLAR HIGH == CW LOW == CCW
// digitalWrite(7,HIGH);// z-dir KLAR HIGH == CW LOW == CCW KLAR
// digitalWrite(8,LOW);//
// digitalWrite(9,LOW);//
// digitalWrite(10,LOW);//
// digitalWrite(11,LOW);//
// digitalWrite(12,LOW);
stepmotor( motorX, fwd );
// pulse (motorY, fwd );
// pulse (motorZ, fwd );
digitalWrite(13, LOW);
delay(4000);
// analogWrite( 0, High);//
// analogWrite( 1, High);//
// analogWrite( 2, High);//x-channel KLAR
// analogWrite( 3, High);//y-channel KLAR
// analogWrite( 4, High);//z-channel KLAR
// analogWrite( 5, High);//x-dir KLAR
// digitalWrite(2, HIGH); //x-step!!!
// digitalWrite(3, HIGH); //y-step!!!
// digitalWrite(4, HIGH); //z-step!!!
// digitalWrite(5, HIGH); //X-DIR CW ON HIGH CCW ON LOW
// digitalWrite(6, HIGH); //Y-DIR CW ON HIGH CCW ON LOW KLAR
// digitalWrite(7, LOW); //Z-DIR CW ON HIGH, CCW ON LOW KLAR
// digitalWrite(8,HIGH);//
// digitalWrite(9,HIGH);//
// digitalWrite(10,HIGH);//
// digitalWrite(11,HIGH);//
// digitalWrite(12,HIGH);//
stepmotor( motorX, bwd );// går finfint +200, -200 steg
// pulse (motorY, bwd );
// pulse (motorZ, bwd );
digitalWrite(13, HIGH); //
delay(4000);
}