MAX6675 + termocoppia K + resistenze a cartuccia

Ciao a tutti, seguo e leggo da molto il forum ma purtroppo questa volta non ho trovato la risposta nei post passati quindi mi permetto di disturbarvi :wink:

Sto cercando di realizzare un controllo di temperatura e come da titolo, utilizzo un modulo MAX6675 e una termocoppia di tipo K (di quelle con guaina metallica e sonda filettata) per leggere la temperatura e 3 MOSFET IRF540N per comandare altrettante resistenze riscaldanti da 30W a 12V, per intenderci quelle utilizzate negli hotend delle reprap.
Il tutto si applica ad un blocco d’alluminio che è appunto la massa riscaldante.

Il problema è che quando alimento le resistenze il valore della temperatura letta dalla termocoppia passa da valori credibili a un pessimo zero costante.
Possibile che le cartucce non siano isolate e quindi trasmettano corrente alla termoccopia?
Oppure si genera un campo elettromagnetico sufficiente a invalidare la lettura della termocoppia?

Scusate se è una domanda farlocca, ma non riesco a capacitarmi dell’errore anche perché il concetto è lo stesso medesimo degli hothend che utilizzano le termocoppia al posto dei resistori…la differenza è che invece di una di resistenze ne uso tre.

Già vi ringrazio :grinning:

Vi allego il codice che uso per la lettura:

#include <Max6675.h>

Max6675 ts(8, 9, 10);
// Max6675 module: SO on pin #8, SS on pin #9, CSK on pin #10 

float celsius;

void setup() {
  ts.setOffset(0);
  Serial.begin(9600);
}

void loop() {

  celsius = ts.getCelsius();
  float average = 0;
  for(int i = 0; i < 1000; i++) {
    average = average + celsius / 1000;
    delay(1);
  }
//  averageRead();
  Serial.print("Misura istantanea: ");
  Serial.print(ts.getCelsius(), 2);
  Serial.print(" Misura media: ");
  Serial.println(average);

}

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni e a leggere il regolamento se non lo hai già fatto: Regolamento Qui una serie di link utili, non inerenti al tuo problema: - qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections - qui le pinout delle varie schede by xxxPighi: Pinout - qui una serie di link [u]generali[/u] utili: Link Utili

Mi sembra giusto, provvedo :)

Il MAX6675 mette uno dei poli ( il T-) della termocoppia a massa. Se hai un altro collegamento di massa attraverso le resistenze riscaldanti hai problemi di misura.

Come hai collegate le resistenze di riscaldamento?

Ciao Uwe

Ok, inizio a capirci qualcosa di pi√Ļ!
Le resistenze sono collegate al modulo MOSFET IRF540N a quattro vie, che alimento con un alimentatore 12V. Per quanto riguarda il pilotaggio dei MOS invece ho collegato i tre signal ai pin 5,6 e 7 di Arduino e un unico GND per tutti e tre visto che pare bastare.
Comunque allego una foto cos√¨ risulta tutto pi√Ļ chiaro.
Ho fatto un’ulteriore prova ed il problema si presenta anche se scollego le due parti, ossia alimento per i fatti loro le resistenze e con un Arduino scollegato dal resto vado a misurare la tempratura attraverso MAX e termocoppia.

Quelle cartucce riscaldanti "dovrebbero" essere isolate, ma il condizionale e' d'obbligo, dato che sono tutte prodotte in Cina ed in economia ... inoltre, dati i valori di tensione microscopici restituiti da una termocoppia, non e' necessario che una delle cartucce sia in corto con l'involucro, basterebbe un minimo di perdita per sballare la misura ...

Hai provato ad utilizzare la termocoppia isolandola con un pezzetto di nastro in Kapton ? (quel nastro giallo scuro che resiste alle alte temperature, per fare una prova basta anche un pezzo di recupero, o se la temperatura del blocco non e' altissima, solo per il test, anche del nastro trasparente normale fra la termocoppia ed il blocco, giusto per vedere che succede ... ;))

Controlla con un tester l'isolamento del contenitore metallico della termocoppia rispetto ai sui due pin.

Ciao, c’entra poco ma questo non mi convince:

  celsius = ts.getCelsius();
  float average = 0;
  for(int i = 0; i < 1000; i++) {
    average = average + celsius / 1000;
    delay(1);
  }

Ho avuto anch’io problemini con il max e la sonda K, a volte letture a 0. Ho aggiunto qualche condensatore di filtro sull’alimentazione e modificato la lettura interrogando direttamente da SPI (avendo anche un’altra periferica SPI ho preferito così) :

  float Tfumi(){
    uint16_t v;
    SPI.begin();
      digitalWrite(CS_MAX, LOW);
      delay(1);
      v = SPI.transfer(1);
      v <<= 8;
      v |=  SPI.transfer(1);
      digitalWrite(CS_MAX, HIGH);
    SPI.end();
    if (v & 0x4) return -1; // sonda K scollegata
    v >>= 3;
    return v*0.25;
 }

per leggere la temperatura chiamo direttamente la funzione es.:

Serial.print((Tfumi());
celsius = ts.getCelsius();
  float average = 0;
  for(int i = 0; i < 1000; i++) {
    average = average + celsius / 1000;
    delay(1);
  }

Il primo pezzetino di sketch non mi convince neanche a me. Viene fatta una media usando 1000 volte lo stesso valore di misura. Non é una media ma un ciclo di ritardo dove non so il significato del delay()

Ciao Uwe

Grazie ragazzi!

Mi sembra di capire che il dubbio sull'isolamento delle cartucce fosse legittimo, a breve faccio tutti i test del caso per benino con il tester. Al Kapton ci avevo pensato, devo procuramelo, in alternativa stavo pensando al silicone per alte temperature, dovrebbe essere quello rosso per intenderci.

cam9500: Ho avuto anch'io problemini con il max e la sonda K, a volte letture a 0. Ho aggiunto qualche condensatore di filtro sull'alimentazione e modificato la lettura interrogando direttamente da SPI

Stavo pensando anche io a qualche soluzione direttamente sul circuito, filtrando l'alimentazione hai avuto giovamento nella linearità della lettura?

Circa il codice, giusto si sappia che non sono un drago ma si sarà capito. ;) Per fare la media ho usato il procedimento che veniva spiegato questo tutorial, era per un componente diverso ma ho pensato che il procedimento per la media potesse essere analogo, intuisco di aver fatto una boiata.

All'inizio ho riscontrato come causa un alimentatore switching cinese che chissà cosa sparava in giro., sostituito andava già meglio ma poi ho risolto come ti ho scritto. Di fatto la qualità della lettura non cambiava ma a volte leggeva 0.00 e mi scambiava dalla stufa a pellet a quella a gas. Ah, con un elegante "if" escludo la misura 0.00 dai conti ;)

Grazie per le dritte, oltretutto anche io uso un alimentatore che come origine e scopo è come il tuo, provvedo a sostituirlo.

cam9500: Ah, con un elegante "if" escludo la misura 0.00 dai conti ;)

Ahahah, le soluzioni da "macellaio" le ho sempre apprezzate molto...alla fine conta il risultato no? :grinning:

Rieccomi! :D Dopo i vari esperimenti posso dire di avere risolto...poco. Ora mi chiedevo, visto che uno dei problemi √® dovuto al fatto che il MAX6675 scarica a terra il polo negativo della termocoppia, secondo voi si risolverebbe con il pi√Ļ moderno MAX31855 che da schema non pare connettere a GND la termocoppia e potrebbe quindi dare meno problemi di disturbo? Grazie mille!

Hai ragione, il MAX31855 non ha la termocoppia collegata a massa perché misura anche temperature negative. Ma lui controlla se ci sono corti a terra e della termocoppia e da errore. Leggiti il datasheet. Comunque un corto a terra della termocoppia puó sempre creare interferenze e disturbi.

Ciao Uwe

rakkio: visto che uno dei problemi è dovuto al fatto che il MAX6675 scarica a terra il polo negativo della termocoppia

Ciao, se hai verificato una resistenza della termocoppia tra uno dei due terminali e la carcassa metallica allora √® guasta: la cambi e sei gi√† pi√Ļ a posto. Stefano

cam9500: Ciao, se hai verificato una resistenza della termocoppia tra uno dei due terminali e la carcassa metallica allora √® guasta: la cambi e sei gi√† pi√Ļ a posto. Stefano

no, non é detto. Ci sono modelli dove un polo é riferito a massa. La giunzione é saldata sul involucro.

Comunque se misuri una termocoppia ha sempre una resistenza bassisima.

Ciao Uwe

uwefed: Ci sono modelli dove un polo é riferito a massa. La giunzione é saldata sul involucro.

Oh, non ne ho trovato traccia di quel tipo. Data la destinazione d'uso usuale (ambienti industriali) direi che ti riferisci a prodotti di "nicchia".

In ogni caso una sonda K con segnale esposto sullo chassis non è da usarsi, tantomeno se intende utilizzare il MAX31855. Stefano

Grazie ragazzi, scusate le tarde risposte ma ero via. Comunque grazie Uwe per le delucidazioni sul MAX31855 in effetti ho rivisto il datasheet e c’era scritto grande come una casa :roll_eyes: mancanza mia scusate.

Ho provato ad isolare con il Kapton sia le cartucce riscaldanti che la termocoppia ed ho risolto praticamente nulla.

La questione √® che utilizzamdo uno di quei ‚Äúbei‚ÄĚ termostati PID cinesi (REX-C100), che utilizzano la stessa sonda di tipo K e nello specifico la stessa medesima sonda fisicamente, non ci sono problemi di lettura.Quindi immagino ci sia il modo di far funzionare una sonda di tipo K nel mio progetto il problema √® capire il come.
So che essendo un prodotto industrializzato non è semplice reperire info ma qualcuno ha idea di come esegua la lettura il PID REX così da provare a riprodurre la soluzione?

Non potrebbe essere un problema di interferenze? Le resistenze sono pilotate in pwm?

Credo anche io si tratti di un problema di interferenze, le resistenze sono pilotate in PWM? Ni, diciamo che √® un PWM con un ciclo molto lungo, sei secondi, √® pi√Ļ un on-off quindi.

Il problema principale è che anche comandando le resistenze per i fatti loro con un termostato ed utilizzando un Arduino con il MAX6675 solo per leggere la temperatura e fare una comparazione i valori comunque vanno a zero, ho provato anche a cambiare le resistenze a cartuccia e utilizzarne una fascia made in Italy, certificata e che costa una schioppettata ma nulla, appena avvicino la sonda mi capta tutti i disturbi del mondo è va a zero, anche solo avvicinando la sonda al riscaldatore.

Per cui penso che forse il MAX6675 non faccia al caso mio, nel datasheet è raccomandato di tenere sonda e cavi della termocoppia lontano da fonti di disturbo elettrico, ma non mi è proprio possibile rispondere a questa esigenza perché blocco d'alluminio, riscaldatori e sonda devono necessariamente andare assieme...tutto ciò mi avvicina molto al livello disperazione :confused: