DIY fan controller for ThinkPads (should be adaptable to other laptops/desktops).
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
Barb 4556f93455 readme update 1 year ago
25KHz_PWM_Tiny.ino first commit, functinal attiny code 1 year ago
README.md readme update 1 year ago

README.md

DIY fan controller for ThinkPads (should be adaptable to other laptops/desktops).

Introduction/Rationale: Newer ThinkPads are dumb, their fan controllers use an obscure method of communication with the kernel, that does not give direct access to PWM frequency. The fan(s) is(are) either off, or on in one of 2 or 3 levels, making for very jarring transitions that are clearly audible.

This project aims to replace the built-in PWM controller with an attiny or other arduino compatible board containing a custom fan curve. The controller reads a temperature value from a thermocouple and sets the fan accordingly, proportionally to the given temperature.

Required parts:

  • Attiny45 or similar (I suggest using an arduino nano or esp32/esp8266 if you wan to add serial/wireless functionality)
  • 3x 1k resistors if using a 5V microcontroller (build a voltage divider on the PWM output, as the fan operates at 3.3V); esp boards do not need this, but an output resistor at 1~3k in series with the output is recommended to protect the microcontroller and fan.
  • 10~100k resistor (or potentiometer if you want to perform manual calibration of the thermocouple)
  • some perfboard
  • NTC thermocouple (10 or 100k, calibrate accordingly)
  • some wires (AWG24 or thereabout)
  • bulk capacitor (a few 10s of uF, value is non critical, if in doubt, use electrolytic, 10V 100uF)

Quirks:

  • arduino and other 8-bit AVRs usually generate 1KHz PWM, but computer fans run on 25KHz (will usually spin with anything from about 20 to 30KHz, but different ones may have other tolerances). Access to the individual hardware timers is needed to circumvent this problem and the "analogWrite" command cannot be used.
  • desired PWM value is calculated in real time, but is averaged over the last 10 values to dampen "noise" (spikes and dips in temperature would otherwise lead to abrupt speed changes).
  • some fans operate on a reversed PWM logic, with speed following an inverse relation to duty cycle

Future goals:

  • add serial/usb communication
  • add buttons/switch to choose between fan curves
  • add software control mode (with fallback to default built-in curve when serial is down)