How to reduce high pitched stepper motor noise?

Any suggestions for improving this noise issue would be very welcome…

Application: This is for a lab instrument where annoying sounds will be an issue.

  • a stepper motor (rather that a miniature gearmotor) suits the application because of reliability, simplicity, and easy accurate speed control at low speed.

I’m using the DRV8834 to drive a NEMA 8 motor (SY20STH30-0604A).
For prototyping, I’m providing the pulses to the DRV8834 with an Arduino Uno.
I’m trying to achieve continous rotation of the motor shaft at a constant 60rpm. The torque requirement is very low.
I have set the DRV8834 in 1/32 step microstep mode and I provide step pulses at 6400Hz (very simply by using the Arduino ‘tone’ function rather than playing with the timers).
The current limit has been set to a level a small amount above which the motor starts to jitter a bit (well below the rated current of 600mA per coil). Setting the limit low helps with the low frequency noise.
I use a bench power supply to supply the DRV8834 with 10V - it draws 0.2A from the supply which seems right. I have played with the adjusting the voltage - higher seems better from a low frequency noise perspective - and is also better for torque.

The resulting rotation is pretty smooth and at the right frequency. Functionally it does the job well.
The noise issue is really just the high pitched whine. My ears are not great and it annoys me - whereas my daughter cannot be in the same room as the instrument!

I should say that it’s only once the motor is mounted that the sound becomes annoying - ie it excites ringing in metal components. I have a number of options for acoustic isolation and damping but first I’d like to see if there is anything that can be done to reduce the source of the problem.

I’m thinking specifically of the following options:

  1. Capacitors across the motor coils? (does this just mess up the current control?)
  2. Can I adjust the current chopping frequency of the DRV8834?
  3. Is it worth me playing with ‘mixed decay mode’?
  4. Would increasing the microstep resolution help? (modulate using external DAC)
  5. Is it worth me trying a different stepper driver? (at the moment I’m just looking for the easiest solution to prove that using a miniature stepper is a viable option)
  • any other suggestions welcome!

Thanks in advance!


It sounds like you have tried a lot of the steps we would have suggested you try. I found a web page here with a little more information that might be helpful for you. If you watch the video on that page, he goes over how decay mode affects the current waveform (and noise) produced by the stepper. Our driver carriers use a 47kOhm resistor, which puts the driver in a mixed decay mode where 50% of the cycle is fast decay when the current falls. If you want to change the decay on our boards, you will need to change the values of those resistors (I don’t have any suggestions for easy ways to do this), and you can find mode information about how the resistor value changes the decay cycle in Table 1 on page 14 of the DRV8834 datasheet.

I think capacitors would interfere with the current control and the current chopping frequency is fixed. Increasing the microstepping resolution is likely to be difficult to do with that driver, though there are other drivers that support higher resolution like our AMIS-30543 carrier, though I do not know how large of an effect that will have on the noise level of the stepper.


[quote]it’s only once the motor is mounted that the sound becomes annoying - ie it excites ringing in metal components[/quote]I suggest to remount the motor with vibration damping fasteners. The mounting bolts can be isolated from the motor frame with rubber grommets and a universal joint will reduce coupling via the motor shaft.

Thanks for the suggestions.
I think it is actually the microstep frequency that is causing the annoyance - 6400Hz (I was probably overoptimistic about my hearing ability!) I went down to 1/16 steps and the tone dropped - still annoying though - and louder.
Hence I have ordered the AMIS-30543 as suggested - hopefully if I go to 1/128 steps I’ll take the microstep frequency (26kHz) out of audible range and perhaps get overall smoother rotation / reduced vibration.
In the meantime I will see what can be achieved with changing the motor mounting (although I have the parallel challenge of not reducing the stiffness too much that it affects the instrument measurements).
I’ll let you know the results…

Hey guys,
I’m new here and still rather new to the whole stepper motor topic at all - just started to dive into this a few days ago, first starting with an A4998 and then switching to a DRV8834 after realizing that my motor (ACT NEMA 17 with 5,4V) would rather fit using the 8834 and a combined 9V power supply for both the Arduino Nano and the 8834. After fiddling around with some simple programmings myself I ran into the AccelStepper library thing. So far so great.
BUT: I’m encountering the same high pitched whining issue as the OP (at least I think it’s kind of similar) - but ONLY when I use the AccelStepper code in the background! Just running the motor with the 8834 by “manually” looping steps like this:
makes the motor turn smoothly without any whining at all - talking about using the same 1/8th step setting (M0=LOW, M1=HIGH) on the 8834 in both cases (with or without AccelStepper)…

Could anybody help me with what to change in the AccelStepper core programming ? Which is supposed to be the reason for the noise (maybe some inappropriate way of driving the single steps - I’ve just been thinking of whether the library code doesn’t provide the right order of high/low steps or does it with a wrong timing or pulse length or sth like that ?) - it just seems to be like some kind of inappropriate (for the 8834) “idling” in general…

Any support deeply appreciated !
Uli from Germany

Just want to specify the kind of noise a bit more !

It’s not like the type of whining you get when you try to shorten the delay between the steps too much and the motor refuses to turn…! It sounds a more like a fine and high pitched metallic ringing on top of the normal motor sound…

Just reading the AccelStepper library files…may it be neccessary changing the minimum Pulse Width in order to fit my combination of motor and DRV8834 better ? And if yes, how, and to what setting ?


Unfortunately, we are not very familiar with that library, so I cannot tell you what might be going on to cause the noise you are hearing. My best suggestion would be to try to systematically simplify the library to see if you can narrow down the part that is causing the noise.

- Patrick

This suggestion is probably way out of the scope of what anyone would be willing to do, but here it is FWIW:

It’s possible to drive steppers using continuous analog signals, specifically 2 sine waves 90 degrees apart. I built a proof-of-concept with a DC-capable audio interface and two overkill analog current boosters (LT1010) I had left over from another project. I drove the audio interface using a free audio programming language called Pure Data. The stepper motor was dead quiet at all speeds and the max rotational speed was comparable to normal stepping (I don’t remember exactly), which suggested to me that most of the noise was due to having discrete steps.

I then built an approximation using an Arduino MKR1000 and a Pololu TB6612FNG dual motor driver carrier. I programmed a 1.6kHz timer ISR to change the pulse width of the TB6612 control lines so that they would vary sinusoidally to reflect whatever instantaneous speed the motor was supposed to be turning at at that moment. I used a 32kHz PWM frequency because that’s approximately what the Allegro stepper drivers use. The brain-teaser is calculating what value to output, but it’s equivalent to fixed sample rate wavetable audio synthesis if you’re familiar with that. This scheme eats up a lot of cpu cycles – I remember seeing numbers like 6% - 11% depending on how involved the speed calculations were – but if quiet operation is valuable to you then you might find that cost acceptable. Unintuitively, the ISR priority doesn’t have to be all that high, so you can claw back a few cycles in other ISRs. A little sample rate jitter doesn’t hurt apparently.