Stepper and Driver heat mitigation

Thread Starter

xrandom66x

Joined Jul 21, 2015
13
Hey all, I'm working on a project i posted about a long time ago (probably over a year) that I had to put on hiatus, but am picking it back up.

Long story short, I'm building an analog clock as a gift for my dad using an Arduino Uno. It'll have minute and hour hands only. I will use a stepper with gears to drive these hands. However, I am concerned about prolonged heat that the stepper and its driver will generate.

Here are links to what I am using: Stepper link, Driver link
I am using a power supply with 12VDC, with 1.67A max. The potentiometer on the driver is set to the lowest setting of 150 mA.
Also, I am not sure how much torque I'll actually need from a stepper: I imagine not a lot, but the hands will be made of acrylic rod and the gears and shafts will be metal, bought from http://www.sdp-si.com/products/Gears/Index.php.

Here is the stepper configuration I'm using, though I have pins 4 and 5 swapped. Doesn't matter in this case though as they're both LOW.

I ran some preliminary tests using a simple code to see how much it would heat up. Basically, I had it do 40 full steps every second. I tried to minimize the time that the stepper was energized to 1ms, and deenergized for 1499ms. Overall, this is much faster than what I plan on actually running it, but I was surprised on how hot it got... I let it run for about 20 minutes or so, and the stepper rose to about 50 deg C, and the IC on the driver got to about 65 deg C!
Code:
void setup() {
  // put your setup code here, to run once:
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);

}

void loop() {
  // put your main code here, to run repeatedly:

digitalWrite(2, HIGH);
  delay(1);         
  digitalWrite(2, LOW);
   delay(24); 
}
Now currently I'm running a similar test at a more realistic step pace, 0.66 steps every second, or 1 step every 1.5 seconds. This would mimic what would happen in the final product, albeit a different code to run it. The time execution should be similar though;
Code:
void setup() {
  // put your setup code here, to run once:
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);

}

void loop() {
  // put your main code here, to run repeatedly:

digitalWrite(2, HIGH);
  delay(1);         
  digitalWrite(2, LOW);
   delay(1499); 
}
I thought with the code executing 60x less per second, it would mitigate the heat generated... alas that is not the case. The stepper is still 50 deg C, the IC on the driver at 64 deg C.

Overall, is there anything I can do to mitigate the heat these generate? Since this is for a wall clock, it'll be on 24/7, and I'm afraid of a prolonged burnout. I've thought about heat sinks of some kind, but would like to know the theory of why it's getting so hot and see if I can change the configuration or code before I jump into that. Perhaps I need to look into buying a smaller stepper, or maybe approach this differently altogether. Thoughts?
 

MaxHeadRoom

Joined Jul 18, 2013
30,658
A stepper motor typically runs at the rated plate current, not less, not greater, hence the generated heat, in some applications where momentary movement is used, the stepper drive can be shut off between moves, this keeps the heating effect down.
Maybe you are using a stepper with higher than needed torque?
Max.
 

Thread Starter

xrandom66x

Joined Jul 21, 2015
13
Right, because although I tried to reduce the time its energized in the sample code as much as I could, it's still executing consistently often. I think that executing only once every 1.5 seconds makes it heat up slower, but eventually still get as hot.

Yes I agree, to be honest I think that figuring how much torque I actually need and using an appropriate stepper is the first step to solving this

But still- if I had a stepper hooked up and "ready" to step so to speak, would it still generate heat while idle? I wouldn't think it would since no coils are being energized. Unless there is still some current flowing through it so it's "ready"? Is that how these work?
 

MaxHeadRoom

Joined Jul 18, 2013
30,658
Typically the current in a stepper motor is constant from stationary (holding torque) to revolving.
Modern drives use a higher than rated voltage, but attempt to maintain the rated current from stationary to up to speed by means of PWM etc.
If idle for a long period and the position does not require any holding torque then the stepper can be shut off.
Max.
 

Thread Starter

xrandom66x

Joined Jul 21, 2015
13
Ahh thanks for your reply. That makes sense.

I just tested a similar code with the same initializing setup, but it just loops a delay, doesn't actually do anything. The stepper still got to about 44 degC and the IC driver to 57 degC. So there must still be current flowing through both when idle for that holding torque.

Perhaps I could add a switch somewhere that only allows current through to the driver immediately before the stepper executes, and switches off after it's done? Or is that bad circuit design? I wouldn't think I actually need holding torque, since gravity on the hands will be the only acting force, and these hands won't weigh very much. Again, something I need to calculate. Though, it might be futile, since it'd only be idle for 1.4 seconds at a time, roughly.
 

MaxHeadRoom

Joined Jul 18, 2013
30,658
There is a natural holding torque or detent to stepper motors, typically.
In some cases this holding torque is sufficient to hold position when stationary.
Max.
 

AlbertHall

Joined Jun 4, 2014
12,625
You really don't need that powerful stepper simply to move clock hands. Something like below would be more appropriate and it is already geared. This motor is too slow for many applications but it is plenty fast enough for clock hands. It will use far less power.
 

Thread Starter

xrandom66x

Joined Jul 21, 2015
13
You are right. I planned on gearing it myself to add some “personality” if you will, so was more concerned with all the metal gears and hand brackets I was going to use. Thanks for your input.

Also It sounded like you were going to link a stepper, but I didn’t see a link.
 

Thread Starter

xrandom66x

Joined Jul 21, 2015
13
Ooh thanks that actually looks fabulous. I'll still need to gear it anyways to run minute hand and hour hand simultaneously, but looking at its specs, should be up for the job. Hopefully the driver chip also won't get terribly hot like the one i have too.

Update: this wouldn't actually work. I found that the gear ratio is not actually 1 / 64, but some long decimal like 1 / 63.68395, which means over the course of days/weeks/months, the time will be close, but not exact. I could code some sort of correction step every day or something, but would rather find something that has exact steps per revolution.
 

Thread Starter

xrandom66x

Joined Jul 21, 2015
13
http://forum.arduino.cc/index.php?topic=71964.0

I'm not sure if its the exact one you linked, but it begs caution. Also, Adafruit has similar motors geared at 1/16 ratio, but again even they say its an approximate ratio.

https://www.adafruit.com/product/918

Still... I could design it to have an exact steps per minute ratio, and everyday execute a corrective turning, as I'll have proximity sensors to tell where the hand is. I might have to do that anyways, since over long periods of time, I'm not sure how accurate my RTC module is yet. But I'd like to avoid that
 

Thread Starter

xrandom66x

Joined Jul 21, 2015
13
Haha oh I remember that. Nah a gift for my pops. I've been trying to get it done for a few years now... work and school have taken all my time.
 
Top