Jump to content

BGE's take on the Quadra 900/950 ATX PSU Mod

Recommended Posts

I have finished the calibration part and have updated the code and the schematic. I'd like to let it run today for an hour or so to check if the MOSFET heats up. It shouldn't but better be safe than sorry. 

Next step, real hardware testing with the ATTiny85. 


Link to post
Share on other sites
  • Replies 113
  • Created
  • Last Reply

Top Posters In This Topic

Endurance test is still going... Currently simulating a hot thermistor (LED is on). And the MOSFET stays cool to the touch so that's nice... no heatsinks needed.


Please note that the piece of kitchen towel is there to dampen the PWM vibrations. The glass table is definitely not helping. I didn't bother changing the frequency on the Arduino so it's currently set to 976Hz.

It will be set to 31kHz on the ATtiny. 


Also, I think I either have a dodgy pot or a bad mapping (just for the lower end of this pot) as it jumps around a bit... This needs investigating but I'd bet on the former. I got my potentiometers on amazon for less than €1 a pop. Edit: Yup, the pot was bad. Great!


The trimmer I have selected is made by Bourns and will be of higher quality. 



I'm also pretty happy to have found a thermistor with a built-in cable:




Edited by BadGoldEagle
Link to post
Share on other sites

I was finally able to make my code work on the ATtiny. Turns out it's really picky about pin names... and that PB2 (pin 7) somehow corresponds to A2 and not A1 as it should!!!


Latest microcode:

// QuadrATX fan speed controller //
//     The Apple Chronicles     //
//            v0.4             //

// set board to 8MHz!!!
// configure Arduino as ISP

// variables declaration
int SensorPin = A1;  // pin 7
int PWMPin = PB0;   // pin 5
int PotPin = A2; // pin 3
int LEDPin = PB1; // pin 6
int SensorVal; // "temperature" from NTC
int PWMVal;   // fan PWM output "speed"
int PotVal;   // real potentiometer value, to define the cold/normal operation fan speed.
int PotValmapped;  // lowest position shall correspond to the absolute minimum speed (see below) and not OFF, new potentiometer value
int MinSpeed=64; // absolute minimum speed, 0=0% and 255=100%, currently set to 25%, corresponds to lowest pot value

// Calibration variables
int NTCcold=512; // corresponds to ambient temperature, 10K for a 10k NTC @25°C
int NTChot=110; // corresponds to highest temperature before LED lights up, about 1.3K for a 10k NTC @80°C
int PotMin=0; // corresponds to lowest position on potentiometer
int PotMax=1023; // corresponds to highest position on potentiometer

// setup code, to run once
void setup() {
  //set PWM frequency of PB0 (Pin 5, ATTiny85, fan output) to 31,250 Hz.
  TCCR0B = TCCR0B & 0b11111000 | 0b001;

  // define pin modes ATTiny85
  pinMode(SensorPin, INPUT);
  pinMode(PotPin, INPUT);
  pinMode(PWMPin, OUTPUT);
  pinMode(LEDPin, OUTPUT);

  // Set fan to full speed for one second at startup (prevents stall)
  analogWrite(PWMPin, 255);

// main code, to run repeatedly
void loop() {

  //read NTC sensor value
  SensorVal = analogRead(SensorPin);
   if( (SensorVal > NTCcold) && (SensorVal < 1000) ){ // in case ambient temperature is lower than 25°C
    SensorVal = NTCcold;} 
   if( (SensorVal > NTCcold) && (SensorVal > 1000) ){ // NTC failure (open circuit)
    SensorVal = NTChot-1;} 
  //read pot value
  PotVal = analogRead(PotPin);

  // map and assign pot/pwm values. 0 to 255 corresponds to 0 to 100%
  PotValmapped = map(PotVal, PotMin, PotMax, MinSpeed, 254); // change potentiometer characteristic, lowest position corresponds to absolute minimum speed
  PWMVal = map(SensorVal, NTCcold, NTChot, PotValmapped, 255); // linear fan curve from ambient to LED lighting up. PotValmapped is the minimum fan speed set by the potentiometer

  // Overheating indicator
  if (SensorVal<NTChot){ 
    PWMVal=255; // full speed
    digitalWrite(LEDPin, HIGH); // LED ON
  else {
    digitalWrite(LEDPin, LOW); // LED OFF

  //write the PWM value to the pwm output pin
  analogWrite(PWMPin, PWMVal);

  delay(1000); // updates every second


I'll double check both boards with a professional next Saturday and I guess the next step is to send them to production ? :-) Yay!

Edited by BadGoldEagle
Link to post
Share on other sites
  • 3 weeks later...

2000th post! Now I need to get a Radius Accelerator 16/25 in order to fit in this new 020 group!

Before I write another 2000 and get the 040 status, let's take care and finish this Quadra project.


The boards are done. Unless someone makes another suggestion...


Changes since last post:

  • new snubber circuit for the MOSFET (per techknight's recommendation). The values for the resistor and filter cap will have to be determined experimentally and will depend on the load (ie fan used). I need to get myself an oscilloscope in order to determine the switching frequency. I'll try to find the optimal values for the original Sanyo and for the Noctua PPC. Depending on the results (and required air flow, pressure etc) I'll do other fans as well.
  • new bypass capacitor (tantalum) for the ATtiny, to have a smoother current consumption. Hopefully it'll also allow us to have more reliable thermistor readings. Not that this was necessarily a problem before but it can only help. 
  • diodes for all relays (DC and AC). 


Speaking of relays, someone told me to only switch off and on the hot side (and not neutral), but I think it's actually a pretty bad idea to do that on a "universal" 120V/240V system.

You see, nearly all power strips here have DPST switches, and for a reason. Some plugs in Europe are not polarized (CEE 7/3 type F), and although CEE 7/3 type E sockets should be earthed (and polarized), some really old ones still aren't and nothing stops you from plugging a device that needs a connection to earth into an unearthed socket (that's what I used to do back in the day, not my proudest moment, but the building was old and that was tolerated back then).


The issue with unpolarized plugs is that you can plug your device either way. You've got a 50% chance of switching live and neutral around. It shouldn't be a problem since you basically have RCD (GFCI) on every plug in case the device has a problem. But if you're using a SPST relay, you may only be switching off and on the neutral side and not the hot side. And that's not great. Since the connections on the monitor plug depend on the input plug, a "wrong" connection on the input side will be spread to the monitor. The ATX PSU will tolerate but I'm not sure a 30 year old monitor will (and leaving it connected to live 24/7 is not recommended). 

So DPST it is. FYI, the Delta unit only had a SPST relay... 




DC Board v0.97



Close up (PCBnew view of the fan controller circuit)



AC Board v0.9


I'll check the pad sizes once more before I send them to production.

Link to post
Share on other sites
  • 3 weeks later...

Relevant to the thread, so I'll crosspost it here :) 

8 hours ago, Compgeke said:

Looks good! The only thing I want to confirm is those hard drive powers connectors are for you to plug in from the ATX PSU side, and then you use the 4 pin minifit to run to internal drives?

Other than that, everything's looking good! Glad to see a fuse and antitracking slot on the AC board :) .


Link to post
Share on other sites

Thanks Compgeke!

8 hours ago, Compgeke said:

those hard drive powers connectors are for you to plug in from the ATX PSU side, and then you use the 4 pin minifit to run to internal drives?

And yes you are correct!


On that note I think I'll just go ahead and order those boards. I've done enough quadrUPLE checks ;)

Link to post
Share on other sites
  • 2 weeks later...

Look what arrived today!




Initial multimeter tests show that there are no shorts, great! I kinda regret not using a different footprint for the Softpower transistor...oh well it's just going to be a tad more complicated to solder.


Dimensions and screw holes look all right too!



All the crimping and soldering will happen next Saturday. More to follow...

Link to post
Share on other sites


The DC board is ready!







There are two small issues with it:


1/ The footprint for the Softpower transistor is a PITA. Thank Kicad for this. I should have used the 'universal' wide NPN footprint instead of the built in BC547 one... 

Unless you have pro equipment (which I don't), you'll bridge all three legs in a jiffy. It was nearly impossible to get the solder and the BJT out. I eventually did but RIPped one pad in the process.

I was able to salvage board #000 by installing the transistor on the top and by bypassing the traces. Not the prettiest job I'll admit but at least it works.

I will install the NPN myself before shipping the boards by routing the legs through the holes and underneath so that it won't be visible once everything is installed.


2/ The holes for the cable harness (J1) are slightly too small. They're big enough to let you install the 16 and 18AWG cables but it's a tight fit. The whole harness job is quite tedious and my fingers are still a bit sore from all that crimping.

I am now thinking about getting one of these: https://www.corsair.com/us/en/Categories/Products/Accessories-|-Parts/PC-Components/Power-Supplies/Individually-Sleeved-24pin-ATX-Cable-Type-3-(Generation-2)%2C-BLACK/p/CP-8920053#tab-overview. It's not an extension cable, it's for a Corsair type 3 modular PSU: it goes from receptacle to receptacle,  it's not a plug. It should be directly compatible (straight). Soldering the main 24 pin header to the board was rather easy so soldering another one in place of the harness should be a breeze. It would look less original, but black wires never look out of place. 


I haven't tested much as I couldn't get the cables out of the original 24 pin plug, therefore I have ordered a new one and will keep the original cable as some sort of trophy... but at least the PSU starts up when I short the blue and the white wires together (Key position:ON) and all the voltages are in the right place. It's a small victory in itself. 


While I wait for the plug to arrive, I'll test the fan circuitry and will solder the components onto the AC board. 


Also, I have been trying to calculate the LB power consumption... I'll probably create a new thread about this but here's where I'm at:
QUADRA 900/950
Expansion cards
According to Developer note -> 2x 25W + 3x15W (for 12V, -12V and 5V)
According to Designing Cards and Drivers for the Macintosh Family 12V -> 0.175A and -12V -> 0.150A, beefed-up 5V power for Q900/950 unknown (2A per slot normally)
=> 20W (for 5 slots) for 12V/-12V
total nubus=95W (2x25W + 3x15W) -> leaves 75W for 5V => 3A (5V, Q900/950) per slot => 15A total
Hard drives
1A 5V x5 -> 5A total
Motherboard estimation
OG -> 33A-20A-> leaves 13A for the motherboard
25A ATX -> 25A-20A-> 5A motherboard (same as LC475 PSU for whole machine, apparently LC 020 and 030 machines have weaker PSUs) (*)
QUADRA 700 (example)
Expansion cards
According to Developer note -> 3x15W (let's assume that PDS power consumption is similar)
13.9W (actual) per nubus slot -> rounded up to 15W in the documentation 
3 (slots) x 2 (Amps, not high power unlike 900/950) =6A for 5V
Hard drives
1A 5V x1 -> 1A total
Motherboard estimation
15A PSU from PM7100 -> 15A-7A -> leaves 8A for the motherboard
OG 12A PSU -> 12A-7A -> leaves 5A for the motherboard (same as QuadrATX 25A estimation above!!)
In conclusion, since the Q700 was designed with the weaker PSU in mind, then the board may only get 5 of those 12A. Since a completely overloaded Q900/950 (*) is not something you see every day, and since its LB could still draw the same amount of power as a reasonably configured Q700 (much more common), then I would say that 'weaker' (25A 5V) ATX PSUs are probably just fine. The LC475/Q605s get less than 5A for the whole system! 
Of course I'll measure the actual LB consumption under heavy load without any HD/Nubus cards with an amp meter clamp once I get it up and running. 




temporary QuadrATX PSU LIST



Bicker BEA 630, 635 and 640 (5V@35A). Beware: H versions are weak!

Seasonic RS650 (5V@35A)




Good candidates: 


Seasonic industrial

SS500ES 24A

SS500ET/600ET 24A


Seasonic consumer

Eco Plus 600 24A

S12II 520 (and up) 24A

M12II EVO 620 24A

X-650 25A



RM550x (and up) 25A

CX550M (and up) 25A

TX650M (and up) 25A

CX750M 25A

VS550 (and up) 24A

CS650M 25A

VS600 24A

CS750M 25A

RM550 25A



650 GQ 24A

550 B5 24A


Be Quiet! 

Dark Power Pro 10 650W 24A


POWER ZONE 650W (and up) 25A



ST75F-P 25A




BEA 560 25A

Link to post
Share on other sites

And here's a picture of the AC board. Almost finished, I have unfortunately ordered the wrong header for the monitor out plug... I'll have to solder that later.



As far as the DC board is concerned, I'll test the fan controller this evening and I've already updated the footprint for the Softpower transistor.


Link to post
Share on other sites

Sorry for the lack of updates, the last puzzle piece (the 24 pin plug) is taking A WHILE to arrive. But I should have a functioning 950 by the end of the week!


Edit: Also, I just bought my first vintage LCD monitor, a Fujitsu-Siemens X17-2 from 2003. Should work with the 950's internal video quite well. 


Edited by BadGoldEagle
Link to post
Share on other sites



After months of hibernation, an elusive Quadra 950 emerges from its sleep.



But there's still a small problem...

Since most modern ATX PSUs regulate themselves based on what they see on the 12V rail, it is important to get it right.

- Without the load resistors, the 12V rail was too high (12.5V). The PSU was clearly having issues with that rail and the ATX fan was on at full blast.

- With some load resistors (2x 24Ohm 7W), the 12V rail sits at 12.25V (much better) and the fan is running at the lowest RPM setting BUT some smoke was coming out of the resistors… Not good!


Turns out that was caused by a miscalculation on my part. It’s only by doing mistakes that you learn!

Basically, I wanted to use two resistors in parallel and forgot to adjust the resistance.



The current draw depends on the resistance. A 24 Ohm resistor placed on the 12V rail will consume 0.5A (that’s what I aimed for as it’s the minimum load for the 12V rail according to the Bicker’s spec sheet). Power-wise this equals to 6W of dissipated heat. I chose a 7W (max capacity before blowing up or rating) resistor but the safety factor was too close to 1 (hence the smoking). Furthermore, I placed two side by side, thus drawing 12W or 1A. So I was drawing too much and the safety factor was too low.


What I should have done:

Since the resistors are in parallel, in order to draw the same power as one single resistor, you need to "double" the resistance rating (make the value larger ie decreasing the overall resistance of the resistor).

So instead of 24 Ohm resistors, I went with some 47 Ohms. Each resistor will draw 0.25A (or thereabouts), two resistors (in parallel, which can be considered as two independent loads) will therefore draw about 0.5A.

250mA on a 12V rail corresponds to 3W (per resistor). So a 10W package should be able to dissipate that heat without too many issues.


The display has arrived but I can’t do anything until I get the new resistors. I should get them in a couple of days. So testing will have to be delayed until next week.

Link to post
Share on other sites

Indeed! I was pretty stoked to hear it wasn't dead after that last PSU explosion. And thankfully, nothing bad happened this time! 


13 hours ago, ktkm said:

I have my bicker 630 ordered now

Nice! I still need to test the AC part (will do last, after the stress/endurance tests) but I might have bought enough to do a second set of AC cables (QuadrATX AC to PSU). Because we'll be using the same power supply, the cables will be identical. So I'll send you a set along with your boards if I have enough material to make them. 

Link to post
Share on other sites
21 hours ago, BadGoldEagle said:

Nice! I still need to test the AC part (will do last, after the stress/endurance tests) but I might have bought enough to do a second set of AC cables (QuadrATX AC to PSU). Because we'll be using the same power supply, the cables will be identical. So I'll send you a set along with your boards if I have enough material to make them.

Sounds super! :-) 

Link to post
Share on other sites

Update: Load resistors installed and booting for the first time since the explosion.



I used Mpegdec (https://macintoshgarden.org/apps/mpegdec) to benchmark the system: 040s weren't really meant for decoding mp3s... Loading the Apple System Profiler caused it to hang for a second. That being said, the CPU doesn't seem to consume that much more power and seems stable for the time being.


Also, I think my homemade harness can definitely be replaced by one of those ATX extension cables. They're a bit smaller (30cm max) but that should be plenty enough. No crimping required!

The microcode for the fan controller also needs to be updated as the fan fails to start sometimes. A 500ms delay before the initialization should fix that.

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Create New...