El control de una señal PWM de ventilador de 4 cables con Arduino permite solo dos configuraciones

He conectado mi pin pwm a mi arduino como en este tutorial

http://fritzing.org/projects/reading-pc-fan-rpm-with-an-arduino/

ingrese la descripción de la imagen aquí

Está funcionando correctamente. Puedo leer y configurar la velocidad usando un boceto de este sitio web:

http://www.beefrankly.org/blog/2011/12/21/read-out-4-pin-cpu-fan-speed/

int fanPulse = 0;
unsigned long pulseDuration;

void setup()
{
Serial.begin(9600);
pinMode(fanPulse, INPUT);
digitalWrite(fanPulse,HIGH);
}

void readPulse() {
pulseDuration = pulseIn(fanPulse, LOW);
double frequency = 1000000/pulseDuration;

Serial.print("pulse duration:");
Serial.println(pulseDuration);

Serial.print("time for full rev. (microsec.):");
Serial.println(pulseDuration*2);
Serial.print("freq. (Hz):");
Serial.println(frequency/2);
Serial.print("RPM:");
Serial.println(frequency/2*60);

}

void loop()
{
analogWrite(3,20);
delay(5000);
readPulse();
analogWrite(3,50);
delay(5000);
readPulse();
analogWrite(3,100);
delay(5000);
readPulse();
analogWrite(3,200);
delay(5000);
readPulse();
analogWrite(3,255);
delay(5000);
readPulse();
}

Me parece que solo puedo ingresar valores superiores a 127 y valores inferiores a 127. No hay pasos entre ellos. El ventilador no girará más lento cuando pase de 126 a 0 o de 128 a 255.

Algunos resultados que obtengo:

100: 

 pulse duration:19058
time for full rev. (microsec.):38116
freq. (Hz):26.00
RPM:1560.00


0:

pulse duration:19160
time for full rev. (microsec.):38320
freq. (Hz):26.00
RPM:1560.00


127:

pulse duration:9032
time for full rev. (microsec.):18064
freq. (Hz):55.00
RPM:3300.00


255:

pulse duration:9151
time for full rev. (microsec.):18302
freq. (Hz):54.50
RPM:3270.00

¿He cometido algún error o es posible que mi ventilador no acepte valores precisos? ¿Me puede recomendar algún ventilador de 4 cables que pueda usar para esto o de alguna otra manera? Pensé en usar un SG2524N para controlar un motor de dos cables, pero no tengo experiencia con esto. Gracias por su consejo.

¿Estás seguro de que el pin 3 es un canal PWM en tu Arduino? Use un LED para probar.
Ahora estoy usando SoftPWM, todavía no hay cambios. Voy a cambiar el ventilador e intentarlo de nuevo.

Respuestas (1)

Los ventiladores no usan frecuencias pwm estándar. La frecuencia de control PWM debe ser de 25 khz. Un arduino de 16 MHz puede hacer esto con relativa facilidad a través del software. Simplemente busque "arduino de ventilador de 4 cables" y hay bastantes publicaciones, incluido un código de muestra para configurar la frecuencia del preescalador para que el PWM de salida sea de 25 kHz.

Acordado. 25 a 50 HERTZ es un ciclo de trabajo abismalmente pequeño para un ventilador.
Aquí hay un enlace para configurar PWM de 25 KHz en Arduino: arduino.stackexchange.com/a/25623/7732