I am using PWM to control the speed of a DC motor. It’s a powerful 250W fan. I’m using an Arduino to control the duty cycle.

As expected, when the analogWrite function is used with a value of 255, the motor spins at full speed (no whine sound). But, when I reduce the value to 50 or below, the whine increases substantially as the fan slows.

Why does this whine sound happen, and is there a way to reduce or eliminate it?

I thought about perhaps using a capacitor to smooth out the signal, but I guess the motor would pull the current too quickly for the charge to build in the capacitor.

Arduino PWM circuit

Edit: I found an acoustic noise suppression circuit that aims to solve this. It uses a capacitor so perhaps I’m onto something. Is this the best way to go?

PWM acoustic noise suppression

Source: Suppressing Acoustic Noise in PWM Fan Speed Control Systems

  • 1
    \$\begingroup\$ Happens because of vibrations, try to increase the PWM frequency. \$\endgroup\$
    – Damien
    Jul 7, 2021 at 4:00
  • 1
    \$\begingroup\$ What frequency? Maybe you are in audible range \$\endgroup\$
    – user76844
    Jul 7, 2021 at 4:01
  • \$\begingroup\$ On the other note, unless you want to go to engineers' hell, you should draw your schemes differently. Signals go from left to right, power- from top to bottom. Ao the MOSFET should be under the motor, straight lines, etc. \$\endgroup\$
    – user76844
    Jul 7, 2021 at 4:03
  • 3
    \$\begingroup\$ That "slow down" circuit will probably destroy the transistor, and certainly waste power. Efficient PWM requires fast switching so that the transistor is either on or off, and (almost) never in between.Slow it down atd it acts as a variable resistor not a switch, dissipating power and getting very hot. \$\endgroup\$
    – user16324
    Jul 7, 2021 at 11:01
  • 2
    \$\begingroup\$ Nick you can look into the frequency of the PWM output; this is a great introduction: arduino.cc/en/Tutorial/SecretsOfArduinoPWM \$\endgroup\$ Jul 7, 2021 at 11:18

3 Answers 3


Magnetostriction is one reason. The changing magnetic fields induce an audible strain in the material. An example would be the hum that is heard from a transformer. https://en.wikipedia.org/wiki/Magnetostriction


Found this article that talks about duty cycle and voltage.

(Article: Why is my DC motor whining at a lower PWM frequency? by Progressive Automations)


Adjusting PWM frequency can help to minimize the unwanted sound of motor whining, however, we need to be aware of the pros and cons of doing so. It is important to find the suitable PWM frequency that has the best balance of motor driver power loss, heat dissipation, and motor whining which works for you.

We hope you found this as informative and interesting as we did, especially if you were looking to know more about DC motor whining at lower PWM frequency. If you have any queries or wish to discuss our products further, please do not hesitate in reaching out to us! We are experts in what we do and will be happy to assist in any way we can.


It's quite simple actually. The ardino PWM output is at an audible frequency. Despite all the inertia, the coils in the fan are able to translate some of that pulsing into actual air movement eg. sound.

Your smoothing circuit is not a good solution, as it will result in high power dissipation in the mosfet.

The simplest solution to eliminate the noise is the try different frequencies of PWM. Some will resonate more than others (and be louder). Additionally, lower frequencies will create louder pulses, but the sound may be less annoying. Going higher can reduce the amplitude, or just get out of the audible range all-together.

Note that as you go higher there will be greater mosfet switching losses. This will only start to become noticeable at a certain point determined by the mosfet gate charge, and the MCU output impedance.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.