Hi Chris,
Dieses Vorhaben ist relativ einfach umzusetzen:
Als erstes malst du dir eine Kurve auf. Auf der X-Achse schreibst du dir
die Temperaturwerte auf und auf der Y-Achse dann die % die dein Lüfter
bei dieser Temperatur steuern soll.
Dann wählst du dir soviele Stützstellen aus um diese Kurve mit
angemessenen Fehler zu repräsentieren. Diese Stützstellen packst du dann
in ein 2D Arrary:
1 | uint16 TempConfig[COUNT_OF_PARAMETER][COUNT_OF_PARAMETER]; //Temp in 0.1 Grad C; PWM Value 0-255
|
2 | TempConfig[0][0] = 0; //Bei 0 Grad -> PWM 100
|
3 | TempConfig[0][1] = 100;
|
4 | TempConfig[1][0] = 100; //Bei 10 Grad -> PWM 125
|
5 | TempConfig[1][1] = 125;
|
6 | TempConfig[2][0] = 200; //Bei 20 Grad -> PWM 150
|
7 | TempConfig[2][1] = 150;
|
8 | TempConfig[3][0] = 300; //Bei 30 Grad -> PWM 175
|
9 | TempConfig[3][1] = 175;
|
10 | ...
|
Wenn du jetzt eine neue Messung machst, dann gehst du den ersten Wert
des Arrays durch und schaust wo die Temperatur dazwischen liegt. Z.B.
15Grad liegt zwischen dem Stützpunkt 100 und 200 (10 und 20Grad). Jetzt
musst du nur noch dazwischen linear interpolieren: 15Grad liegt 50%
zwischen den Stützpunkten 100 und 200 also einfach die werte der beiden
Stützpunkte addieren und mal 50% rechnen: (125+150) * 0.5 = 137(.5) als
PWM value an den Lüfter senden.
Ich hoffe, dass hilft dir bei der Implementierung weiter ;)
Viele Grüße