nach 2 Nächten und vielen Fehlversuchen möchte ich mich an euch wenden.
Mein Tablett im Dock mag das Wetter gerade nicht. Es taktet arg herunter und ich mag eine "coole" Lösung dafür haben.
Ich habe noch einen Lüfter von Arctic Cooling gefunden, der 4 Pins hat. (F8 PWM Rev. 2)
Über den seriellen Port steuere ich die Drehzahl und ob ein / aus. Ich nutze dafür ein Python-Script, dass CPU-Last und Taktfrequenz aus dem Surface ausliest und entsprechend gegensteuert, BEVOR das Tablett langsamer wird. Nebenbei ist das ganze somit automatisch an/aus, wenn das Tablett im Dock steckt.
Es funktioniert im großen und ganzen, jedoch pfeift das Teil sehr ordentlich, sobald ich die Drehzahl regele. Das muss wohl dieses berühmte 25khz-PWM-Problem sein.
Diesen Teil des Codes verstehe ich aber nicht wirklich:-(
Ich VERMUTE, dass ich nicht mehr mit digitalWrite sondern immer mit OCR5B = X steuern muss. Kann das sein?
Noch einige Infos:
Das Pfeifen verschwindet, wenn der Lüfter direkt ohne Arduino läuft.
Das Regeln funktioniert ganz gut. Zwischen 1-9 am Ser-Port verändert sich die Drehzahl entsprechend.
Die ausgelesene Drehzahl kann jedoch nicht passen. Laut Spezifikation läuft der Lüfter zwischen 850 - 2000 RPM. Angezeigt werden mir jedoch Werte zwischen 1700 und 3000.
Mein Lüfter hat eine Minimal-Drehzahl. D.h. "AUS" werde ich mit einem Transistor zusätzlich schalten müssen. - VORHER muss aber das Gepfeife weg.
Wo kann / muss ich ansetzen? Einfach Code-Einfügen ist nicht meine Art, aber diese Timer-Beeinflussung oben entzieht sich meinem Verständnis.
Ich bin nun an dem Punkt, wo ich das auf jeden Fall lösen möchte und wenn es irgendwie geht auch verstehen, was ich da genau tue.
Für Tipps bin ich dankbar. Wenn ich Infos vergessen habe, bitte nachfragen.
ardubu:
welchen Arduino hast du, und welchen PWM Pin nutzt du?
Für den Sketch aus dem ersten Link spielt das keine Rolle, da wird die PWM ja per Software gestellt. Der zweite Codeschnipsel stellt die PWM-Frequenz auf der Registerebene ein, sollte damit mit analogWrite ganz normal aufgerufen werden können. Und den ersten Sketch mit dem zweiten zu verwursteln bringt somit exakt gar nichts.
Das ganze sieht nach murks aus. Du solltest als Anfänger das direkte schreiben in die Register weglassen.
Pin5 und 6 solltest du ebenfalls aussen vor lassen. Soweit mir bekannt ist, läuft auf dem dahinter liegenden Timer die Generierung für millis().
Dabei wird der Teiler durch den der Prozessortakt dividiert wird verkleinert, so dass der Timer schneller läuft. Danach kann man ganz normal analogWrite() verwenden
Da die 25khz nicht genau getroffen werden, kann es deshalb sein, dass nur
analogWrite(9,speed) - Werte zwischen 28und 254 funktionieren?
Ich lese inzwischen auch die u/min aus.
255 = volle Drehzahl, aber es wird eine viel zu niedrige Drehzahl ausgeben. Niedriger als bei 254.
Werte unter 28 erzeugen eine sehr geringe Drehzahl, melden jedoch extrem hohe Werte vom Lüfter zurück.
Es funktioniert alles. Es geht jetzt nur noch um das Verständnis.
7cookies:
Da die 25khz nicht genau getroffen werden, kann es deshalb sein, dass nur
analogWrite(9,speed) - Werte zwischen 3 und 254 funktionieren?
Nein, PWM funktioniert unabhängig von der Frequenz. Da geht es ausschließlich um das Puls-Pause-Verhältnis. Der Lüfter hat aber auch noch eine interne Elektronik, da kann es durchaus einen eingeschränkten Regelbereich geben.
7cookies:
Es funktioniert alles. Es geht jetzt nur noch um das Verständnis.