I’m using a ROB-10846 stepper motor driven by a ROB-12859 Big Easy Driver, which is connected to an arduino MKR WiFi 1010. When on, the motor just vibrates: it holds it’s current position, but the driver only draws ~.25 amps @ 24v (both with a dedicated power supply, and with a benchtop variable power supply I’ve used in debugging) and shaft does not rotate at all.
The vibration does match the step frequency I tell the arduino to signal, and I’ve verified the arduino output using an oscilloscope.
If I bring any of the MS pins HIGH, the motor does nothing (doesn’t resist me rotating it by hand, and the driver doesn’t draw any more current than if the motor is unplugged entirely).
I’ve checked my wiring configuration and verified that the coils in the motor are paired correctly and searched around about this a lot, but nothing has worked. I haven’t done anything to kill the driver that I can think of (like plugging/unplugging the motor while the driver is trying to step the motor), but I’m still getting the impression it is dead. Is there anything in particular I can check to see if it is still functional?
The arduino code is below, and I’ve also attached a picture of the (admittedly very simple) wiring. Any insight would be really appreciated!
#include <SimpleTimer.h>
//Declare pin functions on Arduino
#define EN 6 //enable. LOW = enabled
#define MS1 7 //microstep select 1. truth table is online for these 3.
#define MS2 8 //microstep select 2. they are used to select microstep resolution.
#define MS3 9 //microstep select 3. 16th step is H-H-H, 8th is H-H-L.
#define rst 10 //rest. LOW = step commands ignored.
#define slp 11 //sleep. LOW = board sleeps. more basic rest.
#define dir 12 //direction. LOW = foward.
#define stp 13 //step. going from LOW to HIGH triggers one step. size/direction chosen below.
#define STEP_RATE 500 //Hz
SimpleTimer timer;
void setup() {
Serial.begin(9600);
//set pins to output
pinMode(stp, OUTPUT);
pinMode(dir, OUTPUT);
pinMode(MS1, OUTPUT);
pinMode(MS2, OUTPUT);
pinMode(MS3, OUTPUT);
pinMode(EN, OUTPUT);
pinMode(slp, OUTPUT);
pinMode(rst, OUTPUT);
resetPins();
timer.setInterval(1000/STEP_RATE, stepMotor);
}
void loop() {
timer.run(); //runs stepMotor() on timer
}
void stepMotor(){
digitalWrite(stp, HIGH);
delay(1);
digitalWrite(stp,LOW);
delay(1);
Serial.println("Step");
}
void resetPins(){
digitalWrite(stp, LOW); //step
digitalWrite(dir, LOW); //direction
digitalWrite(MS1, LOW); //microstepping
digitalWrite(MS2, LOW); //microstepping
digitalWrite(MS3, LOW); //microstepping
digitalWrite(EN, LOW); //keep low for FETS to be enabled
digitalWrite(slp, HIGH); //keep high for FETS to be enabled
digitalWrite(rst, HIGH); //keep high for FETS to be enabled
delay(2); //setting sleep and rest high needs at least 1ms delay
}