Tuesday, December 11, 2018

why pullout torque is a critical stepper motor value?

Stepper motor pullout torque is the highest torque a stepper motor can output at a given speed without losing steps. Manufacturers find a stepper motor’s pullout torque by accelerating the motor up to the target speed and then increasing the torque load until the motor starts missing steps or stalling.

Performing this test operation over a range of speeds and torques lets the manufacturer plot the data in a complete torque or pullout curve. Then designers get that plot from the manufacturer when they’re evaluating different motor options.

why pullout torque is a critical stepper motor value?

To put it another way, the pullout-torque plot (also called slew rate) for a stepper motor shows the maximum torque at various speeds that a stepper motor can generate. If the motor runs outside of this curve, it will stall. The drive must decelerate or accelerate out and into the stepper motor’s pullout curve.

A related value is stepper motor pull-in curve — the maximum frequency at which a loaded stepper can start and stop without losing steps.) The torque-speed curve changes with inertial mismatch, so designers should aim for a 25% to 50% safety margin when sizing stepper motors. It this is impossible for the application at hand—not unusual for precision applications—other means of compensation may be in order.

To be clear, good documentation of a stepper motor includes a torque-curve that shows pull-in and pull-out curves, as well as several other factors. So before basing design specifications on a stepper motor torque curve, look for data on the following important criteria to ensure the reference is complete.

Saturday, December 8, 2018

Tips on Driving a Unipolar Stepper Motor

This entry shows the configuration I used to make an AstroSync 12VDC, 130 Ohm unipolar stepper motor work. I bought two of these motors somewhere off of Canal St. and had no idea about their specifications or even if they worked. I did know a few things based on some earlier readings. First, most steppers with more than 5 wires can usually be identified as unipolar stepper motors. Unipolar motors can be driven with a ULN2004A microchip. This IC is an array of Darlington transistors which can take small input current from a microcontroller (in our case a BX-24) and use this to step the motor in a particular sequence.

One of the first things I did was try to figure out how the stepper's wires were configured by measuring the resistance of each wire (as compared to all other wires) using a multimeter. I made a truth table as shown below (note that all values are in Ohms and inf stands for infinite resistance):

Tips on Driving a Unipolar Stepper Motor

Wiring the Stepper Motor: 
Based on the truth table I found the coil pattern to be 130 Ohms between the orange to red1, yellow to red1, tan to red2, and black to red2. A total of 260 Ohms resulted between orange to yellow, and tan to black. This is illustrated in the figure below. 

Wiring the Stepper Motor

The next step was to connect the proper wires from the cheap stepper motor to the ULN2004A Darlington transistor. The next figure shows how this was done.The outer coils, orange, yellow, tan, and black are connected to the output pins (16-13) of the ULN2004A. Pin 9 of the ULN2004A is connected to the +12VDC supply. Note that wires red1 and red2 are also connected to the +12VDC. 

BX-24 Microcontroller: 
Note the stepper motor requires 12 volts so I decided to put the stepper circuit on a separate breadboard (note that the voltage regulator is used only to supply 5 volts to the LED so I know that power is going to the ULN2004A and stepper motor). The I/O pins from the BX-24 are connected to the ULN2004A as shown in the last figure. I used the BX-24 code below to step the motor in the proper sequence: 

Tips on Driving a Unipolar Stepper Motor

dim motorStep(1 to 4) as byte
dim thisStep as integer

sub main()
  call delay(0.5) ' start program with a half-second delay 
  dim i as integer

  ' save values for the 4 possible states of the stepper motor leads
  ' in a 4-byte array. the stepMotor routine will step through 
  ' these four states to move the motor. This is a way to set the 
  ' value on four pins at once. The eight pins 5 through 12 are 
  ' represented in memory as a byte called register.portc. We will set
  ' register.portc to each of the values of the array in order to set 
  ' pins 9,10,11, and 12 at once with each step.

  motorStep(0) = bx0000_1010
  motorStep(1) = bx0000_0110
  motorStep(2) = bx0000_0101
  motorStep(3) = bx0000_1001

  ' set the last 4 pins of port C to output:
  register.ddrc = bx0000_1111
  ' set all the pins of port C low:
  register.portc = bx0000_0000

   ' move motor forward 100 steps. 
   ' note: by doing a modulo operation on i (i mod 4), 
   ' we can let i go as high as we want, and thisStep 
   ' will equal 0,1,2,3,0,1,2,3, etc. until the end 
   ' of the for-next loop.

   for i = 1 to 100
     thisStep = i mod 4
     call stepMotor(thisStep)

  ' move motor backward 
   for i = 100 to 1 step -1
     thisStep = i mod 4
     call stepMotor(thisStep)


end sub

sub stepMotor(byref whatStep as integer)
  ' sets the value of the eight pins of port c to whatStep
  register.portc = motorStep(whatStep)
  call delay (0.1) ' vary this delay as neede to make your stepper step.
end sub 

Motion Controller and Driver Selection Tips You Should Know

Motion Controller The first thing that should be checked when selecting a motion controller is compatibility with other system components ...