/*
Stepper Motor Tester v2.1 @Kunal Panchal (MicroStepping)
Board - Arduino Uno R3
Test motor - Stepper motor from 0.1 - 10 Amps
Driver everelettronica LW3D2030N2A1 & LW3D3070N0A1
*/
//Define Pins
int driverPLS = 7; // PLS- pin
int driverDIR = 6; // DIR- pin
int ENA = 5; //ENA signal
int M1 = 13;
int M2 = 12;
int M3 = 11;
int start_state = 4;
string a;
//Config
int Count = 0;
int Pulse_Delay = 100; //Pulse Delay Min 10 micros to 49000 micros.
int cwSteps = 10000; //No. of Pulse to send CW
int ccwSteps = 10000; //No. of Pulse to send CCW
int Microstep_Resolution = 1; // MicroSteps in "1/32", "1/16", "1/8", "1/4", "1/2", "1"
void setup() {
Serial.begin(9600);
//Setting Up pins
pinMode (driverPLS, OUTPUT); //Pulse Pin out
pinMode (driverDIR, OUTPUT); // Direction Pin out
pinMode(M1, OUTPUT); // Microstepping PINS M1
pinMode(M2, OUTPUT); // Microstepping PINS M2
pinMode(M3, OUTPUT); // Microstepping PINS M3
pinMode(ENA, OUTPUT); // Enable Pin out
pinMode(start_state, INPUT_PULLUP);
//ENA HIGH
digitalWrite(ENA, HIGH); //For Emergency Stop
//MicroStepping logic
if (Microstep_Resolution == 32){
digitalWrite(M1, HIGH);
digitalWrite(M2, HIGH);
digitalWrite(M3, HIGH);
}
if (Microstep_Resolution == 16){
digitalWrite(M1, LOW);
digitalWrite(M2, LOW);
digitalWrite(M3, HIGH);
}
if (Microstep_Resolution == 8){
digitalWrite(M1, HIGH);
digitalWrite(M2, HIGH);
digitalWrite(M3, LOW);
}
if (Microstep_Resolution == 4){
digitalWrite(M1, LOW);
digitalWrite(M2, HIGH);
digitalWrite(M3, LOW);
}
if (Microstep_Resolution == 2){
digitalWrite(M1, HIGH);
digitalWrite(M2, LOW);
digitalWrite(M3, LOW);
}
if (Microstep_Resolution == 1){
digitalWrite(M1, LOW);
digitalWrite(M2, LOW);
digitalWrite(M3, LOW);
}
if (digitalRead(start_state)==LOW){
Serial.println("waiting for inputs");
}
}
void CW (){
digitalWrite(driverDIR,HIGH); //Direction Signal
digitalWrite(driverPLS,HIGH); //Pulse Signal 1
delayMicroseconds(Pulse_Delay);
digitalWrite(driverPLS,LOW); //Pulse Signal 0
delayMicroseconds(Pulse_Delay);
}
void CCW (){
digitalWrite(driverDIR,LOW); //Direction Signal
digitalWrite(driverPLS,HIGH); //Pulse Signal 1
delayMicroseconds(Pulse_Delay);
digitalWrite(driverPLS,LOW); //Pulse Signal 0
delayMicroseconds(Pulse_Delay);
}
void loop(){
// Loop clockwise and Counterclockwise
if (digitalRead(start_state)==HIGH){
Serial.println("start");
while (Count <= cwSteps){ //Number of Pulse/Steps for Clockwise Rotation
CW();
Count++;
}
Count = 0;
delay(3000);
while (Count <= ccwSteps){ //Number of Pulse/Steps for CounterClockwise Rotation
CCW();
Count++;
}
Count = 0;
delay(3000);
}
else if (digitalRead(start_state)==LOW){
a = Serial.readString();
Serial.println(a);
Serial.println("Program ended. \n waiting for inputs");
}
}
/*
*/