Bypassing an IBM RS/6000 Model 43p-150 case fan detection - Page 1
Forum section: electronics / general

author: lausvi
author_rank: Unknown
timestamp: October 22, 2024, 07:02:02 pm
content: Hi.(Unsure if Beginners or Vintage computing would be better suited sub for this)I have an IBM RS/6000 Model 43p (or rather, a "CreoScitex Brisque Impose"). Not *that* vintage, but still pretty neat (PowerPC, IBM AIX etc) machine.It has a huge 120x120x38mm case fan which is run directly of 12V without any speed control so it's SUPER LOUD and I'd like to replace it with something else. The fact that the case metal had corrosion, probably didn't help the fan either. I have tried to clean and lubricate it but it doesn't really help with the sound it makes.The fan is a Sanyo Denki Brushless DC San Ace 109R1212H1D01 (12v 0.52A). It has three wires coming out; red+black that run into a standard Molex connector for 12V, and a yellow wire which goes directly into the motherboard. To add to the weirdness, the yellow sense wire is split into two separate connectors that plug into the motherboard (I presume the same motherboard was used in a different chassis that had multiple case fans and in this version they just feed the same signal into both sensor inputs).I have found the attached datasheet from the same fan series that describes the fan's sensor output (open collector). The sensor input pins on the motherboard are pulled up to 5V when nothing is connected to them. Booting with the case fan disconnected produces an error code and the machine won't post. If I understand the schematic correctly, the running fan should pull the sensor line down to somewhere over 0.7V to indicate the system that the fun is running.What would be an easy way to simulate the sensor output to keep the motherboard happy (while using another fan and making sure myself that it keeps spinning and temps stay under control)?

author: Nominal Animal
author_rank: Super Contributor
timestamp: October 23, 2024, 10:12:11 am
content: Quote from: lausvi on October 22, 2024, 07:02:02 pmYes, this is standard for both voltage-controlled 12V fans (three pins) and PWM-controlled 12V fans (four pins): open collector output, pulled down by the fan twice per rotation.It varies whether the motherboard side is pulled to 12V or to 5V; it is nice that you've found it pulls to 5V. That simplifies things.You need to generate an approximately 83 Hz (2500  × 2 [pulses per rev] / 60 [RPM/Hz] = 83.333 ) open collector pulse train to the sensor lines.I created an ATtiny85 dual fan controller,here(in Public Domain, via CC0-1.0). I would suggest you combine a 12V PWM fan (wider selection of good, more silent fans; especially Noctua ones) controller with the fake sensor line generator, using some cheap small MCU.I believe the easiest and cheapest ones to do this with would be one of the WCH RISC-V MCUs running at 5V, with open collector drives using BSS138's or NX138AKR's (my favourite in SOT23-3, slightly faster than BSS138 due to lower gate capacitance, but otherwise comparable). For thermal sensors, use digital I2C ones, say TMP36, TMP75, MIC281, DS18x20, et cetera.If you're interested, I can create an example schematic in EasyEDA, usingCH32X033F8P6(because I've got ten of those incoming from Aliexpress for investigation and experimentation already – LCSC has run out; I paid 5€ for ten from Aliexpress/ICBuy store including shipping and VAT). It has native USB, with bootloader mode triggered by pulling USB_D+ to GND when inserting, so minimal BOM cost – not even a crystal is needed. See Stefan Wagner'sCH32X033F8P6 Development Boardproject to see how simple these are to use. I use the open source GNU-based toolchain with Python utilities to program these, and do have a WCH LinkE, too.I like to use EC11R-style encoders with a push button for the control interface, although in your case, perhaps a 10k potentiometer would be better input control (for "cooling aggressiveness", perhaps; would also "store" the setting nicely).

author: nctnico
author_rank: Super Contributor
timestamp: October 23, 2024, 12:24:16 pm
content: If I may suggest a fan replacement:https://www.ebay.com/itm/164478868012I have used these to replace a couple of super loud 12V 0.62A fans in a Lecroy scope. Unfortunately these fans are no longer made but old stock is available from some places. Noctua can only dream of making fans as quiet as these.

author: Nominal Animal
author_rank: Super Contributor
timestamp: October 23, 2024, 03:41:10 pm
content: Quote from: nctnico on October 23, 2024, 12:24:16 pmI used several Gentle Typhoon variants of these (Nidec Servo D1225C12B3 series) running at 800-900 RPM in silent enclosures, moving air through filters or heatsinks. I haven't used the high-power 'B7 variant myself, only heard they are excellent for high airflow needs.I've found that isolating the fan from the chassis using low-durometer silicone or suitable springy foams makes a huge difference to some fans, lesser difference to others. It also depends on the chassis structure; riveted stamped metal ones are worst, and prone to resonances.

author: lausvi
author_rank: Unknown
timestamp: October 23, 2024, 08:05:21 pm
content: Thanks!Quote from: Nominal Animal on October 23, 2024, 10:12:11 amYeah I guess I'd be easier to get a modern fan and do some custom controller-thingy than hunt some obscure NOS fans (I presume the RPM would need to match too?)Quote from: Nominal Animal on October 23, 2024, 10:12:11 amThanks for the suggestions, a schematic would also be great! I must admit this stuff travels on the border of my know-how (I have done some rudimentary Arduino stuff and flashed firmware on some embedded stuff, and done some simple KiCad work etc).Noticing that finnish flag on your profile as well, do you think you could spare one of your CH32X033F8P6s?I am in progress of building a cart of some misc parts from Mouser so I could get the other parts like the drivers and the sensors myself... (I presume they don't stock any comparable microcontrollers?)

author: Nominal Animal
author_rank: Super Contributor
timestamp: October 24, 2024, 12:37:38 pm
content: Quote from: lausvi on October 23, 2024, 08:05:21 pmI'm only a hobbyist on the electronics side myself, using various microcontrollers with native USB interfaces (from AVRs to i.MX RT1062), mostly on devboards, to interface to Linux machines.Most of my designsare in Public Domain via CC0-1.0 dedication.Quote from: lausvi on October 23, 2024, 08:05:21 pmSure, no problem; I will likely order more anyway (perhaps CH32X035C8T6's in LQFP48) if they are as easy as it looks like for USB HID and USB Serial gadget/tool-making. We could meet atHelsinki Hacklabsome Tuesday evening, for example.Quote from: lausvi on October 23, 2024, 08:05:21 pmATtiny204, 404, 214, 414 in 14-pin SOIC for example would work absolutely fine, but you need an UPDI programmer for them. As long as you're careful with the reset fuse, any 5V UART will work; otherwise you'll need a 12V HV UPDI programmer likeStefan Wagner's SerialUPDI HV Programmer.ATtiny24A uses the older SPI programming.You can program these in Arduino and PlatformIO usingmegaTinyCore.For the WCH CH32V and CH32X chips, one can use WCH'sArduino Coreor PlatformIO'splatform-ch32vcore.

author: Nominal Animal
author_rank: Super Contributor
timestamp: October 24, 2024, 05:18:07 pm
content: The one difficulty is picking which pins to use,ifyou want to use it for something beyond the fan control.In the attached image (and OpenOffice/LibreOffice spreadsheet), each I/O pin is on its own row, and each peripheral option in its own column. For each peripheral, you can use at most one column. For each pin, you can pick between GPIO and peripheral functionality. Some other microcontrollers are more flexible, allowing one to select between peripherals for each pin, but CH32X and CH32V select pin sets for the peripheral instead. Some pins, like CS, CTS, and RTS, can be enabled or disabled separately within the peripheral configuration, though.I believe Timer1 is best used for a 1 MHz clock, with the 83.33 Hz "fake" tach output (corresponding to a fan rotating at 2500 RPM) generated from it using divisor 12000; timer2 for a 25 kHz PWM for the fan speed control, and Timer3 for the fan tach signal.Attached is also an initial schematic, using 5V logic levels for the I2C devices. Since there is only one bus, you'll need to use sensors whose I2C addresses differ. I would be very tempted to add a 3.3V regulator (like AP2112R5-3.3TRG1) and an I2C switch like PCA9548APWR, to both level-convert and split the I2C bus to up to 8 independent buses (typically only one device per bus, though). That way one could easily add for example a small 0.91" (128×32) or 0.96" (128×64) OLED display to display the temperature and fan RPMs.

author: lausvi
author_rank: Unknown
timestamp: October 24, 2024, 08:05:30 pm
content: Oh wow, thanks for the ideas. I had thought just a simple fake tach out circuit, but I can start to feel the feature creep setting inI'll try to wrap my head around this during the weekend.

author: Nominal Animal
author_rank: Super Contributor
timestamp: October 24, 2024, 11:32:44 pm
content: Something like a '555 and a N-channel MOSFET for open collector drive should work just fine.But.. look at the BOM cost. It islow.The thing to consider when fighting feature creep, is to carefully consider the usage patterns. I like to even simulate this (anything from cardboard upwards), and spend quite a lot of time thinking about what use cases are truly useful, and what are just feature creep.With a few suitably placed temperature sensors, you can make the fan speed control automatic.With the 10k linear pot, you can control how aggressive the fan is. If you omit the temperature sensors, you can use the pot to directly control the fan RPMs.(Note that a simple circuit that controls 25kHz PWM duty cycle based on the linear pot, will not be very accurate RPM-wise, and as the fan ages, the RPM at given duty cycle may become lower. This is why I created my own controller: I want to control the actual RPM of the fan, and not the PWM duty cycle directly.)The 0.91" 128×32 and 0.96" 128×64 OLED displays work best with 3.3V logic, and the I2C interface is excellent for a tiny graphic display. The controller (typically SSD1306) has an internal framebuffer one can write to, essentially in 1×8 pixel aligned slices. SSD1306 does not have 5V tolerant inputs, but a 5V-tolerant I2C hub (if you want separate connectors for each I2C sensor) like PCA9548A and a 3.3V regulator would allow both 5V and 3.3V sensors to be used (up to 7, plus one for the OLED display). I like JST PH2.0 (2mm pitch) connectors, and the 5-pin ones would be pretty nice for sensors –– 3.3V, 5V, GND, SCL, SDA –– and you could even use identical sensor ICs (with the same I2C address), making them interchangeable.All of the above would make me personally gravitate towards something like the attached schematic. It is definitely "overkill", supporting up to two fans and up to 8 I2C sensors or I2C OLED displays at 3.3V logic, but my thought is that if one makes one board, it's worth making five, and only populate the parts one happens to need. J1-J8 could have a jumper or solder pad to select between 3.3V and 5V pull-ups; the TCA9548A can handle overvoltage. And there are still three analog capable pins available. I might use PA4 for second pot, and PA2 and PA3 for an UART, perhaps via a pair of 74LVC1T45 voltage level translators.The buttons SW1-SW3 are arranged in a voltage divider so that SW1 (=0.647), SW2 (=0.322), and SW1+SW2 (=0.274) can be easily detected; and SW3 (=0), if pressed, ignores/overrides the other two buttons.

author: nctnico
author_rank: Super Contributor
timestamp: October 25, 2024, 05:43:55 pm
content: How about adding a polyfuse on each fan output? If one output gets shorted for whatever reason, not all fans stop and 12V isn't shutting down either. I would also add some capacitance to the 12V rail.From the software side: make sure to runs the fans at full speed for a few seconds at startup. When fans are getting worn, they will have trouble spinning up when running at lower speeds. I have a system in the field with Meanwell power supplies; because these don't run the (temperature controlled) fans at full speed at startup, some of the fans don't spin up and the power supplies don't start.Getting the system going involves blowing into the fans while switching the power on. Yes, that sucks massively and my fingers are itching to do a mod but the customer doesn't want modified power supplies OR pay more for power supplies which might not have this problem.

author: Nominal Animal
author_rank: Super Contributor
timestamp: October 25, 2024, 06:23:31 pm
content: I have never seen a PC fan short the 12V myself (even when stalled), but there certainly would be no harm from polyfuses of suitable ratings.Something like P-channel MOSFETs as high-side switches to control the supply to each fan could be useful as well.The originalIntel 12V 4-wire PWM fan specspaid particular attention to the initial startup: all you need to do is pull the PWM signal high for a couple of seconds, before you start the actual PWM signal. All fans I've seen do default to maximum speed with PWM tied high, for exactly this reason. For me, this is not a problem, because I adjust PWM to get the desired RPM, reading the tach output, instead of controlling to specific PWM duty cycles; I also avoid the initial noisywhooshthis way.Interestingly, this also means that if your power supply uses a standard 4-pin PWM fan, you don't need to modify either the fan or the supply, justadda start-up module to the fan cable, which keeps the PWM pulled high for a couple of seconds when 12V initially appears. As the PWM drive is open collector, I'd use a SPDT analog (bidirectional) switch, with common connected to fan PWM input, one throw to PWM source, and second throw to 5V via a pull-up resistor. Do some kind of an RC or other delay, so that the switch defaults to the 5V throw, but after a second or two switches back to the PWM source. I'm pretty sure you can do this in a very small 4-pin cable bulge. (The annoying part is that PWM signal is max. 5.25V, but you only have 12V supply on the 4-pin cable.)