I have a cooling system that uses an external temperature sensor to turn on two HDF4020L-12HHB 12VDC fans and I need to use the locked rotor sensor outputs from the fans as inputs to a MCU (5V logic) to be able to detect when each fan fails. The problem is that when the fans are operating normally the sensor outputs are triggering making it difficult to distinguish between a locked rotor condition and normal operation.

The fan datasheet doesn't specify the type of sensor output but I am assuming it's an open collector output like most other fan alarm signals. I am also assuming that I will need to provide an external pull-up resistor.

Here is my updated circuit:

enter image description here

I built this circuit on a breadboard to test my design and I am having trouble interpreting the results. When the fans are switched on both sensor outputs drop to about half the supply voltage (6V) and, when either one of the fans are kept from spinning (locked rotor condition) the signal oscillates between 12V and GND. I don't have an oscilloscope to accurately measure the waveform on the fans sensor output but it appears to be oscillating at a 2/3 duty cycle where the signal is high for 2 seconds and low for 1 second.

The research I have found shows the sensor output going high and not oscillating except when using a "thermal speed controlled fan or a two-speed fan" which I am not using.

Output waveform from Sanyo Denki

enter image description here

Output Waveform from ADDA AD0412UB-C72GP(P) datasheet

enter image description here


  1. What is causing the fan sensor output to swing from 12V to GND? Answered in comments below.

  2. Why is the output voltage approximately half of the supply voltage when the fan is operating normally and is there a way to pull this signal high or low to prevent unpredictable behavior on the MCU input pin?


I updated the circuit to fix a mistake that I made by trying to source current from the open collector output on the fan. The updated circuit now sinks current when the open collector of the fan is activated which turns on the optocoupler and causes a state change on the MCU GPIO pin.

I also changed the value of the series resistor on the input of both optocouplers from 1k to 2.4k in order to limit the current through the transistor on the fan. I measured this current and noticed that the open collector is sinking about 2.4mA of current through the optocoupler when the rotor is not locked and 0.0mA/5.0mA (0V/12V respectively, as described above) when the rotor is locked.

I believe this is what is causing a false negative signal on the MCU. My guess is that the internal circuitry of the fan is switching the transistor on and off rapidly creating an averaging effect that is not visible on a miltimeter. Is this a reasonable explanation for this phenomenon? How can I mitigate this effect?

  • 1
    \$\begingroup\$ This seems to be a better diagram of the likely operation: nmbtc.com/dc-fans/engineering/sensor.html ...from this you can see the dependency of locked rotor and overcurrent since both elements are sent using the locked rotor signal. \$\endgroup\$ – Jack Creasey May 18 '18 at 16:28
  • \$\begingroup\$ @JackCreasey Thanks for the link. This does appear to explain more about the output of the fan sensor but, I still don't understand why the signal drops to 6V when the fans are on. Shouldn't the open collector output remain high (via pull-up resistor) when the fan is running and not in a locked rotor condition? As a result of this drop in voltage, the MCU is receiving 2.42V on the input. This doesn't seem like a reliable digital signal for an input to a MCU. How can I find out what is causing this? Is it possible that the BJT inside the fan is switching on and off rapidly? \$\endgroup\$ – kprince May 22 '18 at 15:28

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.