-
Sorry if this a repeat question. I spent a good portion of the last couple evenings trying to figure out what I'm doing wrong, searching thither and yon.
Virtually all of the hits on Google refer to specific issues with CNC controller kits, voltage being too low, or programming errors.
Background: I'm the Jon Snow of electronics
More background: I have what I believe to be a fairly simple setup:Small stepper motor (https://www.oyostepper.it/goods-993-Motore-passo-passo-ad-alta-temperatura-Nema-17-18-gradi-13Ncm-10A-Classe-di-isolamento-H-180C.html, https://www.oyostepper.it/images/upload/File/17HS08-1004S-H.pdf)
3.3V to 5V Level Shifter
Teensy 3.5
Digital Stepper Driver (https://www.oyostepper.it/goods-111-Driver-passo-passo-digitale-10-42A-20-50VDC-per-motore-passo-passo-Nema-17-Nema23-Nema-24.html, https://www.oyostepper.it/images/upload/File/DM542T.pdf)
24V x 15A Power SupplyCode and schematic follow. I'm a programmer but I am very new to electronics. I learned KiCAD just to make this post so I didn't waste anyone's time if possible. The issue is as follows:
The code runs and happily rotates the motor in one direction.
When the code flips to reverse direction, it instead stands still.
It happily rotates/stands still until it makes a buzzing noise and gets hot (this is the point I gave up and started learning KiCAD).Validation Steps:
Checked and re-checked the Red, Green, Blue, Black wires to A+/-, B+/- until my eyes crossed
Validated that the code only sends the reverse signal once per second (during inversion).
Put a multimeter on the level shifter to validate that the output for PUL and DIR is changing from 200mV to 4.8V in time with the serial output of the code.Code:
/*
Stepper Motor Test
stepper-test01.ino
Uses MA860H or similar Stepper Driver Unit
Has speed control & reverse switchDroneBot Workshop 2019
https://dronebotworkshop.com
*/// Defin pins
int driverPUL = 7; // PUL- pin
int driverDIR = 6; // DIR- pin
int ledPin = 13;// Variables
int pd = 500; // Pulse Delay period
boolean setdir = HIGH; // Set Direction
int reverse = 0;// Interrupt Handler
void setup() {
Serial.begin(9600);
pinMode (driverPUL, OUTPUT);
pinMode (driverDIR, OUTPUT);
pinMode (ledPin, OUTPUT);
digitalWrite(driverDIR, setdir);
digitalWrite(ledPin, HIGH);delayMicroseconds(1 * 1000000);
Serial.println("Validate LED");
delayMicroseconds(1 * 1000000);
digitalWrite(ledPin, LOW);
delayMicroseconds(1 * 1000000);
digitalWrite(ledPin, HIGH);
}void loop() {
reverse++;
if (reverse >= 1000) {
Serial.printf("Reverse loop: %d to %d\n", reverse, setdir);
setdir = (setdir == LOW) ? HIGH : LOW;
digitalWrite(driverDIR, setdir);
digitalWrite(ledPin, setdir);
reverse = 0;
delayMicroseconds(pd);
}
digitalWrite(driverPUL, HIGH);
delayMicroseconds(pd);
digitalWrite(driverPUL, LOW);
delayMicroseconds(pd);
}"Schematic" to follow. I screwed up the drawing. Not pictured is the Neutral wire on the power supply connected to Neutral on the digital stepper driver. I'm tired and I just can't go back and open up the library definition and rewire the drawing.
Thank you for any advice or help.
-
@shishioude This forum is for users of Duet electronics boards and/or RepRapFirmware. Unfortunately you are using neither! While we're happy for these kinds of questions, it's outside the scope of my knowledge to debug your firmware and electronics. I hope someone else will be able to help you.
I'm moving this thread to the 'Off topic' category.
Ian
-
-
@shishioude your code is a little hard to understand because of the lack of indentation (hint: use the </> button when entering code into your post), but I think you are trying to move the motor alternately forwards and in reverse, at the same speed in both cases. If that's the case, I suggest the following:
- Disconnect the DIR input wires between the driver and the level shifter
- Check that the motor runs smoothly (but in the same direction always) when you run your code
- Then connect the DIR input wires of the driver to +5V and ground to reverse the direction
- Check whether your code now runs the motor smoothly, but in the opposite direction always
If that works then there was something wrong with your wiring to the DIR inputs of the driver, or the level shifter wiring. If it doesn't work and in one case the motor just buzzes and gets hot, then I suspect a faulty driver.
-
@dc42 OK, Thanks for your suggestion, i will have a try.