Forum: Mikrocontroller und Digitale Elektronik MAX6675 und Arduino Nano Probleme stabile Messung


von Dirk (Gast)


Lesenswert?

Hallo

wie es schon im Titel steht habe ich Probleme damit, eine Temperatur 
stabil zu erfassen.

Es sollte eine Temperatursteuerung für einen Keramik-Grill werden.
Am Nano ist angeschlossen ein MAX6675 mit K-Thermoelement, 3 
Sensortasten zur Bedienung und Einstellung, ein 433MHz Funk-Sendemodul, 
ein I2C 4x20 Display und ein Transistor der über PWM den Lüfter regeln 
soll.
Das Ganze eingepackt in ein selbst-gedrucktes Gehäuse und momentan noch 
über ein altes AT PC-Netzteil mit 12V versorgt.

Das Problem ist, das die Temperatur manchmal hin-und her springt. 
Zumeist wenn man das Anschlusskabel des K-Thermoelement bewegt. Da gibt 
es Sprünge von 120 Grad nach 60 Grad, dann plötzlich 0 Grad usw. 
Manchmal läuft es für eine ganze Zeit ganz normal, ein anderes mal hört 
es gar nicht mehr auf zu schwanken, oder hält eine falsche Temperatur 
über längeren Zeitraum konstant.

Ein Defekt am Kabel selber ist das, denke ich, nicht, da ich 
verschiedene Thermoelemente getestet habe, und bei allen diese Probleme 
auftauchten.

Bei einem ca. 1stündigen Test im Backofen, bei 120 bis 250 Grad hatte 
ich ein einziges Mal kurz 0 Grad angezeigt bekommen. Und das obwohl ich 
permanent das Kabel bewegt, gebogen usw. habe.
Auch die Vermutung, das das Anschlusskabel die hohen Temperaturen nicht 
verträgt hat sich nicht bestätigt, da ich soviel Kabel wie möglich in 
den Backofen gestopft habe ;-)

Das Anschlusskabel des K-Thermoelement ist im übrigen mit Drahtgeflecht, 
wie bei Grillthermometern üblich.

Ich nutze wie gesagt den Arduino Nano und für den MAX 6675 die 
<max6675.h>   Bibliothek.
Abfragen tue ich den MAX6675 alles 2 Sekunden mit:
Ist_Temp = (thermocouple.readCelsius());

Hat jemand eine Idee woher diese seltsamen Temp-Sprünge herrühren 
können?
Vielen Dank
Dirk

von Stefan F. (Gast)


Lesenswert?

Meinst du nicht, dass du irgendwelche konkreten Infos zu deinem Aufbau 
liefern solltest? Zum Beispiel Schaltplan, Fotos, Quelltext?

Was hast du denn sonst noch so angestellt, um das Problem einzugrenzen? 
Nur am Kabel wackeln kann es ja nicht sein.

Du könntest den Sensor, Kabel und Netzteil austauschen (aber nicht alles 
gleichzeitig!). Und du könntest das Programm auf eine Minimal-Version 
reduzieren, bei der das Problem trotzdem noch nachvollziehbar ist. Und 
das zeigst du uns dann.

Bezüglich der Bibliothek solltest du sie ganz genau benennen, am Besten 
verlinken. Nicht selten gibt es nämlich mehrere Varianten für den selben 
Chip und natürlich auch mehrere Versionen.

von Dirk (Gast)


Angehängte Dateien:

Lesenswert?

Guten Morgen

Stefan U. schrieb:
> Bezüglich der Bibliothek solltest du sie ganz genau benennen, am Besten
> verlinken. Nicht selten gibt es nämlich mehrere Varianten für den selben
> Chip und natürlich auch mehrere Versionen.

Die Bibliothek ist folgende:
(Mir war gar nicht bewusst das es da so viele verschiedene gibt)
1
name=MAX6675 library
2
version=1.0.0
3
author=Adafruit
4
maintainer=Adafruit <info@adafruit.com>
5
sentence=Arduino library for interfacing with MAX6675 thermocouple amplifier
6
paragraph=Arduino library for interfacing with MAX6675 thermocouple amplifier
7
category=Sensors
8
url=https://github.com/adafruit/MAX6675-library
9
architectures=*

Stefan U. schrieb:
> Du könntest den Sensor, Kabel und Netzteil austauschen (aber nicht alles
> gleichzeitig!). Und du könntest das Programm auf eine Minimal-Version
> reduzieren, bei der das Problem trotzdem noch nachvollziehbar ist. Und
> das zeigst du uns dann.

Den Sensor habe ich getauscht, insgesamt 3 verschiedene. Das Kabel ist 
am Sensor fest angeschlossen.
Das Netzteil habe ich noch nicht getauscht.

Eine Minimal-Version habe ich auch noch nicht getestet, da der Grill 
leider nicht bei mir steht, um ich bei meinem Test hier zu Hause nicht 
diese Fehlerhäufung hatte.

Ich habe gerade mal auf die Schnelle einen Schaltplan mit Fritzing 
gezeichnet und angehängt (sehe ich in der Vorschau leider nicht)

Und ein Bild habe ich noch schnell gemacht, dabei auch gesehen, das ich 
den Transistor im Schaltplan vergessen habe. Sollte aber nicht das 
Problem sein, oder?

Und das ist der Code:
( Ich bin mir sicher das man das schöner und sinnvoller programmieren 
kann, aber ich lerne ja noch, also bitte nicht schlagen ;-) )
1
 
2
3
#include <Wire.h>                       // Wire Bibliothek hochladen
4
#include <LiquidCrystal_I2C.h>          // I2C Display
5
#include <max6675.h>                    // MAX6675 für Thermoelement-Platine
6
#include <RCSwitch.h>                   // 433MHz Funk integrieren
7
#include <PID_v1.h>
8
9
RCSwitch mySwitch = RCSwitch();
10
LiquidCrystal_I2C lcd(0x27, 20, 4);     // Hier wird festgelegt um was für einen Display es sich handelt. In diesem Fall einer mit 20 Zeichen in 4 Zeilen.
11
12
  double Setpoint, Input, Output;
13
  double Kp=7, Ki=0.016, Kd=0;          // Einstellungen Parameter für PID Regler
14
  PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);
15
  boolean SetPID = 0;
16
  int L_PID;
17
18
  int Soll_Temp = 80;
19
  int Ist_Temp;
20
  int L_Drehzahl;
21
  int Soll_Tempalt;
22
  int Ist_Tempalt;
23
  int L_Drehzahlalt;
24
  int Zeit = 0;
25
  int Zeitalt;
26
  int Modusv = 1;
27
  int Modusvalt;
28
  int Regler = 1;
29
  int Regleralt;
30
  
31
  boolean TastModus;
32
  boolean TastModusalt;
33
  
34
  boolean TastPlus;
35
  boolean TastPlusalt;
36
  
37
  boolean TastMinus;
38
  boolean TastMinusalt;
39
      
40
  int Diff;
41
 
42
  unsigned long prevMillis1 = 0;      // AUS-Zeit
43
  unsigned long interval1 = 10000;
44
  boolean Takt1;
45
    
46
  unsigned long prevMillis2 = 0;
47
  unsigned long interval2 = 2000;      // EIN-Zeit
48
  boolean Takt2;
49
  
50
  unsigned long prevMillis3 = 0;
51
  unsigned long interval3 = 60000;
52
  
53
  unsigned long prevMillis4 = 0;
54
  unsigned long interval4 = 2000;
55
  
56
  unsigned long prevMillis5 = 0;
57
  unsigned long interval5 = 10000;
58
  
59
  
60
  int thermoDO = 12;                // digitaler pin für MAX6675 reserviert
61
  int thermoCS = 10;                // digitaler pin für MAX6675 reserviert
62
  int thermoCLK = 13;               // digitaler pin für MAX6675 reserviert 
63
  
64
  MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);    // initialisierung MAX6675
65
  
66
void setup()
67
{
68
  //Serial.begin(9600);
69
  myPID.SetMode(AUTOMATIC);
70
  
71
  mySwitch.enableTransmit(3);             // Ausgang zum 433MHZ Sender
72
  pinMode(7, INPUT);                     // Taster PLUS
73
  pinMode(8, INPUT);                     // Taster Modus
74
  pinMode(6, INPUT);                     // Taster Minus
75
  lcd.begin();                            // Im Setup wird der LCD gestartet (anders als beim einfachen LCD Modul ohne 20,4 in den Klammern denn das wurde vorher festgelegt
76
  lcd.setCursor(6,1);                     // Begrüssungstext
77
  lcd.print("Binford's");
78
  lcd.setCursor(3,2);
79
  lcd.print("Grill Guru 2000");
80
  delay(1500);                              // Verzögerung für Begrüssungstext
81
  
82
}
83
84
void loop()
85
{
86
  /*
87
  Serial.println(SetPID);
88
  Serial.print("   ");
89
  Serial.print(Kp);
90
  Serial.print("   ");
91
  Serial.print(Ki);
92
  Serial.print("   ");
93
  Serial.print(Kd);
94
  */
95
  
96
  Modus();
97
  Senden();                                           // Senden per Funk
98
    
99
  
100
  if(millis() - prevMillis4 > interval4){            // nur alle <interval> Sekunden abarbeiten
101
    prevMillis4 = millis();                           
102
    Ist_Temp = (thermocouple.readCelsius());           // Ist-Temperatur auslesen
103
  }
104
  
105
  if(millis() - prevMillis3 > interval3){            // nur alle <interval> Sekunden abarbeiten
106
    prevMillis3 = millis();                           
107
    Zeit++;                                          // Variable für Laufzeit hochzählen
108
  }
109
    
110
  if (Modusv == 3){        // Modus PAUSE
111
    analogWrite(5, 0);
112
    L_Drehzahl = 0;
113
    SetPID = 0;
114
  }
115
  if (Modusv == 2){        // Modus REGELN
116
  Reglerauswahl();
117
    if (Regler == 1){
118
      Regelneinaus();
119
    }
120
    if (Regler == 2){
121
      Regeln3Stufen();
122
    }
123
    if (Regler == 3){
124
      RegelnPID();
125
    }
126
  }
127
  if (Modusv == 1){        // MODUS EINSTELLEN
128
    Vorwahl();
129
  }
130
  
131
  
132
  
133
  
134
  if ((Zeit != Zeitalt) || (Regler != Regleralt) || (Soll_Temp != Soll_Tempalt) || (Ist_Temp != Ist_Tempalt) || (L_Drehzahl != L_Drehzahlalt) || (Modusv != Modusvalt)){
135
     //Nur wenn sich ein Wert ändert wird das Display aktualisiert
136
     
137
    display();           // Display aktualisieren
138
    
139
  }
140
  L_Drehzahlalt = L_Drehzahl;
141
  Soll_Tempalt = Soll_Temp;
142
  Ist_Tempalt = Ist_Temp;
143
  Modusvalt = Modusv;
144
  Regleralt = Regler;
145
  Zeitalt = Zeit;
146
}
147
148
149
150
151
void Regelneinaus(){
152
  Diff = Soll_Temp - Ist_Temp;
153
      
154
  if (Takt1 == LOW){                                  // Takgeber unterschidliche EIN und AUS Zeiten
155
  if(millis() - prevMillis1 > interval1){             // nur alle <interval> Sekunden abarbeiten
156
    prevMillis1 = millis(); 
157
    Takt1 = !Takt1;
158
  }
159
  }
160
  if (Takt1 == HIGH){
161
    if(millis() - prevMillis1 > interval2){
162
      prevMillis1 = millis();
163
      Takt1 = !Takt1;
164
    }
165
  }
166
    
167
  if ((Ist_Temp < Soll_Temp) && (Diff > 25)){
168
    analogWrite(5, 255);
169
    L_Drehzahl = 100;
170
  }
171
  if ((Ist_Temp < Soll_Temp) && (Diff < 25)){
172
    if (Takt1 == HIGH){
173
      analogWrite(5, 255);
174
      L_Drehzahl =100;
175
    }else{      
176
      analogWrite(5, 0);
177
      L_Drehzahl = 0;
178
    }
179
  }
180
  if (Ist_Temp >= Soll_Temp){
181
    analogWrite(5, 0);                            // digitalen Ausgang PWN setzen
182
    L_Drehzahl = 0;
183
  }
184
  
185
}
186
187
void Regeln3Stufen(){
188
  
189
  Diff = Soll_Temp - Ist_Temp;
190
  
191
  if (Ist_Temp < Soll_Temp){
192
    if (Diff < 25){
193
      analogWrite(5, 100);
194
      L_Drehzahl = 40;                            // 40 % PWM
195
    }
196
    if (Diff < 15){
197
      analogWrite(5, 50);                         // 20 % PWM
198
      L_Drehzahl = 20;
199
    }
200
    if (Diff > 25){
201
      analogWrite(5, 255);
202
      L_Drehzahl = 100;                          // 100 % PWM
203
    }
204
  }
205
   
206
  if (Ist_Temp >= Soll_Temp){
207
    analogWrite(5, 0);                            // digitalen Ausgang PWN setzen
208
    L_Drehzahl = 0;
209
  }
210
  
211
}
212
213
void RegelnPID(){
214
  if (SetPID == 0){
215
    Setpoint = Soll_Temp;
216
    SetPID++;
217
  }
218
  
219
  Input = Ist_Temp;
220
  myPID.Compute();
221
  //L_PID = map (Output,0,255,60,255);
222
  analogWrite(5, Output);   
223
  
224
  L_Drehzahl = map(Output, 0,255,0,100);
225
}
226
227
228
229
230
231
232
233
void Modus(){
234
                                                        // Einstellen Modus 1 = Einstellen / 2 = Regeln / 3 = Pause
235
  TastModus = digitalRead(8);                          // Flankenauswertung Taster Menu/Modus
236
  if ((TastModus == HIGH) && (TastModusalt == LOW)){
237
    Modusv++;
238
  }
239
    TastModusalt = TastModus;
240
  if ( Modusv > 3){
241
    Modusv = 1;
242
  }
243
244
}
245
246
247
void Reglerauswahl(){
248
  
249
  
250
  TastPlus = digitalRead(7);                          // Flankenauswertung Taster Plus
251
  
252
    if ((TastPlus == HIGH) && (TastPlusalt == LOW)){
253
      Regler++;
254
    }
255
    TastPlusalt = TastPlus;
256
    if (Regler > 3){
257
      Regler = 1;
258
    }
259
      
260
}
261
262
263
    
264
void Vorwahl(){  
265
    TastPlus = digitalRead(7);                          // Flankenauswertung Taster Plus
266
      if ((TastPlus == HIGH) && (TastPlusalt == LOW)){
267
        Soll_Temp = Soll_Temp + 5;
268
      }
269
      TastPlusalt = TastPlus;
270
  
271
      TastMinus = digitalRead(6);                          // Flankenauswertung Taster Minus
272
      if ((TastMinus == HIGH) && (TastMinusalt == LOW)){
273
        Soll_Temp = Soll_Temp - 5;
274
      }
275
      TastMinusalt = TastMinus;    
276
}
277
278
279
280
281
282
283
void Senden(){
284
     
285
  if(millis() - prevMillis5 > interval5){            // nur alle <interval> Sekunden abarbeiten
286
    prevMillis5 = millis();                           // Variable für Laufzeit hochzählen
287
      
288
    //if (Modusv == 2){
289
      mySwitch.send(Soll_Temp+1000 ,24);       //  Soll Temperatur per Funk senden
290
      //delay(200);
291
      mySwitch.send(Ist_Temp+2000 ,24);        // Ist Temperatur per Funk senden
292
      //delay(200);
293
      mySwitch.send(Zeit+4000, 24);             // Zeit per Funk senden
294
    //}
295
  }
296
  
297
}
298
299
300
301
302
303
304
void display(){                               // Ansteuerung des Display ab hier
305
  
306
lcd.clear();
307
  if (Modusv == 1){
308
    lcd.setCursor(0,2);              // Zeile 3
309
    lcd.print(" -Temp-Einstellen-- ");
310
  }
311
  
312
  
313
  if (Modusv == 2){
314
    if (Regler == 1){
315
      lcd.setCursor(0,2);              // Zeile 3
316
      lcd.print(" -Regeln----EIN/AUS ");
317
    }
318
    if (Regler == 2){
319
      lcd.setCursor(0,2);              // Zeile 3
320
      lcd.print(" -Regeln---3-Stufen ");
321
    }
322
    if (Regler == 3){
323
      lcd.setCursor(0,2);              // Zeile 3
324
      lcd.print(" -Regeln--------PID ");
325
    }     
326
  }
327
  
328
  
329
  if (Modusv == 3){
330
    lcd.setCursor(0,2);              // Zeile 3
331
    lcd.print(" -------Pause------ ");
332
  }
333
  
334
lcd.setCursor(0,0);                            // Zeile 1
335
lcd.print("Soll Temp:");
336
lcd.setCursor(14,0);
337
lcd.print(Soll_Temp);
338
lcd.setCursor(18,0);
339
lcd.print("C");
340
341
lcd.setCursor(0,1);                            // Zeile 2
342
lcd.print("Ist Temp:");
343
lcd.setCursor(14,1);
344
lcd.print(Ist_Temp);
345
lcd.setCursor(18,1);
346
lcd.print("C");
347
348
lcd.setCursor(0,3);                             // Zeile 4   
349
lcd.print("Ventilator:");
350
lcd.setCursor(14,3);
351
lcd.print(L_Drehzahl);
352
lcd.setCursor(18,3);
353
lcd.print("%");
354
}


Vielen Dank für's lesen
Dirk

von Stefan F. (Gast)


Lesenswert?

Auf den ersten Blick sehe ich weder im Programm noch im Blockschaltbild 
einen groben Fehler. Ich nehme an, dass dein MAX6675 kein nackter IC 
ist, sondern ein Modul mit den nötigen Abblock-Kondensatoren. Richtig?

Der Quelltext ist zu groß, um darin ohne großartigen Zeitaufwand Fehler 
zu finden.

von Arrrghhh (Gast)


Lesenswert?

Es ist dumm, kleingeistig, naiv, anzunehmen mit einer RC Switch
Library eine sichere Datenübertragung zu gewährleisten.

Schon allein deswegen weil das Handshake / Feedback fehlt.

Mehr sog I ned.

Merke: wer sich beleidigt fühlt hat sich die Beleidigung
selbst zugeschrieben. Ich habe niemanden beleidigt.

von Dirk (Gast)


Lesenswert?

Stefan U. schrieb:
> Auf den ersten Blick sehe ich weder im Programm noch im Blockschaltbild
> einen groben Fehler. Ich nehme an, dass dein MAX6675 kein nackter IC
> ist, sondern ein Modul mit den nötigen Abblock-Kondensatoren. Richtig?

Es ist exakt dieses Teil: [[ 
https://www.amazon.de/XCSOURCE®-Schnittstelle-Thermoelement-Temperatursensor-TE577/dp/B01LW041RJ/ref=sr_1_1?ie=UTF8&qid=1520869873&sr=8-1&keywords=max6675 
]]

Wenn ich das richtig sehe, ist da EIN Kondensator, an der 
Spannungsversorgung, mit auf der Platine. Müssen da weitere 
Kondensatoren angeschlossen werden? Davon habe ich nirgendwo etwas 
gelesen.



Arrrghhh schrieb:
> Es ist dumm, kleingeistig, naiv, anzunehmen mit einer RC Switch
> Library eine sichere Datenübertragung zu gewährleisten.
>

Die Datenübertragung ist nicht das Problem. Die funktioniert so wie sie 
soll.


Im übrigen habe ich vorhin vergessen, etwas zu dem Foto und dem 
Schaltbild zu schreiben, aber als Gast kann man leider nicht editieren:

Das Fritzing Blockschaltbild sieht leider nicht so schön aus, aber das 
war das erste Schaltbild welches ich mit Fritzing erstellt habe.

Erklärungen zu dem Foto:
Links im Bild (das ist das Rückteil des Gehäuse) eine Lochrasterplatine, 
auf der der Nano aufgelötet ist. Ausserdem der Transistor mit 
Vorwiderstand. Über die blauen Klemmen wird der Lüfter angeschlossen. 
12V Spannungsversorgung kommt über das schwarze Kabel.

Rechts im Bild ist die Rückseite des Displays mit dem I2C-Modul zu 
sehen. Links vom Display sieht man das MAX6675-Modul, und unterhalb des 
Displays, kann man mit ein bischen gutem Willen das 433MHz-Modul 
erkennen. Von dort geht die aufgewickelte Antenne ab (isolierter 
Telefondraht).
Unterhalb des Display, leider nicht zu erkennen, die drei Sensortasten.

Ganz rechts im Foto ist ein kurzes Stück der Thermoelement-Leitung zu 
erkennen. Dieses Kabel mit dem Metall-Geflecht.

Alle Module, MAX6675, Sensortasten, Display und 433MHz sind über 
flexible Drähte an der Lochrasterplatine angebracht.


Gruß
Dirk

von Dirk W. (dirk_w659)


Lesenswert?

Soderle,

ich habe mich jetzt mal angemeldet.

Dirk schrieb:
> Arrrghhh schrieb:
>> Es ist dumm, kleingeistig, naiv, anzunehmen mit einer RC Switch
>> Library eine sichere Datenübertragung zu gewährleisten.
>>
>
> Die Datenübertragung ist nicht das Problem. Die funktioniert so wie sie
> soll.

Dazu wollte ich noch schreiben, das tatsächlich hier das Funk-Signal 
einfach 'ins blaue' geschickt wird. Der Empfänger überwacht aber, ob 
regelmäßig Daten ankommen, und gibt Alarm, wenn das nicht mehr der Fall 
ist.

Gruß
Dirk

von Dirk W. (dirk_w659)


Lesenswert?

Stefan U. schrieb:
> .... ein Modul mit den nötigen Abblock-Kondensatoren.?


Es tut mir leid wenn ich dazu noch mal nachfragen muss, müssen das mehr, 
als der eine, auf der Platine aufgebrachte Kondensator sein? Wenn ja wo 
müssen die hin?
Ich finde dazu leider nichts im Netz.

[[ 
https://www.amazon.de/XCSOURCE®-Schnittstelle-Thermoelement-Temperatursensor-TE577/dp/B01LW041RJ/ref=sr_1_1?ie=UTF8&qid=1521278983&sr=8-1&keywords=max6675&dpID=41P1XmU-qBL&preST=_SY300_QL70_&dpSrc=srch 
]]

von zyx (Gast)


Lesenswert?

Warum hast du die Antenne nicht noch ein paar mal um die Module 
gewickelt, damit sie mehr HF abbekommen?

von Harald W. (wilhelms)


Lesenswert?

Dirk schrieb:

> K-Thermoelement

Hast Du denn mal die Spannung direkt am Max6675 gemessen
und entspricht diese der Temperatur (~41µV/K)?

von Stefan F. (Gast)


Lesenswert?

> Es tut mir leid wenn ich dazu noch mal nachfragen muss, müssen das
> mehr,als der eine, auf der Platine aufgebrachte Kondensator sein?

Um diese Frage korrekt zu beantworten, müsste man die gesamte Schaltung 
zusammenhängend ausmessen. Man sollte normalerweise darauf vertrauen 
können, dass der Hersteller des Moduls alle normalerweise nötigen 
Kondensatoren so auslegt, dass man bei normaler Anwendung kein Problem 
bekommt.

Aber gerade bei Funkmodulen habe ich leider öfters das Gegenteil erlebt. 
Ich habe auch schon einige kommerzielle Geräte gesehen, wo manuell 
nachgebessert wurde. Ein Beispiel ist der Handsender meiner R/C 
Modellautos.

Im Zweifelsfall kannst du mal einen 100µF Elko + 100nF Keramik 
Kondensator direkt an dem Stromversorgungs-Pins des Funkmoduls 
versuchen.

von Dirk W. (dirk_w659)


Lesenswert?

Guten Morgenhatte

Stefan U. schrieb:
> Ein Beispiel ist der Handsender meiner R/C
> Modellautos.
>
> Im Zweifelsfall kannst du mal einen 100µF Elko + 100nF Keramik
> Kondensator direkt an dem Stromversorgungs-Pins des Funkmoduls
> versuchen.

Achso-die sollten an das Funk-Modul. Das hatte ich wohl missverstanden. 
Ich habe nach "Abblockkondensatoren für den MAX6675" gesucht.

Vielen Dank für den Tipp-das werde ich auf jeden Fall mal ausprobieren.


Harald W. schrieb:
> Hast Du denn mal die Spannung direkt am Max6675 gemessen
> und entspricht diese der Temperatur (~41µV/K)?

Dafür besitze ich leider kein Messgerät. Das werde ich mir dann wohl mal 
ausleihen müssen.


zyx schrieb:
> Warum hast du die Antenne nicht noch ein paar mal um die Module
> gewickelt, damit sie mehr HF abbekommen?

Weil die 17,3cm einfach zu kurz dafür waren ;-)


Vielen Dank
Gruß Dirk

von Stefan F. (Gast)


Lesenswert?

> Achso-die sollten an das Funk-Modul. Das hatte ich wohl
> missverstanden. Ich habe nach "Abblockkondensatoren für den
> MAX6675" gesucht.

Das Modul mit dem MAX6675 hat schon einen und ich vertraue darauf, dass 
der auch passend gewählt wurde. Nur den Funkmodulen traue ich nicht, und 
die sind ja auch dafür bekannt, bei falsche Beschaltung alles um sich 
herum zu stören.

von Dirk W. (dirk_w659)


Lesenswert?

Hallo

ich habe gerade die empfohlenen Kondensatoren an dem Funkmodul 
eingelötet. Soweit alles gut.

Leider hatte ich das PC-Netzteil, mit dem ich die Schaltung bisher 
betrieben habe nicht zur Hand. Also habe ich ein 12V 2A Netzteil (von 
der ganz billigen Sorte), welches ich gerade hier hatte zur 
Spannungsversorgung hergenommen.

Vorher gemessen, es liefert ca. 11,7 V DC.

Mit diesem Netzteil ist das Problem mit der Temperaturmessung noch viel 
gravierender.

Die Temperatur wird zuerst ganz normal angezeigt, aber sobald ich das 
Drahtgeflecht des Thermoelement-Anschlußkabel nur berühre, springt die 
Temperatur-Anzeige auf 0 Grad.
Erst wenn ich das Drahtgeflecht wieder loslasse, wird wieder eine 
korrekte Temperatur angezeigt.

Kann es also sein, das die Ursache der falschen Temperaturmessungen vom 
Netzteil ausgeht? Oder muss das Drahtgeflecht des Thermoelement 
irgendwie geerdet oder auf GND gelegt werden?



Ich habe ganz bewusst ein altes PC_Netzteil genommen, da ich dachte, das 
diese Netzteile ganz besonders entstört sind, da ja ein PC auch 
empfindliche Elektronik hat.

Ich wollte, solange das Projekt Grill-Temperatursteuerung noch in der 
Testphase ist (wer weiß schon, ob das überhaupt funktioniert), erstmal 
kein Netzteil kaufen.

P.S. Auch über den USB-Anschluß des Arduino Nano läuft die Messung 
problemlos, aber da habe ich dann halt nicht die 12V die der Lüfter 
benötigt.

Hat noch jemand eine Idee, was hier das Problem verursacht? Oder 
zumindest was ich noch probieren kann?

Vielen Dank


Ach ja, aufgrund des Preises, den ich für den Nano aufbringen musste, 
denke ich nicht, das es ein originaler ist, sondern eher ein 
China-Nachbau.

Edit: Mit den 12V von unserer Prüftafel scheint es auch zu 
funktionieren.

: Bearbeitet durch User
von Harlekin (Gast)


Lesenswert?

Dirk W. schrieb:
> Die Temperatur wird zuerst ganz normal angezeigt, aber sobald ich das
> Drahtgeflecht des Thermoelement-Anschlußkabel nur berühre, springt die
> Temperatur-Anzeige auf 0 Grad.
> Erst wenn ich das Drahtgeflecht wieder loslasse, wird wieder eine
> korrekte Temperatur angezeigt.

Dieses Drahtgeflecht dient der Abschirmung. Ist diese nicht 
angeschlossen, wirkt sie als Antenne.

Da das Gehäuse nicht aus Metall ist, würde ich es mit einer 
grossflächigen Verbindung nach GND versuchen.

von Dirk W. (dirk_w659)


Lesenswert?

Moin Moin

Harlekin schrieb:
> Dieses Drahtgeflecht dient der Abschirmung. Ist diese nicht
> angeschlossen, wirkt sie als Antenne.
>
> Da das Gehäuse nicht aus Metall ist, würde ich es mit einer
> grossflächigen Verbindung nach GND versuchen.

Danke für den Tipp. Das habe ich sofort mal ausprobiert.

Mit dem billigen 12V Netzteil ist das Ergebnis leider noch schlechter. 
Dann wird gar keine vernünftige Temperatur mehr angezeigt. Allerdings 
auch keine Änderung mehr wenn ich das Anschlusskabel berühre. :-(

Wenn ich die 12V der Prüftafel nehme, und dann das Drahtgeflecht an GND 
lege springt die Temperaturanzeige auch direkt auf 0 Grad. :-(

ABER :-) Das hat mich auf eine Idee gebracht.

Eventuell muss ein Kontakt zwischen Erde/GND und der Abschirmung 
vermieden werden.
Bei meinem Test am Grill fingen die Störungen an, nachdem wir den Grill 
kurz geöffnet hatten, um die Position des Thermoelements im Grill zu 
überprüfen.
Da direkt neben dem Grill ein Spülbecken ist, könnte es sein das das 
Kabel danach auf dem Spülbecken zu liegen kam. Welches vermutlich über 
Rohrleitungen Erdpotential hat.
EDIT: bzw. Das PC-Netzteil lag auch auf der Abtropffläche des 
Spülbeckens.

Bei meinen Tests am Backofen lag die Fühlerleitung auf der Arbeitsplatte 
und wurde an der Backofentür von der Dichtung geklemmt. Da traten ja 
keine Fehler auf.

Und das billige Netzteil welches ich vorhin getestet habe ist einfach 
Müll und stört insgesamt zu sehr.

Danke fürs lesen
Dirk

: Bearbeitet durch User
von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Zwei Anmerkungen meinerseits:

a) das Datenblatt empfiehlt einen Kondensator 10n zwischen den 
TC-Anschlüssen. Auf deinem Modul kann ich den nicht erkennen.

b) der MAX6675 (bzw. sicher der Nachfolger MAX31855) liefert im Ergebnis 
auch eine Aufschlüsselung eventueller Fehler (TC kurzgeschlossen, oder 
einer der Anschlüsse mit GND bzw VCC verbunden). keine Ahnung ob deine 
Lib das auswertet, das könnte aber die 0°C erklären (auch eine Art der 
Fehlerbehandlung ;-)

von Harlekin (Gast)


Lesenswert?

Harlekin schrieb:
> Dirk W. schrieb:
>> Die Temperatur wird zuerst ganz normal angezeigt, aber sobald ich das
>> Drahtgeflecht des Thermoelement-Anschlußkabel nur berühre, springt die
>> Temperatur-Anzeige auf 0 Grad.
>> Erst wenn ich das Drahtgeflecht wieder loslasse, wird wieder eine
>> korrekte Temperatur angezeigt.
>
> Dieses Drahtgeflecht dient der Abschirmung. Ist diese nicht
> angeschlossen, wirkt sie als Antenne.

Den Print mit dem MAX6675 in ein Metallgehäuse stecken und dieses 
grossflächig mit dem Drahtgeflecht verbinden (Faradayscher Käfig). Für 
Versuche eignet sich Alufolie. Halt keine Kurzschlüsse produzieren.

von Harlekin (Gast)


Lesenswert?

Mit Ohmmeter prüfen, ob ein Kurzschluss zwischen Drahtgeflecht und einem 
der beiden Leiter besteht.

von Dirk W. (dirk_w659)


Lesenswert?

Michael R. schrieb:
> Zwei Anmerkungen meinerseits:
>
> a) das Datenblatt empfiehlt einen Kondensator 10n zwischen den
> TC-Anschlüssen. Auf deinem Modul kann ich den nicht erkennen.

Bei meinem Modul waren leider keinerlei Datenblätter o.ä. dabei. Und 
Hinweise zu einem Kondensator zwischen den TC-Anschlüssen habe ich im 
Datenblatt des MAX6675 nicht gesehen.
Woher hast Du diese Information?

Michael R. schrieb:
> b) der MAX6675 (bzw. sicher der Nachfolger MAX31855) liefert im Ergebnis
> auch eine Aufschlüsselung eventueller Fehler (TC kurzgeschlossen, oder
> einer der Anschlüsse mit GND bzw VCC verbunden). keine Ahnung ob deine
> Lib das auswertet, das könnte aber die 0°C erklären (auch eine Art der
> Fehlerbehandlung ;-)


Ich habe gerade nochmal nachgeschaut, es ist tatsächlich der MAX6675 auf 
dem Modul und nicht der Nachfolger.
Ob diese Lib Fehler auswertet weiß ich nicht. Das muss ich mal versuchen 
herauszufinden.

Harlekin schrieb:
> Mit Ohmmeter prüfen, ob ein Kurzschluss zwischen Drahtgeflecht und einem
> der beiden Leiter besteht.

Das kann ich sicherlich machen, aber müsste bei einem Kurzschluss, einer 
der beiden Leiter nicht ständig eine falsche Messung erfolgen?

Danke und Gruß
Dirk

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Dirk W. schrieb:
> Michael R. schrieb:
>> Zwei Anmerkungen meinerseits:
>>
>> a) das Datenblatt empfiehlt einen Kondensator 10n zwischen den
>> TC-Anschlüssen. Auf deinem Modul kann ich den nicht erkennen.
>
> Bei meinem Modul waren leider keinerlei Datenblätter o.ä. dabei. Und
> Hinweise zu einem Kondensator zwischen den TC-Anschlüssen habe ich im
> Datenblatt des MAX6675 nicht gesehen.
> Woher hast Du diese Information?

Sorry, ich bezog mich auf den Nachfolger MAX31855

> Michael R. schrieb:
>> b) der MAX6675 (bzw. sicher der Nachfolger MAX31855) liefert im Ergebnis
>> auch eine Aufschlüsselung eventueller Fehler (TC kurzgeschlossen, oder
>> einer der Anschlüsse mit GND bzw VCC verbunden). keine Ahnung ob deine
>> Lib das auswertet, das könnte aber die 0°C erklären (auch eine Art der
>> Fehlerbehandlung ;-)
>
>
> Ich habe gerade nochmal nachgeschaut, es ist tatsächlich der MAX6675 auf
> dem Modul und nicht der Nachfolger.
> Ob diese Lib Fehler auswertet weiß ich nicht. Das muss ich mal versuchen
> herauszufinden.

hab grad nachgesehen - der kann das nicht.

von Pete K. (pete77)


Lesenswert?

Dirk W. schrieb:
> P.S. Auch über den USB-Anschluß des Arduino Nano läuft die Messung
> problemlos, aber da habe ich dann halt nicht die 12V die der Lüfter
> benötigt.

Also können wir die Programmierung wohl ausschließen und auch die 
Sensoren arbeiten korrekt.

Die Stromversorgung kann einen Ripple haben, den man mit Kondensatoren 
reduzieren kann. Ohne Oszilloskop wirst Du das aber nicht messen können.

Gehe noch einmal alle Leiterbahnen durch. Evtl. alle Lötstellen VCC und 
GND einmal nachlöten.

P.S.: Muss der Lüfter denn mit 12V laufen?

von Harlekin (Gast)


Angehängte Dateien:

Lesenswert?

Dirk W. schrieb:
> Harlekin schrieb:
>> Mit Ohmmeter prüfen, ob ein Kurzschluss zwischen Drahtgeflecht und
>> einem der beiden Leiter besteht.
>
> Das kann ich sicherlich machen, aber müsste bei einem Kurzschluss,
> einer der beiden Leiter nicht ständig eine falsche Messung erfolgen?

Nicht, wenn das Drahtgeflecht sonst nirgends angeschlossen ist. Aber 
definitiv, wenn mit GND verbunden.

Abschirmen gegen Einstrahlungen sowie eine saubere Speisespannung sind 
entscheidend. Siehe die beiden Zitate aus dem Datenblatt.
https://datasheets.maximintegrated.com/en/ds/MAX6675.pdf auf Seite 5

/*Noise Considerations*
The accuracy of the MAX6675 is susceptible to powersupply
coupled noise. The effects of power-supply
noise can be minimized by placing a 0.1μF ceramic
bypass capacitor close to the supply pin of the device./

Mit R1 in der Versorgungsleitung kann die Wirkung des C verbessert 
werden. Zudem könnte man mit einem weiteren Widerstand das HF-Modul 
etwas entkoppeln.

/*Reducing Effects of Pick-Up Noise*
The input amplifier (A1) is a low-noise amplifier
designed to enable high-precision input sensing. Keep
the thermocouple and connecting wires away from electrical
noise sources./

Den Faradayschen Käfig würde ich auf jeden Fall anwenden. Für einen 
Versuch könnte man die MAX6675-Leiterplatte in Frischhaltefolie wickeln, 
darauf mit Alufolie umhüllen (grossflächiger Kontakt mit Drahtgeflecht) 
und nochmals mit Frischhaltefolie isolieren.

Der MAX6675 kann bei entsprechender Beschaltung einen Unterbruch des TC 
erkennen:
/*Open Thermocouple*
Bit D2 is normally low and goes high if the thermocouple
input is open. In order to allow the operation of the
open thermocouple detector, T- must be grounded.
Make the ground connection as close to the GND pin
as possible./

von Dirk W. (dirk_w659)


Angehängte Dateien:

Lesenswert?

Moin Moin

Ich habe gerade den Widerstand zwischen der Abschirmung und den 
Anschlüssen des Thermoelement gemessen.
Seltsamerweise haben beide Anschlüsse eine niederohmige Verbindung zur 
Abschirmung. Die positive Seite hat 35 Ω und die negative Seite 22 Ω.

Ich habe hier die Kondensatoren auf dem Foto, welche alle 0,1µ haben, 
aber ich denke allesamt keine Keramik-Kondensatoren sind. Würde es einer 
davon tun?

Welche Werte sollten C2, C3 und R2 haben?

Danke schonmal im Vorraus

EDIT: das mit der Alufolie muss ich morgen mal probieren.

Gruß
Dirk

EDIT2: Quatsch - ich habe ja noch die 100nF Keramik zu Hause. Sind ja 
0,1µF . Kurze Denkblockade.
Dann wird das auch erst morgen etwas-bzw heute Abend.

: Bearbeitet durch User
von Harlekin (Gast)


Lesenswert?

Dirk W. schrieb:
> Seltsamerweise haben beide Anschlüsse eine niederohmige Verbindung zur
> Abschirmung. Die positive Seite hat 35 Ω und die negative Seite 22 Ω.

Mit oder ohne MAX6675 gemessen?

Dirk W. schrieb:
> Ich habe hier die Kondensatoren auf dem Foto, welche alle 0,1µ haben,
> aber ich denke allesamt keine Keramik-Kondensatoren sind. Würde es einer
> davon tun?

Diese sind nicht geeignet. Zu grosse Anschlussimpedanz.

Welche Werte sollten C2, C3 und R2 haben?
C2 und C3 werden grundsätzlich schon auf den entsprechenden 
Leiterplatten vorhanden sein. R2 darf keinen zu hohen Spannungsabfall 
erzeugen und ist somit abhängig vom Dauerstrom des HF-Moduls.

von Harlekin (Gast)


Lesenswert?

Harlekin schrieb:
> Dirk W. schrieb:
>> Seltsamerweise haben beide Anschlüsse eine niederohmige Verbindung zur
>> Abschirmung. Die positive Seite hat 35 Ω und die negative Seite 22 Ω.
>
> Mit oder ohne MAX6675 gemessen?

Bitte ohne MAX6675 messen.

von Harlekin (Gast)


Lesenswert?

Harlekin schrieb:
> Welche Werte sollten C2, C3 und R2 haben?
> C2 und C3 werden grundsätzlich schon auf den entsprechenden
> Leiterplatten vorhanden sein. R2 darf keinen zu hohen Spannungsabfall
> erzeugen und ist somit abhängig vom Dauerstrom des HF-Moduls.
Da es über USB-Speisung funktioniert, vermute ich das Problem nicht beim 
HF-Modul. Somit würde ich vorerst nur R1 einbauen.

von Dirk W. (dirk_w659)


Lesenswert?

Harlekin schrieb:
> Bitte ohne MAX6675 messen.

Das war natürlich ohne den MAX6675 gemessen.

Harlekin schrieb:
> Somit würde ich vorerst nur R1 einbauen.

Juut - 47 Ω müsste ich hier haben.

von Harlekin (Gast)


Lesenswert?

Dirk W. schrieb:
> Seltsamerweise haben beide Anschlüsse eine niederohmige Verbindung zur
> Abschirmung. Die positive Seite hat 35 Ω und die negative Seite 22 Ω.
Das erklärt das Verhalten beim Verbinden mit GND.

Eventuell kann man zusammen mit dem ohmschen Widerstand zwischen pos und 
neg die Verbindungstelle lokalisieren. Es scheint irgendwo im negativen 
Pfad zu sein.

Stellt sich die Frage: weshalb die niederohmige Verbindung? Vom 
Hersteller so konstruiert oder ein ungewollter Kurzschluss? Ist die 
Isolation geschmolzen?

von Pete K. (pete77)


Lesenswert?

Harlekin schrieb:
> Dirk W. schrieb:
>> Seltsamerweise haben beide Anschlüsse eine niederohmige Verbindung zur
>> Abschirmung. Die positive Seite hat 35 Ω und die negative Seite 22 Ω.
> Das erklärt das Verhalten beim Verbinden mit GND.
>
> Eventuell kann man zusammen mit dem ohmschen Widerstand zwischen pos und
> neg die Verbindungstelle lokalisieren. Es scheint irgendwo im negativen
> Pfad zu sein.
>
> Stellt sich die Frage: weshalb die niederohmige Verbindung? Vom
> Hersteller so konstruiert oder ein ungewollter Kurzschluss? Ist die
> Isolation geschmolzen?

Aber mit USB funktioniert doch alles.

von Dirk W. (dirk_w659)


Lesenswert?

Hallo zusammen

ich hatte am Wochenende die Möglichkeit nochmal am Grill zu testen.

Außer den 2 Kondensatoren am Funkmodul, habe ich bis jetzt keine 
weiteren Änderungen vorgenommen.

Festgestellt habe ich folgendes:

Das Netzteil, immer noch das alte AT-PC-Netzteil, habe ich isoliert 
aufgestellt (auf einer Kunststoffplatte), damit es keinen Kontakt zum 
Blech des Spülbeckens hat.
Das Kabel des Thermoelement habe ich so aufgewickelt, dass es auf keinen 
Fall in Kontakt mit dem Blech des Spülbecken kommen kann.

Und siehe da, keine fehlerhaften Messungen mehr. :-)

Sobald ich das Kabel des Thermoelement auf das Blech des Spülbecken 
drücke, wird 0 Grad C angezeigt. Lege ich es nur locker auf dem Blech 
ab, werden unterschiedliche Fehlmessungen angezeigt.

Vielen Dank für Eure Bemühungen.
Vorerst reicht mir dieser Zustand, um jetzt weitere Versuche mit dem 
Regler unternehmen zu können. Wobei ich selbstverständlich weitere 
Hinweise und Tipps gerne annehme.


Gruß und Vielen Dank
Dirk

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.