Hallo,
ich habe jetzt 30min in der Forensuche und 15 min google Suche bemüht,
aber noch nicht wirklich weiter gekommen.
Ich wollte einen PC-Lüfter regeln in der Drehzahl mit einem
Mikrcontroller (AVR). Mein Hauptproblem ist zunächst einmal die
Regelung. Wie macht man so etwas? Die Drehzahl kann ich bereits einlesen
über den ICP und auf einem Display ausgeben, das funktioniert soweit.
Nur wie beginne ich bei der Regelung? Habe so etwas noch nie gemacht.
Hat jemand vielleicht einen brauchbaren Link (bestmöglichst mit
Quellcode in C)?
Das einzig brauchbare was ich hier gefunden habe ist das hier:
http://www.pcfilter.de/AVR-Ecke/Page15.html
Hat sonst noch jemand weiterführend Links oder Tipps für mich?
Merci,
Martin
Also ersteinmal ist eine Wasserkühlung etwas 100 mal komplizierter als
einen Lüfter zu steuern.
Zweitens: Du brauchst Hardware. Irgend einen FET oder was, den du an den
AVR klatschen kannst, und welchen du am besten über PWM (siehe Tutorial
hier) ansteuerst.
Gruss
> Nur wie beginne ich bei der Regelung?
Regeln heisst, Istwert und Sollwert zu vergleichen.
Den Istwert kannst du also schon ermitteln, fein.
Kennst du denn deinen Sollwert ?
Dann kann man regeln:
a) Einschalten wenn Istwert < Sollwert, ausschalten wenn Istwert >
Sollwert.
b) Oder mehr Gas geben wenn Istwert < Sollwert, Gas wegnehmen wenn
Istwert > Sollwert.
Es gibt dutzende Regelalgorithmen, von denen man sich den passenden nach
seinen Anforderungen heraussuchen kann. Temperaturregelungen
funktionieren meist nach a) (Bimetallschalter) oder b) (wenn der Lüfter
auch mal Halbgas laufen soll).
Ich dachte an einen Regelalgorithmus der Istwert und Sollwert
vergleicht.
Bei großer Abweichung soll eben viel nachgestellt werden, bei kleiner
Abweichung wenig. Ein Überschwingen sollte möglichst vermieden werden.
Martin schrieb:> Ich dachte an einen Regelalgorithmus der Istwert und Sollwert> vergleicht.> Bei großer Abweichung soll eben viel nachgestellt werden, bei kleiner> Abweichung wenig. Ein Überschwingen sollte möglichst vermieden werden.
Sowas heißt dann PID-Regler, wobei das Hauptproblem ist, die 3 Parameter
für P, I und D richtig einzustellen.
Gruß Dietrich
Dietrich L. schrieb:> Martin schrieb:> wobei das Hauptproblem ist, die 3 Parameter> für P, I und D richtig einzustellen.
nicht wirklich...bei sonem einfachen system reicht die sprungantwort und
dann nach tabelle die parameter ablesen/berechnen...
Na, also bei so einer Aufgabenstellung muss es doch keine aufwändige
Regelung sein! Ich würde einfach pro Sekunde n Drehzahl-Messungen
durchführen und bei Überschreiten des Sollwerts das zur PWM gehörende
Output Compare Register um eins runterzählen und bei Unterschreiten des
Sollwerts um eine Stufe hochzählen.
Je mehr solche Mess- und Zählvorgänge je Sekunde durchgeführt werden,
desto dynamischer wird die Regelung, aber desto leichter gibt es auch
Überschwingen bzw. Instabilitäten. Wenn man die Dynamik erhöhen will,
ohne der Genauigkeit zu schaden, kann man das Compare-Register bei
großen Abweichungen des Istwerts vom Sollwert auch jeweils um 10 hoch-
bzw. runterzählen und bei kleinen Abweichungen nur um 1. Oder (noch
eleganter) man errechnet das Inkrement bzw. Dekrement für das
Compare-Register aus der Differenz zwischen Soll- und Istwert.
Wenn du dann die ganze Regelung fertig hast, dann kommst du drauf das
sich der Lüfter mit PWM nicht regeln lässt.
Sehr viele Lüfter mögen PWM überhaupt nicht und lassen sich nur in einem
gewissen Bereich mit Spannungsänderung regeln.
Hubert G. schrieb:> Sehr viele Lüfter mögen PWM überhaupt nicht und lassen sich nur in einem> gewissen Bereich mit Spannungsänderung regeln.
Vor allem funktioniert die Drehzahlerkennung mit PWM nicht mehr (so
einfach).
> Wenn du dann die ganze Regelung fertig hast, dann kommst du drauf das> sich der Lüfter mit PWM nicht regeln lässt.> Sehr viele Lüfter mögen PWM überhaupt nicht und lassen sich nur in einem> gewissen Bereich mit Spannungsänderung regeln.
Was ist denn so schwer daran, aus dem PWM Signal eine analoge Spannung
zu machen? Hier wird legendlich noch eine Diode und eine Speicherspule
benötigt, beides ist beim ersten Link enthalten (inklusive Stückliste
für Reichelt Bestellung). Damit lassen sich also auch problemlos
3-Polige Lüfter regeln.
> Aber das PWM Signal muss doch geregelt sein bzw. brauche ich ja hierfür> ein Regel-Algorithmus.
Im C-Prigi unter der Routine „System_einstellen“ findest Du den
PID-Regler (ist alles kommentiert). Des Weiteren findest Du auch noch in
der Doku eine Beschreibung unter „Das Leistungsteil – die PWM Endstufe“
und „Die Speicherdrossel“, da wird die Hardware auch noch etwas genauer
erklärt. Und zum Regler findest Du auch noch etwas unter „PID-Regler
Einstellungen“.
Wenn das nicht reichen sollte, dann kannst Du auch noch hier
nachschauen:
http://www.sprut.de/electronic/switch/schalt.html
oder weiter im Internet nach der Funktionsweise von „Stepp-Down-Reglern“
suchen, da gibt es Unmengen an Internetseiten. Und wenn Du selber
Berechnungen durchführen möchtest, dann ist der Link sehr Hilfreich:
http://schmidt-walter.eit.h-da.de/smps/smps.html
Und wie ein Regler funktioniert wird unter anderem hier beschrieben:
http://www.rn-wissen.de/index.php/Regelungstechnik
Jens schrieb:> Was ist denn so schwer daran, aus dem PWM Signal eine analoge Spannung> zu machen?
Das habe ich mich zuerst auch gefragt. Ältere Mainboards regeln auf
diese Weise auch ältere Lüfter ohne PWM-Regelmöglichkeit.
Allerdings würde ich bei den Preisen für PWM-Lüfter nicht den Aufwand
treiben, aus der PWM des Mikrocontrollers eine Gleichspannung zu
erzeugen. Falls doch, würde ich dazu mit Hilfe eines
Operationsverstärkers und eines Kondensators einen Spannungsfolger
(Impedanzwandler) bauen. Auf Induktivitäten würde ich dabei
grundsätzlich verzichten, wenn es irgendwie geht. ;)
Martin schrieb:> Aber das PWM Signal muss doch geregelt sein bzw. brauche ich ja hierfür> ein Regel-Algorithmus.
Und spricht etwas gegen die von mir weiter oben beschriebene, ganz
einfache Methode der Regelung durch Differenzbildung?
Volker U. schrieb:
> Allerdings würde ich bei den Preisen für PWM-Lüfter nicht den Aufwand> treiben, aus der PWM des Mikrocontrollers eine Gleichspannung zu> erzeugen.
Kommt immer darauf an ob man mit den „Rahmenbedingengen“ der PWM-Lüfter
leben will. Mich stört es z.B. ungemein dass sich die Dinger nicht
abschalten lassen (bei PWM=0), sie laufen immer mit 25% ihrer Leistung
weiter. Bei den 3-Pin Lüftern gibt es so schöne leise Modelle, da lohnt
sich der Umbau auf Gleichspannung... ;-)
> Falls doch, würde ich dazu mit Hilfe eines> Operationsverstärkers und eines Kondensators einen Spannungsfolger> (Impedanzwandler) bauen. Auf Induktivitäten würde ich dabei> grundsätzlich verzichten, wenn es irgendwie geht. ;)
Mehr oder weniger kommt es ja darauf an was man hinten an Leistung dran
hängt. Bei einem einzigen Lüfter ist ein OPV sicherlich die erste Wahl,
da hält sich die Wärmeentwicklung auch noch in Grenzen. Wenn man da aber
mehrere Lüfter anschließen möchte (oder eine Wasserpumpe), dann kommt
man ohne „Stepp-Down-Regler“ nicht mehr aus (zumindest dann nicht, wenn
man den FET nicht als Heizung verwenden will)... ;-)
> Hab noch eine einfache OPV Schaltung für kleinere Lasten (ein Lüfter)> gefunden, vielleicht hilft es ja weiter...
Kaum, denn die regelt ja nict, die versorgt nur den Lüfter mit
verringerter Spannung, woraufhin dieser weniger Drehmoment entfaltet,
was normalerweise zu geringerer Drehzahl führt aber vor allem zu weniger
Kraft und damit die Lebensdauer erheblich verringert, denn ein Lüfter
ist am Ende, wenn seine Kraft nicht mehr reicht, die verharzten,
vergammelten Lager und Staubablagerungen zu überwinden.
Ein 12V Lüfter der an 8V betrieben wird hält maximal 1/4 der Zeit, bevor
er ausfällt und Folgeschäden nach sich zieht weil zu kühlende Bauteil
überhitzt.
Wenn schon, dann REGELN, also die Auswertung des Tachosignals oder der
Temperatur.
MaWin schrieb:
> Kaum, denn die regelt ja nict, die versorgt nur den Lüfter mit> verringerter Spannung,...........................
Richtig, es handelt sich hier also nur um das Leistungsteil, welches die
Lüfterspannung von 0V bis 12V an Hand der PWM einstellen kann, mehr
nicht. Es muss also nach wie vor das Tachosignal (oder die Temperatur)
erfasst werden, im Mµ verarbeitet werden und dann kann das PWM-Signal
die passende Spannung an den Lüfter weiter geben. Sorry das ich das
nicht genauer erklärt habe...
Martin schrieb:
> Was ist C-Prigi?
Sollte Progi heißen. Wenn Du Dir die Dateien hierunter lädst (von
http://www.pcfilter.de/AVR-Ecke/Page15.html) findest Du da auch den
C-Quellcode (Datei Main.c), das meinte ich mit C-Progi.
Wenn es darum geht, die Grundlagen der (analogen) Regelungstechnik
anhand eines praktischen Beispiels zu erlernen und umzusetzen, ist das
okay. Aber wenn es nur darum geht, einen Lüfter möglichst einfach und
effektiv zu regeln, ist es mit Kanonen auf Spatzen schießen. ;)
Martin schrieb:> Ich wollte einen PC-Lüfter regeln in der Drehzahl mit einem> Mikrcontroller (AVR).
geht rein analog ganz gut.
elv.de hat dazu bausätze.
Tmp_SWP=Tmp_SWP+P_Anteil;// P-Anteil zur PWM hinzufügen
37
Tmp_SWP=Tmp_SWP+D_Anteil;// D-Anteil zur PWM hinzufügen
38
39
}
40
}
Was ich aber nicht ganz verstehe ist der I-Regler.
a) Warum wird dessen Stellgröße nur bei Gleichheit von Ist- und
Sollgröße berechnet? Angenommen ich habe ein recht "unruhiges" System,
das hin und her schwingt, so kommt der I-Regler doch gar nicht zum
Einsatz.
b)Kann mir jemand diese Zeilen des I-Reglers erklären
Der Teil dürfte empirisch entstanden sein und keine nähere Begründung
haben. Sprich: Da hat er einfach ein wenig rumprobiert.
Wenn du dir den Code ansiehst, dann wird KI_Multi nirgends berechnet.
Auch wenn er da I-Anteil dazu geschrieben hat, es ist kein integraler
Anteil.
Edit:
Der ganze Regler sieht ein wenig empirisch aus. Auch die Behandlung des
P-Anteils ist anders als bei einem PID Regler. Ich schätze mal, das das
auch der Grund ist, warum er I wieder still gelegt hat.
Karl Heinz Buchegger schrieb:
> Der Teil dürfte empirisch entstanden sein und keine nähere Begründung> haben. Sprich: Da hat er einfach ein wenig rumprobiert.
Genau so war es, der I-Anteil ist mehr oder weniger nur Spielerei (steht
auch in der Doku). Bei dem System (Wasserkühlung) hat das Wasser bereits
eine sehr große Verzögerungswirkung, so dass der I-Anteil hier ehr
hinderlich war.
Martin schrieb:
> Tmp_SWP = Tmp_SWP - KI_Multi; // Integral-Wert simulieren
Du musst hier schon die gesamte IF Anweisung betrachten, die einzelne
Zeile ist aus dem Zusammenhang gerissen. Wenn der Regler den Sollwert
erreicht hat (und die Zeit-Messung abgeschlossen ist), dann soll der
Regler den PWM-Wert weiter absenken. Für Deinen Fall ist das Humbug, da
Du ja den Sollwert erreichen willst. Bei der Wasserkühlung führt es dazu
dass die Lüfterdrehzahl weiter abgesenkt wird, so dass der Regler
absichtlich aus dem Gleichgewicht gebracht wird. Damit wird versucht die
Lüfterdrehzahl immer so gering wie möglich zu halten, funktioniert das
nicht (Abweichung wird zu groß), dann wird die Lüfterdrehzahl wieder
angehoben.
Aber auch hier noch mal der Hinweis, hier findest Du eine Beschreibung
wie die Regler „richtig“ funktionieren:
http://www.rn-wissen.de/index.php/Regelungstechnik
Jens schrieb:> Kommt immer darauf an ob man mit den „Rahmenbedingengen“ der PWM-Lüfter> leben will. Mich stört es z.B. ungemein dass sich die Dinger nicht> abschalten lassen (bei PWM=0), sie laufen immer mit 25% ihrer Leistung> weiter. Bei den 3-Pin Lüftern gibt es so schöne leise Modelle, da lohnt> sich der Umbau auf Gleichspannung... ;-)
Naja, wenn man eine Komplettabschaltung benötigt, dann stellt man die
Spannungsversorgnung eben über einen Schalttransistor zur Verfügung, den
man mit einem Pin des MC an- und ausschalten kann. Den Bereich zwischen
0 und 25% erreichst du damit zwar nicht, aber braucht jemand einen
Lüfter, der weniger als 25% seiner Leistung bringt? ;-)
>> Falls doch, würde ich dazu mit Hilfe eines>> Operationsverstärkers und eines Kondensators einen Spannungsfolger>> (Impedanzwandler) bauen.> Mehr oder weniger kommt es ja darauf an was man hinten an Leistung dran> hängt. Bei einem einzigen Lüfter ist ein OPV sicherlich die erste Wahl,> da hält sich die Wärmeentwicklung auch noch in Grenzen. Wenn man da aber> mehrere Lüfter anschließen möchte (oder eine Wasserpumpe), dann kommt> man ohne „Stepp-Down-Regler“ nicht mehr aus (zumindest dann nicht, wenn> man den FET nicht als Heizung verwenden will)... ;-)
Und wie wäre es, bei mehr benötigter Leistung einfach mehrere OPV
parallel zu schalten? :-) Da die Eingangsimpedanz sehr hoch ist, macht
das keine Probleme.
Jens schrieb:> Wenn der Regler den Sollwert> erreicht hat (und die Zeit-Messung abgeschlossen ist), dann soll der> Regler den PWM-Wert weiter absenken. Bei der Wasserkühlung führt es dazu> dass die Lüfterdrehzahl weiter abgesenkt wird, so dass der Regler> absichtlich aus dem Gleichgewicht gebracht wird. Damit wird versucht die> Lüfterdrehzahl immer so gering wie möglich zu halten, funktioniert das> nicht (Abweichung wird zu groß), dann wird die Lüfterdrehzahl wieder> angehoben.
Alles sehr schön für die relativ komplizierte Wasserkühlung. Allerdings
frage ich mich ganz ernsthaft, worum es hier nun eigentlich geht? Die
Diskussion hat für mich rein akademischen Charakter. Sorry, aber kein
Mensch der Welt benötigt einen PID-Regler, um einen einfachen PC-Lüfter
zu regeln!!! Die Wirkung eines Lüfters ist von so vielen Faktoren
abhängig, dass eine derart präzise Lüfterregelung einfach unsinnig ist.
Insbesondere, sofern man nur eine Ist-Temperatur als Regelgröße nimmt.
Man muss dann auch noch die Störgrößen betrachten und diese in die
Regelung einfließen lassen, wenn das halbwegs sinnvoll sein soll! Dazu
gehören z.B. die Lufttemperatur und der Luftdruck.
Einzig sinnvoll ist eine Lüfterregelung durch Differenzbildung. Also
das, was ich hier schon ganz zu Anfang vorgeschlagen habe:
(Istwert - Sollwert) * k
oder wem es besser in C gefällt (s.o.):
P_Anteil = (Temperatur - Sollwert) * KP_Multi;
Das ist ein P-Regler. Alles andere ist totaler Hirnriss für diese
Aufgabe.
Frage an Martin: Was genau willst du eigentlich machen oder lernen? Die
theoretischen Prinzipien der Regelungstechnik? Die AVR-Programmierung in
C? Den technischen Einsatz eines AVR für eine Lüfterregelung? Oder geht
es schlichtweg darum, einen PC-Lüfter möglichst einfach und
kostensparend zu regeln?
Gruß, Volker
Ich wollte ein Projekt, an dem ich meine (wenigen) µC Kenntnisse selbst
zu Hause praktisch vertiefen kann. Gleichzeitig wollte ich dabei das
"Thema" Regelung lernen und mich damit befassen.
Also ein bisschen hiervon und ein bisschen hiervon, aber keineswegs auf
einem hohen akademischen Grad, denn da sind noch zu wenig Kenntnisse
vorhanden, um das konkret umzusetzen.
Ich denke ich versuche es mal mit der P-Regelung.
Danke.
Hi Martin!
> Ich wollte ein Projekt, an dem ich meine (wenigen) µC Kenntnisse selbst> zu Hause praktisch vertiefen kann. Gleichzeitig wollte ich dabei das> "Thema" Regelung lernen und mich damit befassen.
Ah, das ist doch eine konkrete Aussage!
Welchen AVR hast du denn im Sinn gehabt? Für diese einfache Aufgabe böte
sich der ATtiny25 oder 45 oder 85 an. Je nachdem, wieviel Code du
produzieren willst :).
Ich nehme an, dass du schon eine funktionierende Entwicklungsumgebung
hast und auch ein paar ganz einfache C-Programme getestet hast, um Ports
auf High bzw. Low zu schalten.
Im Handbuch zum ATtiny25 würde ich mir dann das Kapiel 11 (8-bit
Timer/Counter0 with PWM, speziell Kapitel 11.7.3 - Fast PWM Mode)
reinziehen. Insbesondere die Pins 5 und 6 (OC0A und OC0B) mit den
zugehörigen Compare Registern OCR0A und OCR0B sind dann interessant, da
an diese die PWM geschaltet werden kann.
Dann würde ich mir einen PWM-Lüfter kaufen. Weiter oben habe ich ja
einen Link auf eine Auswahl solcher Lüfter gesetzt.
Ich weiß nicht, woher du derzeit deine Temperatur (das wird ja
vermutlich die Regelgröße sein) bekommst. Falls du noch keine Regelgröße
hast, würde ich den digitalen 1-wire Temperatursensor von Dallas
empfehlen: DS18B20 oder DS18S20. Der Unterschied zwischen den beiden ist
nur, dass man beim B20 die Auflösung programmieren kann, während sie
beim S20 immer 12 bit ist.
Wenn du dann die Temperatur messen kannst, wird es spannend. Denn du
musst ja nicht - wie zu Anfang von allen vermutet - nur die Drehzahl
nach einem Drehzahl-Sollwert regeln, sondern den Drehzahl-Sollwert auf
der Basis der Temperatur bestimmen. Hier kann die weiter oben
vorgeschlagene Sprungantwort helfen. D.h. man heizt den Prozessor bis an
die zulässige Grenze hoch ohne dass der Lüfter läuft. Dann schaltet man
den Lüfter schlagartig auf volle Leistung (Führungsgröße / Sollwert
macht einen Sprung -> Register OCR0A oder OCR0B geht von von 0 (Lüfter
aus / Maximaltemperatur) auf 255 (Lüfter volle Leistung /
Minimaltemperatur)) und misst den Temperaturverlauf über der Zeit (also
die Abkühlung). Aus dieser Kurve kann man das Übertragungsverhalten der
Regelstrecke weitgehend ablesen. Es gibt viele unterschiedliche
Verfahren, aus diesen Daten die richtigen Werte für den Regler zu
bestimmen. Das ganze Verfahren wird mit zahlreichen Beispielen und sehr
verständlich auch auf der Seite
http://www2.informatik.hu-berlin.de/~kauerhof/Hu/Ki/Regelungstechnik2.html
erläutert.
Gruß, Volker
Volker U. schrieb:
> Naja, wenn man eine Komplettabschaltung benötigt, dann stellt man die> Spannungsversorgnung eben über einen Schalttransistor zur Verfügung,> den man mit einem Pin des MC an- und ausschalten kann.
Jo, ist natürlich auch eine Lösung, wenn man denn die zusätzlichen Ports
zur Verfügung hat. Ist halt wie bei den meisten Sachen, es führen halt
mehrere Wege nach Rom...
> Und wie wäre es, bei mehr benötigter Leistung einfach mehrere OPV> parallel zu schalten?
Mit OPVs habe ich mich noch nicht nähr beschäftigt, bis jetzt habe ich
nur den LM358 verbaut. Wenn ich das richtig sehe, dann kann der LM358
20mA treiben und ein durchschnittlicher Lüfter liegt bei 150mA. Ich
müsste dann ja 8x OPVs parallel schalten, warum das ganze dann nicht
lieber mit einem FET realisieren? Oder reden wir aneinander vorbei und
Du meinst etwas ganz anderes? Hast Du ein Beispiel (Schaltplan) für so
eine OPV Beschaltung?
Jens schrieb:> Jo, ist natürlich auch eine Lösung, wenn man denn die zusätzlichen Ports> zur Verfügung hat. Ist halt wie bei den meisten Sachen, es führen halt> mehrere Wege nach Rom...
Och naja, an Ports mangelt es doch heute nicht mehr. Atmel hat seine µC
doch so wunderbar skaliert, dass für jeden Zweck die richtige Portzahl
vorhanden ist. Also ich nehme meist die Reihenfolge "ATtiny85 (8 Pin),
ATtiny84 (14 Pin), ATmega328 (28 Pin) und ATmega1284 (40 Pin). In der
SMD-Version gibts teilweise jeweils noch mehr Pins.
>> Und wie wäre es, bei mehr benötigter Leistung einfach mehrere OPV>> parallel zu schalten?>> Mit OPVs habe ich mich noch nicht nähr beschäftigt, bis jetzt habe ich> nur den LM358 verbaut. Wenn ich das richtig sehe, dann kann der LM358> 20mA treiben und ein durchschnittlicher Lüfter liegt bei 150mA.
Jo, das Teil ist für sowas auch nicht geeignet. In folgendem Thread
gibts Hinweise zu OPV mit hohem Ausgangsstrom:
Beitrag "OPVs mit hohem Ausgangsstrom"
Natürlich gehts auch mit einem FET, aber dessen Übertragungsverhalten
ist nicht linear - im Gegensatz zum OPV. Und deshalb ist der eher
ungeeignet, wenn es auf eine gute Regelung ankommt.
Volker U. schrieb:
> Jo, das Teil ist für sowas auch nicht geeignet. In folgendem Thread> gibts Hinweise zu OPV mit hohem Ausgangsstrom:> Beitrag "OPVs mit hohem Ausgangsstrom"
Danke für den Link. Also ich währe nie im Traum darauf gekommen einen
Audioverstärker für eine Lüftersteuerung zu verwenden... ;-)))