How can I reduce the PWM noise of a blower motor?

I've built a ventilation box which utilizes a blower motor from an old Subaru Impreza 1996, which I was gifted from a friendly mechanic.

The flow volume is amazing, but it's a bit too noisy and too powerful. The motor draws about 20A peak on start, and then operates at 7A at 12V.

But when using PWM, the motor basically sounds like a screaming alien, no matter if the duty cycle is 90% or 10%. I'm using Arduino to send a pwm signal and an IRF3205 MOSFET.

I've tried a low frequency (using delay and delayMicroseconds, 10-1000 Hz), and high frequency (using 32bit and 8bit prescaler of Atmega328). It only changed the pitch of the sound, but it was still very audible. The least noisy was at the low frequency, but then the motor was unstable.

Should I use a capacitor or an inductor? (or both). I haven't worked with inductors before. And I imagine the capacitor won't do much good...

simulate this circuit – Schematic created using CircuitLab

Source code:

digitalWrite(pin11, LOW);
delayMicroseconds(50);
digitalWrite(pin11, HIGH);
delayMicroseconds(100);

• did you try 20kHz? – Tony Stewart Sunnyskyguy EE75 Nov 8 '16 at 20:37
• I'm not sure. I tried with delayMicroseconds with an on/off cycle totaling 30-500 microseconds, which should give 2-33 kHz. Anything with an on-cycle of less than 50 microseconds did not turn on the motor at all. And everything above would make screaming noises (high pitched noises that would change in frequency, perhaps due to unstable pwm) – user95482301 Nov 8 '16 at 21:02
• Here's a video, where I'm testing the different frequencies, switching between 100% while uploading the program, and the different testing settings (30khz, 20khz, 10khz etc.) youtu.be/kHZ0b0wFjaw – user95482301 Nov 8 '16 at 21:15
• Source code, schematic? – Bruce Abbott Nov 8 '16 at 21:21
• Well, you're adding bursts of impulse to a mechanical part, in the audio range. You might have the basis of a new musical instrument here, – Ian Bland Nov 8 '16 at 21:36

Like most power MOSFETs the IRF3205 has a large Gate capacitance which must be charged and discharged, requiring about 50nC of charge to turn on properly. In your circuit this charge trickles through R1, distorting your nice 12V square wave into a sawtooth that gets smaller as the PWM frequency is increased. To get a good Gate drive waveform at 20KHz you should reduce R1 to about 500Ω (to charge the Gate faster) and R2 and R3 to about 1k (to ensure that Q1 turns on fully).

The 1N4001 is a mains frequency rectifier diode with slow switching action - not suitable for high frequency PWM. You should use a Schottky diode rated for at least 3A continuous.

Software PWM created with DelayMicroseconds() is not very accurate as it doesn't take into account loop overhead, so the PWM frequency will be lower than you expected. Also you must not have any interrupt code running (eg. timer, serial) or the PWM waveform will suffer from glitches that could be audible. If you can still hear it, it's not 20KHz!

With good Gate drive, a fast flyback diode, and true 20KHz PWM, you should get quiet motor operation.

• Plenty of people can hear 20kHz and not just children. Anyway mechanical harmonics could easily work at some integer fraction of the drive frequency and come back into normal hearing range. – Chris H Nov 9 '16 at 10:10
• define a "good diode" considering 8x surge current minimum is not just a fast diode. – Tony Stewart Sunnyskyguy EE75 Nov 9 '16 at 20:31
• @Tony Stewart example 1N5821 3A average, 80A peak. Used in my 20A ESC bhabbott.net.nz/esc.html – Bruce Abbott Nov 9 '16 at 22:03
• Yes I see now Bruce yet you have a complementary half bridge switch with additional clamp diode which does not carry much of the high side current. Unfortunately the Pch FET & diode 100m~150m would fry using a variable speed PWM fan with 7A rate and 50~70A at 10% duty cycle starting slow. with $50^2*150m\Omega =38W$ The Nch is good. – Tony Stewart Sunnyskyguy EE75 Nov 10 '16 at 1:04

I've tried the same project, but on another scale: I tried to manage computer culler speed of rotating. So, the secret is that Arduino by default have low frequency on its PWM output. That causes noise, that you can hear. So the decision is to set the right frequency directly through AVR Registries. So, have a look here: https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM under the "Using the ATmega PWM registers directly" title.

Indeed it turned out that the noise disappeared using high frequency PWM.

In conclusion, I note the following:

• Using Nick Gammon's work on timers, I was able to get a PWM frequency that, according to his writings, should be around 25kHz; this caused the noise to disappear completely

• The gate voltage of the MOSFET must be able to charge/discharge fast; the MOSFET would get very hot; using smaller resistors (100 ohm), the problem was reduced but not solved for some duty cycles (thanks @Bruce Abbott)

• At higher frequencies, the motor would not start, presumably because the MOSFET wouldn't charge fast enough (I'm wondering if it would be possible to use two transistors (NPN+PNP), to allow for quickly and efficiently alternating between zero resistance to ground and zero resistance to 12V, thus reducing heat loss and improving motor function and allowing higher frequency PWM)
• With the following source code, I achieved a very quiet operation, with a small air flow, at 1.3A current (which was what I was aiming for: a low constant operation with occasional high power operation)

Source code:

#include <TimerHelpers.h>

const byte timer0OutputB = 5;

void setup() {
pinMode (timer0OutputB, OUTPUT);
TIMSK0 = 0;  // no interrupts
Timer0::setMode (7, Timer0::PRESCALE_64, Timer0::CLEAR_B_ON_COMPARE);
OCR0A = 10;   // count to 4, zero-relative
OCR0B = 5;   // duty cycle
}


I hope you didn't use the 1Amp 1N4001 diode to clamp a 7A motor. Surge current is closer to 8~10x or 70A max starting with PWM.

Although it can handle short pulse currents much higher than 1A, it is usually better to match the current rating of the motor or more.

The clamp diode and the PWM switch ratings must BOTH exceed the motor surge current rating to avoid over heating and efficient stable operation for speed control.

This is because the diode conducts the motors inductive current while the transistor is OFF. You must choose a diode >10x the motor current rating as each pulse at low speeds will be up to this surge current. Otherwise it will get very hot.

I would suggest something like this automotive power diode. \$4.19(1) - But it is better to observe the response on a scope and then determine if the noise electromagnetic-acoustic or mechanical-acoustic.

• From the video the blade noise is excessive and cabinet resonance is evident like a loudspeaker design.
• a better design puts the fan in a furnace duct in a remote location so there is no interface friction noise or eddy currents with the vent grill

• PFM with 30-500us delay times, is a poor way to control Fan spped, although this is usefule for a Boost SMPS regulator, not for a buck fan speed controller.

• you should be using PWM above 20kHz. i.g. 21~22Khz and check for aliasing effects with fan noise, but it should be very quiet in a plenum.
• Would I be correct to assume that it would be possible to place several diodes in parallel to increase the peak current capacity? – user95482301 Nov 9 '16 at 11:01
• yes but considering the cost effectiveness, no. consider the ESR of the FET of what 6mohm? and the ESR of the 1N4001 is more than 100-200mOhms and match this by choosing a complementary half bridge. – Tony Stewart Sunnyskyguy EE75 Nov 9 '16 at 14:59
• What are your case temperatures at half speed? – Tony Stewart Sunnyskyguy EE75 Nov 9 '16 at 20:38