PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Lüfter PWM ruhig laufen



MagierWhite
18.02.2021, 05:46
Hallo

ich habe das Problem das ich einen Lüfter per PWM, bei langsameren Drehzahlen ruhig laufen lassen will.

Hier die Fakten:
- Arduino Due
- IRF 3708 MOSFET, N-CH -> https://www.reichelt.de/mosfet-n-ch-30v-62a-87w-to-220ab-irf-3708-p90229.html
- Widerstand 5kΩ zu Absicherung auf GND
- SUN EEC0251B2-0 -> https://www.reichelt.de/axialluefter-120x120x25mm-12v-157-9m-h-40-5dba-sun-eec0251b2-0-p260581.html
---Spannung DC 12 V=
---Leistung 3,85 W
---Strom 0,321 A
---Drehzahl 2700 U/min

35439

Also der Lüfter läuft. Zu erst habe ich es ganz klassisch per


pinMode(Luefter1_Pin, OUTPUT);
analogWrite(Luefter1_Pin, Luefter1_Val);

versucht. Auch an einem PWM Pin (D5) mit erhöhter Auflösung


analogWriteResolution(12);
pinMode(Luefter1_Pin, OUTPUT);
analogWrite(Luefter1_Pin, Luefter1_Val);

nur Summt und Fiebt der Lüfter bei niedrigeren Drehzahlen. (Eigentlich schon ab ~75-60%)

Bei meiner Suche nach eine Lösung habe ich Hinweise gefunden, das es sich hier wohl ein Problem mit der PWM Frequenz handelt.
Ich weiß auch das ich die Frequenz für "analogWrite" ändern kann, nur ändern sich damit auch die Timings z.B. für "mills()" und das brauche ich später auch noch.

Als Lösung habe ich eine spezial Library gefunden.
https://github.com/antodom/pwm_lib
Das ist eine PWM Library für den Arduino Due. (Daher auch der etwas exotische Pin 35) So kann ich direkt das Hardware PWM Signal des AT91SAM3X8E anzapfen.

Mit der Library kann man PWM_PERIOD und PWM_DUTY in "hundredths of microseconds" einstellen, beide Werte sind als uint32_t definiert. Also Werte von 0 bis 4294967295.

Ich finde jetzt nur keine guten Werte um den Lüfter langsam und ruhig laufen zu lassen.

Ich weiß das ich da ein Problem (Unwissen) über PWM habe. Ich habe mir ein Grundwissen angelesen, mir fehlen aber die Fachkenntnisse zum irgendwelche Berechnungen anzustellen.

Könnte mir da jemand helfen mit welchen Werten ich da spielen könnte oder hat sonst einen Tipp?

Schon mal herzlichen Danke!!!

Rabenauge
18.02.2021, 06:35
Schreib dir doch einfach ein Testprogramm, was den gesamten Wertebereich mit unterschiedlichen Settings mal in ner Schleife durchspielt.
Die jeweiligen Werte lässt du dir ausgeben, z.B. auf die serielle Schnittstelle....

Etliche Lüfter (andere Motoren auch) laufen bei zu niedrigen Werten nicht an, das erzeugt dann brummen, fiepen oder pfeifen- da hilft die Kickstart-Methode: mit Vollgas starten und dann runter regeln.

Im übrigen: die Sunon-Lüfter sind beliebt wegen der Leistung, aber nicht wegen dem Geräuschpegel.
Wenn es dir auf die Lautstärke ankommt, nimm lieber nen Noiseblocker.

MagierWhite
18.02.2021, 07:05
Ja so was hatte ich mir auch schon überlegt. Nur das so ein Programm ziemlich lange laufen würde, selbst wenn ich die Schrittweite recht hoch einstelle.
4294967295 hundredths of microseconds, also 4294967295 Nanosekunde ns sind immerhin 4.29497 Sekunden, dann kommt noch hinzu das es immer etwas dauert bis die Werte ausgeführt werden (ich vermute das ein Update des Registers erst nach einem vollen Durchlauf ausgeführt wird), dazu kommt noch die Trägheit des Lüfters.
Habe mir ein Programm geschrieben, mit dem ich mit zwei Schiebereglern die Periode und Duty einstellen kann und per Serial an den Arduino sende. Trotzdem bekomme ich auf keine "schöne" Werte.
Bei allem was ich mir überlegt habe muss ich für alle Schritte sowohl die Periode als auch das Duty einstellen.

Habe mich schon durch diverse PDFs über den AT91SAM3X8E gewühlt aber der Chip ist lange nicht so "gut" oder besser "einfach Dokumentiert" wie die anderen Arduinos.

Und zum Lüfter an sich. Ja ich weiß das das nicht das leiseste Model ist aber das geht klar. Will nur kein nerviges Fiepen oder Brummen. (Habe es auch schon geschafft den Lüfter quasi "Springen" lassen = völlig falsche Werte)

Dachte nur das ich nicht der erste sein kann der vor so einem Problem steht und auch wenn ich was lernen will, muss ich ja nicht jedes Mal das Rad neu erfinden.

oberallgeier
18.02.2021, 10:02
.. Problem das ich einen Lüfter per PWM, bei langsameren Drehzahlen ruhig laufen lassen will .. wohl ein Problem mit der PWM Frequenz ..Simpler Rat: rauf mit der Drehzahl. Leider keine Lösung zu Deiner arduino-Lösung.

Meine Thermosteuerung mit tiny84 treibt (nur) einen 80mmx80mm-Lüfter (Zweidrahtanschluss!!) in (m)einem Labornetzteil. Dabei hatte ich wenig überrascht festgestellt, dass ich den ruhigsten Lauf bei ner recht hohen PWM-Frequenz erreiche; auch das Oszilloskopbild sieht dabei gut aus. Nu läuft das Ding (oder auch nicht) mit ner PWM-Frequenz 37,5 kHz. ABER eben nicht arduino sondern ne selbst gelötete Lochrasterplatine mit nem tiny85 (https://dl.dropbox.com/s/ck153x45fsojxf4/Schaltplan_x87asbuld.JPG?dl=0) ohne Quarz, nem A4950 Motortreiber, nem Buzzer für Startton und Warnton bei oberer Temperaturgrenze. Und eben auch nicht arduino-IDE sondern einfaches C. Egal - ich fand die hohe Frequenz gut, auch bei dem kleinen Motor (meiner hat ca. 120 mA) noch ok. Wie erwähnt stufig - meist ist das Netzteil kaum hörbar weils meist ohne Lüfter dreht und wenn dann mit niedriger Drehzahl. Selbst der mittlere Drehzahlbereich ist noch ziemlich leise. Nachteil: das Netzteil ist nun fast durchwegs an . . . :-/


// Neu ab 16. Feb. 2020
// Temperaturstufen, ADC (A8main) und PWM-%
// Temp < 31° A8main < ADCmin PWM = 0 %
// 32° C .. 36° C ADCmin < A8main <= ADClow PWM = 10 % (9,8)
// 36° C .. 68° C ADClow < A8main <= ADCmax PWM = 20 % - 40 %
// Temp > 68° C ADCmax < A8main PWM = 100 % (+Pieps)

MagierWhite
20.02.2021, 16:38
Hallo

also nach etwas nachdenken und einer Nacht rumprobieren habe ich folgende Werte durch Versuch und Irrtum ermittelt.
Ich schreibe das damit andere, die das selbe Problem haben ein paar Werte an der Hand haben.

Also zu erst mal. Das ändern der Periode und des Dutys klappt besser wenn man zu erst ein Stopp ausführt.


pwm_pin35.stop();
pwm_pin35.start(period, duty);

Also so, anstatt eines einzigen


pwm_pin35.set_period_and_duty(period, duty);

Damit entfällt zwar der Rückgabewert von >>set_period_and_duty<< aber das ist, glaube ich, eh nur eine Überprüfung ob Periode und Duty das richtige Datenformat hat und die Periode größer als Duty ist.



Prozent
Periode
Duty
Bemerkung


100
5
5



90
429501
386551



80
429501
343601



70
858997
601297



60
858997
515397



50
1288493
644248



40
2147485
858997



30
2576981
773095



20
858997
171797
summt leise


10
858997
85897
summt leise


0
pwm_pin35.stop();





Wie schon gesagt, habe die Werte durch Versuch und Irrtum ermittelt, daher sind sie bestimmt nicht optimal und jemand mit mehr Technischen und Mathematischen Wissen, stehen bestimmt die Haare zu berge. Der mag es mir aber gerne erklären ;)

Einer der Punkte, bei denen ich bestimmt etwas übersehe ist der Wert Duty auf die PWM Library. Auf Wiki und bei anderen Seiten ist Duty, in Zusammenhang mit PWM, als Tastgrad definiert. Also die Prozent des Verhältnis der Impulsdauer zur Periodendauer, was aber bei der LIB nicht so ist. Soweit ich das verstehe beschreibt Duty die Zeit/Dauer des Impulses und nicht die Prozente.
Wie gesagt, wenn ich mich irre belehrt mich eines besseren und erklärst es mir. ;)

Wenn jemand meinen Lösungsweg interessiert.
Ich habe ein kleines Desktop Programm geschrieben das den Max Wert (4294967295) in 10% Schritten bis 0 verkleinert und als Periode verwendet.
Zu jeder Periode, habe ich als Baum, in negativen 10% Schritten den Duty Wert hinzugefügt. (Periode als Startwert)
(Periode : Duty)

4294967295


|
|-4294967295:4294967295 - 100%
|-4294967295:3865470565 - 80%
|-4294967295:3435973836 - 70%
|-4294967295:3006477106 - 60%
....

und wo weiter.

Die Werte habe ich zum Arduino geschickt, auf dem ein Simpler Script läuft der die Werte von der Seriellen Schnittstelle einließt und sie ausführt, mit einer kurzen Rückmeldung zur Sicherheit.

Auf meinem PC, hat mich dann mein Programm gefragt, wie der Lüfter läuft und die guten Werte gespeichert. Um Zeit zu sparen habe ich nicht weiter nach schon guten Werten gefragt, also z.B. für 100%. Das ist bestimmt kein perfekter Weg aber so hatte ich wenigstens mal ne Vorstellung von dem was ich tue.

Alles unter 30% wird wohl nicht zu gebrauchen sein aber für mein Projekt sollte das reichen. Eine abschließende Einschätzung kann ich eh erst geben wenn alles für das Gehäuse angekommen ist, ich es zusammengebaut habe und sehe wie es mit dem Lüfter interagiert.

So ich hoffe irgendjemanden da draußen helfen meiner Werte später mal oder es schreibt jemand was besseres. ;)
Grüße und so...
Magier

021aet04
22.02.2021, 05:58
Was du auch machen kannst ist eine Art Schaltwandler zu bauen.

https://www.roboternetz.de/community/threads/73500-PC-L%C3%BCfter-%C3%BCber-PWM-ansteuern-f%C3%BChrte-zu-Rauchentwicklung
Bei Post 9 habe ich eine Skizze gepostet, eventuell noch mit anderen Bauteilen (z.b. schottkydiode), aber vom Prinzip sollte es so besser sein.

Mfg Hannes

Moppi
22.02.2021, 18:15
Wenn es nicht unbedingt PWM sein muss, kann man auch mit einem LM317 und einem MCP 4151-103E/P eine variable Spannungsquelle hinbekommen, die sich per µC einstellen lässt.


MfG

Feldafinger
26.02.2021, 17:03
Diese Lüfter enthalten eine Regelelektronik für den Brushless Motor - mögen also nicht dauernd ein/ausgeschaltet werden. Bei mir läuft ein Sunon 1,1W/24V von Reichelt perfekt mit einem 22uF parallel zu den Anschlussklemmen.
Mfg Erich