Forum: Mikrocontroller und Digitale Elektronik Allgemeine Frage: NTC -> ATMEL -> D/A -> LM317


von Borsty B. (mantabernd)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Borsty B. (mantabernd)


Lesenswert?

>> 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.

von Ernst L. (extraterrestrial)


Lesenswert?

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
                |    |    |        _|_

von Borsty B. (mantabernd)


Lesenswert?

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?

von Borsty B. (mantabernd)


Lesenswert?

>
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ß

von Nico (nico123)


Lesenswert?

Nur mal als Zwischenfrage: warum so kompliziert wenn man es mit PWM viel 
einfacher und besser machen kann?

von Borsty B. (mantabernd)


Lesenswert?

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.

von troll (Gast)


Lesenswert?

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.

von Borsty B. (mantabernd)


Lesenswert?

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!

von Steffen W. (derwarze)


Angehängte Dateien:

Lesenswert?

Warum nicht so wie es z.B. auf dem STK500 Board gemacht wird (siehe 
Bild).
Braucht nur einen PWM-Port und funktioniert zuverlässig.

von Nico (nico123)


Lesenswert?

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.

von Borsty B. (mantabernd)


Lesenswert?

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?

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

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.

von Ernst L. (extraterrestrial)


Lesenswert?

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.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Musst ja keine 4kHz PWM draufgeben (FIIIEEEEP)
mehr als 30kHz und schon is Ruhe.

von Borsty B. (mantabernd)


Lesenswert?

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?

von Nico (nico123)


Lesenswert?

Hier hast Du solch eine Schaltung: 
Beitrag "Berechnung StepDown-Konverter für Lüfter"

von be-cool (Gast)


Lesenswert?

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.

von Borsty B. (mantabernd)


Lesenswert?

Hmm... ich werd am Wochenende mal ein wenig rumexperimentieren und die 
Bastelkisten plündern. Mal sehen was dabei rauskommt.

von Peter D. (peda)


Angehängte Dateien:

Lesenswert?

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

von (prx) A. K. (prx)


Lesenswert?

Ähnlich: Beitrag "Re: SPI / I2C-justierbarer Spannungsregler". Mit dem 
LM2951 geht auch mehr als die dort beim LM2575 konfigurieren 10V.

von tt2t (Gast)


Lesenswert?

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.

von Harald W. (wilhelms)


Lesenswert?

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

von Borsty B. (mantabernd)


Lesenswert?

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 :)

von Borsty B. (mantabernd)


Lesenswert?

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
Noch kein Account? Hier anmelden.