Welcome! Log In Create A New Profile

Advanced

Termistore, migliorarne la leggibilità (forse) confused smiley [Topic in TecniCOLOR]

Termistore, migliorarne la leggibilità (forse) confused smiley [Topic in TecniCOLOR]
April 05, 2014 06:09PM
Ho trovato (non troppo tempo fa) questo articolo [hydraraptor.blogspot.it], magari per voi è roba vecchia (e scartata), descrive come cambiare il "comportamento elettrico" (scusate il linguaggio da profano) del termistore per rendere più lineare il suo segnale e quindi rendere più facilmente leggibili (da parte di arduino) le temperature.
Di seguito vi trascrivo la versione originale, e quella tradotta dell'articolo. In attesa di un'illuminata opinione
In corsivo il testo originale in inglese e in blu la mia traduzione (con aiuto di Google Translator e qualche aggiustatina) Cercherò di segnare in rosso i componenti da me non riconosciuti (da ignorante in elettronica) e in giallo le frasi di traduzione dubbia a causa dalla difficoltà di comprensione dell'argomento; purtroppo con questo non intendo dire di averci capito qualcosa di più del solo "livello superficiale"; buona lettura.
Measuring temperature the easy way: The objective is to measure temperature from room temperature to about 250°C using a thermistor. The thermistor resistance is a extremely non linear. It is approximated by a negative exponential of the reciprocal of absolute temperature.
Misurare la temperatura nel modo più semplice: L'obiettivo è quello di misurare la temperatura dalla temperatura ambiente a circa 250°C usando un termistore. La resistenza del termistore è estremamente non lineare. E’ è approssimata da un esponenziale negativo del reciproco della temperatura assoluta.

RØ is resistance at known temperature TØ, in this case 25°C, expressed in Kelvin. Beta is a second parameter of the thermistor which can be calculated if you know the resistance at two different temperatures or can be found on the data sheet. The RepRap thermistor is an Epcos B57540G0103+, data sheet
RØ è la resistenza a temperatura TØ, in questo caso 25 ° C, espressa in Kelvin. Beta è un secondo parametro del termistore che può essere calcolato se si conosce la resistenza a due temperature differenti o possono essere trovati sulla scheda tecnica. Il termistore RepRap è un Epcos B57540G0103+, scheda tecnica
La pagina originale dava questo collegamento [www.epcos.com] che purtroppo non è più attivo sad smiley
R25 is 10'000Ω and Beta is around 3500 (Ω mancava unità di misura nell’originale, sul grafico è indicato come R). Several values are given on the datasheet for different temperature ranges, illustrating that the above equation is only an approximation. Here is a graph of its resistance against temperature
R25 è 10'000Ω e Beta è di circa 3500 (Ω mancava unità di misura nell’originale, sul grafico è indicato come R). Diversi valori sono riportati sulla scheda tecnica per diversi intervalli di temperatura, dimostrazione del fatto che l'equazione di cui sopra è solo un'approssimazione. Qui è un grafico della sua resistenza rispetto al (variare della) temperatura

This can be made more linear by putting a fixed resistors in parallel. The magic value to use appears to be the value of the thermistor at the middle of the temperature range. In this case it is about 470Ω. Here is the resulting combined resistance, the formula for two resistors in parallel is 1/R = 1/R1 + 1/R2 I.e. the total conductance is the sum of the two conductances.
Questo può essere reso più lineare mettendo determinati resistori / resistori con caratteristiche note in parallelo. Il valore magico da utilizzare sembra essere il valore del termistore al centro della gamma di temperature. In questo caso si tratta di 470Ω. Ecco la risultante resistenza combinata, la formula per due resistori in parallelo è: 1/R = 1/R1 + 1/R2 Cioè la conduttanza totale è la somma dei due conduttanze.

The resulting resistance is a lot more linear, however to measure temperature with an ADC we need a voltage rather than a resistance. This is easy, instead of wiring the resistor in parallel, connect it in series to a voltage source equal to the full scale voltage of the ADC.
La resistenza risultante è molto più lineare, tuttavia per misurare la temperatura con un ADC (Analog Digital Converter, convertitore da analogico a digitale grazie lion_heart78) occorre una tensione piuttosto che una resistenza. Questo è facile, anziché cablare il resistore in parallelo, collegarlo in serie ad un generatore di tensione pari alla tensione di fondo scala / massima dell'ADC (Analog Digital Converter, convertitore da analogico a digitale grazie lion_heart78) ) .

The voltage across the thermistor is then V = Vref * Rth / (R + Rth) Here is a graph of the the output voltage when Vref is 5V.
La tensione ai capi del termistore è quindi V = Vref * Rth / (R + Rth) Di seguito un grafico della tensione di uscita quando Vref è 5V.

Note that the voltage decreases as the temperature rises. This could be inverted by swapping the resistor and thermistor but I prefer to keep one end of the thermistor at 0V so I can use single screened cable.
It is also a good idea to put a capacitor across the ADC input to filter out any noise when using long leads like RepRap does. I used a 10uF tantalum bead. Another consideration is how much power is dissipated in the thermistor as it will cause heating and alter the reading. The maximum dissipation will occur when its value equals the value of the resistor. At this point half the voltage is across the thermistor so the power dissipated in it is P = (Vref / 2)2 / R

Notare che la tensione diminuisce all'aumentare della temperatura. Questo potrebbe essere invertito scambiando la resistenza e termistore ma io preferisco tenere un capo del termistore a 0V così posso usare un cavo schermato singolo. E 'anche una buona idea mettere un condensatore attraverso l'ingresso ADC per filtrare il rumore quando si usano cavi lunghi come RepRap fa. Ho usato un cordone di tantalio 10uF (non conoscendo il componente non so come esso si chiami in italiano). Un'altra considerazione è quanta energia viene dissipata nel termistore in quanto causerà riscaldamento e alterare la lettura. La dissipazione massima si verifica quando il suo valore è uguale al valore della resistenza. A questo punto metà della tensione è attraverso il termistore quindi la potenza dissipata in esso è P = (Vref / 2)2 / R
In the example above this works out at 13.3mW. The thermistor datasheet specifies a maximum of 18mW and a dissipation factor (in air) of 0,4 mW /K. I think this means that the temperature will rise by 33°C by self heating. The error would be less when not in air, but it is still perhaps a bit high. My system uses a Vref of 1.5 volts which, because it is a square law, only dissipates 1,2mW giving a 3°C rise at the mid range temperature in air. For a 5V system is is probably worth sacrificing some of the ADC resolution to reduce the self heating error. This can be done by using two resistors
Nell'esempio sopra questo funziona a 13.3mW. Il foglio di dati del termistore specifica un massimo di 18mW e un fattore di dissipazione (in aria) di 0,4 mW /K. Credo che questo significhi che la temperatura aumenterà di 33°C per autoriscaldamento. L'errore sarebbe meno quando non in aria, ma è ancora forse un po 'alto. Il mio sistema utilizza una Vref da 1.5 volts, perché è una legge quadrata, dissipa solo 1,2mW dando un aumento di 3°C alla temperatura di fascia media in aria. Per un sistema 5V è vale la pena sacrificare parte della risoluzione dell’ADC per ridurre l’errore causato dal riscaldamento autonomo. Questo può essere fatto utilizzando due resistenze

The full scale voltage is now Vfsd = Vref * R1 / (R1 + R2)
We also want the source impedance of this voltage, which is R1 in parallel with R2, to be 470Ω. 1/R = 1/R1 + 1/R2 Solving these simultaneous equations gives
R1 = R / (1 - Vfsd / Vref)
R2 = R * R1 / (R1 - R)
So for Vfsd = 1.5V, Vref = 5V and R = 470: R1 = 671Ω and R2 = 1569Ω, preferred values are 680 and 1K6. And finally here is the Python code to work out the temperature

La tensione di fondo scala / tensione massima è ora Vfsd = Vref * R1 / (R1 + R2) Vogliamo anche l'impedenza della fonte di questa tensione, che è R1 in parallelo con R2, a essere 470Ω 1/R = 1/R1 + 1/R2 Risolvendo queste equazioni simultanee si avrà
R1 = R / (1 - Vfsd / Vref)
R2 = R * R1 / (R1 - R)
Quindi per Vfsd = 1.5V, Vref = 5V e R = 470: R1 = 671Ω e R2 = 1569Ω, valori preferiti sono 680 e 1K6. Ed infine ecco il codice Python per elaborare il Temperatura


from math import *

class Thermistor:
"Class to do the thermistor maths"
def __init__(self, r0, t0, beta, r1, r2):
self.r0 = r0 # stated resistance, e.g. 10K
self.t0 = t0 + 273.15 # temperature at stated resistance, e.g. 25C
self.beta = beta # stated beta, e.g. 3500
self.vadc = 5.0 # ADC reference
self.vcc = 5.0 # supply voltage to potential divider
self.vs = r1 * self.vcc / (r1 + r2) # effective bias voltage
self.rs = r1 * r2 / (r1 + r2) # effective bias impedance
self.k = r0 * exp(-beta / self.t0) # constant part of calculation

def temp(self,adc):
"Convert ADC reading into a temperature in Celcius"
v = adc * self.vadc / 1024 # convert the 10 bit ADC value to a voltage
r = self.rs * v / (self.vs - v) # resistance of thermistor
return (self.beta / log(r / self.k)) - 273.15 # temperature

def setting(self, t):
"Convert a temperature into a ADC value"
r = self.r0 * exp(self.beta * (1 / (t + 273.15) - 1 / self.t0)) # resistance of the thermistor
v = self.vs * r / (self.rs + r) # the voltage at the potential divider
return round(v / self.vadc * 1024) # the ADC reading

Per trascriverlo a colori e con i riferimenti delle immagini, ci ho impiegato un casino di tempo.
Spero che qualcuno con maggiore padronanza dell'elettronica, possa dirmi se questa cosa funziona, e pubblicare sul forum i suoi esperimenti (possibilmente in forma più comprensibile per un ignorante in elettronica)

Saluti

P.S. per Gordie sono riuscito ad aggiustare le immagini; non digeriva l'indirizzo web, ne ho trovato un'altro.

Edited 12 time(s). Last edit at 04/07/2014 04:27AM by Davide (Aqua Dulza).
Questo post è "quasi inutile" non ero riuscito a postare correttamente le immagini impaginate nel testo e ho postato qui la copia PDF della pagina internet (originale e tradotta) con le immagini dei grafici già visibili e impaginate.
Però sono riuscito ad aggiustare il tutto in un secondo momento, quindi adesso potete leggere il post o scaricarvi il PDF.
E' vero che l'articolo originale è un po' datato (2010), ma aprendo la pagina originale trovereste alcuni aggiornamenti, il più recente è del marzo 2013 [hydraraptor.blogspot.it]
Attachments:
open | download - Termistore tradotto (Aqua Dulza).pdf (110.4 KB)
Re: Termistore, migliorarne la leggibilità (forse) confused smiley [11370 caratteri In TecniCOLOR]
April 06, 2014 05:04AM
Ciao Davide, ottimo lavoro, vorrei capire se la tua vuol essere una guida o uno scambio di pareri sulla teoria che hai tradotto.

Un consiglio, leggiti la Guida all'impaginazione. Per le immagini devi ridimensionarle (nella guida c'è scritto come fare) così si vedranno.
Se serve una mano fai un fischio. Per la correzione alla traduzione aspetto che impagini meglio e poi te la sistemo volentieri. smiling smiley


---- "Let me make my move" ----
Ciao Gordie, e grazie per l'apprezzamento; la mia non vuole essere una guida, ma una richiesta di opinione su un argomento per me un po' misterioso.
Ecco quanto so (magari sbagliando): il termistore legge la temperatura, ma non lo fa in modo diretto (cioè non trasmette un segnale tipo "qui siamo a 80° C" alla scheda madre della stampante (arduino o rumba o altra) lo fa variando la sua resistenza (o resistività ?) al variare della temperatura.
Vedendo questo grafico

capisco che tra 0° e 50° ho una grande variazione della resistenza da 10'000 Ω a circa 4'750 Ω, da 50° a 100° ho una discreta variazione della resistenza, da circa 4'750 Ω a circa 750 Ω; poi cominciano i guai perché da 100° a 200° me la gioco con valori di resistenza tra 750 Ω e 250 Ω quindi con scarti molto più piccoli rispetto al range di temperature 0° -> 100°.
Non so quanto sia precisa la rilevazione della resistenza nelle schede di controllo delle stampanti (che tra l'altro se non sbaglio leggono la trasmittanza) ma per temperature alte il grafico diventa quasi un asintoto dell'asse delle temperature.
Visto che di elettronica non capisco un tubo, non saprei realizzare nulla di tutto ciò che è presente nell'articolo, e più in generale, non saprei giudicare se si tratta di "cose vere" o aria fritta.....
Quindi, al di là degli eventuali errori di traduzione (in giallo) e delle lacune tecniche personali (in rosso) vorrei domandare: i problemi e le soluzioni esposte nel testo, sono cosa buona e giusta ?
E nel caso in cui qualcuno le realizzasse (magari tu con la tua repstrippa), che le condivida in una forma un po' più semplice da capire.....

Per la re-impaginazione corretta, ce l'ho fatta (non avevo notato il tasto EDIT presente solo nei miei post....)

Un saluto e spero di avere una tua opinione anche su questo altro mio post [forums.reprap.org] che riguarda uno degli argomenti di cui ti ho parlato al Novegro

ciao

Edited 3 time(s). Last edit at 04/06/2014 12:16PM by Davide (Aqua Dulza).
Guarda, per capire l'effettiva risoluzione considera che Arduino ha un ADC con 1024 livelli di quantizzazione tra 0 e 5 V.
ADC sta per Analog Digital Converter, convertitore da analogico a digitale.
Quote
lion_heart78
Guarda, per capire l'effettiva risoluzione considera che Arduino ha un ADC con 1024 livelli di quantizzazione tra 0 e 5 V.
ADC sta per Analog Digital Converter, convertitore da analogico a digitale.

Grazie, ho aggiornato il primo post con la definizione di ADC
Re: Termistore, migliorarne la leggibilità (forse) confused smiley [Topic in TecniCOLOR]
April 08, 2014 05:02AM
È interessante come digressione per aumentare l'accuratezza di lettura della temperatura.
Tieni però presenti alcuni aspetti.

Con i componenti che utilizzi (ad esempio la seconda resistenza) dovrai considerare anche la tolleranza % rispetto al valore nominale e il suo eventuale comportamento al variare delle temperature (a seconda di dove la posizioni). Quindi aggiungi un'ulteriore incertezza di misura da mettere in conto nell'accuratezza finale.

Poi puoi vedere se l'accuratezza nel range di temperature di tuo interesse non sia già sufficiente.
Lasciando stare il tuo codice per considerare l'ulteriore resistenza in gioco, al momento i firmware di solito leggono una tabella con meno di 1024 coppie Resistenza-Temperatura e interpolano linearmente i 1024 valori possibili nell'intervallo tra le due resistenze più vicine trovate.
Visto che l'ADC quantizza a 1024 step, puoi cercare nelle tabelle dei termistori del tuo firmware quale delta di step (o meglio di 4.88 mV) corrisponde agli estremi del tuo intervallo critico, e in media a quanti gradi (o frazioni di grado) corrisponde un singolo step dell'intervallo.
Se siamo già ad una accuratezza minore o uguale al grado... Non ci vedrei molto senso scendere oltre. Che beneficio riesci ad ottenere con i materiali da estrusione attuali e le loro "scarse o imprecise" specifiche note? Hai la certezza che tutta la bobina (o la parte di essa che stampi) avrà un comportamento tanto differente con una variazione di temperatura di meno di un grado? Per l'abs danno un range di utilizzo da 230° a 260°C... È bello ampio, no?

Infine tieni conto di quello per cui usi la tua lettura: per controllare un PID.
È il PID che regola la temperatura e quindi ne causa e compensa le oscillazioni.
Insieme al tuo sistema per leggere la temperatura precisa dovrai assicurarti che il PID sia tarato correttamente e riesca a mantenerla entro le frazioni di grado che ti interessano. E sia in grado di reagire velocemente (che di solito va in disaccordo con il requisito precedente).
Es. Potresti avere una grandissima accuratezza a ventola verso il piatto spenta, in condizioni quasi statiche con solo il normale raffreddamento dell'hotend e riuscire a rimanere nel tuo range di variazione di poche frazioni di grado ammesso dai tuoi requisiti. Ma appena si accende la suddetta ventola verso il piatto, il PID potrebbe non essere in grado di compensare istantaneamente un grosso scompenso. E quindi con tutta la buona volontà avresti comunque dei momenti con la temperatura fuori range ammesso.

Resta inteso che tutto è fattibile.
Sta poi a te vedere se il gioco vale la candela e la spesa.
Sorry, only registered users may post in this forum.

Click here to login