erstellt : 08.06.2009
| |||||||||||
Lüftersteuerung mit DS1820 als Temperaturfühler, und Pulsweitenmodulation (PWM |
|||||||||||
Über den Steckanschluß ISP kann der Controller programmiert werden. |
|||||||||||
Plan vergrößern hier | |||||||||||
Grundlagen |
|||||||||||
Bei
der Pulsweitenmodulation wird ein Digitales Ausgangssignal
erzeugt,dessen Tastverhältnis sich verändern läßt, dabei bleibt die
Frequenz gleich aber die Zeit des Ein-Aus Zustandes innerhalb einer Periode ändert sich, dadurch wird die Leistung geregelt. Die Funktion ist in etwa vergleichbar mit einer Kochplatte, die man einschaltet und wieder ausschaltet, je nachdem wie sich das Verhältnis der Einschaltdauer zur Ausschaltdauer verhält , wird sich eine mittlere Temperatur der Kochplatte einstellen. So kann man auch einen Lüfter regeln. |
|||||||||||
Hier
( linkes Bild)sieht man den Signalverlauf bei einem Tastverhältnis von
ca 20/80 , also 20 % Einschaltzeit und 80% Ausschaltzeit, Lüfter produziert ungefähr 20 % seiner Leistung . Auf dem rechten Bild ist das Verhälnis umgekehrt also 80/20 , 80% Einschaltzeit und 20% Ausschaltzeit, Lüfter produziert ca 80 % seiner Leistung |
|||||||||||
Als
erstes nehme ich die schon vorhandene Temperaturerfassung mit dem
Sensor DS1820 , welche schon im vorangegangenen Projekt |
|||||||||||
Funktion |
|||||||||||
Ziel ist es einen Lüfter für den PC, in Abhängigkeit der Umgebungstemperatur in seiner Leistung zu regeln. Erst
einmal muss dafür gesorgt werden das der Lüfter nach dem Einschalten
des Pc's mit nahezu voller Drehzahl kurz anläuft, um evtl
Schwergängigkeit, die sich beispielsweise einstellt, wenn der Lüfter
länger außer Betrieb war, und sich möglicherweise Dreck und Staub auf
und im Lüfter abgesetzt hat. |
|
||||||||||
Stecker den ich an meiner Schaltung angelötet habe. Der PC hat die dafür benötigte Kupplung |
|||||||||||
Der Timer kann beim Atmega 8 auf verschiedenen Auflösungen eingestellt werden, 8-9 und 10 bit. |
|||||||||||
Ansicht des 12 Volt Lüfter mit I2C Temperatursensor DS1820 die Stecker am Lüfter sind nicht immer gleich, haben schon mal 3 oder 4 Anschlüsse ,der vor mir verwendete hat 4 Anschlüsse , von denen ich nur die folgenden 2 benötige.
|
|||||||||||
|
|||||||||||
Sollte
der Lüfter ein Piepsen von sich geben , welches von der jeweiligen
Frequenz abhängig ist so kann man einen Elko Parallel zum Motor setzen, der sollte nicht zu klein gewählt werden ca 1000uF oder aber man setzt alternativ die Frequenz über 20 KHz also außerhalb des Menschlichen Hörbereiches. |
Basic Programm - Lüftersteuerung für PC Lüfter 12 Volt |
||
Temperatur Sensor DS1820 an Pin D.6 als I2C Compiler Bascom |
||
Konfiguration des Prozessors
|
||
1 | $baud = 9600 | RS232 Dateübetrasgungsrate |
2 | $regfile "m8def.dat" | Definiert den Atmega als Atmega 8 |
3 | $crystal = 1000000 | Gibt die Quarzfrequenz an in Herz |
4 | ||
5 | Ddrb = &B00000010 | Portb.1 als Ausgang setzen |
6 | Ddrd = &B10000000 | Port D7 ( Led)als Ausgang setzen alle anderen als eingang |
7 | Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 1 | Timer 1 auf Pulsweitenmodulation stellen -Timeraüflösung auf 8 Bit stellen - Compare definiert ob high oder Low aktiv - Prescale , der Wert durch den die Quarzfrequenz geteilt werden soll. |
8 | Dim T As Byte | Variable für Tastverhältnis |
9 | Dim T_soll As Byte | Variable für Vorgabe der Sollwert-Temperatur |
10 | ||
11 | Config 1wire = Portd.6 | I2C an Port D.6 benutzen |
12 | Dim Ds1820 As Integer | Integer Variabel für Ds1820 setzen kann Daten - 32768 bis+32768 aufnehmen |
13 | Dim Halb As Byte | Variabel "Halb" als Byte setzen 0 bis 256 |
14 | T = 255 | Lüfter mit VOLLER Drehzahl erst einmal anlaufen lassen, damit dieses Frequenz Piepsen in den unteren Drehzahlen nicht stört,. |
15 | wait 5 | Kurze Zeit den Lüfter mit voller Drehzahl laufen lassen |
16 | Waitms 20 | |
17 | T_soll = 30 | Hier wird die sollwert Temperatur festgelegt |
18 | Do | Schleifenanfang |
19 | Compare1a = T | Dem Timer das Taktverhälnis für den PWM übergeben |
20 | If Ds1820 > T_soll Then | Ist Variabel DS1820 ( ist-Temperatur) größer T-soll (Sollwertvorgabe) dann |
21 | Incr T | bei jedem Schleifendurchgang -Lüfter wird schneller |
22 | Else | sonst |
23 | Decr T | bei jeden Schleifendurchgang Lüfter wird langsamer |
24 | End If | |
25 | If T > 252 Then | ist Höchste Bytezahl von 255 erreicht , dann nicht wieder bei Null anfangen sondern auf |
26 | T = 253 | bei 254 stehen bleiben bis Temperatur wieder runter geht |
27 | 'End If | |
28 | End If | |
29 | If Ds1820 = T_soll Then | Ist Temperatur gleich wie die Sollwertvorgabe dann laufe ständig mit |
30 | T = 60 | ca 1/4 der Nenndrehzahl |
31 | End If | |
32 | If T < 2 Then | Wenn Takverhältnis unter 2 |
33 | T = 1 | dann Halte Takt auf 1 fest , damit er nicht wenn er unter 0 geht , wieder mit 255 weitermacht |
34 | End If | |
35 | Abfrage des Temperatur Sensors |
|
36 | 'Wait 1 | Pause von 1 Sekunde |
37 | 1wreset | Reset von DS1820 Temperaturfühler |
38 | 1wwrite &HCC | Übersprimge Rom, also die Adresszuteilung die bei Benutzung von nur einen Sensor nicht benötigt wird |
39 | 1wwrite &H44 | Starte Temperaturkonvertierung |
40 | Waitms 300 | Pause von 300 millisekunden |
41 | 1wreset | Reset DS1820 |
42 | 1wwrite &HCC | Überspringe Rom |
43 | 1wwrite &HBE | sende inhalt der Register AAH und 00h |
44 | ||
45 | Ds1820 = 1wread(9) | lese die empfangenen Daten |
46 | 1wreset | Reset Ds1820 |
47 | Halb = Ds1820 And 1 | prüfen auf letztes Byte |
48 | ||
49 | Shift Ds1820 , Right | entferne letztes bit |
50 | If Ds1820 > 127 Then | bei negativer Temperatur ein Minuszeichen auf Display ausgeben |
51 | Lcd "-" | |
52 | ||
53 | Ds1820 = 256 - Ds1820 | Minus Temperatur berechnen |
54 | If Halb = 1 Then Ds1820 = Ds1820 -1 | wenn Wert X,5 dann um 1 korrigieren |
55 | Else | sonst keine Ausgabe auf Display |
56 | Lcd "" | |
57 | If Ds1820 > T_soll Then | Ist Variabel DS1820 größer 23 grad dann |
58 | Portd.7 = 1 | Port D.7 einschalten |
59 | Else | sonst |
60 | Portd.7 = 0 | Port D.7 auslassen |
61 | End If | Ausgabe Temperatur und Komma |
62 | Lcd Ds1820 ; "."; | wenn X,5 |
63 | Print Ds1820 | |
64 | If Halb = 1 Then | dann eine 5 nach Komma ausgeben |
65 | Lcd "5" | |
66 | Else | |
67 | Lcd "0" | sonst Null nach Komma ausgeben |
68 | End If | |
69 | Lcd "C" | |
70 | Print "C" |
|
71 | Wait 2 |
|
72 | End If | |
73 | Loop | zum Anfang der Schleife |
74 | End | |
75 | Programm Ende |
|
Programm als Bascom Datei laden | ||
Aktualisiert 14.10.2020 |