Silent fan driver summary

To control the fans speed of a 3D printer a common solution is to supply them by a PWM signal.
This is not an effective fan speed control nor a silent solution, it’s just simple and cheap.
This driver uses PWM to DC voltage conversion.
Advantages of DC voltage control instead of PWM:
1. Operation Theory and description
First, we need to understand that the radial or axial fans we mostly use in 3D printers are not like a heater or a DC motor.
They are actually two phased Brushless DC motors, with tiny electronics inside with a rotor position sensor, which converts the supplied DC voltage into AC voltage which supplies the coils of the fan, so it generates a rotating magnetic field which leads to the spinning of the FAN rotor with blades attached.
Having internal electronic circuits they do not like to be supplied by a constantly turning ON and OFF power supply as in case of PWM control.
The below picture show the simple schematic used for PWM fan control.


This PWM control method is very
simple but has some disadvantages like, the PWM frequency is in the audible
range and increases the noise generated by the fan.
Low PWM frequency gives good
speed control but results in a low humming noise of the fan.
Higher PWM frequency ca be
heard as high hissing noise, Setting the PWM frequency over 16Khz the hissing
noise is out of the audible range but most of the fans cannot work with such
high frequency pulsating supply voltage, the internal electronics operation is
highly disturbed. As end effect either the fan does not work at all or the
speed control is completely ruined.


Note: there are fan types which has integrated speed controller and do not require a PWM modulated or adjustable DC supply voltage. The speed of the fan is controlled using a PWM input signal.
This kind of fans are most used in more critical applications like PC microprocessor cooler.
2. Dc-DC BUCK converter fan drive
A simple solution is to replace the PWM fand driver with an open loop BUCK DC-DC converter circuit. This board fits into one driver slot of the printer boards and can control two fans.
Each of the BUCK cannels can drive up to 250mA current. The first channel can be populated with a bigger inductor to drive currents up to 1A. The module on the right side is equipped for 1A max fan current.


Control input signal of the first channel is the STEP, for the second is the DIR input signals of the driver slots. Next picture shows the schematic of one channel:

Below you can find the
gerber files for PCB ordering. I have ordered them from www.jlcpcb.com. Price was 2$ for five pieces plus
shipping and import duties. Order the PCB's without silk screen on the bottom side. There is no space for components references there.
3. Bill of materials
4. How it works
The fan supply voltage is controlled by PWM signals applied to STEP
and DIR inputs. The PWM signal is converted into an equivalent DC voltage.
As example having 24V power supply 10% PWM duty cycle would mean
2,4Vdc fan voltage, 50% PWM duty cycle would mean 12VDC etc.
With this BUCK converter solution, it is possible to use 12V
fans with 24V power supply, the maximum PWM duty cycle in this case shall be
limited to 50%, in other words maximum fan speed 0,5.
A small drawback of this method is that a minimum PWM duty cycle is needed for the fan to work. As example a typical 24V fan would work with a minimum supply voltage of about 3.6-5Vdc. This means the minimum PWM speed shall be about 0,15 / 15% duty cycle. This would be equivalent to zero speed. Below this the fan will not turn. However, the control range between 15-100% PWM duty cycle gives control over the whole speed range of the fan.

5. Firmware configuration
The driver is designed for operation with Klipper. To use it you have to define a fan. Define the pin name and PWM frequency. The PWM frequency shall be set to 20Khz -> cycle time of 0.00005s
Klipper configuration example:
[heater_fan hotend_Fan]
pin: PD3 # you need to define your own pin
heater: extruder
cycle_time: 0.00005
heater_temp: 75
hardware_pwm: False #can be enabled if the pin supports hardware PWM feature
shutdown_speed: 0.0
fan_speed: 0.5
[fan]
pin: PE1 # you need to define your own pin
max_power: 1.0
shutdown_speed: 0.0
cycle_time: 0.00005
kick_start_time: 0.5
hardware_pwm: False #can be enabled if the pin supports hardware PWM feature
Pinout of the driver board:
6. Performance evaluation
I measured the noise
generated by the fan using standard PWM control @133Hz and compared it with the
fan noise controlled by the BUCK DC-DC converter. In the next graphs it clearly
visible that the peak around 133 HZ is completely gone -> no humming noise
anymore.
The peak noise
envelope line is lower when supplying the fan from the BUCK converter.
This test was
performed using 75% PWM duty cycle.

Of course the amount of noise reduction really depends on the fan type you have. If you run your fan always @100% PWM this circuit has no effect, since the fan is already supplied with a DC voltage.
One of my concerns was
that the small drive MOSFETs could overheat due to higher current and heat
coming from the inductors from the other side of the PCB. Therefore, I have
done some MOSFETs switching behavior and thermal analysis.
The result shows that
the channel for 1A current capability indeed reaches pretty high temperature,
over 80°C. Therefore, it is advised to attach a small heatsink over the top of
the coil this way limiting the maximum temperature to about 52°C (measurements
done @ 23°C room temperature). If you have active cooling for your stepper
driver, and the air passes through the fan driver as well, the additional heat
sink is not needed.
The units for low
current fan drive do not show any thermal issues, temperature do not exceed 42°C,
therefore they do not require any heatsink or active cooling.
Next pictures show
some of the thermal shots I have performed.