Hallo zusammen, ich plane aktuell eine simple Lüftersteuerung über einen NTC und einen LM317. Da ich flexibel sein möchte würde ich es gerne mit einem µC realisieren. Der Lüfter hat keinen PWM Input! Nun habe ich mir mal grundlegend folgendes überlegt: Den NTC schließe ich an einen ADC Input eines Atmels (z.b: ATMEGA8) an. Dort werte ich die Daten aus und schalte dementsprechend 8 Ausgänge entweder auf HIGH oder auf LOW. An diesen 8 Ausgängen sitzt ein Widerstandsnetzwerk das den LM317 steuert. Der LM317 bekommt dann quasi 8 unterschiedliche Widerstandswerte und schaltet somit in 8 Stufen den Lüfter. Ist das vom Grundgedanken her so ok oder völliger Unsinn? Als kleines Schmankerl könnte ich dann noch den Sensor Output vom Lüfter über den Atmel auswerten und bei einem Lüfterdefekt eine Errorleitung aktiv schalten die dann den Rest der Schaltung abschaltet. Bitte habt Verständnis damit dass ich kein Profi bin, ich würde eine solche Schaltung gerne komplett selbst entwickeln und nicht einfach eine fertige aus dem Netz nachbauen. Vielen Dank, Gruß Borsty
Bernhard W. schrieb: > An diesen 8 Ausgängen sitzt ein > Widerstandsnetzwerk das den LM317 steuert. Auf die Schaltung bin ich mal gespannt. Die AVR-Pins dürfen nur zwischen 0..5V sehen. Welchen Spannungsbereich soll der LM317 liefern? Einfach die Widerstände irgendwo ranknoten wird nicht gehen. Peter
>> An diesen 8 Ausgängen sitzt ein >> Widerstandsnetzwerk das den LM317 steuert. > > Auf die Schaltung bin ich mal gespannt. > Die AVR-Pins dürfen nur zwischen 0..5V sehen. > Welchen Spannungsbereich soll der LM317 liefern? > > Einfach die Widerstände irgendwo ranknoten wird nicht gehen. > Naja es geht ja um das Grundprinzip man kann daraus ja einen Spannungsteiler machen, zur Not muss halt ein OP her... Der LM317 soll bei 12V Betriebsspannung etwa knapp 11V liefern.
Mal davon ausgehend, dass du es tatsächlich so machen willst und die Spannungsteiler-Widerstände über den uC gegen Masse (nehme ich mal an) schalten willst: Das stimmt natürlich, was Peter schreibt, du musst schauen, dass die Spannung, wenn sie nicht geschalten sind, nicht über 5V steigt. Dazu könntest du beispielsweise zwei Widerstände (im Bild R2 und R11) als festen Spanungsteiler einsetzen und mit dem uC einfach Widerstände parallel zu R11 zuschalten. Logischerweise hast du dann nur einen Regelbereich von 5V (z.B. 6 bis 11V), aber das sollte reichen, weil unter 6V läuft ohnehin kein normaler 12V-Lüfter mehr. Wenn du ohnehin nicht unter 6V gehst, könntest du statt dem LM317 auch einen 7805 nehmen.
1 | _____ |
2 | 12V______| |______________> Lüfter |
3 | | 317 | | |
4 | |_____| R1| | |
5 | | |_| |
6 | |_______| |
7 | | |
8 | R2| | |
9 | |_| |
10 | _________|___/.../_ |
11 | | | | | |
12 | R3...R10 | | | | | | R11| | |
13 | |_| |_| |_| |_| |
14 | | | | _|_ |
Hi, ja das klingt doch gut - danke dafür. Man könnte R11 ja auch noch mit einer ZD4,7 Zener Diode unterstützen um sicherzustellen dass auf keinen Fall die 5V überschritten werden. Hat jemand einen anderen Lösungsansatz?
>
1 | > _____ |
2 | > 12V______| |______________> Lüfter |
3 | > | 317 | | |
4 | > |_____| R1| | |
5 | > | |_| |
6 | > |_______| |
7 | > | |
8 | > R2| | |
9 | > |_| |
10 | > _________|___/.../_ |
11 | > | | | | |
12 | > R3...R10 | | | | | | R11| | |
13 | > |_| |_| |_| |_| |
14 | > | | | _|_ |
15 | > |
16 | > |
Ich hab grad eben mal die Werte durchgerechnet: R1: 240 R2: 680 R3-11: je 2k Wenn R3-R11 komplett auf GND geschaltet sind ergibt sich ein Gesamtwiderstand von 222 Ohm. Laut Uref * (1 + (R2+R3-R11)/R1) -> 1,25 * (1 + 2680/240) ergibt sich eine max. Spannung von 15,20V. Wobei hier natürlich einfach Umax von ca. 10,8V möglich ist. Wenn alle Widerstände auf GND geschaltet sind sieht die Rechnung so aus: 1,25 * (1 + 902/240) = 5,95V Ist das so richtig? Laut meiner Berechnung steigt die Spannung am Pin des µC nicht über 2,5V: Gesamtstrom R1 - R11 = 11mA Spannungsabfall R1: 2,64V R2: 7,48V R3-R11: 2,44V Stimmt das so? Was mich etwas verwundert ist der Spannungsabfall an R1 von 2,64V. Sollten hier nicht immer 1,25V abfallen? Danke, Gruß
Nur mal als Zwischenfrage: warum so kompliziert wenn man es mit PWM viel einfacher und besser machen kann?
Weil ich einen richtig schönen Lüfter von ebm papst aus der 612er Serie hab mit 3,7W. Hab den mal als Ersatzteil gekauft und dann doch nicht gebraucht, jetzt liegt er rum und da hochwertige Lüfter nicht ganz billig sind würde ich den ganz gern verwenden, leider hat der keinen PWM Eingang.
Im Daddelblatt vom 317 ist eine Schaltung bei der je nach gewünschter Spannung durch Transistoren Widerstände zu/abgeschaltet werden. Das sollte für diesen Zweck perfekt passen, einfach die Transistoren an den AVR-Ausgang.
troll schrieb: > Im Daddelblatt vom 317 ist eine Schaltung bei der je nach gewünschter > Spannung durch Transistoren Widerstände zu/abgeschaltet werden. Das > sollte für diesen Zweck perfekt passen, einfach die Transistoren an den > AVR-Ausgang. Stimmt auf Seite 22 :) Das ist ja genau das was ich brauch! Danke!
Warum nicht so wie es z.B. auf dem STK500 Board gemacht wird (siehe Bild). Braucht nur einen PWM-Port und funktioniert zuverlässig.
Bernhard W. schrieb: > Weil ich einen richtig schönen Lüfter von ebm papst aus der 612er Serie > hab mit 3,7W. Hab den mal als Ersatzteil gekauft und dann doch nicht > gebraucht, jetzt liegt er rum und da hochwertige Lüfter nicht ganz > billig sind würde ich den ganz gern verwenden, leider hat der keinen PWM > Eingang. Du kannst aus einer PWM mittels Step-Down-Regler eine schöne Gleichspannung erzeugen! Das hat auch den Vorteil, dass Du den Spannungsabfall nicht in Wärme umwandeln musst.
Das mit dem Step Down Regler ist eine gute Idee. Ich such jetzt schon eine ganze Weile nach einem passenden Buck Converter den man mit PWM steuern kann, finde aber nichts. Kennt jemand einen passenden Step-Down/Buck Converter für diesen Einsatz?
Der AVR wird an sein Pins nicht mehr als 1,25V sehen, denn das ist die VREF mit der im LM317 der Input verglichen wird. Eine 4,7/5,1 ZDiode zwischen ADJ und GND schadet aber trotzdem nicht. Mit 8 Widerständen kannste sogar 255 Werte darstellen, wenn der Widerling des nächst höheren Bit jeweils doppelt so groß ist, also reichen dann auch 4 Pins für 15 Werte. Die Pins musste dann zwischen Ausgang (GND/0) und Eingang umschalten. 5V kommen da nicht gut, dann macht der 317 dicht. Also für deine 6 bis 12V ausrechnen und dann die Widerlinge so aufteilen. Nur hat der 317 nen Vdrop von 3V, such dir also nen moderneren Regler mit wenig Vdrop (Lowdropregler). Den Lüfter kannste aber trotzdem mit PWM speisen, dann eben nicht aufm PWM Pin sondern die 12V takten. Den MC34063 kannste genauso wie den 317 steuern, indem du den Sense Eingang imemr mehr auf Masse ziehst.
Martin Wende schrieb: > Den Lüfter kannste aber trotzdem mit PWM speisen, dann eben nicht aufm > PWM Pin sondern die 12V takten. Aber ich würde den PWM schon glätten, manche Lüfter machen sonst komische Geräusche, und das ist kontraproduktiv, weil man will gewöhnlich hauptsächlich wegen der Geräuschkulisse die Drehzahl reduzieren.
Musst ja keine 4kHz PWM draufgeben (FIIIEEEEP) mehr als 30kHz und schon is Ruhe.
Ich dachte Anfangs eher an einen "richtigen" Step Down Regler, also nicht dass der Lüfter getacktet wird sondern der Regler und der Lüfter eine geregelte Spannung bekommt. Quasi die moderne Version vom LM317 ohne Wärmeabgabe und direkt mit PWM regelbar. Ich hab den LM5010A von TI (http://www.farnell.com/datasheets/1640773.pdf), jedoch wird dort die Spannung auch über zwei Widerstände zwischen Output und FB-Pin gesteuert. Gibt es solche IC's auch mir direktem PWM Input?
Guten Morgen, ich habe das Problem mit dem temperaturgeregelten Lüfter vor langer Zeit ganz einfach erschlagen. Den Standart 240 Ohm Widerstand am LM317 durch einen 470 Ohm NTC ersetzt und die Eckspannungen mit einem 5K Trimmer geregelt. Bei Erwärmung steigt so die Ausgangsspannung. Das hat ziemlich gut funktioniert. Übrigens funktionieren die meisten 12V-Lüfter mit 5V noch recht gut. Ich benutze einen im Büro am USB-Port für die Frischluftzufuhr auf dem Schreibtisch.
Hmm... ich werd am Wochenende mal ein wenig rumexperimentieren und die Bastelkisten plündern. Mal sehen was dabei rauskommt.
Anbei mal ne einfache Schaltung mit PWM. Die 4,7k+47µF machen die Glättung. Die PWM macht 0..5V (VCC) und der Regler addiert nochmal 5V. Man kann statt des LDO einen 7805 nehmen, kommt dann aber nicht bis ganz 10V. Die Kondensatoren am Ein- und Ausgang nicht vergessen, damit er nicht schwingt. Peter
Ähnlich: Beitrag "Re: SPI / I2C-justierbarer Spannungsregler". Mit dem LM2951 geht auch mehr als die dort beim LM2575 konfigurieren 10V.
Im Datenblatt des LM317 http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00000455.pdf ist in Figure 11 auf Seite 11 ein einstellbarer LM317 aufgeführt.
Martin Wende schrieb: > Den Lüfter kannste aber trotzdem mit PWM speisen, dann eben nicht > aufm PWM Pin sondern die 12V takten. ..und wenn der Lüfter die PWM wirklich nicht verträgt, sollte man als erstes die Frequenz variieren und wenn das auch nicht hilft, eine Drossel und einen Elko nachschalten. Das ist dann eine Art Step-Down/Buck Converter ohne Zusatz-IC. Für den etwas höheren Strom eines Lüfters muss man natürlich dem Atmal einen Treibertransistor nachschalten. Gruss Harald
Hi, also ich hab jetzt mal etwas rumexperimentiert. Sehr gut funktioniert eine PWM Lösung mit einem LM2941. Ich schalte mittels invertierter PWM (ca. 15kHz) den On/Off Pin des LM2941. Hierbei hat der Lüfter ein sehr ruhiges Anlaufverhalten und läuft auch bei geringer Drehzahl schon an. Nun zum Code und zum eigentlichen Problem: Ich verwende einen Epcos 2k2 NTC (http://www.produktinfo.conrad.com/datenblaetter/500000-524999/500478-da-01-en-Heissleiter_Typ_K45_B57045K682K.pdf). Controller ist ein Mega32 weil ich den noch rumliegen hatte. Referenzspannung wird AVcc verwendet, von AVcc und AReff geht jeweils ein 100nF auf GND. Spannung am AVcc Pin beträgt 5,02V. PWM liefern (OC1B) PD4 und (OC1A) PD5 wobei 0C1A auf GND liegt und 0C1B die Impulse schaltet. +5V | | = | | | | EPCOS NTC 2k2 | | = |--- µC MEGA32 Pin 40 ADC PA0 (ADC0) = | | | | 2k2 Widerstand | | = | GND Soviel zur Vorgeschichte. Ich hab ein kleines Testprogramm geschrieben bei dem der Lüfter bis 30°C mit geringer Geschwindigkeit und ab 30°C mit voller Drehzahl laufen soll. Das macht er auch, halte ich den NTC in der Hand schaltet der Lüfter auf volle Drehzahl und nach einer Weile wieder herunter. Erhite ich mit einem Lötkolben (ca. 150°C) den NTC schaltet der Lüfter ebenfalls auf Volldrehzahl, aber ab einer Spannung von 3,2V am Pin40 des µC's schaltet er wieder auf langsame Stufe. Erst wenn der NTC wieder abkühlt und unter 3,2V sinkt schaltet der Lüfter wieder auf Vollgas. Es scheint als würde er den AD Messbereich verlassen?! Wie ist das möglich? VReff liegt ja bei 5,02V. Selbes Phänomen tritt übrigens auch mit einem 6k8 NTC und anderen Pulldown Widerständen auf. Hier noch der Code:
1 | #define F_CPU 4000000U
|
2 | #include <avr/io.h> |
3 | #include <util/delay.h> |
4 | |
5 | uint16_t ADC_read(); |
6 | int8_t NTC_ADC2Temperature(); |
7 | uint16_t adcval; |
8 | int8_t i; |
9 | int16_t x; |
10 | int16_t x1; |
11 | uint8_t wert; |
12 | int8_t temperatur; |
13 | uint32_t result; |
14 | |
15 | |
16 | |
17 | int main(void) |
18 | {
|
19 | DDRD |= (1<<PD4) | (1<<PD5) | (1<<PD7); |
20 | DDRA &= ~(1<<PORTA); |
21 | ADC_init(); |
22 | PWM_init(); |
23 | |
24 | while(1) |
25 | {
|
26 | PWM_out(); |
27 | |
28 | } return 0; |
29 | }
|
30 | |
31 | void ADC_init(void) { |
32 | |
33 | |
34 | ADMUX = (0<<REFS1) | (1<<REFS0); //AVcc als Referenz verwenden |
35 | ADCSRA = (0<<ADPS0) | (1<<ADPS1) | (1<<ADPS2); //Vorteiler auf 64 einstellen |
36 | SFIOR = (0<<ADTS0) | (0<<ADTS1) | (0<<ADTS2); //Free Running Mode aktiviern |
37 | ADCSRA |= (1<<ADEN); //ADC einschalten |
38 | ADCSRA |= (1<<ADSC); |
39 | while (ADCSRA & (1<<ADSC)) {;} |
40 | result = ADCL; |
41 | result += (ADCH<<8); |
42 | result = 0; |
43 | |
44 | }
|
45 | |
46 | uint16_t ADC_read(void) { |
47 | |
48 | ADCSRA |= (1<<ADSC); |
49 | while (ADCSRA & (1<<ADSC)){;} |
50 | x = ADCL; |
51 | x += (ADCH<<8); |
52 | return x; |
53 | }
|
54 | |
55 | uint16_t ADC_read_avg(void) { |
56 | |
57 | result = 0; |
58 | for (i = 0; i<4; i++) |
59 | {
|
60 | result += ADC_read(); |
61 | }
|
62 | return (uint16_t)(result/4); |
63 | }
|
64 | |
65 | void PWM_init(void) { |
66 | |
67 | TCCR1B |= (1<<CS12); //Prescaler 256 -> 15625Hz bei 4MHz |
68 | TCCR1A |= (1<<WGM10); //FAST PWM |
69 | TCCR1B |= (1<<WGM12); //FAST PWM |
70 | TCCR1A |= (1<<COM1A1) | (1<<COM1B1); //PWM Modus einstellen |
71 | |
72 | }
|
73 | |
74 | void PWM_out(void) { |
75 | |
76 | temperatur = NTC_ADC2Temperature(ADC_read_avg()); |
77 | |
78 | if (temperatur < 30) //bis 30°C wird dreht Lüfter langsam |
79 | {
|
80 | OCR1B = 240; |
81 | OCR1A = 0; |
82 | } else { //ab 30°C dreht Lüfter mit Vollgas |
83 | OCR1B = 0; |
84 | OCR1A = 0; |
85 | }
|
86 | |
87 | return; |
88 | }
|
89 | |
90 | |
91 | int16_t NTC_table[65] = { |
92 | -553, -459, -365, -305, -259, -221, -189, |
93 | -160, -135, -111, -89, -69, -49, -31, -13, |
94 | 4, 20, 36, 51, 67, 81, 96, 110, 125, 139, |
95 | 153, 167, 181, 195, 209, 223, 237, 251, 265, |
96 | 280, 294, 309, 325, 340, 356, 372, 389, 406, |
97 | 424, 442, 462, 482, 503, 525, 548, 573, 600, |
98 | 628, 659, 694, 731, 774, 823, 879, 948, 1034, |
99 | 1151, 1325, 1664, 2003 |
100 | };
|
101 | |
102 | |
103 | |
104 | |
105 | int8_t NTC_ADC2Temperature(uint16_t adcval){ |
106 | |
107 | int16_t p1,p2; |
108 | /* Stützpunkt vor und nach dem ADC Wert ermitteln. */
|
109 | p1 = NTC_table[ (adcval >> 4) ]; |
110 | p2 = NTC_table[ (adcval >> 4)+1]; |
111 | |
112 | /* Zwischen beiden Punkten linear interpolieren. */
|
113 | return p1 + ( (p2-p1) * (adcval & 0x000F) ) / 16; |
114 | };
|
Wie schon geschrieben ich bin was programmieren angeht noch nicht so fit und hoffe das ist einigermaßen Verständlich was ich da geschrieben habe. Die Funktion NTC_ADC2Temperature hab ich aus dem Internet (http://preis-ing.de/e_calc/index.php?seite=auternzc). ADC_read_avg errechnet einen Mittelwert aus vier Messungen, hatte anfangs einen Messfehler oder eine Spannungsschwankung in Verdacht. Das hat aber leider auch nicht geholfen. Achja ich hab zur Sicherheit am PWM Out noch ein Oszi hängen. Es liegt also definitiv am Code und nicht an der Beschaltung des LM2941 etc. Das PWM Signal schaltet auf "langsamen Modus" sobald 3,2V an Pin40 erreicht werden. Hoffe Ihr könnt mir helfen, Danke schonmal :)
Kurzer Nachtrag: hab heut früh vor der Arbeit noch etwas experimentiert und den NTC durch einen Poti ersetzt. Also bei wie oben schon geschrieben 3,2V am Pin40 schaltet der Lüfter von Vollgas auf "Halbgas", ab ca. 4V schaltet er wieder auf Vollgas. Das selbe Phänomen tritt auch bei etwa 2,1V auf. Dort gibt es einen Bereich wo die Steuerung einfach nicht das tut was sie soll :( Liegt der Fehler an meiner AD Wandlung oder an der Wertetabelle?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.