stepper overheating with constant voltage

hi.

I’m using a unipolar 12V stepper, 6 wires, 0.16 A per winding, powering with a 12V /1A adapter. the interface I’m using is a ULN2803. Because I need to hold to torque between the steps (up to 20 min.) the stepper is getting very hot (but still possible to touch).
Is there any major problem or is it just like it is? Any cooling systems available?

the script I’m using:

#include <DragonStopMotion.h>
#include <Stepper.h>
/*
 * DragonInputs example. Demonstrates DragonStopMotion library.
 * In this specific example, pins 2 and 3 were wired as pushbuttons (active low).
 * Pins 5,6 and 7 were wired to LEDs.
 */
#define STEPS 30
 
byte inbyte = 0;
Stepper myStepper(STEPS, 8, 9, 12, 13);    
int count = 0;

// Create global object to communicate with Dragon Stop Motion
DragonStopMotion dsm = DragonStopMotion();

/*
 * Arduino calls this function once, at the start of your program.
 */
void setup()
{
  // set up serial port to 57600 kbps
  Serial.begin(57600);
  myStepper.setSpeed(30);
  /*
   * Other commands are:
   *   DRAGON_PLAY_CMD - toggles playback
   *   DRAGON_LIVE_CMD - goes to live (also re-engages live view)
   */
  
  
  /*
   * Configure output pins. This is optional, if you want to control
   * another device (or just turn on an LED).
   *
   * The choice of output pins below was purely optional, but it corresponds
   * to how they are used in the loop() function in response to DSM messages.
   */
  pinMode(13, OUTPUT); // SHOOT SIGNAL
  digitalWrite(13, LOW);
}

/**
 * Arduino calls this function repeatedly as the main program loop.
 */
void loop()
{ 
  // read serial messages from DSM
  int cmd = dsm.processSerial();
  
  /**
   * The following examples take messages from DSM
   * and turn a digital I/O pin high for 0.5 seconds.
   * You can take any action (or no action).
   */
  if (cmd == DRAGON_CC_MSG) 
  {
    if (dsm.commandFrame <=49) 
    {myStepper.step(dsm.commandFrame/3*4+4);
  }
    // Ramping up - integer math helps here
    if ((dsm.commandFrame >= 50) && (dsm.commandFrame <=200)) {myStepper.step(68);} // Constant speed
    if ((dsm.commandFrame >= 200) && (dsm.commandFrame <=250)) {myStepper.step((68) - ((dsm.commandFrame - 200)/3*4 + 4));}
  }
  
}

No, that's correct, typically stepper motors rated current will take them to 50 to 80 deg C above ambient. If you want them cooler run at a lower current.

Stepper motors are not energy efficient when stationary - its common practice to reduce the current when they come to a stop on the assumption that less torque is needed then anyway. Torque is proportional to current, motor heating to current squared, so even reducing to 70% will halve the heating.

Does the manufacturer or the spec-sheet for the stepper(s) have any notes on this? That's where I'd look to first.

How are the steppers mounted, and what are they mounted to? Generally, you would mount the steppers to something metal that would act as a heat sink, provided the coils are designed to be switched "on" indefinitely.

I've never seen "stepper heat sinks" - that is, heat sinks specifically sold separately from stepper motors - I have seen stepper motors (generally with integrated networkable controllers) that had an attached heat sink or where the case of the motor had heat sink fins molded into it. You may need to do some custom fabrication to attach a heat sink to the motor, and perhaps even add a fan.

Check the spec sheet and manufacturer of the motor(s) first, though.

Steppers are frequently used on positioning tables and the like where thermal expansion of the frame would affect positioning accuracy - it strikes me that using the frame as a heatsink for the motors isn't necessarily a great idea...

Ok. So I could use a 12V/500mA adapter, which would result in a cooler motor with the same torque?

I'm going to mount it on a metal slider (which has to be more or less precise). So, it could work as a heat-sink. The manufacturer spec-sheet has no details about max temp.

How would it be possible to reduce current between steps?

walkingrames: The manufacturer spec-sheet has no details about max temp.

Does the spec sheet say anything about duty-cycle for the coils? Just to be on the safe side, you might want to contact the manufacturer about this; it may work ok as-is, but a little verification could help put your mind at ease... :)

I don't know duty-cicle is, but here are all the specs:

Current Per Phase 0.16A Frame Size 17 Holding Torque 70mNm Length 33mm Number Of Wires 6 Rated Current Per Phase 0.16 A Shaft Diameter 5mm Step Angle 1.8° Voltage 12Vdc resistor 75? inductance 30mH

from the distributer http://uk.rs-online.com/web/search/searchBrowseAction.html?method=searchProducts&searchTerm=440-436&x=30&y=14

As pointed out, steppers normally run hot. If you can still touch it it's likely OK. You could improve things by using a proper driver with current limiting (most modern drivers have this). Something like the Easydriver http://www.sparkfun.com/products/10267 or Pololu's A4983 http://www.pololu.com/catalog/product/1201 are inexpensive options.

so I could plug a 15V / 3.3 A adapter and connect two 18 Ohm resistors to the power supply of the stepper?

I plugged a second stepper (15V, 0.4A) and two 1 Ohm resistors for Ampere regulation. the first stepper (12V, 0.16A; two 18Ohm resistors). The power source is 15 V, 1.5 A. the new stepper now gets hot... any suggestions?

Another issue: the stepper moves well, but after maybe 50 steps it makes one back and continue to move forward. is it a software or hardware problem?

If the stepper's missing steps its a lack of torque - this can be due to it not being strong enough, or to driving it too fast (back EMF limits the current and the torque reduces). A high voltage current-limited stepper motor controller can solve the latter problem by allowing much higher voltages (but at limited current) to overcome back-EMF at high stepping speeds.

You can get a measure of the back-EMF by looking at the voltage developed across a winding (connect AC voltmeter to one winding and turn the spindle by hand).

Yankee: As pointed out, steppers normally run hot. If you can still touch it it's likely OK. You could improve things by using a proper driver with current limiting (most modern drivers have this). Something like the Easydriver http://www.sparkfun.com/products/10267 or Pololu's A4983 http://www.pololu.com/catalog/product/1201 are inexpensive options.

these are for bipolar steppers. are there any good and inexpensive options for unipolar stepper?

I don't know of any good drivers for unipolar steppers but the motor you indicated has six wires which can be wired as either unipolar or bipolar. Here is an explanation: http://pminmo.com/six-wire-motors. If you're interested in building your own driver (bipolar or unipolar) you can find a number of good examples on this same site.