Die Steuerung eines 4-Draht-Lüfter-PWM-Signals mit Arduino erlaubt nur zwei Einstellungen

Ich habe meinen PWM-Pin wie in diesem Tutorial mit meinem Arduino verbunden

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

Geben Sie hier die Bildbeschreibung ein

Es funktioniert einwandfrei. Ich kann die Geschwindigkeit anhand einer Skizze von dieser Website ablesen und einstellen:

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();
}

Es scheint mir, als ob ich nur Werte größer als 127 und Werte kleiner als 127 eingeben kann. Dazwischen gibt es keine Schritte. Der Lüfter wird nicht langsamer, wenn ich von 126 auf 0 oder von 128 auf 255 gehe.

Einige Ergebnisse, die ich bekomme:

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

Habe ich einen Fehler gemacht oder ist es möglich, dass mein Lüfter keine genauen Werte akzeptiert? Können Sie 4 kabelgebundene Lüfter empfehlen, die ich für diesen oder einen anderen Weg verwenden könnte? Ich dachte darüber nach, einen SG2524N zu verwenden, um einen zweiadrigen Motor zu steuern, aber ich habe keine Erfahrung damit. Danke für deinen Rat.

Sind Sie sicher, dass Pin 3 ein PWM-Kanal auf Ihrem Arduino ist? Verwenden Sie zum Testen eine LED.
Ich verwende jetzt SoftPWM, immer noch keine Änderung. Ich werde den Lüfter tauschen und es erneut versuchen

Antworten (1)

Lüfter verwenden keine Standard-PWM-Frequenzen. Die PWM-Steuerfrequenz muss 25 kHz betragen. Ein 16-MHz-Arduino kann dies relativ einfach per Software tun. Suchen Sie einfach nach "4-Draht-Lüfter Arduino" und es gibt einige Beiträge dazu, einschließlich Beispielcode zum Einstellen der Prescaler-Frequenz, sodass die Ausgangs-PWM bei 25 kHz liegt.

Einverstanden. 25 bis 50 HERTZ ist ein abgrundtief kleiner Arbeitszyklus für einen Lüfter.
Hier ist ein Link zum Einrichten von 25-kHz-PWM auf Arduino: arduino.stackexchange.com/a/25623/7732