I'm trying to read the rotation speed of a 12V PC fan (Brushless) using this example:
http://playground.arduino.cc/Main/ReadingRPM:
volatile byte half_revolutions;
unsigned int rpm;
unsigned long timeold;
void setup()
{
Serial.begin(9600);
digitalWrite(2, HIGH);
attachInterrupt(0, rpm_fun, RISING);
half_revolutions = 0;
rpm = 0;
timeold = 0;
}
void loop()
{
if (half_revolutions >= 20) {
//Update RPM every 20 counts, increase this for better RPM resolution,
//decrease for faster update
rpm = 30*1000/(millis() - timeold)*half_revolutions;
timeold = millis();
half_revolutions = 0;
Serial.println(rpm,DEC);
}
}
void rpm_fun()
{
half_revolutions++;
//Each rotation, this interrupt function is run twice
}
However the reading is always the same value (720 - 860) regardless of fan speed (3.3v - 12v).
I've opened up one of the fans and found a single AH211 hall effect sensor (https://www.diodes.com/assets/Datasheets/AH211.pdf).
Am I missing something obvious? This looks like a standard unipole hall effect sensor.
Thanks
Alan