Electronic Parts required to get Linear Slide Rail with Nema23 Stepper Motor Operational

Hi There,

Unusual request.

I have a linear guide rail with a Nema23 stepper motor, which I would like to use to move a Record Player (Turntable) Tone Arm back and forth smoothly, but very precisely (0.01-0.05mm) precision, as it’s being used for an extreme precision use case.

I don’t really need I fancy UI (well at least I don’t think I do), just a button or similar, which will move the top plate to certain position down the rail (accurately) and back again (accurately). Has to be precise and slow (few centimetres per second is fine).

Also, I’m not sure of the motor noise, but would be great if someone can also recommend a quiet motor replacement.

Could you please indicate what parts I will need to get the job done. Assuming a controller, PSU, Arduino, etc…

Screen Shot 2021-09-10 at 10.30.42 am


Hi Viren,

Interesting, that kind of precision should be possible using the appropriate steppers, although you’ll certainly want to look into micro-stepping in order to cause as small changes in rotation as possible from your motor:

As for quieting down your steppers, the driver for your motor will have much more influence over this than the motors themselves in my experience (mainly from 3D printer modding and determining faults in drivers/motors). Something like a TMC2100 comes to mind for a NEMA23, but you’ll want to do some research on what’s most suitable for your motor.

This instructable should be quite useful for your project :grinning_face_with_smiling_eyes:

Please let us know if you have any further questions.

1 Like

Thanks, and am I able to pickup all the necessary parts from Core Electronics including the Micro Stepping Drive?

1 Like

Hi Viren,

We’ll have to see what we can do. What’re the specifications you’ll need on your motor to drive that actuator in your project (max-RPM, torque, environmental conditions, …)?

Hi Viren,

Welcome to the forums :slight_smile:

There’s some good links and ideas on quieting down steppers in Doonie’s tower crane thread:

1 Like

The below image shows how closely vibration, and therefore noise, is related to microstepping. Choosing a controller with good microstepping control and configuring the motor and controller correctly is likely to be more important than which motor you choose.

The graphs show a MPU6050 measuring acceleration perpendicular to the shaft in a stepper driven from an A4988 controller. Note that the scaling differs between runs (the Arduino IDE plotter auto-scales and cannot be overridden). The tests were all run at the same speed of rotation to make them comparable. A slow speed was used to ensure multiple readings per step - speed is an important consideration in running the motor quietly. Mounting for the motor is also important - there are flexible mounting frames available that considerably reduce vibration.



Nice data @Jeff105671 . Love a good graph. Really shows the effect well.

1 Like

Thanks for your help.

I picked up the following:

  • LRS-350-12 (12v Power Supply)
  • DM556 Driver (20-50vdc)
  • Arduino UNO board

Connected the PSU, Driver and the NEMA23 motor all together properly without the Arduino board, but noted no movement or any noise on the motor at all. Looked at the driver and noticed a steady Green light and another steady Red light.

Then realised, it’s probably because the input voltage on the driver is rated from 20-50vdc, whereas the PSU is only outputting 12v.

Anyway, have placed another order for the LRS-350-24 (24 volts) PSU and hoping it will at least start this time. Once confirmed it’s working, I’ll connect up the Arduino board.

Anything else I need?

This unit will be sitting indoors (normal room temperature), attached to a Record Player with a linear tonearm sitting on top to move the tonearm out of the way, each time I need to place a record and back again, once ready to play.

Slow, but precise movement required because where it stops, will the same position where the record needle will need to drop onto the record surface, so should be accurate to within 0.05mm or better.


You won’t get any movement or noise from the the motor until you connect the Arduino and run some code that issues the pulse and direction commands to the controller. A 12v supply may work even though it is outside the specs, although 24v would do better, depending on the load that the rail imposes on the motor.

Ok, I’ve connected everything together, including the Arduino as per the following example, but there is no noise or movement.


It is loading the code onto the Uno successfully.

That code doesn’t look right to me. This is the bit from the DM556 datasheet:
“Enable signal: This signal is used for enabling/disabling the drive. High level +5V (NPN
control signal) for enabling the drive and low level for disabling”

So there is no reason for setting enable low before starting to step. Comment out the line
digitalWrite(enblPin, LOW);

I’m not sure how much I would trust that site. The comment “Yes it’s barely a square wave generator” suggests that the writer doesn’t understand what signal they are supposed to be creating. An example that deals specifically with the DM556 would be more useful. This looks like it might be OK. Plus, of course, the datasheet which should always be at your elbow while configuring the device.

1 Like

Hi All,

I’ve received the right PSU to suit the driver - 24v this time around

Just wondering, will the following article work?


1 Like

Yes - that looks like a very competent tutorial. I would recommend following the examples in sequence. The third example is a good demonstration of how to make good use of the features of that driver…

1 Like

Thanks Jeff.

I’ve finally managed to get the slide rail to move back and forth after following the tutorial and simplifying the code.

Curious, next step is to get the motor to do the following:

1/ Press button to start the motor spinning clockwise until it reaches a particular location. Once there it must stay there. Happy to cut the power at this point

2/ Press button to start the motor again spinning counter-clockwise until it reaches a particular location. Once there it must stay put. Happy to cut the power at this point

Would you know what I would need to make that happen and how to wire it up to the controller. Also, how do I get the Arduino to function, without being connected to a seperate computer once the code has been loaded in.

Appreciate all your help.


Code to respond to a button press is available at many places, such as:

It’s not clear what a ‘particular’ position is. If the position is part of the code then to move the motor to that position and stop, you can use the moveTo() function from this stepper library.
AccelStepper: AccelStepper library for Arduino (airspayce.com)

If the position is defined by hardware such as a limit switch, then this example shows the required code:
Homing with the AccelStepper library and a limit switch - YouTube
(There are others that do the same thing).

There is no need to do anything to get the motor to stay there.

This is the same as the previous case, except using either a different position in the code, or a different limit switch combined with the opposite direction command.,

1 Like

Hi Jeff,

I would like the slider to move to forward to a particular location, then stop and cut the power completely. eg. use a switch to do so. The reason for this is to prevent unwanted motor vibrations transmitting back up to the hyper sensitive turntable needle on the tonearm bolted on top of the slide rail itself.

Then if I press a button again, I would like the slide rail to move backwards, stop again at a fixed location and cut the power.

Hope that’s a little clearer.


1 Like

Is the position to move to defined in terms of the number of steps for the motor to move from a known starting position? If so, that counting is done in the code, and the required configuration involves knowing where the slider is starting from. This could be set manually before startup, or there may be a need for a homing procedure which moves the slider to the predefined starting position, for instance by sliding it completely to one end.

But if the position is defined by the actual location of the slider on the rail then you need to install limit switches on the rail that are activated by the slider, or on some other fixture to be activated by whatever the slider is moving. This means you need to wire the signal from these limit switches back to the Arduino, and there will be code that detects when the limit switches are hit. The switches could be mechanical, optical or magnetic.

So there is a considerable difference in both the code and the physical construction that is dependent on how a ‘particular’ position is being defined.

There is no need to control the power in order to stop the motor - it should not vibrate if the driver is not being stepped. If you want to remove power to the motor then the driver has an enable (ENA) input which can be controlled by an Arduino pin and which removes all drive to the motor.

Hi Jeff,

This is great info.

If it helps, the slider will need to stop at a particular location on the rail with a high level of precision, as that’s where the turntable tonearm needle will drop prior to playing music (I will need to check the needle alignment with a strong magnifying glass to ensure it’s in the right spot)

Therefore, according to your recommendation, either an Optical or Mech switch will likely work.

Would you have a recommendation on a suitable switch for this project?


Hi All
Have been following this thread a bit in order to see what the ultimate solution will be.
I think to get the accuracy you are striving for might be a bit difficult. Limit switches, although can be pretty close will have some variables different from actual switch to switch. Time to operate is one. Motor over run which will be dependent on motor speed and any braking is another. Even a switched diode brake on a brushed motor will have a slight over run. Accuracy could be improved with a finer thread on the linear drive but this would slow things down requiring a faster motor which would worsen any over run problem and so it goes on.

If such accuracy is required that entails checking with a strong magnifying glass I will be extremely interested in the solution especially as this is apparently a home grown project without I assume the luxury of fine precise measuring instrumentation.

I wish you well and will follow with interest.
Cheers Bob

As a general rule, a mechanical switch will provide the accuracy you need, provided that it is actuated directly by the switch button, and not by a lever arm. A lever arm is common, because of the options it provides for choosing the contact surface, but the springiness of the arm has an effect on the repeatability of the stop position, and repeatability seems to be the important factor in this case. So check that the lever can be removed, and that the switch can be mounted on the rail so that the button directly contacts the slider. I would recommend a module that includes the wiring for both +5v and ground, as this is much less susceptible to noise.They come in many different shapes and sizes. For instance:

An optical switch will also provide the repeatability required, provided it is mounted correctly. I would recommend the interrupter type, as this allows you to mount the shutter tab close to the detector, to achieve a sharp cutoff. Again, there are many different types and shapes. See, for instance:

Note that both a physical and an optical switch will need some form of adjustment, either in the switch position or in the movement mechanism, in order to place the detection point exactly as required.

A magnetic sensor would need to be carefully matched to the magnet in order to get suitable repeatability, and probably has no advantages over the other two. However, modules are available which allow the detection distance to be tuned.

Installation would not require a precise adjustment facility. Coding for this type of sensor is a little more complex but it does provide the option of adjusting the trigger point from code.