Bastelecke > Projekte

Mikrocontroller - Lüfterregelung, RS232, Temperaturgesteuert

(1/3) > >>

dennisstrehl:
Also nochmal von vorne:

<Aktueller Status>
Nach nem kleinen Umbau funktionierte plötzlich nichts mehr, der Controller war per RS232 nicht mehr ansprechbar.

14.08.2006: Ein bisschen was funktioniert wieder, d.h. der Controller kann schon wieder über RS232 reden. Der Zwischenspeicher macht allerdings noch Mist. Der Pointer, der für's auslesen der Daten aus dem RAM da ist, scheint Amok zu laufen - Das Programm merkt einfach nicht, wenn keine Daten mehr da sind, und gibt dann den kompletten RAM aus.

Übergang 14.-15.08.2006: Letztes Problem behoben. Allerdings fehlen jetzt immer ein paar Zeichen beim ausgeben.

15.08.2006: Menü funktioniert wieder einigermaßen. Fifo war zu klein, dadurch gingen zwischendurch immer nen Haufen Zeichen verloren. Dann war er zugroß und hat an Stellen geschrieben, wo er besser nicht hingeschrieben hätte. Jetzt passt's ;)
Einstellungsmenü weist noch ein paar grobe Fehlfunktionen auf. k.A. weshalb.

16.08.2006 Jetzt funktioniert endlich wieder alles. Neue Features kommen heute Abend oder morgen rein.

23.12.2006 Ja, länger wieder keine Lust gehabt...
Neues:
- Die Steuerung wird ein vernünftiges Programm auf dem PC bekommen, über das Einstellungen vorgenommen werden und die Steuerung überwacht werden kann. Hab dazu schon ein bisschen Delphi gelernt, das Grundgerüst für das Programm steht, das Programm auf dem µC muss dann noch ein bisschen umgekrempelt werden
- Ich bin jetzt gerade dabei, einen Prototyp zu layouten. Da die Freeware-Version von Eagle nur Halb-Euro-Platinen zulässt, wird alles schön zusammengequetscht. Danach muss ich halt mal schauen, ob ich das hinbekomme ne Platine zu ätzen...

</Aktueller Status>

Ich baue seit einiger Zeit an einer Lüfterregelung für meinen PC. Die Lüfter sollen so geregelt werden, dass immer eine Temperatur gehalten wird, egal wie viel Abwärme gerade abzuführen ist. Dadurch dreht der Lüfter immer mit der minimal möglichen Drehzahl und verursacht folglich geringstmöglichen Geräusche.

Temperaturmessung

Als Temperatursensoren kommen KTY81-110 zum Einsatz. Das sind Silizium-Temperatursensoren, die vergleichsweise günstig sind und gleichzeitig sehr einfach zu linearisieren sind. Der Nachteil ist, dass sie nicht vorkalibriert sind, und relativ hohe Abweichungen aufweisen. Dies wird teilweise durch eine Kalibrierungsfunktion ausgeglichen, die noch programmiert werden will. Die Auflösung wird entweder 0,1°C oder 0,05°C betragen - darunter fängt der Wert an, zwischen zwei Zuständen zu springen.
Die Sensoren werden über eine Schaltung abwechselnd auf den Eingangsverstärker geschaltet, der das Signal vom Sensor so verstärkt, dass der Analog-Digital-Wandler im Mikrocontroller optimal genutzt werden kann. Die Schaltung häng ich an, die Widerstände mit den krummen Werten werden in der Praxis durch zwei Widerstände ersetzt, die zusammen den richtigen Wert ergeben.
Die maximale Anzahl der Sensoren ist nur durch den Speicher des Controllers begrenzt und wird vermutlich über 24 liegen - mehr wird wohl niemand brauchen.

Regelung

Der Mikrocontroller liest die Werte vom Eingangsverstärker ein und regelt dann über einen sogenannten PI-Regler den entsprechenden Lüfter.
PI-Regler heißt, dass wenn die Temperatur über der eingestellten Temperatur liegt, die Abweichung jeweils ein mal pro Sekunde zum Lüfterwert dazuaddiert wird (Man könnte auch sagen, die Abweichung wird integriert => Integralteil, daher das I)
und gleichzeitig bei einer Temperaturerhöhung von einer Messung zur nächsten der Temperaturunterschied zum Lüfterwert dazuaddiert wird (Die Änderung der Temperatur ist proportional zur Änderung des Lüfterwertes => Proportionalteil, daher das P).
Zusammen ergibt das eine Regelung, die die eingestellte Temperatur immer sehr genau hält und zudem sehr stabil ist, d.h. der Regler fängt nicht an, zu schwingen.
Als Controller wird ein AtMega48 benutzt, möglicherweise muss ich noch auf den großen Bruder davon umsatteln, da der Flash-Speicher langsam knapp wird.

Ausgänge

Um die Lüfter anzusteuern, wird ein etwas ungewöhnliches Verfahren eingesetzt. Das Verfahren ist von Schaltreglern geklaut, das Prinzip wird so auch in PC-Netzteilen als auch auf Grafikkarten und dem Mainboard zur Spannungsversorgung verwendet.
Es wird ein gepulstes Signal mit sehr hoher Frequenz erzeugt, welches über einen MosFET verstärkt wird. Danach wird das Signal über eine Spule und einen Kondensator geglättet und anschließend dem Lüfter zugeführt.
Das Verfahren hat einen Haufen Vorteile: Es entsteht dabei kaum Abwärme, es treten keine Pulsgeräusche am Lüfter auf und das Tachosignal funktioniert auch noch. Im Gegenzug ist es nunmal nen Tacken komplexer aufzubauen als eine rein analoge bzw. PWM-Regelung.
Leider kann dieses Verfahren nur bei 4 der zur Verfügung stehenden Ausgänge angewandt werden, die anderen beiden Kanäle können nur mit 70 Hz betrieben werden, da die dazu genutzten Timer nebenbei für Timings im Programm verantwortlich sind. Die letzten beiden Kanäle werden deshalb entweder überhaupt nicht aufgebaut oder die Lüfter werden einfach mit einer 70 Hz PWM angesteuert. Hier funktioniert das Tachosignal dann nicht, und Pulsgeräusche entstehen an den Lüftern dabei auch noch.

RS232-Schnittstelle

Das wichtigste kommt hier erst. Die ganze Steuerung wird an die serielle Schnittstelle am Rechner angeschlossen, und über diese kann die Steuerung konfiguriert werden. Dazu ist das Programm Hyper-Terminal nötig, welches bei jeder Windows-Version standardmäßig mitinstalliert wird. Die Steuerung stellt über dieses (oder über jedes andere Terminalprogramm auch) eine kleine Menüführung zur Verfügung, über die die Solltemperaturen, Mindestdrehzahlen etc. konfiguriert werden können. Auch die angesprochene Kalibrierungsfunktion und Einstellungen wie z.B. wie viele Sensoren angeschlossen sind stehen hier zur Verfügung, nebst einem Monitoring-Bereich.

Das war's erstmal. Hier noch der angesprochene Schaltplan, da ich (als das Forum das erste Mal lief :) ) danach gefragt wurde. Der OpAmp ist ein OP07.
Den kompletten Schaltplan, Sourcecode und das Binary für den Controller werden ich online stellen, wenn das Projekt fertig ist.
Verbesserungsvorschläge, Kritik u.ä. sind erwünscht.

MfG

[gelöscht durch Administrator]

nemon:
schön, dass du dieses projekt mitgenommen hast, ich bins chon sehr gespannt auf die bilder eines ersten prototyps.
zum rs232: kennst du die FTDI-chips? das sind usb zu rs232-wandler. damit könntest du deine lüftersteuerung auch an legacy-free-computern betreiben, ohne mit eigenen usb / rs232-wandlern hantieren zu müssen

dennisstrehl:
Ich kenne die Dinger, ja.
Das Problem ist dann allerdings die Steuerungssoftware auf dem PC. Mit HyperTerminal wird das dann nicht mehr gehen. Und in C++ etc. hab ich bisher keine Erfahrung.
Oder hab ich das jetzt falsch verstanden und es gibt dafür einen Treiber, der dann den COM-Port emuliert? Das wäre die beste Lösung, denn dann muss man nicht einmal mehr Kabel nach draußen legen.

So, ich habe eben in's Datenblatt geschaut, einen solchen Treiber scheint es zu geben. Ich werd schauen wo man den bekommt, dann brauch ich die Kabel nicht außenrum zu legen :D
Vielen Dank für den Tipp!

Edit: Gefunden. :blink: Boah sind die teuer... Naja, mal schauen was ich damit mach.
E²dit: Ich glaube ich lass den weg. Ich hatte eigentlich vor, das ganze auf Lochraster aufzubauen, aber den FT232 gibt's nur in SMD. Ich wollte die Schaltung eigentlich möglichst einfach nachbaubar machen.

Bis denne

Mr.Malik:
Weiterhin sehr lobenswertes Projekt! Ich bin (leider, weiß ja das das noch etwas dauern wird) gespannt!

MfG,
Mr.Malik

dennisstrehl:
Danke, ich versuch mich zu beeilen. Eigentlich wollt ich's in den Ferien schon fertig bekommen... Naja, war irgendwie klar dass ich wieder nicht dazu komme.
Irgendwie hab ich ne miese Arbeitsmoral :cheesy:

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln