Ciao a tutti,
ho l'esigenza di progettare un termostato con le seguenti caratteristiche:
1) temperatura compresa tra -30 e +30 °C con risoluzione +/- 0.5 °C
2) la temperatura deve essere letta da un trasduttore di temperatura MCP9700 e convertita da un AD a 10 bit
3) la temperatura deve essere stampata su un display 16x2 serie ITACHI.
4) Ci deve essere un'uscita per eccitare il relè, qualora la temperatura ambiente sia inferiore a quella programmata.
Ho tirato giù uno schemino tipo quello che vede qui:
Dalla formula ricavada dal datasheet del sensore di temperatura, ho calcolato queste tensioni:
Vout [-30°C] = 0.2 V
Vout[0°C] = 0.5V
Vout[30°C] = 0.8V
L'ADC del PIC pensavo di configurarlo a 10 bit (per avere più precisone) ed alimentare il PIC 18F1330 a 5 volt.
Così ottengo i seguenti calcoli:
Quanto = Vfs/1024 --> 5/1024 = 0.005V
Quanto% = (Quanto/5)*100 = +-1%
Ho provato a calcolarmi il codice binario del convertitore a 0°C e risulta:
1024 : 5 = 0.5 : x; (1024*0.5)/5=100;
Le mie domande:
1) come converto il valore letto dall'ADC in un valore xx,x °C da stampare sull'LCD?
2) avete qualche suggerimento nei passi precedenti?
P.S. il programma non è ancora stato realizzato, ma sicuramente userò mikroc.
Saluti
Luca
Termostato con PIC
Moderatore:
Paolino
10 messaggi
• Pagina 1 di 1
1
voti
ciao
lcua31989
Essendo:
Vout [-30°C] = 0.2 V
Vout[0°C] = 0.5 V
Vout[30°C] = 0.8V
e leggendo con un A/D a 10 bit con tensione di riferimento 5 volt si ricava che la temperatura in gradi centigradi è:
Temperatura= (valoreLettoADC-102,4) / 2,048
Il risultato è in unita di gradi centigradi. Valuta opportunamente il tipo di variabile da utilizzare e le cifre significative in base alla precisione che vuoi ottenere.
Leggi attentamente il capitolo del datasheet relativo al modulodi conversione A/D con lo scopo di settare opportunamente i parametri di integrazione ed ottenere una misura il più stabile possibile.
Buon lavoro!
Essendo:
Vout [-30°C] = 0.2 V
Vout[0°C] = 0.5 V
Vout[30°C] = 0.8V
e leggendo con un A/D a 10 bit con tensione di riferimento 5 volt si ricava che la temperatura in gradi centigradi è:
Temperatura= (valoreLettoADC-102,4) / 2,048
Il risultato è in unita di gradi centigradi. Valuta opportunamente il tipo di variabile da utilizzare e le cifre significative in base alla precisione che vuoi ottenere.
Leggi attentamente il capitolo del datasheet relativo al modulodi conversione A/D con lo scopo di settare opportunamente i parametri di integrazione ed ottenere una misura il più stabile possibile.
Buon lavoro!

-

grandegiove
1.151 1 4 8 - Expert

- Messaggi: 517
- Iscritto il: 18 ott 2010, 9:59
1
voti
Io progetterei una tensione di riferimento dell'ADC esterna, dalle parti di 1V, stabile, così da avere tutti i dieci bit nel range 0 V / 10 V.
La visualizzazione sul display è sempre e solo una stringa, qiundi, se usi un compilatore C il problema non si pone molto: scali il risultato dello ADC in un intero a piacere e poi lo stampi formattato come credi.
Quindi, innanzi tutto, in che linguaggio programmerai il PIC?
La visualizzazione sul display è sempre e solo una stringa, qiundi, se usi un compilatore C il problema non si pone molto: scali il risultato dello ADC in un intero a piacere e poi lo stampi formattato come credi.
Quindi, innanzi tutto, in che linguaggio programmerai il PIC?
-

Candy
32,5k 7 10 13 - CRU - Account cancellato su Richiesta utente
- Messaggi: 10123
- Iscritto il: 14 giu 2010, 22:54
1
voti
Ciao,
Non ho capito molto bene, cosa intendi con il portare la tensione di rifeeimenro dell'ADC a 1 volt in modo tale da ottenere una tensione tra 0 A 10 volt. Il piccolo va com una Ecc di 5 volt.
Potrei però trasformato quei 0.2 in 1 volt con un A.O. non inerente. Avevo intenzione di usare il C.
Puoi spiegare un Po meglio per cortesia?
Grazie mille ciao...
Non ho capito molto bene, cosa intendi con il portare la tensione di rifeeimenro dell'ADC a 1 volt in modo tale da ottenere una tensione tra 0 A 10 volt. Il piccolo va com una Ecc di 5 volt.
Potrei però trasformato quei 0.2 in 1 volt con un A.O. non inerente. Avevo intenzione di usare il C.
Puoi spiegare un Po meglio per cortesia?
Grazie mille ciao...
1
voti
grandegiove ha scritto:ciaolcua31989
Essendo:
Vout [-30°C] = 0.2 V
Vout[0°C] = 0.5 V
Vout[30°C] = 0.8V
e leggendo con un A/D a 10 bit con tensione di riferimento 5 volt si ricava che la temperatura in gradi centigradi è:
Temperatura= (valoreLettoADC-102,4) / 2,048
Il risultato è in unita di gradi centigradi. Valuta opportunamente il tipo di variabile da utilizzare e le cifre significative in base alla precisione che vuoi ottenere.
Leggi attentamente il capitolo del datasheet relativo al modulodi conversione A/D con lo scopo di settare opportunamente i parametri di integrazione ed ottenere una misura il più stabile possibile.
Buon lavoro!
Ciao,
Questa tua opzione mi sembra la più sensata ma, non ho capito da dove hai tirato fuori quel 2.048 ?
Grazie lcua31989
2
voti
Scusate, ma ![\[2^{10}=1024\] \[2^{10}=1024\]](/forum/latexrender/pictures/31aedaacc556c234c812ebad6cd9d037.png)
Ciao.
Paolo.
![\[2^{10}=1024\] \[2^{10}=1024\]](/forum/latexrender/pictures/31aedaacc556c234c812ebad6cd9d037.png)
Ciao.
Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong
-------------------------------------------------------------
PIC Experience - http://www.picexperience.it
-------------------------------------------------------------
PIC Experience - http://www.picexperience.it
-

Paolino
32,6k 8 12 13 - G.Master EY

- Messaggi: 4226
- Iscritto il: 20 gen 2006, 11:42
- Località: Vigevano (PV)
1
voti
Allora
lcua31989 ricapitoliamo:
La formula che proponevo si riferiva all'ipotesi di mantenere 5 volt come tensione di riferimento dell'ADC:
Temperatura= (valoreLettoADC-102,4) / 2,048
dove 102,4 è l'offset rispetto a 0 gradi del valore letto dall'ADC (notare che Vout[0°C] = 0.5 V) mentre 2,048 è il coefficiente proporzionale della curva lineare caratteristica del sensore sempre rispetto al valore letto dal modulo ADC.
Per ricavare questi valori è sufficiente ricavare la curva caratteristica dai valor forniti :
Tensione fornita dal trasduttore [volt]= Temperatura[gradi centigradi]*0.01 + 0.5
Operando le opportune proporzioni per adattare la formula al valore digitale convertito(considerando 10 bit e quindi 1024 quanti) si ottiene la formula sopra:
(0.5:5=x:1024 -> x=102.4 )
(0.01:5=x:1024 -> x=2.048 )
Detto questo la proposta di
Candy è quella di utilizzare una tensione di riferimento diversa dai 5 volt visto che i valori di tensione in uscita dal trasduttore saranno compresi fra 0 e 1 volt (temperatura compresa tra -30 e +30 °C ).
Fornendo infatti al PIC una tensione di riferimento di 1 volt sull' opportuno pin (vedi datasheet) si può infatti ottenere una risoluzione teorica 5 volte maggiore rispetto all' utilizzo dei 5 V.
A dire il vero la considerazione di
Candy diventa fondamentale nel momento in cui andiamo a rivedere la risoluzione che si vuole ottenere: +/- 0.5 °C. Nel caso in cui si utilizzino i 5 volt come tensione di riferimento saremmo nelle condizioni limite per garantire la risoluzione come da specifiche. Utilizzare una tensione di riferimento riscalata sembra quindi la strada più opportuna.
La formula dovrà quindi essere adattata alla nuova tensione di riferimento.
lcua31989, prova a ricalcolarla, poi la rivediamo insieme.
Buona giornata!
La formula che proponevo si riferiva all'ipotesi di mantenere 5 volt come tensione di riferimento dell'ADC:
Temperatura= (valoreLettoADC-102,4) / 2,048
dove 102,4 è l'offset rispetto a 0 gradi del valore letto dall'ADC (notare che Vout[0°C] = 0.5 V) mentre 2,048 è il coefficiente proporzionale della curva lineare caratteristica del sensore sempre rispetto al valore letto dal modulo ADC.
Per ricavare questi valori è sufficiente ricavare la curva caratteristica dai valor forniti :
Tensione fornita dal trasduttore [volt]= Temperatura[gradi centigradi]*0.01 + 0.5
Operando le opportune proporzioni per adattare la formula al valore digitale convertito(considerando 10 bit e quindi 1024 quanti) si ottiene la formula sopra:
(0.5:5=x:1024 -> x=102.4 )
(0.01:5=x:1024 -> x=2.048 )
Detto questo la proposta di
Fornendo infatti al PIC una tensione di riferimento di 1 volt sull' opportuno pin (vedi datasheet) si può infatti ottenere una risoluzione teorica 5 volte maggiore rispetto all' utilizzo dei 5 V.
A dire il vero la considerazione di
La formula dovrà quindi essere adattata alla nuova tensione di riferimento.
Buona giornata!

-

grandegiove
1.151 1 4 8 - Expert

- Messaggi: 517
- Iscritto il: 18 ott 2010, 9:59
1
voti
Ecco i calcoli:
Vfs = 1 volt; bit ADC = 10;
Quanto = Vfs/1024; 1/1024 = 0.00098 V/bit;
Quanto% = (Quanto/Vfs)*100 = 0.098%
Codice ADC a 0 gradi = 1024 : 1 = 0.5 : x -> (1024*0.5)/1 -> 512
Curva 1024 : 1 = 0.001 : x; -> (1024*0.01)/1 -> 10.24
Formula = [(ValoreADC)-512]/10.24
E' corretto?
Vfs = 1 volt; bit ADC = 10;
Quanto = Vfs/1024; 1/1024 = 0.00098 V/bit;
Quanto% = (Quanto/Vfs)*100 = 0.098%
Codice ADC a 0 gradi = 1024 : 1 = 0.5 : x -> (1024*0.5)/1 -> 512
Curva 1024 : 1 = 0.001 : x; -> (1024*0.01)/1 -> 10.24
Formula = [(ValoreADC)-512]/10.24
E' corretto?
Ultima modifica di
Candy il 4 feb 2013, 21:56, modificato 1 volta in totale.
Motivazione: Inutile citazione integrale al post precedente.
Motivazione: Inutile citazione integrale al post precedente.
1
voti
lcua31989 ha scritto:Codice ADC a 0 gradi = 1024 : 1 = 0.5 : x -> (1024*0.5)/1 -> 512
Curva 1024 : 1 = 0.001 : x; -> (1024*0.01)/1 -> 10.24
Formula = [(ValoreADC)-512]/10.24
E' corretto?
Il risultato è corretto. Ottimo!
Ti è però scappato uno zero nella seconda proporzione. Probabilmente un errore di battitura.
Poi attenzione. Probabilmente il ragionamento è corretto ma entrambe le proporzioni son scritte in modo errato. Devi invertire divisore e dividendo da un lato dell'uguaglianza, se no la proporzione non ha senso, ovvero:
Codice ADC a 0 gradi = 1 : 1024 = 0.5 : x
Curva= 1 : 1024= 0.01 : x;
In questo modo poi il calcolo della x è corretto in quanto se a:b=c:x x=(b*c)/a
Spero sia tutto abbastanza chiaro, un saluto!
-

grandegiove
1.151 1 4 8 - Expert

- Messaggi: 517
- Iscritto il: 18 ott 2010, 9:59
10 messaggi
• Pagina 1 di 1
Torna a Firmware e programmazione
Chi c’è in linea
Visitano il forum: Nessuno e 2 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)

