Tuesday 17 April 2012

L92100 Linear Stepper Motor with Arduino

A few years back I mentioned to a friend that I was interested in using linear actuators for a particular project. They turned up a few days later with this unusual looking motor.



Instead of rotating a protruding shaft, like a regular motor, this motor rotates an internal threaded section (something like a nut). If you hold the motor the way I have in the second picture and activate it then the threaded part rotates. However, if you prevent the threaded section from rotating then the movement of the internal nut pulls the threaded rod through it, with the action of a lead screw.

I couldn't find much documentation from the serial number (ODV76/L92111-P1), so had to do some detective work to figure out how to use it (which is why I'm writing this post). Atually, you can get some data on it by typing 'L92100 linear stepper' into google (rather than all the other characters). Evetually I found this datasheet, and more recently this one too.

It's a 6 wire unipolar stepper so I used the circuit diagram from azega as a base, changing the transistors to N-channel Mosfets (I had some lying around) and not using diodes (I didn't have any lying around). It'd be a good idea to include these at some point.

Here's a video of it working with the Arduino stepper library: 



Currently the motor gets pretty hot during use, which is concerning and somewhat unexpected, as there is no load on there at the moment.

Here's the Arduino code for the movement in the video (a modified version of one of the stepper examples included in Arduino 0022).
 
#include

const int stepsPerRevolution = 200;  // A random value for now

// initialize the stepper library on pins 2 to 5
Stepper myStepper(stepsPerRevolution, 2,3,4,5);           

void setup() {
  myStepper.setSpeed(60);
  // initialize the serial port:
  Serial.begin(9600);
}

void loop() {
  Serial.println(" down" );
  myStepper.step(-200);
  delay(200);
  myStepper.step(-200);
  delay(200);
  myStepper.step(-200);
  delay(500);
  Serial.println(" up" );
  myStepper.step(600);
  delay(500);
}


I hope all this helps someone...

No comments: