This little wonder of electromechanical engineering came from inside a laser diode sled of an HP CT10L Bluray drive I’ve opened some time ago. The device on the picture consists of several parts, all easily fitting on a dime coin: a bipolar stepper motor with lead screw, a linear stage, a lens, and even an end position sensor (I’ve yet to make use of the sensor though). The entire assembly is only 14mm x 9mm x 4mm. This post is about making this tiny motor move. Keep reading!
The picture on the left shows the location of the stepper inside an HP CT10L laser diode sled, in case you feel like you need one for yourself. I bought a bunch of broken laptop Bluray drives on eBay with only the blue/violet (405nm) laser diode in mind but was quite surprised to find this miniature linear stepper assembly inside and just had to see it move. Besides, I needed a bipolar stepper motor test circuit for another project I’m working on, and proving the test circuit on this little curiosity just made it more fun.
I based the tester on EasyDriver by Brian Schmalz – an open source bipolar stepper motor driver board based on Allegro A3967 driver chip. A3967 makes connecting a stepper motor to an MCU, such as Arduino, very easy by taking care of the stepping sequences and, more importantly, microsteps. The latter would be rather difficult to implement on Arduino – an MCU that does not have a DAC on board. EasyDriver makes the job even easier by providing all outputs of A3967, which is an SMD IC, in an easily breadboarded DIP package.
Here is the circuit schematics. It contains bare minimum parts, thanks to the EasyDriver board carrying most of what’s needed for the A3967. I have breadboarded the circuit so as to be able to reconfigure it easily for different motors, and the breadboard is pictured in second part of the video. The Arduino sketch that provides the controls and creates the STEP and DIR signals for EasyDriver board is below.
Please note that the sketch is written to only send to the EasyDriver board a particular number of steps upon pressing the STEP button (unless you depress the button earlier than the steps can be completed in which case it stops and step count resets) because for testing of unknown motors I needed to be able to count how many steps does it take for one full revolution. You can easily adjust this line of code:
int stepsPassedMax = 160; that presumes 20 steps per revolution. 160 is there because A3967 driver has 1/8th microstep enabled by default, so 20*8=160. Additionally, if you need this for continuous stepper rotation, the step counter can be easily removed from the program.
So, here is what I’ve found out about the nano-sized stepper and the linear stage assembly:
- It’s a 20 steps per revolution bipolar stepper.
- The windings are 27.1Ω
- The windings are most likely energized from the 1.8V source in the Bluray drive. I’ve used Arduino’s 3.3V output for the load supply of A3967 to simplify the setup. The motor gets slightly warm after a few minutes but the load current can also be adjusted on EasyDriver board to alleviate that
- The linear stage has 2.5mm travel and it gets there in 14 full rotations. So, in theory, you can position this lens (or whatever else you choose to mount on it instead) with pretty darn good precision:
it’s 0.179 mm lead step (thread step) and A3967 can take 160 steps (winding energizing steps) to complete one rotation, so, it’s a whopping 0.00111 mm or, in other words, 1.1 micron per step. This is millimeters, by the way, not to confuse with thousands of an inch. Sounds like it could be used for positioning of samples under a microscope by someone who does not want to shell out $500 for a professional positioning stage. Just a thought …
- The end position sensor has three wires coming out of it and is most likely an LED/photodiode pair – I’ve yet to do more research on that. but it’s nothing short of amazing how they managed to put it in the assembly!