Progettazione ed esecuzione di un prototipo
circuitale per la rilevazione della
temperatura ambiente.
Lavoro eseguito dagli alunni della specializzazione
Elettronica e Telecomunicazioni
RILEVATORE DI TEMPERATURA CON TRASDUTTORE LM35
Contenuti
 Introduzione e descrizione circuito
 Trasduttore LM35
 Circuito di condizionamento
 Convertitore ADC 0800
 Generatore di clock NE555
 Buffer 74HC541
 Microcontrollore PIC 16F84
INTRODUZIONE E DESCRIZIONE CIRCUITO
Schema elettrico
R8
1.2K
R1
10k
-12V
+5V
U5
LM741/NS
+
R4
1.8k
R2
100k 40%
3 +
2
+12V
U1
LM741/NS
7
D1
1N4732
+5V
Vi
6
4
+15V
R5
22K
R3
2.2k 40%
+5V
-5V
U6
LM741/NS
+
R9
10k
+5V
-5V
U3
ADC0800
1 D4
Vdd 18
2 D5
D3 17
3 D6
D2 16
4 D7 Vref+ 15
5 Vref- D1 14
6 SC
D0 13
7 OE
Vin 12
8 Vgg
Clk 11
9 EOC
Vss 10
-5V
R10
10k
+5V
5V
+5V
74HC541
270 ohm
U2
555
1 Gnd
2 Trg
3 Out
4 Rst
R6
270 ohm
Vcc 8
Dis 7
Thr 6
Ctl 5
R7
270 ohm
C2
100nF
D3
1N4148
C1
5.6nF
5V
+V
PIC 16f84
+5V
R11
10k
1
2
3
4
5
6
7
8
9
18
17
16
15
14
13
12
11
10
22pF
XTAL1
22pF
Componenti utilizzati:
•Trasduttore di temperatura LM35,
•Amplificatori operazionali μA741,
•Convertitore ADC0800,
•Generatore di clock NE555,
•Buffer 74HC541,
•Microcontrollore PIC16F84,
•Diodo Zener 1N4732,
•Diodo 1N4148,
•Trimmer: 2.2K e 100K,
•Condensatori: 100nF , 5,6nF, 2 da 22pF;
•Resistenze: 1,8K, 18K, 10 da 270ohm, 4 da 10K;
•Led ad anodo comune,
•Quarzo da 4MHz.
Trasduttore di temperatura LM35
L’LM35 è un trasduttore di temperatura che presenta tre terminali:
+Vs (tensione positiva), Vout (tensione che fornisce in uscita) e GND (massa).
Il componente consente di rilevare una temperatura in un campo di escursione che va da 0°C a
100°C e fornisce in uscita una tensione che va da 0V a 1V.
La caratteristica di questo trasduttore è quella di fornire in uscita una tensione che è data dal
prodotto tra la temperatura rilevata e una costante K pari a 10*10 -3:
Vout=K*T=10*10-3*T
Ad esempio, se abbiamo una temperatura di 20°C, il trasduttore fornirà in un uscita una
tensione di 200mV:
T=20°C Vout=10*10-3*20=200mV
Circuito di condizionamento
Il convertitore ADC 0800 può convertire segnali con una escursione che va da -5V a +5V per
questo motivo è necessario realizzare un circuito di condizionamento che ci consente di avere
in ingresso al convertitore una tensione compresa nel range.
A tale scopo, usando un amplificatore operazionale μA741, abbiamo progettato il seguente
circuito di condizionamento:
R8
1.2K
R1
10k
+5V
D1
1N4732
+
U5
LM741/NS
R4
1.8k
+5V
3 +
2
U1
LM741/NS
4
R2
100k 40%
R3
2.2k 40%
-5V
.
Vi
7
+15V
R5
22K
-5V
6
Vo
T1=0°C VO(T1)=-5V Vi(T1)=10*10-3*0=0V
T2=100°C VO(T2)=+5V Vi(T2)=10*10-3*100=1V
Vo=-R2/R1*Vref+(1+R2/R1)*Vi
-5=-R2/R1*Vref+(1+R2/R1)*0
-5=-R2/R1*Vref
+5=-R2/R1*Vref+(1+R2/R1)*1
+5=-R2/R1*Vref+(1+R2/R1)
10=1+R2/R1; R2/R1=9; R2=9R1
Abbiamo scelto: R1=2K
-5=-R2/R1*Vref;
R2=9*R1=9*2*103=18K
-5=-9*Vref; Vref=5/9=0.555V
.
Per ottenere questa tensione di riferimento abbiamo utilizzato un Diodo Zener
1N4732, una resistenza da 10K e un trimmer da 4,7K che, tarato opportunamente ci
ha permesso di ottenere una Vref=0,555V
Non essendo disponibile in commercio una resistenza da 2K, abbiamo utilizzato una
resistenza da 1,8K con in serie un trimmer da 1K; montando il circuito ci siamo resi
conto dell’impossibilità di avere in uscita dall’operazionale la tensione da noi
desiderata per questo motivo abbiamo inserito prima del circuito di condizionamento
un buffer in modo da non caricarlo troppo; infatti il buffer presenta guadagno unitario,
elevatissima resistenza di ingresso e bassissima resistenza di uscita, esso quindi
funge da adattatore di impedenza.
Convertitore ADC 0800
Abbiamo utilizzato l’ ADC 0800 per trasformare il segnale analogico in uscita al circuito di
condizionamento in un codice binario che abbiamo utilizzato per visualizzare il valore binario
della temperatura rilevata dall’LM35 sui led.
L’ ADC 0800 è un convertitore A/D monolitico ad 8 bit che utilizza la tecnologia MOS.
Esso utilizza la tecnica della conversione ad approssimazioni successive, accetta in ingresso una
tensione che va da -5 a +5V e presenta 18 piedini:
Pin 1: 2-4
Pin 2: 2-3
Pin 3: 2-2
Pin 4: 2-1 (MSB) 74HC541 per visualizzare sui led
Pin 5: R-NET-WORK BOTTON (-Vrif=-5V ‘inverter’),
Pin 6: START (RA0 uscita Pic)
Pin 7: OUTPUT ENABLE (+5V per abilitare le uscite)
Pin 8: VGG (-12V).
Pin 9: EOC (RA1 ingresso Pic)
Pin 10: VSS (+5V).
Pin 11: Clock (NE555 270KH)
Pin 12: VIN
Pin 13: 2-8 (LSB)
Pin 14: 2-7
Pin 15: R-NET-WORK (Vrif=+5V),
Pin 16: 2-6
Pin 17: 2-5
Pin 18: VDD (GND).
Per alimentare il convertitore abbiamo collegato il pin 10 (Vss) a +5V, il pin 18 (Vdd) a massa, il pin
8 (Vgg) a -12V.
Per abilitare le uscite abbiamo collegato il pin 7 (Output Enable) a +5V.
Per fornire lo Start alla conversione abbiamo collegato il pin 6 (Start Convertion) all’uscita Ra0 del
Pic e il pin 9 (End Of Convertion) all’ingresso Ra1 del Pic.
Al piedino 12 abbiamo inserito il segnale analogico in uscita dal circuito di condizionamento, mentre
i piedini 4,3,2,1,17,16,14,13 sono stati collegati all’integrato 74HC541 per visualizzarne sui led i
valori binari.
Abbiamo impostato la velocità di conversione dell’ADC 0800 a 270 KHz collegando al pin 11 il
generatore di clock NE555.
Per fornire al convertitore la tensione di riferimento è stata applicata al pin 15 (Vref+) la tensione di
+5V e al pin 5 (Vref-) la tensione di -5V; per ottenere questa tensione negativa abbiamo utilizzato
un inverter, cioè un amplificatore operazionale in configurazione invertente, mandando al morsetto
invertente +5V e utilizzando due resistenze da 10K, ottenendo il circuito sotto riportato:
10k
+12V
+5V
10k
+
U1
LM741/NS
-12V
-5V
Generatore di clock NE555
Il timer 555 può essere utilizzato sia come multivibratore astabile (generatore di onda quadra), sia
come monostabile (temporizzazione).
Noi lo abbiamo utilizzato come generatore di onda quadra per pilotare la velocità di conversione del
convertitore A/D.
Trigger V2
Soglia V6
Uscita V3
TR
Trigger attivo
<1/3Vcc
<2/3Vcc
H
OFF
Soglia attiva
>1/3Vcc
>2/3Vcc
L
ON
Nello schema dell’ NE555 illustrato in figura si nota che oltre ai terminali di alimentazione (Vcc, pin 8) e di
massa (GND, pin 1), il circuito presenta due ingressi, il trigger (TRIG, pin 2) e la soglia o threshold
(THRES, pin 6), ed il terminale di uscita (OUT, pin 3). Un altro terminale, quello di scarica o discharge
(DISH, pin 7), è collegato internamente a massa tramite un transistore TR che funge da interruttore. Lo
stato chiuso (ON) o aperto (OFF) del transistore è regolato da livelli di tensione presenti sugli ingressi di
trigger e di soglia.
Sono presenti inoltre due terminali, il reset (pin 4) ed il controllo (CONT, pin 5).
Quando la tensione sul trigger scende al di sotto di 1/3Vcc e contemporaneamente la tensione di soglia è
inferiore a 2/3Vcc, l’uscita dell’integrato va al livello alto (H) ed il transistore interruttore (TR) passa in OFF.
Viceversa quando la tensione di soglia supera 2/3Vcc e contemporaneamente la tensione di trigger è
maggiore di 1/3Vcc l’uscita passa al livello basso (L) ed il transistore si porta in ON.
Il reset, quando viene attivato (livello basso), porta l’uscita al livello basso e chiude l’interruttore TR. Il
terminale di controllo a sua volta viene usato in applicazioni particolari per variare le soglie di attivazione
degli ingressi. Quando non è utilizzato questo terminale deve essere terminato a massa tramite un
condensatore da 10nF.
All’accensione la tensione Vc sul condensatore è nulla e pertanto è verificata la condizione rappresentata
nella prima linea della tabella: l’uscita è alta e il transistor TR è OFF. Successivamente il condensatore
inizia a caricarsi con legge esponenziale attraverso Ra ed Rb, finchè Vc non arriva a 2/3Vcc. A questo
punto interviene l’ingresso di soglia del 555 che porta l’uscita al livello basso e chiude (ON) l’interruttore
TR.
Incomincia quindi la scarica a massa del condensatore attraverso Rb e TR, che dura finché la tensione
Vc, giungendo ad 1/3Vcc, non determina la commutazione al livello alto dell’uscita e l’apertura (OFF) di
TR. Il condensatore C riprende allora a caricarsi dando avvio al nuovo ciclo.
Le forme d’onda sul condensatore (Vc) e sull’uscita (Vo) sono riportate in figura.
Applicando l’equazione che rappresenta analiticamente l’andamento di una curva esponenziale, si
ricavano per i due semiperiodi le seguenti espressioni:
T1=0,7RBC T2=0,7(RA+RB)C
Pertanto il periodo T del segnale vale:
T=1/f=T1+T2=0,7(RA+2RB)C
Buffer 74HC541
Il 74HC541 è un circuito integrato che utilizza la tecnologia microCMOS; esso è costituito
esternamente da 20 piedini e internamente da 8 buffer.
Abbiamo utilizzato questo integrato, buffer per i led in modo tale da non sovraccaricare il circuito.
Per alimentarlo si è collegato il piedino 20 a +5V e il 10 a massa.
I pin 1 e 19 sono stati collegati a massa per attivare le uscite.
Infine le uscite dell’adc sono state collegate ai piedini di ingresso 2,3,4,5,6,7,8,9 ottenendo le uscite sui
piedini 11,12,13,14,15,16,17,18.
Microcontrollore PIC
I PIC sono dei circuiti integrati prodotti dalla Microchip Technology Inc., che appartengono alla
categoria dei microcontrollori, cioè quei componenti che integrano in un unico dispositivo tutti i
circuiti necessari a realizzare un completo sistema digitale programmabile.
Al loro interno vi è una CPU elementare (microprocessore), una Ram molto piccola, una Eprom
o Eeprom, un ADC, una comparatore analogico, tutto ciò si trova in un singolo integrato.
Nei microcontrollori il microprocessore è di tipo RISC (Riduced, Instruction, Set, Computer), cioè
computer con un set di istruzioni ridotto (30,40 istruzioni) e tutte le istruzioni vengono eseguite
nello stesso intervallo di tempo.
•La RAM (Random Access Memory, cioè memoria ad accesso casuale) è molto piccola, dell’ordine
dei byte
.
•La Eeprom o Eprom (Elettrically Programmable Read Only Memory) è una memoria di sola
lettura programmabile elettricamente, la differenza tra le due sta nella lettera E che rappresenta il
termine inglese Erasable, cioè cancellabile.
La Eprom è di tipo OTP (One Time Programmable), cioè programmabile una sola volta; mentre
la Eeprom può essere programmata più volte perché ha una memoria cancellabile elettricamente,
questa memoria, in genere, è di tipo flash, ma, ci sono anche delle versioni UV che sono
programmabili solo dopo la cancellatura con raggi ultravioletti
Esistono in commercio diversi tipi di Pic, che si differenziano per la quantità di memoria disponibile o
per la quantità di timer a disposizione o per il tipo di memoria che utilizzano.
PIC16F84
Il PIC da noi utilizzato è il PIC16f84, che si presenta come un normale circuito integrato, ma
internamente dispone di tutti i dispositivi tipici di un sistema a microprocessore:
•Una CPU, cioè un’unità centrale di elaborazione il cui scopo è interpretare le istruzioni del
programma;
•Una memoria flash riscrivibile più volte, in cui sono registrate le istruzioni del programma da eseguir
•Una memoria RAM utilizzata per memorizzare le variabili adoperate dal programma;
•Una serie di linee input/output;
Una seri di dispositivi ausiliari al funzionamento (generatori di clock, bus, contatori).
PIEDINATURA
Il PIC 16f84 è dotato di 18 pin disposti su due file parallele di nove pin ciascuna
PIN 1-2-17-18: sono linee di I/O della porta A, programmabili in ingresso o in uscita
PIN 3: è un pin multifunzione che può essere programmato come linea di I/O della porta A, oppure
come linea di clock verso il contatore RTCC;
PIN 4: svolge la funzione di reset, azzera quindi il funzionamento del microcontrollore e cancella la
memoria Ram, può essere collegato anche ad un circuito esterno di reset o al fisso positivo; inoltre
quando il pic è in fase di programmazione viene utilizzato come ingresso per la tensione VPP.
La linea reset normalmente si trova a livello alto, il reset è attivo quindi al livello basso;
PIN 5: è il pin a cui va connesso il negativo dell’alimentazione (massa);
PIN 6: è una linea di I/O della porta B, programmabile in ingresso o in uscita dall’utente o può
essere programmato per generare interrupt;
PIN 7-8-9-10-11-12-13: sono linee di I/O della porta B, programmabili in ingresso o in uscita
dall’utente;
PIN 14: è il terminale positivo dell’alimentazione;
PIN 15-16: sono pin di connessione nel caso venga utilizzato un quarzo o un circuito RC per generare
il clock.
Organizzazione della memoria
Memoria per il programma
EEPROM
00h – 3FFh
Memoria per i dati
EEPROM
00h – 3FFh
64 byte
RAM
REGISTRI FUNZIONI
SPECIALI
00h – 0Bh
80h – 8Bh
.
REGISTRI DI USO
GENERALE
0Ch – 2Fh
.
Memoria Programma
Il PIC 16F84 dispone di una memoria programma separata dalla memoria dati. La memoria
programma e' lunga 1024 locazioni con indirizzi da 0 a 1023, ed è formata dalla seguente struttura:
3FF = 1023
Il PIC all'accensione (o dopo un reset) inizia a leggere il programma dall'indirizzo
000h. All'indirizzo 004h però vi è il vettore di interrupt, infatti se, tramite la linea INT si
riceve un’interruzione, il microcontrollore mette nel programm counter (che contiene
l’indirizzo dell’istruzione da eseguire) l’indirizzo 004H, quindi, l’indirizzo 000h conterrà
un’istruzione di salto all’inizio del programma, altrimenti il programma potrebbe
contenere soltanto quattro istruzioni:
000H
istruzione di salto all’inizio del programma
004H
interrupt vector
|
|
|
020H
istruzione di ritorno interrupt
021H
inizio programma principale
Memoria Dati
La memoria dati è lunga 80 locazioni (indirizzi da 0 a 79) e prende il nome di
register file in quanto ogni locazione può essere considerata come un registro
a 8 bit. I primi 12 indirizzi (0..11) servono per il controllo dell'hardware del PIC,
i seguenti 68 indirizzi (12..79) sono usabili dall'utente per memorizzare i propri
dati di lavoro. Inoltre i primi 12 indirizzi dispongono di due banchi di registri,
alcuni dei quali sono visibili in entrambi i banchi, mentre altri sono presenti
solo in un banco. Il registro STATUS per esempio è visibile in entrambi i
banchi, può cioè essere letto o scritto sia se il banco attivo è lo 0, sia se è l' 1.
La commutazione da un banco all'altro avviene settando il bit 5 di STATUS (bit
RP0), se vale 0 è attivo il banco 0, se vale 1 è attivo il banco 1. I 68 registri
utente dall'indirizzo 12 (0CH) in poi sono invece sempre visibili e non sono
influenzati dal banco attivo.
Il registro STATUS contiene anche i flags, il bit 0 è il flag C, il bit 2 è il flag Z.
ISTRUZIONI
Il PIC 16f84 dispone di un set di 35 istruzioni elementari, e ogni istruzione occupa
una sola locazione della memoria programma. Quasi tutte le istruzioni vengono
eseguite in 4 cicli di clock, un PIC cloccato a 4Mhz è perciò in grado di eseguire 1
milione di istruzioni al secondo (1 mips) e ogni istruzione dura 1µS. Le istruzioni di
branch (salto) possono richiedere 8 cicli di clock anziché 4. Nella terminologia
Microchip un gruppo di 4 cicli di clock è detto "ciclo", per cui le istruzioni vengono
eseguite in uno o due cicli.
Le aree di memoria su cui si può agire sono i registri della memoria dati e il registro
accumulatore W (che non fa parte dell'area dati, ma è un ulteriore registro
hardware interno al PIC utilizzato nelle operazioni aritmetico logiche).
ISTRUZIONI MAGGIORMENTE UTILIZZATE
MOVLWK MOV (sposta) L (il valore del campo letterale espresso da k) in W (accumulatore)
MOVWF MOV (sposta) W (accumulatore) in F (file register di indirizzo F)
MOVF, MOV (sposta) F (file register di indirizzo F) in W (d=0) o nel file register di indirizzo f
(d=1) (ovvero copia sé stesso)
ADDWF, ADD (somma) W (l’accumulatore) a F (file register di indirizzo F) ponendo il risltato in W
(d=0) o nel file register di indirizzo F (d=1)
BCF, (bit) di ordine b, C (clear=azzera), F (file register di indirizzo F), azzera il bit b (b=07) del file
register con indirizzo F
BSF, (bit) di ordine b, S (set=setta, porta ad uno), F (file register di indirizzo F), azzera il bit b
(b=07) del file register con indirizzo F
BTFSS (bit) di ordine b, T (test), F (file register di indirizzo F), S (skip=salta), S (set=posto ad uno).
Fa il test del bit b del file register di indirizzo F e salta l’isruzione successiva se esso è uguale ad uno
CLRWAzzera l’accumulatore
GOTOKSalta all’indirizzo K. Il campo letterale K può essere un indirizzo numerico o un’etichetta
RITARDI SOFTWARE
In alcuni programmi può essere necessario regolare con precisione la durata
temporale di una routine software, inserendo delle apposite istruzioni che hanno
l'unico scopo di creare un piccolo ritardo. Usando l'istruzione NOP e' possibile
inserire un ritardo di 1µS (con clock di 4Mhz), se serve un ritardo di 2µS possono
essere scritte due NOP una dietro l'altra, oppure, per risparmiare memoria
programma, si può usare una goto fittizia che salta all'istruzione successiva, una
goto infatti dura sempre 2µS e occupa una sola locazione della memoria programma,
l'uso delle goto fittizie è però uno stile di programmazione un po’ scorretto, e va
usato solo se e' assolutamente necessario risparmiare quelle poche locazioni di
memoria, altrimenti e' sicuramente preferibile usare due NOP
Ritardo 1µS:
Ritardo 2µS:
oppure:
nop
nop
nop
goto $+1
PROGRAMMA UTILIZZATO
Il programma da noi realizzato ci ha consentito di fornire il segnale di Start
all’ADC 0800 ogni qual volta il Pic riceveva in ingresso il segnale
dell’avvenuta conversione EOC (End Of Conversion).
Per fare ciò abbiamo configurato la porta A in modo tale che la linea RA0
fosse uscita (Start) e la linea RA1 fosse ingresso (EOC); inoltre abbiamo
impostato le 8 linee della porta B tutte come ingresso, per inviare al Pic gli
otto bit in uscita al convertitore A/D.
Per fornire lo Start abbiamo realizzato un ciclo (Test) in cui il Pic andava a
testare continuamente la linea RA1 della porta A e, quando arrivava il
segnale di fine conversione (EOC), tramite un’istruzione di salto (go to), il
programma usciva dal ciclo e andava a fornire il segnale di Start per una
durata di 3sec, per tornare poi nuovamente al ciclo.
PROCESSOR 16F84
processore
RADIX DEC
INCLUDE "P16F84.INC"
ORG 0X00
BSF STATUS,5
MOVLW 2
MOVWF TRISA
MOVLW 255
MOVWF TRISB
BCF STATUS,5
START BSF PORTA,0
NOP
BCF PORTA,0
; è una direttiva del compilatore che
; consente di definire per quale
; è stato scritto il seguente programma.
; serve ad informare il compilatore che i
; numeri senza notazione sono decimali.
; è una direttiva che comunica al
; compilatore di includere il file
; P16F84.inc.
; ci consente di definire l' indirizzo da cui
; vanno allocati i dati in esecuzione
; il secondo pin della porta A viene
; impostato come linea di ingresso.
; (RA0=Start, RA1=End of conversion).
; tutti i pin della porta B vengono
; impostati come linea di ingresso
;setta il bit 0 della porta A (RA0).
; resetta il bit 0 della porta A (RA0),
; otteniamo un ritardo di 3sec.
TEST
BTFSS PORTA,1
GOTO TEST
MOVF PORTB,W
MOVWF 0Ch
GOTO START
END
; testa RA1,se è zero svolge l'istruzione
; successiva altrimenti salta un'istruzione
; torna a TEST
; sposta il contenuto di PORTB nell'accumulatore.
; sposta il contenuto dell' accumulatore
; nella locazione di memoria ram 0Ch
; torna a START
; è una direttiva che indica al compilatore
; la fine del programma