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
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.
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
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.
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.
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
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
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 ]]
Warum hast du die Antenne nicht noch ein paar mal um die Module gewickelt, damit sie mehr HF abbekommen?
Dirk schrieb: > K-Thermoelement Hast Du denn mal die Spannung direkt am Max6675 gemessen und entspricht diese der Temperatur (~41µV/K)?
> 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.
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
> 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.
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
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.
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
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 ;-)
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.
Mit Ohmmeter prüfen, ob ein Kurzschluss zwischen Drahtgeflecht und einem der beiden Leiter besteht.
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
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.
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?
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./
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
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.
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.
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.
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.
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?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.