Signal amplitude too low when reading the CPU fan signal

Hi guys,

I have a small personal project where I would like to read with Arduino the rotation of a CPU fan. The fan is a PWM Arctic p12 Max, with 4 wires. I have successfully sped it up and down using PWM, however, I am a bit stuck when it comes to reading the SIGNAL / TACHO.

The issue is, that when I try to read the signal, the amplitude is low.

The measurements
Here you can see the oscilloscope reading, in the picture below, when I try pulling up the signal to 5V (pulling up to 12 V has similar results). With either pull-up voltage, you can see the frequency is more or less what is expected for a fan that sped up to around 3000 rpm with 2 pulses per rotation, however, the amplitude is very low. Around 1 V for the 12 V pull-up and 0.5 V for the 5 V pull-up. In addition, the signal is noisy and neither low voltage is at 0 V. I was hoping to use this signal in my Arduino project, having a signal that varied from 0 to 5V, but using this signal as is makes it hard to properly measure the rpm.


5V pull-up reading

The Circuit
As you can see in the picture, I stripped down my circuit to the very basic, so I could power the fan and read the signal.


(EDIT: I added this diagram now)

The circuit consists of a USB power delivery board, set to output 12V (confirmed working with a multimeter), and a buck converter to drop the 12V to 5V (confirmed with a multimeter). The fan is powered with the 12V while the PWM is set to the 5V, to simulate 100% duty. The fan speed SIGNAL is connected to a pull-up resistor of 1K Ohm (I also tried other values from 100 to 10K Ohms) and the pull-up voltage is 5V (I also tried with 12).

Question
Do you see something wrong with my circuit or how I taking the readings?
Do you have any suggestions on how to fix my circuit and ultimately read the rpm in an Arduino. I have found many tutorials for the Arduino coding part, but they all seem to depend on a decent signal from 0 to 5 V.

Is the white wire 5V and the brown wire the tach output?
Where are the scope and Arduino grounds connected?

The fan ground must be connected to the arduino and scope grounds.

1 Like

Yes, the white wire is 5V and connected to the fan PWM input and the brown wire is the fan TACH output. The Arduino is not connected in this diagram (I'll connect it later when the signal looks better). The scope ground is connected with the dark wire on the bottom left of the image. It's connected to the bottom (-) ground rail which is connected to the upper (-) ground rail, and therefore shares ground with the fan.
Just to double-check, I connected both (-) ground rails with an extra wire, the result is identical.

Apparently you checked everything I would check. It looks like a ground problem but where I don't know.
Is it possible the fan is bad?

1 Like

High performance fans require a power source that supplies a constant amperage, otherwise they will not work well. If you are going to monitor it on your PC, I suggest that the power supply be directly a 12V line from your PC supply. I have an NF-F12 industrialPPC-3000 PWM. It consumes between 3.17 and 3.6 W, I have it installed along with a relay on the 12V line, this allows the fan to be turned on and off safely, without compromising either the fan or the MCU.

The RPM depends approximately on PWM, you just have to know the lower and upper limits of fan operation. In the Noctua it goes from 750 to 3000 rpm with PWM from 1 to 255, with the map function you can obtain the approximate RPM

PWM Fan Control

I have 2 fans of the same model. They both present the same issue, however, they hover around different voltage levels. The one in the photo has vmax 1.6, while the other has a vmax of 2.4. So I think it is unlikely the fan is bad (unless I broke both the same way). The fans seem to work perfectly fine responding to PWM signals, and the frequency of the TACH signal looks good and corresponds to the fan speed.

I am powering it with a USB adapter that can supply 36W at 12 V, so I think it has enough power. I do not plan to use the fan in a computer.

Regarding getting the estimated rpm via the PWM, I know this is possible, but I would like the actual measurement from the SIGNAL wire. For example, I noticed that running the fan flat down on a table at full speed runs slower than if I pick it up (due to how hard it needs to work to pull the air). I want to measure the actual speed.

Hi, @gus3001
Welcome to the forum.

Can you please post a copy of your circuit, a picture of a hand drawn circuit in jpg, png?
Hand drawn and photographed is perfectly acceptable.
Please include ALL hardware, power supplies, component names and pin labels.

Are you using scope probes in x10 mode, have you set the scope to scale for x10 probes if you are?
Have you got the scope gnd connected to the circuit gnd?

Thanks.. Tom.. :smiley: :+1: :coffee: :australia:

It seems from your description that something is wrong with the circuit, and the scope probe may be only capacitive coupled to the signal.

Breadboards are unreliable, so the first thing to do is check continuity or redo all the breadboard connections.

What value pullup resistor?

The tach output should be open drain (collector) and should be able to sink up to 5mA. So it should work with a 4.7K pull-up. The fan should run at full speed with nothing connected to the PWM input. So just for debugging purposes, try disconnecting the 5V from the PWM input

A while ago I found this note from Noctua in relation to RPM control by PWM, It wouldn't be bad if you took a look, some information could be useful to you in the project

Hi @TomGeorge, I have edited my post to include a diagram.

I am using x1 on the probe and the scope (double checked) and the scope's ground is connected to the circuit's ground.

Hi @jremington,

I have taken apart and reassembled the circuit at least 3 times with 2 different breadboards. I have tested pull up resistors from 100 Ohms to 10K Ohms. The picture is from when I used 1 K. The higher the pull-up resistance I use, the "worse" the signal gets. The signal goes flat.

Thank you @TFTLCDCyg, I have already read that before starting the project. PWM works well with my set up, the issue is reading the TACH.

Do not go back and add to old posts, anything that we ask for is best put in a new post.
Imagine someone later using this thread to solve a problem they have, by editing an old post you have confused the flow of the thread.

Tom... :smiley: :+1: :coffee: :coffee: :coffee: :australia:

100 ohms could burn out the transistor in the fan. 1K is the smallest you can use, but you should use something higher.
Does your fan have two connectors or just one?

Select 5V per division on your scope.

Show us a trace with the probe connected to the circuit gnd.
Show us a trace with the probe at 5V.
Show us a trace with the probe at 12V.

With the fan connected.

Thanks.. Tom.. :smiley: :+1: :coffee: :australia:

My fan has a single 4 pin connector,

I think that during your experimenting with resistors less than 1K you may have damaged the fans. Did you try what I suggested?

Hi @TomGeorge,

By trace, I assume you mean a picture of the oscilloscope taking the measurement. All pictures were taken with the fan connected and at full speed.

At GND:

At 5V:

At 12V: