Autor |
PWM für 4pol-Lüfter Suche nach: pwm (3618) |
|
|
|
|
BID = 575353
clembra Inventar
Beiträge: 5404 Wohnort: Weeze / Niederrhein
|
|
Hallo Zusammen,
ich stehe nach langer elektronischer Ruhepause mal wieder vor einem Problem.
Ich möchte mir für meinen PC eine Lüftersteuerung bauen, soweit noch leicht, gibt ja genug Anleitungen. Allerdings habe ich mir Lüfter mit 4poligem Anschluss zugelegt, und zwar solche mit zusätzlichem Pin für die Steuerung der Geschwindigkeit. Diese erwarten an dem 4. Pin ein PWM-Signal von 25kHz. Insgesamt regeln möchte ich auf diese Art 5-6 Lüfter, wenn möglich getrennt, also mittels Software-PWM. Als µC hatte ich einen ATmega8 ins Auge gefasst, da es der kleinste mit genug Pins und I2C ist.
Genug geschrieben, hier mein Problem: Der ATmega8 lässt sich maximal mit 16MHz takten. Bei 25kHz Zielfrequenz komme ich auf 640 Takte pro Durchgang. Für einen Timer-Interrupt gehen allein für das Standard-Zeugs (RJMP, RETI, SREG sichern/rückschreiben) 12 Takte drauf. Bei einer (Un-)Genauigkeit von 50 Schritten bleibt mir also keine Zeit für das eigentliche Port-setzen.
Ich hoffe, ich übersehe hier etwas wichtiges..
Ausweichmöglichkeiten:
- Einen "speziellen" Chip, der mehrere PWM-Kanäle zur Verfügung stellt, die 5-6 Lüfter getrennt regeln können.
Ich hatte auch schon daran gedacht einen ATtiny13 je Lüfter zu verwenden, aber die *piep* von Atmel haben den PWM-Ausgang genau auf die Pins der SPI gelegt.
Einen ATmega8 je 2 Lüfter wollte ich nicht opfern.
- PWM auf analog und dann mit 555 oder ähnlichem wieder pulsweitenmodulieren.
- Nur zwei Kanäle, die drei Lüfter auf dem Deckel zusammen klemmen und den Vorderen in drei Stufen (Max/Min/aus) schalten.
Die Lüftersteuerung soll später Teil eines größeren Projektes mit VDR-gesteuerter Aufweckfunktion, Display, Innenbeleuchtung, Temperaturkontrolle und was mir noch so einfällt. (Ihr werdet bestimmt noch von mir hören )
Ich hoffe Ihr könnt mir weiterhelfen
Danke im Voraus
Clemens
Anhang: Spezifikationen für 4-pin Lüfter (pdf)
_________________
Reboot oder be root, das ist hier die Frage. |
|
BID = 575761
hajos118 Schreibmaschine
Beiträge: 2453 Wohnort: Untermaiselstein
|
|
Gäbe es als Ausweichmöglichkeit nicht auch noch elektronische Widerstände (durch µC kontolliert), die in einer analogen "555er PWM" pro Lüfter eingesetzt werden könnten?
_________________
Interpunktion und Orthographie dieses Beitrags sind frei erfunden.
Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Wer einen Fehler findet, darf ihn behalten!
[ Diese Nachricht wurde geändert von: hajos118 am 30 Dez 2008 10:08 ] |
|
BID = 575990
clembra Inventar
Beiträge: 5404 Wohnort: Weeze / Niederrhein
|
Eine niederfrequentere PWM glätten und damit einen 555 ansteuern hatte ich schon als Alternative angesprochen, aber ich hoffe doch, dass es hier noch andere Möglichkeiten gibt, denn ein digitales Signal in ein analoges umwandeln um dann wieder ein digitales daraus zu machen halte ich für nicht besonders die feine Art.
Wenn ich deine Antwort richtig interpretiere meinst du eine Art R2R-Netzwerk. Das fällt allein aufgrund der hohen Anzahl an nötigen Pins aus.
Trotzdem danke für die Antwort, ich hoffe nur, es kommt noch mehr
_________________
Reboot oder be root, das ist hier die Frage.
|
BID = 575998
Racingsascha Schreibmaschine
Beiträge: 2247 Wohnort: Gundelsheim
|
Das mit den NE555 wird warscheinlich auch wegfallen, da die im Datenblatt dargestellte Methode (an Pin 5 ne Spannung anlegen) auch die PWM-Frequenz verändert. Das mit den elektronischen Widerständen geht da schon eher.
Ich persönlich würde das mit den PWM-Slaves machen. Muss man sich dann eben entscheiden ob man die Schnittstelle oder die PWM in Software macht Ne SPI ist aber schneller und einfacher programmiert als eine PWM.
_________________
Fnord ist die Quelle aller Nullbits in deinem Computer.
Fnord ist die Angst, die Erleichterung, und ist die Angst.
Fnord schläft nie.
|
BID = 576000
ElektroNicki Inventar
Beiträge: 6429 Wohnort: Ugobangowangohousen
|
Mit der Frequenz kann man auch bis 21kHz runter gehen.
Ich hab aber auch schon normale Lüfter per PWM geregelt.
Der zusätzliche PWM-Eingang ist doch auch nur deswegen vonnöten, weil man sonst kein sauberes Tachosignal erhält, oder?
_________________
|
BID = 576013
clembra Inventar
Beiträge: 5404 Wohnort: Weeze / Niederrhein
|
Ein sauberes Tachosignal ist einer der Gründe, warum ich diesen 4. Anschluss verwenden möchte. Ein weiterer, dass ich kein eigenes PWM-Lastteil bauen möchte.
Der extra PWM-Chip ist auch meine bevorzugte Methode. Und ob 21kHz oder 25, da ist kein so bedeutender Unterschied in der anfänglichen Problematik.
Kennt von euch jemand einen Chip, den ich per SPI oder I2C ansteuern kann, welcher mir dann eine 25kHz-PWM zur Verfügung stellt?
Ich habe da (nach dem Stichwort "PWM Slave") den Dallas DS1050Z-025 gefunden, den gibt es aber nur als SMD (was nicht so schlimm wäre), ist aber nicht bei Reichelt im Sortiment
Sonst wird es wohl ein ATtiny24 oder ähnliches. Die kleinen 8poligen ATtiny15 fallen ja wegen bereits angesprochener ungünstiger Pin-Lage aus.
Vielen Dank erstmal und gute Nacht (fast guten morgen )
Clemens
_________________
Reboot oder be root, das ist hier die Frage.
|
BID = 576056
ElektroNicki Inventar
Beiträge: 6429 Wohnort: Ugobangowangohousen
|
Am Atmega16 haste iirc 4 PWM-Ausgänge.
_________________
|
BID = 576219
clembra Inventar
Beiträge: 5404 Wohnort: Weeze / Niederrhein
|
... bei 40 pins und mit 3 Timern. Das bedeutet weit über die Hälfte bleibt unbeschaltet. Und da alle Timer für die PWM drauf gehen würden kann ich mit dem nicht mal die Drehzahlerfassung erledigen.
Mein aktueller Plan sieht so aus, dass ich einen ATmega8 als Hauptlüftersteuerung nehme, den ich per I2C kontrolliere. Dieser stellt bereits für 2 Lüfter die PWM-Ausgänge zur Verfügung und erledigt auch die Drehzahlerfassung. Zusätzlich werden pro zwei PWM-Ausgänge ein ATtiny24 (da welze ich noch Datenblätter) verwendet, die vom ATmega8 per SPI angesteuert werden.
Andere Only-PWM-Chips als den DS1050 habe ich nicht gefunden und wenn man die Wahl zwischen 5bit und ca. 16bit hat...
Ihr hört auf jeden Fall noch von mir...
_________________
Reboot oder be root, das ist hier die Frage.
|
BID = 576265
ElektroNicki Inventar
Beiträge: 6429 Wohnort: Ugobangowangohousen
|
Der Attiny 2313 lässt sich iirc mit 20MHz takten...
Diesen Schluss ziehe ich aus dem Suffix -20
_________________
|
BID = 576281
clembra Inventar
Beiträge: 5404 Wohnort: Weeze / Niederrhein
|
Und nicht zu vergessen, dass im Datenblatt der Satz "Up to 20 MIPS Throughput at 20 MHz" steht. Es wird dann aber eine Versorgungsspannung von mind. 4,5V benötigt. Und intern getaktet ist der mit wahlweise 4MHz oder 8MHz.
Ich überlege gerade nur krampfhaft, was mir diese Aussage bei meinem Vorhaben nützt
Pro Takt und Einteilung macht das bei Software-PWM vielleicht 'ne Hand voll Takte mehr oder weniger. Darauf kommt es absolut nicht an.
Da der aktuelle Plan darin besteht mehrere kleine Controller zu nutzen und deren Hardware-PWM von Timer1 ist bei 8bit alles ab ca. 6,4MHz ausreichend.
Wenn ich das TWI der kleinen ATtiny verstanden habe (Datenblatt büffeln) werde ich wohl einen ATmega8 und zwei bis drei ATtiny25 nehmen. Die kommunizieren dann über den allgemeinen I2C-Bus (I2C=TWI). Ein weiterer ATmega (16/8515/...) steuert dann den ATmega8 und der über den gleichen Bus (Multi-Master) die ATtiny.
Nichts für ungut Nicki, aber es ist nicht mein erster zu programmierender Controller, wenngleich ich zwei Hände noch nicht voll habe und noch kein ATtiny dabei war (die hießen damals AT90S...)
_________________
Reboot oder be root, das ist hier die Frage.
|
BID = 576962
Lupin III. Schriftsteller
Beiträge: 616 Wohnort: Salzburg
|
Was du glaub ich noch nicht geschrieben hast: Welche Auflösung soll die PWM denn haben? 8 Bit ist für Lüfter doch etwas übertrieben.
Wie wäre es wenn du die 8-Bit Werte für einen ganzen Port im RAM ablegst? Das 1. Bit steht für den 1. Lüfter, das 2. für den 2. usw. bis zum achten Lüfter. Von diesen Werten gibt es dann so viele wie du PWM Auflösung brauchst, bzw. so viele, dass du bei 25kHz alle durchbekommst (2^n Werte bevorzugt). Die werden dann der Reihe nach gelesen und direkt auf den Port geschrieben, sind alle durch beginnt's von vorn.
Code : |
loop:
sleep
ld temp, Z+
out PORTD, temp
andi ZL, 0x3F
rjmp loop |
|
Das "andi" macht den Überschlag mach 64 Werten. Ist billiger als ein CMP und du hast immer eine konstante Taktzahl pro Durchgang egal ob Überschlag oder nicht (die Werte müssen natürlich an passender Stelle im RAM stehen, also bei einer Adresse mit 0xXX00 beginnen). Der Rest sollte klar sein. Pro Durchgang 1+2+2+1+3 = 9 Takte. Das mal 64 kommst du auf 576 Takte bei 5 Bit PWM-Auflösung. Geweckt wird das ganze von einem Timer für die richtige Frequenz.
Dadurch, dass alle vorgegeben sind, kannst die An-Aus-Phasen auch leicht gegeneinander versetzen, sodass keine Verbrauchsspitzen entstehen.
Soll die Geschwindigkeit geändert werden, berechnet der AVR (oder ein anderer wenn es sich zeitlich wirklich nicht ausgehen sollte, aber so Zeitkritisch sollte das nicht sein, das kann sich ja ruhig über mehrere PWM-Takte hinziehen) die Werte neu und überschreibt die Werte im Ram.
|
BID = 577113
clembra Inventar
Beiträge: 5404 Wohnort: Weeze / Niederrhein
|
Danke für den Vorschlag, aber ich denke ich bleibe jetzt bei der Lösung mit den Hardware-PWM.
Auflösung, ja, ist doch immer schön, wenn man mehr hat als man braucht . Schließlich soll es ja, entgegen meiner früheren Behauptung, keine Lüftersteuerung, sondern eine Lüfterregelung werden. Das heißt der Hauptcontroller, ein ATmega8515, gibt per SPI (der kann ja gar kein I2C/TWI ) eine Geschwindigkeit an den ATmega8 und der entscheidet dann, wie hoch der PWM-Wert sein soll. Diesen stellt er für die ersten zwei Lüfter direkt ein und übergibt den Wert für die anderen Lüfter per I2C an die ATTinys.
Eine Temperaturkontrolle soll später auch noch kommen, vielleicht mit DS18S20 und DS2482, mal sehen.
Ich habe meine Ideen mal mit Eagle veranschaulicht und ich lade mal den Plan hoch.
Wer gerne die .sch-Dateien möchte kann sich per PM melden.
Anmerkungen sind gerne gesehen.
_________________
Reboot oder be root, das ist hier die Frage.
|
BID = 578845
hajos118 Schreibmaschine
Beiträge: 2453 Wohnort: Untermaiselstein
|
Zitat :
clembra hat am 4 Jan 2009 02:14 geschrieben :
|
Danke für den Vorschlag, aber ich denke ich bleibe jetzt bei der Lösung mit den Hardware-PWM.
|
Ich möchte nochmal die Idee mit den 555er PWM mit elektronisch kontrollierten Poti (Intersil X9C1..) in's Spiel bringen!
Mit 2 + n Signalen kann man n - Lüfter kontrollieren ... Also dürfte ein Attiny2313 (oder Mega locker genügen...
_________________
Interpunktion und Orthographie dieses Beitrags sind frei erfunden.
Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Wer einen Fehler findet, darf ihn behalten!
|
BID = 578990
clembra Inventar
Beiträge: 5404 Wohnort: Weeze / Niederrhein
|
Ich brächte nur einen µC, aber dann bräuchte ich je steuerbaren Lüfter einen el. Poti, einen NE555 und einiges an Hühnerfutter. Mit meiner jetzigen Planung brauche ich einen ATmega8, drei ATtiny25 (8pin) und 8 BS170 (kleine N-Mosfet) als Treiber, damit keine 12V an die AVR kommen. Und das für 8 Lüfterkanäle.
Darüber hinaus wäre der Tiny2313 nicht ausreichend und ein ATmega8 wäre auch recht knapp, da der Fancontroller eine Regelung machen soll, das heißt auch die aktuelle Drehzahl erfassen. Da ist es sogar noch ein Pin mehr, da ich auch eine Durchflusskontrolle für die WaKü einplane.
Zudem finde ich X9C1 nicht beim R, da müsste ich andere Quellen für absuchen. Dann wird es mit den ganzen Elementen auf einer Europlatine wohl schon etwas eng. Jetzt bin ich bei ca. 120x100mm, frisch geroutet, was auch schön unter die Festplatten passt.
_________________
Reboot oder be root, das ist hier die Frage.
|
BID = 579656
hajos118 Schreibmaschine
Beiträge: 2453 Wohnort: Untermaiselstein
|
Stimmt - Deine Lösung ist näher am Optimum...
_________________
Interpunktion und Orthographie dieses Beitrags sind frei erfunden.
Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Wer einen Fehler findet, darf ihn behalten!
|