erstellt  : 08.06.2009
Lüftersteuerung mit DS1820 als Temperaturfühler, und Pulsweitenmodulation (PWM

Über den Steckanschluß ISP kann der Controller programmiert werden.
Der Kondensator C1 sollte von seiner Kapazität möglichst groß gewählt werden,er dient dazu Störungen zu unterdrücken.

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
erstellt wurde, und kombiniere sie mit einer Pulsweitensteuerung um einen 12 Volt Lüfter zu steuern .

Funktion

Ziel ist es einen Lüfter für den PC, in Abhängigkeit der Umgebungstemperatur in seiner Leistung zu regeln.
Der Atmega benötigt eine Betriebsspannung von 5 Volt, die üblichen Lüfter für z.B. die Prozessorlüftung im Pc benötigen allerdings 12 Volt.
Das stellt aber kein großes Problem dar, weil jedes PC Netzteil , beide Spannungen zu Verfügung stellt, wir basteln uns an der Schaltung nur den richtigen Stecker, den wir dann im PC einstöpseln.

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.
Wenn der Lüfter verschmutzt wäre und aus der untersten Drehzahl langsam anfangen sollte sein Leistung zu entwickeln , könnte es sein das er etwas klemmt und nicht direkt anläuft, da er aber Strom bekommen würde, und sich nicht selber kühlen kann, würde er über kurz oder Lang den Hitzetod erleiden.
In der Programmzeile 14 wird Lüfter auf Höchstdrehzahl eingestellt.

Aderfarbe
 
Rot +5 Volt
Schwarz Masse
Schwarz Masse
Gelb +12 Volt
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.
Ich benutze hier die Auflösung von 8 Bit( Zeile 7) damit haben wir eine Abstufung von 255 Inkremente. Das reicht bei der hier Vorgestellten Schaltung völlig aus.
Die Geschwindigkeit mit der die Regeleung arbeitet, ist unter anderem von folgenden Faktoren abhängig
1. Quarzfrequenz von 1,000000 Mhz
2. Prescale ( Also die Voreinstellung des Teilers durch welche die Quarzfrequenz geteilt werden soll Zeile 7)
3. Die Auflösung , also mit wie viele Bit Genauigkeit ich hier arbeiten möchte.
4. Und vom Programm, wie viele Anweisungen abgearbeitet werden müssen, und ob Warteschleifen vorhanden sind.
5. Vom Digitalen Sensor DS1820

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.

Aderfarben  
Rot Plus 12 Volt
Blau  
Schwarz Masse
Gelb  
Plan vergrößern

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