Maker Pro
Maker Pro

Question on Stepper Motor Won't Reverse

naxieyousan

Mar 29, 2024
1
Joined
Mar 29, 2024
Messages
1
Stepper Motor Won't Reverse, Instead Cooks Eggs


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-31-...-18-gradi-13Ncm-1A-35V-42x42x20mm-4-fili.html, https://www.oyostepper.it/images/upload/File/17HS08-1004S.pdf)
3.3V to 5V Level Shifter
Teensy 3.5
Digital Stepper Driver (https://www.skysmotor.co.uk/goods-1...r-DM542T-for-Nema-17-23-24-Stepper-Motor.html, https://www.skysmotor.co.uk/images/upload/File/DM542T.pdf)
24V x 15A Power Supply

Code 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 switch
  
  DroneBot Workshop 2019
  [URL]https://dronebotworkshop.com[/URL]
*/
 
// 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.
 

Attachments

  • tutorial.pdf
    51.1 KB · Views: 1
Last edited by a moderator:

danadak

Feb 19, 2021
767
Joined
Feb 19, 2021
Messages
767
Can you see with scope the dir pin is being flipped ?

The level converter, its has to supply, worst case, 16 mA for each pulled up pin, eg, ENA,
OPTO, PULL, DIR, so confirm its able to meet their high level requirements.

Note when you post code use the code tag menu item, it makes the code more readable.


Regards, Dana.
 

davenn

Moderator
Sep 5, 2009
14,260
Joined
Sep 5, 2009
Messages
14,260
I'm not a programmer, so cannot follow your code. But just a thought, is there a stop command before getting it to go in the other direction ?
 
Top