When your GPU fan goes rogue with an unholy screech, you either shell out for a new one or you go full hacker mode. Well, [ashafq] did the latter. The result is a delightfully nerdy fan controller powered by an ATTiny85 and governed by a DS18B20 temperature sensor. We all know a silent workstation is golden, and there’s no fun in throwing money at an off-the-shelf solution. [ashafq]’s custom build transforms a whiny Radeon RX 550 into a cool, quiet operator. Best of all: it’s built from bits likely already in your junk drawer.
To challenge himself a bit, [ashafq] rolled his own temperature-triggered PWM logic using 1-wire protocol on an ATtiny85, all without libraries or bloated firmware. The fan’s speed only ramps up when the GPU gets toasty, just like it should. It’s efficient and clever, and that makes it a fine hack. The entire system runs off a scavenged 12V fan. He could have used a 3D printer, but decided to stick onto the card with double-sided tape. McGyver would approve.
The results don’t lie: idle temps at 40 °C, load peaking at 60 °C. Quieter than stock, smarter than stock, and way cheaper too. The double-sided tape may not last, but that leaves room for improvement. In case you want to start on it yourself, read the full write-up and feel inspired to build your own. Hackaday.io is ready for the documentation of your take on it.
Modifying fans is a tradition around here. Does it always take a processor? Nope.
When external temp. probe indicates 60°C, silicon is probably already running at about 90°C, greatly accelerating damage due to electromigration. I run my PC fans at 100% all the time because it’s cheaper to replace a $5 fan than $500 CPU or $2500 GPU. Noise is also not a problem because I can just play music louder than fans.
He doesn’t actually state where the temperature measurements are being taken from, but reading it does imply that the 40-60ºC is coming from internal sensors. The graphics card was running 80ºC before starting the project, and 35-40ºC with just a fan on full blast.
And what is the fail safe if there is no reading because the middleware crashed? Fail deadly and keep RPM or ramp up to 100%?
These were actual considerations we had to make at my former employer. Every senior asked me how my code would behave if I get nonsensical readings for a failed or disconnected sensor. Negative readings considered?
This is not to roast anyone, i find it important to add a plausibility check for a reading, and if it doesn’t make sense put the fans at 100% and pray.
As a reply to this whole chain –
agreed – fail-to-full-speed is absolutely a sensible thing to have on this (or any) fan controller, and since he’s using a microcontroller, it’s also simple to implement in the code.
that said, every reasonably modern GPU I know of has plenty of on-die and on-card temperature sensors, and will use them to “fail safe” by thermal throttling and then emergency shutdown.
(And since 80c is one of the most common target temperatures for thermal throttling, it’s almost certain that’s what he was monitoring – and what his card was doing – before he fixed the fan.)
Junk drawer parts indeed. That temperature sensor is long obsolete. It also cost ten times what the ATTiny cost. I use a plain old NTC thermistor for this, like every fan manufacturer uses. It costs a tenth as much as the microcontroller.
And if your junk box is even modestly well stocked you’ll have a PWM-controlled fan, so won’t even need that relatively expensive MOSFET. Of course, then the solution can reduce to just a GPIO pin and a bit of software, assuming you have access to that.
The biggest annoyance I’ve run into when bodging fan replacements is the hardware that actually does care about the numbers it is seeing from the fan.
Apparently this card doesn’t; and allowed itself to run with the fan disconnected until visual artifacts started up; but I’ve had some run-ins with server hardware that absolutely does care and, more annoyingly, expects fan speed values that would be correct for 40mm fans providing the necessary airflow to a gasping 1U; so you can’t even just pass the honest readings from your larger replacements through because they’ll be treated as dangerously slow.
I can understand why they engineered it that way; but it’s really annoying when you spend more time constructing a bidirectional lie to put between the BMC and your fans(so that it can still use its superior access to system thermal sensors to provide PWM control; but has the tach outputs from 80 or 120mm fans adjusted to map them into the range expected from the factory 40mm units) than you do on the entire rest of the project; and there’s no option to just tell the BMC to stop screaming that the fans are too slow even when everything is 20+ degrees cooler than it was with stock cooling.
Yeah, server hardware is often a nightmare for that, but most GPUs – even the most high-powered, high end GPUs – almost never care whether or not their fans actually work.
I suspect this is because a) fan failure on GPUs is much less likely to inflict any permanent damage, therefore, it’s more hassle for manufacturers to implement than it would save them in warranty claims, and b) water-cooling enthusiasts would throw a fit if they couldn’t just unplug the fans from a GPU and slap on a waterblock.
From the PCB, it is clearly that the DS18B20 (U2) is mounted on the PCB instead of mount on heatsink or GPU, so what is measured is the ambient temperature instead of the actual temperature on the surface of the GPU. Personally I would cut a strip of a coke can and use it to make a holder and screw it together with the DS18B20 on the surface of the heatsink or something to get a more accurate temperature.
My 2 kopeks.
Every cheap low-power PC power block will have all those parts present within, ready for scavenging/repurposing. There is no shortage of older ATX power blocks sold for about $6-$10 per, minus the ATTYNY, of course.
Few years back local office was giving away empty PC cases, and I’ve inherited a couple for free. Right now one serves as a standalone 12v power supply for various projects.
What was wrong with using the PWM signal from the GPU fan header? I would assume it sped the fan up under load/heat and spun it down when not producing either.
This would be amazing for a project where the PWM signal is unusable for bad firmware or broken trace reasons. But at all other times just zip-tie the new fan to the heatsink and connect it to the original fan header. You can get adapter for plugging standard PC PWM fan into GPU fan headers in many places.
But it’s not too difficult to salvage the old fan harness and bring the PWM wire out to the new fan.
I actually went the other way and put an aftermarket heatsink on a GPU and retained the original fans. It was an Arctic Accelero of some kind. The previous owner had cut the heatpipes and tried to water cool the GPU as an experiment. Being an RX6600 it likely wasn’t really in need of any cooling upgrades, but I’m all for science I guess. I probably would have cleaned the gunk out of a trash AIO cooler and used it to water cool the card.
In general that would be the simplest way, and you generally don’t even need to buy an adapter if you still have the old broken fan cable and a willingness to splice a cable.
However.. dunno about his particular RX 550, but some manufacturers of that era didn’t even bother to have PWM fans on their entry level cards. They just ran constant speed and I guess figured if you were doing a budget build, the rest of your system was loud enough you wouldn’t notice.
The controller also lets you implement a custom fan curve very easily, which is handy if the built-in pwm does a bad job of controlling the replacement fan (or is just plain bad).
Replying to myself because editing comments will presumably never be a thing, and wanted to acknowledge that Miles had already pointed out you could splice the GPU fan cable in the parent comment. Sorry for missing that until after I posted!