Arduino-gesteuerter PWM-PC-Lüfter

Ich bin auf der Suche nach 2 Evercool EC8015HH12BP 80x10mm (4-Draht) PWM-Lüftern. Ich betrachte jedoch die Steuerung der Lüftergeschwindigkeit mit dem Arduino über die PWM-Pins.

Ich habe das folgende Diagramm gefunden, das anscheinend das ist, wonach ich suche, um den Lüfter an den Arduino anzuschließen:

Geben Sie hier die Bildbeschreibung ein

Der Code, den ich denke, dass ich verwenden kann, ist dieser:

int pwmPin = 9;      // digital pin 9
int pwmVal = 10;

void setup()
{
  pinMode(pwmPin, OUTPUT);   // sets the pin as output
  Serial.begin(9600);
}

void loop()
{
  if (pwmVal != 255) {
         analogWrite(pwmPin, pwmVal);
         //pwmVal += 10;
         Serial.print(pwmVal);  // Print red value
         Serial.print("\n");    // Print a tab
  } else {
         Serial.print('at max high');  // Print red value
         Serial.print("\n");    // Print a tab
  }
  delay(1000);
}

Ich nehme an, dass die PWM im Bereich von 0-255 liegen würde, wenn ich sie vom Arduino aus schreibe? Ich werde den DS18B20 Thermometer-Temperatursensor verwenden, um zu sehen, wie schnell ich den Lüfter drehen muss.

Die Lüftergeschwindigkeit (momentan maximal 12 V) wird jedoch nie ein bisschen langsamer.

Ich verwende D9 auf dem Arduino Nano ATmega 328.

Die Referenz ist hier für das Board (falls ich den Board-Pin falsch habe): Geben Sie hier die Linkbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Jedes hilfreiche Feedback wäre großartig!

Wenn ich darf, ohne zu beleidigen, ist eine schöne Sache an der Arduino-Plattform, dass Sie sie einfach ausprobieren und sehen können, ob sie funktioniert. Noch besser, modularisieren Sie Ihr Problem und testen Sie jedes einzelne Subsystem. Sie werden VIEL MEHR darüber lernen, wie Sie Probleme wie dieses angehen, indem Sie sie ausprobieren, als Sie jemals fragen werden: "Was denken Sie?" Niemand sollte Ihnen beim Debuggen Ihres Codes helfen, bevor Sie selbst versuchen, ihn zu debuggen.
@ScottSeidman Ich habe mein OP mit weiteren Informationen zu meinem Test aktualisiert.
Das ist ein Haar besser. Was sagt Ihnen Ihre Seriennummer, was pwmVal tut?
@ScottSeidman Es ist gerade immer und immer wieder auf 10 eingestellt ... was den Lüfter verlangsamen sollte, aber seine maximale Geschwindigkeit dreht sich immer noch.
Die PWM-Frequenz muss laut formfactors.org/developer/specs/4_Wire_PWM_Spec.pdf zwischen 21 kHz und 28 kHz liegen . Ich weiß nicht, wie man die PWM-Frequenz auf einem Arduino einstellt, aber ich vermute, dass sie eingestellt werden muss
Dieses Dokument schlägt auch vor, dass der Sense-Pin Pin 3 und der PWM-Pin Pin 4 ist. Ich habe keine Ahnung, ob das richtig ist, und kann keine Verantwortung für Ihren Lüfter übernehmen, wenn dies nicht der Fall ist.

Antworten (3)

Eine Sache ist das zu beachten


if (pwmVal != 255) {
    pwmVal += 10;
    ...

wird nicht bei 255 aufhören, da pwmVal 250, dann 260 usw. sein wird. Eine Möglichkeit, dies zu beheben, wäre Schreiben


if(pwmVal < 255)
{
   pwmVal += 10;
}
else
{
   pwmVal = 255;
}

Übrigens, Ihr Code ist geschrieben, wenn DEBUG auf 0 gesetzt ist, wird nichts passieren (pwmVal wird auf 0 gesetzt). Wenn DEBUG auf 1 gesetzt ist, erhöht sich die Lüftergeschwindigkeit mit einer Rate, die durch "Warten" festgelegt wird (was in diesem Code nicht definiert ist), bis sie ihr Maximum erreicht. Der Wert wird auch an die serielle Schnittstelle ausgegeben.

pwmVal=min(pwmVal, 245); pwmVal += 10;
Danke für die Antworthilfe, gbmhunter. Ich habe mein OP mit weiteren Informationen aus meinem aktuellen Test aktualisiert.

Die PWM-Frequenz muss laut formfactors.org/developer/specs/4_Wire_PWM_Spec.pdf zwischen 21 kHz und 28 kHz liegen. Ich weiß nicht, wie man die PWM-Frequenz auf einem Arduino einstellt, aber ich vermute, dass sie eingestellt werden muss.

Das gleiche Dokument schlägt vor, dass Sie möglicherweise Ihre Sense- und PWM-Pins umgekehrt haben (obwohl Ihr Diagramm und Ihr Foto zwei verschiedene Dinge zeigen!). Ich kann dies nicht überprüfen oder die Verantwortung für Ihren Lüfter übernehmen, wenn es falsch ist.

Die PWM-Frequenz bei Verwendung der Funktion analogWrite() beträgt etwa 490 Hz und kann nicht geändert werden. Sie können die PWM-Register jedoch direkt manipulieren (sehen Sie sich das ATmega-Datenblatt oder Beispiele online an), um die PWM-Frequenz auf praktisch alles einzustellen, was Sie wollen.

Entschuldigung, dass ich dies als weitere Antwort hinzugefügt habe, aber ich durfte Scott Seidmans Antwort keinen Kommentar hinzufügen und dem Kommentar von gbmhunters keine weiteren Informationen hinzufügen.

Die PWN-Frequenz kann über die PWM-Register gesteuert werden, was auch erforderlich ist, wenn Sie den Arduino als IR-Sender, wie eine programmierbare Fernbedienung, verwenden möchten.

Weitere Informationen zu den PWN-Registern finden Sie in diesem Beitrag, ursprünglich geschrieben von Ken Shirriff: https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM

Hallo dazo und willkommen auf dieser Seite. Vielen Dank für Ihren Beitrag. Wie Sie vielleicht erraten haben, war das Hinzufügen einer Antwort nicht die beste Lösung, und das Hinzufügen eines Kommentars wäre eine gute alternative Lösung. Aber das Beste ist IMHO, das eine Verbesserung der Antwort vorschlägt: meta.stackexchange.com/questions/76251/…
Hast du meinen ersten Absatz gelesen? Da stand "aber ich durfte keinen Kommentar hinzufügen" ... Sonst hätte ich das gemacht. Anscheinend fehlte mir genug "Karma", um einen Kommentar hinzufügen zu dürfen. Ich sehe auch keine Schaltfläche "Verbessern", und ich hatte auch keine Bearbeitungsrechte ... aber ich scheine heute mehr Rechte zu haben.