Author Topic: How to convert a computer fan tacho signal to a rotor-locked signal?  (Read 811 times)

0 Members and 1 Guest are viewing this topic.

Offline MindBenderTopic starter

  • Regular Contributor
  • *
  • Posts: 58
  • Country: nl
Hi,

I am very happy with my Eaton 9SX 1500i UPS, but it has one big disadvantage: 43dB of fan noise, all the time, 24/7. That’s fine for a server room, but unfit for residential environments. Depending oh the source, it is said to slow down to 80% when not converting, but it makes no audible difference to me. So I opened it up and found a 80mm Sanyo Denki 9A0812G4D01 fan. This is a 3 lead fan, but the 3rd signal is not the tacho signal we all know and love; Instead, it’s a rotor-locked alarm signal. So I started looking for a silent alternative, but the requirement for this alarm signal makes it very hard to find one.

More people experience this problem, and this seems to be a popular ‘solution’:
https://www.reddit.com/r/homelab/comments/kqdg70/ups_fan_mod_help_eaton_9px_1500
However, I don’t think it’s a solution at all, because it will report a false-negative if the rotor is locked in some positions.
Am I correct?

Alternatively, there is this project:
https://www.jameco.com/Jameco/workshop/JamecoFavorites/tach-rotor-adapter.html
As an embedded software developer I’m all for using microcontrollers, but this seems overkill, or art-pour-l’art. Besides that’s there’s no purchase link or source code available.

To me it seems like this problem should be solvable with some logic circuitry, but it’s too long ago since I did any electronic engineering, so I wondered if you guys here had any good ideas.

PS. Synology uses fans with this signal too; I read a lot about Synology users with a similar fan problem.

Thanks in advance for your ideas and suggestions,

        Robert.
 

Offline Whales

  • Super Contributor
  • ***
  • Posts: 1899
  • Country: au
    • Halestrom
Might need an edge-triggered monstable oscillator?  Ie whenever the edge of the tacho signal is detected you generate a pulse of constant length.  You could then filter these pulses into a DC voltage with an RC filter, then use a pot to turn it down to the expected levels.

Make the pulses very short (shorter than the tacho at max speed, perhaps by 50%).   A 555 might be able to do it, not sure.

Online sparkydog

  • Regular Contributor
  • *
  • Posts: 228
  • Country: us
IIUC, the tacho pin normally sends a voltage pulse when the hub passes a certain point, i.e. one (or possibly two) pulse(s) per revolution.

Assuming the alarm signal is supposed to go voltage-high if the fan stops spinning, your problem then is to create logic to turn 'fan has power AND fan tacho pulse is not frequent enough' into a signal. Because this will also alarm if the fan is spinning but not delivering the tacho signal, I don't think there's any way for it to give false negatives. The down-side is that it won't alarm until the fan has been not-spinning for some duration, but I think that's standard practice anyway and is probably fine for your use. (I would even go so far as to guess that your existing fan behaves this way.)

If I had to implement this, I might look at something like this. (Click for simulation or see attached static image. The switches are for simulation purposes only and allow you to control whether the fan has power (top) and whether the tacho signal — simulated by the square-wave voltage source — is being received (bottom), i.e. whether or not the fan is spinning.)

The idea here is to slowly charge a cap when the fan has power, but to discharge the cap whenever you see a tacho pulse. As long as the fan is spinning, the cap won't be able to charge very much, but if it stops, you'll trip the alarm signal after a certain duration of not-spinning. (The resistances and capacitance should be tweaked to taste; the values here are somewhat arbitrary, but may be usable. As shown, this should alarm after ~360 ms, equivalent to fan speed dropping below ~165 RPM. For context, an NF-A8 bottoms out at 450 RPM, while the simulation is showing a measly 300 RPM.)

This may or may not work, depending on whether the tacho pulses are long enough to discharge the cap. I'm sure there are ways to turn the MOSFET on for longer than the pulse duration, though this would obviously add components to the circuit. (That said, the simulation suggests that a 0.01% duty cycle, equivalent to 0.036° of rotation, is sufficient to prevent the capacitor from building up enough charge. That corresponds to a 20µs pulse at 5hz / 300 RPM, or 2µs at 50hz / 3,000 RPM. I suspect the hall sensor that drives the tacho signal is not so sensitive that it only trips within ±0.018° of perfect alignment. 🙂)

An alternative would be to use a counter, with the tacho pulse wired to reset the counter. Increment the counter based on a moderately slow clock (e.g. 10hz) and trip the alarm if the counter gets above some small value (e.g. 5). Ideally, you should arrange for the counter to saturate rather than rolling over. Adjust the clock and threshold values to taste. (Actually, a very high clock and very high threshold will work just as well, but I'm guessing e.g. a slower 8-bit counter is cheaper and/or smaller than a faster 32-bit counter.) I suspect this is essentially what the MCU version you linked is doing, and you could certainly implement this logic easily using an MCU. The code would look something like:

Code: [Select]
int counter = 0

function init()
    gpio_mode(PIN_TACH, INPUT)
    gpio_mode(PIN_ALARM, OUTPUT)
    attach_interrupt(PIN_TACH, i_tach)
    gpio_write(PIN_ALARM, LOW)

function i_tach()
    counter = 0

function loop()
    if counter > THRESHOLD
        gpio_write(PIN_ALARM, HIGH)
    else
        ++counter
        gpio_write(PIN_ALARM, LOW)
    delay(1)
 

Offline Decapitator

  • Contributor
  • Posts: 25
  • Country: us
A 555 set up as a missing pulse detector should do the trick.
 


Share me

Digg  Facebook  SlashDot  Delicious  Technorati  Twitter  Google  Yahoo
Smf