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.
Code:
pwm_pin35.stop();
pwm_pin35.start(period, duty);
Also so, anstatt eines einzigen
Code:
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
Lesezeichen