I wanted to share some progress on a project I just prototyped: an adapter board to control an ATX power supply and run some case fans in a standard PC case while powering a Framework laptop via a DC-to-USB-PD charger.
Background: My home server/NAS is getting way too old and creaky, and since I did the 12th gen board upgrade, I wanted to re-use my 11th gen Framework board as my new server. But for Wife Approval, I wanted it all in one case, and I wanted just one power plug. I also wanted to do this without any physical modification to the Framework board itself, no matter how minor.
One problem I had to solve was powering both the NAS hard drives and the Framework board from a single wall socket. USB-PD at 100W is not quite enough to do that safely for more than one or two drives, and hooking USB-PD logic and voltage converters to a fixed-voltage power supply is complicated. While two smaller hard drives or two SATA SSDs might be enough for some people, I wanted flexibility and the option to use more.
Here’s my solution:
This is a prototype board that takes the motherboard ATX and EPS12V connectors from a standard PC PSU and breaks out standard interfaces for case fans, Intel-standard front panel headers, and routes that juicy +12V power into an automotive accessory socket for a 100W USB-PD adapter. The controller is a standard Raspberry Pi Pico, which can run standalone or be plugged into the mainboard by USB for control via serial port commands (stuff like fan speed, using the case switches to initiate macros for a soft shut down, etc.).
For my particular use, I’ll be matching this up with a PCIe-slot-mounted mainboard holder in a Fractal Design Node 304. I picked a pretty high end 550W SIlverstone 80+ Platinum PSU, specifically because it didn’t have any required minimum loading requirements and I didn’t need to worry about putting power resistors on things.
The firmware is written in MicroPython and is currently pretty basic, but it’s built on a state machine architecture that’s very extensible and customizable. In its current state, it can do fan speed control and RPM reading via serial or toggled by the Reset button, verify the PSU’s “Power Good” signal, and toggle the PSU on and off. In the future, I’d like to have a little PC-side helper app to enable proper soft power-off.
Standby may or may not happen - every way I can think of requires leaving the PSU on, since the mainboard was designed around an always-present battery voltage rather than an ATX standby power rail. Most PC power supplies are extremely inefficient at low loading.
To-do list:
-
Minor fixes on the board: Add on-board voltage divider for the ATX POWER_GOOD signal rather than my bodged resistors. Correct the 12V output hookup and strain relief (it was way smaller than I thought - probably will change to a solid 2- or 4-pin Molex-style connector).
-
Look for a good way to trigger the Framework mainboard’s power switch without modifying the board. The open-source resources suggest the input cover has a power switch signal pin, some USB signals, and some LED outputs I could break out with a small and inexpensive flat-flex PCB. I also looked at pressing the tiny power button with a servo(!) but the input cover connector looks a bit easier.
-
Experiment with direct feed of 12V through the battery connector, skipping USB-PD and freeing up a USB port*. I am way too nervous to just YOLO this and risk destroying the board or messing up the battery logic, since the stock battery should never give less than like 14V through there. I am in no way EE trained, so while I think the buck-boost system should be able to handle it, I have no idea if it would handle it well or if the system firmware would object to not having the other expected battery signals attached.
- It’s not a huge deal to “lose” a USB port to USB-PD, since you can get USB hubs with 100W PD passthrough, so the port will still give you e.g. three Type A ports and an HDMI or whatever.
-
Get the cost down. The board and parts cost about $35 each for a quantity-three run. Changing the board layout should let me use thinner copper, which should open up cheaper PCB fab options. Getting all those Molex plugs from US suppliers is expensive, too - the 24-pin, 8-pin, and three fan connectors together are probably like $15 with shipping from Digikey. Even just buying cheapies from AliExpress would let me cut that to 1/5th. I could nickel-and-dime by using a bare RP2040, but honestly a Pi Pico costs $4 and offers so much for the price. Maybe I can get away with just a transistor to toggle the PSU rather than using a relay…
-
Put all this stuff on Github when I feel it’s reasonably usable.