Skip to the content
2 layers28 × 27.8 mmFancontroller, the printed circuit board in 3D

An STM32-based liquid cooling fan controller, designed to fit flush against a 240/280mm rad.

Size
28 × 27.8 mm
Copper layers
2
Thickness
1.6 mm
Parts
32
Nets
52
Pads
140
Tracks, vias
172, 9
Pours
6
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
29 Dec 2023
Updated
6 Jul 2024

Overview

Fancontroller is an open-source printed circuit board by funrollloops, from the funrollloops/fancontrol repository on GitHub. It is a 2-layer board of 28 × 27.8 mm with 32 parts on 52 nets, routed with 172 tracks and 9 vias.

It is built around the TPS5430DDA and B5819W. Its parts include 13 capacitors, 7 resistors, 3 diodes, 2 ICs and 2 connectors. It belongs with the STM32 boards of this library.

Main components

2

README

README.md

Overview

v1 used an arduino nano with a custom PCB on top, but the result was thick and ungainly. v2 uses a pcb with an stm32 integrated on board, but still expects to use an OLED on a 4-pin carrier board. This does fit inside a Meshlicious alongside a 280mm rad, but it could be more elegant.

v2 includes a USB port, but it's not really used by the firmware. Removing it in v3 might allow for a sleeker design that is easier to put in a case.

Clearance inside Meshlicious

Total available clearance is 10mm:

  • 1.6mm PCB
  • 6.5mm for right angle fan header on back
  • 6.3mm for the oled display module
    • 1.6mm for the PCB
    • 1.6mm for the display
    • 3.1mm for the JST connector (1.1mm for components w/o connector)

So will need to use a bare oled display and use an FPC connector to save space. All components will be on the top side of the PCB, which will face towards the radiator/fan where the fan connectors come out.

Schematic

See the pcb/ directory. Designed for PCBA via JLCPCB, using only one extended part (the USB-C connector). Costs $20 shipped for 5x.

Firmware

Install STM32CubeProgrammer somewhere, and then build and flash with

text
cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release -GNinja -DSTM32_CUBE_PROGRAMMER=/path/to/STM32_Programmer_CLI
ninja -Cbuild flash

Design

Calibration

WIP, will log CPU/GPU/thermistor readings to create a calibration table. According to the datasheet, given some inputs the output formula should be:

py
# Circuit: VCC - R2 - thermistor - GND
#                   ⌞ ADC

VCC = 5
AREF = 3.3
R2 = 33_000

def C(adc):
    """adc is the voltage across the thermistor when it is in series with R2, where 0=0V and 1024=AREF."""
    return 227 - 34.3 * ln(adc)

But a lookup table is probably simpler since only ~1C accuracy is needed and there's no FPU anyway.

Parts

32
QtyValueFootprintReferences
4100nFCapacitor_SMD:C_0402_1005MetricC2, C3, C4, C15
3FAN_HEADERConnector:FanPinHeader_1x04_P2.54mm_VerticalIN1, OUT1, OUT2
21.5kΩResistor_SMD:R_0402_1005MetricR6, R9
210nFCapacitor_SMD:C_0402_1005MetricC6, C13
2whiteLED_SMD:LED_0603_1608MetricD1, D5
11.5nFCapacitor_SMD:C_0603_1608MetricC17
1100nCapacitor_SMD:C_0402_1005MetricC9
110kΩResistor_SMD:R_0402_1005MetricR7
110uFCapacitor_SMD:C_0603_1608MetricC12
110uHInductor_SMD:L_1210_3225MetricL1
1150pFCapacitor_SMD:C_0603_1608MetricC16
11uFCapacitor_SMD:C_0402_1005MetricC5
122uFCapacitor_SMD:C_0603_1608MetricC14
133kΩResistor_SMD:R_0402_1005MetricR1
14.7uFCapacitor_SMD:C_0402_1005MetricC1
15.1kΩResistor_SMD:R_0402_1005MetricR2
15.9kΩResistor_SMD:R_0603_1608MetricR8
1549ΩResistor_SMD:R_0603_1608MetricR3
1B5819WDiode_SMD:D_SOD-123D3
1SSD1306SSD1306:128x64OLEDSSD1306
1STM32F103C8TxPackage_QFP:LQFP-48_7x7mm_P0.5mmU1
1SWDConnector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_VerticalJ3
1TPS5430DDAPackage_SO:TI_SO-PowerPAD-8_ThermalViasU3
1ThermoConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_HorizontalJ1

Similar boards

  • 2 layers77 × 32 mmBananaSchplit, the printed circuit board in 3D

    BananaSchplit

    pms67/BananaSchplit

    Single rail DC (<12V) to split rail DC supply (+/-12V and +5V).

    53 parts66MIT
  • 2 layers60.5 × 44 mmFanbee, the printed circuit board in 3D

    Fanbee

    lorenz/fanbee

    A Zigbee-controlled 140mm fan with electronically-controlled valve

    59 parts6MIT
  • 4 layers160 × 117.5 mmDaveecu2, the printed circuit board in 3D

    Daveecu2

    miata-bot/daveecu2

    Speeduino Mainboard designed for NA Maita chassis

    249 parts3
  • 2 layers100 × 100 mmSqueezeAMPagain, the printed circuit board in 3D

    SqueezeAMPagain

    hallo-alex/SqueezeAMPagain

    As github annoys me with their 2FA policy I'm moving this to codeberg

    228 parts
  • 2 layers78.1 × 39.8 mmSingle to split rail dc power supply, the printed circuit board in 3D

    Single to split rail dc power supply

    kingMordred/single_to_split_rail_dc_power_supply

    PCB design using KiCad 10.0 for a single to split rail dc power supply, converting an input of +6V ~ +12V to a +5V rail or a +12V/-12V rail.

    50 parts
  • 2 layers35 × 31 mm12to5Buckconverter, the printed circuit board in 3D

    12to5Buckconverter

    hwreverse/PCBDesignLectures

    PCB Design course projects

    15 parts7BSD-3-Clause
  • 2 layers189.5 × 204.9 mmSmartSpin2k Panelized, the printed circuit board in 3D

    SmartSpin2k Panelized

    doudar/SmartSpin2k

    Transform your spin bike into a Smart Trainer!

    749 parts292GPL-2.0

Questions

How big is the Fancontroller PCB?

It measures 28 × 27.8 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Fancontroller use?

32 parts, built around the TPS5430DDA and B5819W. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Fancontroller KiCad files?

From the funrollloops/fancontrol repository on GitHub, at the commit this page was made from: the board is pcb/fancontroller.kicad_pcb and its schematic pcb/fancontroller.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Fancontroller design in my own project?

Its repository states no licence, so its author keeps all rights: ask funrollloops before reusing the design.