Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Termostato con PIC

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

1
voti

[1] Termostato con PIC

Messaggioda Foto Utentelcua31989 » 31 gen 2013, 17:48

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
Avatar utente
Foto Utentelcua31989
58 1 1 7
Frequentatore
Frequentatore
 
Messaggi: 194
Iscritto il: 28 nov 2012, 23:37

1
voti

[2] Re: Termostato con PIC

Messaggioda Foto Utentegrandegiove » 1 feb 2013, 18:26

ciao Foto Utentelcua31989

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! :ok:
Avatar utente
Foto Utentegrandegiove
1.151 1 4 8
Expert
Expert
 
Messaggi: 517
Iscritto il: 18 ott 2010, 9:59

1
voti

[3] Re: Termostato con PIC

Messaggioda Foto UtenteCandy » 1 feb 2013, 18:31

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?
Avatar utente
Foto UtenteCandy
32,5k 7 10 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 10123
Iscritto il: 14 giu 2010, 22:54

1
voti

[4] Re: Termostato con PIC

Messaggioda Foto Utentelcua31989 » 1 feb 2013, 19:33

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...
Avatar utente
Foto Utentelcua31989
58 1 1 7
Frequentatore
Frequentatore
 
Messaggi: 194
Iscritto il: 28 nov 2012, 23:37

1
voti

[5] Re: Termostato con PIC

Messaggioda Foto Utentelcua31989 » 2 feb 2013, 0:38

grandegiove ha scritto:ciao Foto Utentelcua31989

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! :ok:


Ciao,
Questa tua opzione mi sembra la più sensata ma, non ho capito da dove hai tirato fuori quel 2.048 ?

Grazie lcua31989
Avatar utente
Foto Utentelcua31989
58 1 1 7
Frequentatore
Frequentatore
 
Messaggi: 194
Iscritto il: 28 nov 2012, 23:37

1
voti

[6] Re: Termostato con PIC

Messaggioda Foto UtenteCandy » 2 feb 2013, 2:15

Errore mio di sbaglio: 10 bit da 0 V ad 1 V. 2048 punti.
Avatar utente
Foto UtenteCandy
32,5k 7 10 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 10123
Iscritto il: 14 giu 2010, 22:54

2
voti

[7] Re: Termostato con PIC

Messaggioda Foto UtentePaolino » 3 feb 2013, 9:24

Scusate, ma \[2^{10}=1024\]

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

1
voti

[8] Re: Termostato con PIC

Messaggioda Foto Utentegrandegiove » 4 feb 2013, 9:25

Allora Foto Utentelcua31989 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 Foto UtenteCandy è 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 Foto UtenteCandy 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. Foto Utentelcua31989, prova a ricalcolarla, poi la rivediamo insieme.

Buona giornata! :ok:
Avatar utente
Foto Utentegrandegiove
1.151 1 4 8
Expert
Expert
 
Messaggi: 517
Iscritto il: 18 ott 2010, 9:59

1
voti

[9] Re: Termostato con PIC

Messaggioda Foto Utentelcua31989 » 4 feb 2013, 21:55

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?
Ultima modifica di Foto UtenteCandy il 4 feb 2013, 21:56, modificato 1 volta in totale.
Motivazione: Inutile citazione integrale al post precedente.
Avatar utente
Foto Utentelcua31989
58 1 1 7
Frequentatore
Frequentatore
 
Messaggi: 194
Iscritto il: 28 nov 2012, 23:37

1
voti

[10] Re: Termostato con PIC

Messaggioda Foto Utentegrandegiove » 5 feb 2013, 10:28

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!
Avatar utente
Foto Utentegrandegiove
1.151 1 4 8
Expert
Expert
 
Messaggi: 517
Iscritto il: 18 ott 2010, 9:59


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti