Progetto di un contatore Geiger Muller

CAPITOLO V
Progetto di un contatore Geiger Muller
1 Introduzione
Nel presente capitolo verrà presentato un possibile progetto di un contatore GeigerMuller. Nei paragrafi due e tre sarà analizzato lo schema semplificato e quello completo
del contatore geiger; successivamente nel paragrafo quattro sarà presentato il diagramma
di flusso del software del microcontrollore. Nei paragrafi cinque e sei verrà trattata la
codifica in linguaggio C del software e, in seguito, il software di acquisizione su PC e la
simulazione circuitale attraverso programma dedicato (Proteus).
2 Schema circuitale semplificato
Lo schema circuitale semplificato del contatore è mostrato in figura 2.1
Lo schema è costituito dai seguenti blocchi:
Blocco convertitore DC-DC.
Il convertitore DC-DC è utilizzato per alimentare il tubo geiger il quale ( come specificato
dai dati tecnici) richiede una tensione ai suoi capi di circa 400V.
Tubo Geiger
Il tubo geiger utilizzato è SBM-20 di fabbricazione russa il quale richiede una tensione di
lavoro di 400V e presenta un tempo morto di 190 sec.
1
Blocco generatore di impulsi
Questo blocco è costituito dal condensatore C dal transistor e dalle resistenze R1,R2 ed
Rc. In condizioni normali il tubo geiger si comporta come un interruttore aperto e quindi sul
collettore del transistor ( il quale sarà ovviamente interdetto) sarà presente una tensione
di 5V. Il passaggio di una particella nel tubo, provocherà una scarica tale da potere
considerare il tubo per un breve intervallo di tempo come un cortocircuito.
In queste condizioni, il circuito di ingresso del transistor è equivalente a quello di figura 2.2
Il circuito equivalente di Thevenin del bipolo costituito dal solo condensatore è mostrato
in figura 2.3
Fig.2.3
Dove Ri è la resistenza di ingresso del transistor.
Il condensatore C subirà un processo di carica con costante di tempo pari a  = C Rg //
(R1+R2//Ri) C (R1+R2//Ri)
La tensione di fine carica E sarà all’incirca data da:
E= 𝑉
𝑅1 +𝑅2 //𝑅𝑖
𝑅𝑔 +𝑅1 +𝑅2 //𝑅𝑖
In questa condizioni il circuito di ingresso del transistor sarà equivalente al seguente:
2
Fig.2.4
Dimensionando opportunamente i componenti , si può fare in modo che dopo il processo
di carica del condensatore il transistor sia saturo.
Tale evento determinerà sul collettore del transistor un fronte di discesa che provocherà
l’interruzione del microcontrollore.
Al termine del processo di scarica nel tubo il comportamento di quest’ultimo sarà
assimilabile ad un interruttore aperto. Da questo istante di tempo in poi il condensatore
subirà un processo di scarica con costante di tempo pari a circa (R 1 + R2//Ri) C
riportando il sistema nelle condizioni iniziali: condensatore scarico e transistor interdetto.
Dimensionamento dei componenti.
Si sceglie il transitor 2N2222.
Scelta una corrente di collettore IC = 1,5 mA si ricava la resistenza di collettore RC dalla
legge di Kircchoff alla maglia di uscita ( assumendo VCEsat = 0,1V) :
RC =
𝑉𝑐𝑐 −π‘‰πΆπΈπ‘ π‘Žπ‘‘
𝐼𝐢
= 3266,666 
Si assume un valore di Rc = 3,3K.
Dai datasheet del transistor si ricava HFEmin = 30 per cui si sceglie IB tale che
IB > 𝐻
𝐼𝐢
πΉπΈπ‘šπ‘–π‘›
= 5* 10-5
Si sceglie IB = 7 * 10-5 A
Si impone che la corrente IR2 sulla resistenza R2 sia trascurabile rispetto ad IB. Poniamo
quindi IR2 = 10 IB = 70 * 10-5 A.
In queste condizioni le due resistenze R1 ed R2 sono praticamente in serie e si ha:
IR1 = IR2 = 70 * 10-5 A
3
Ponendo VBsat = 0,68V si trova:
0,68
R2 = = 7 0∗ 10−5 = 9714  10K
ed
Ri =
VBEsat
IB
0,68
= 7 ∗ 10−5 = 100K
dove Ri è la resistenza di ingresso del transistor .
Dalle relazioni precedenti si ricava
Ri//R2 = 9100   10K
Dalla relazione precedente si evince, come d'altronde doveva essere per la scelta fatta su
IR2 , che Ri è trascurabile rispetto ad R2.
Per ricavare infine R1 imponiamo che la tensione E sia uguale a 2,6 V. Ossia
E=𝑉
𝑅1 +𝑅2 //𝑅𝑖
𝑅𝑔 +𝑅1 +𝑅2 //𝑅𝑖
 𝑅𝑉 (𝑅1 + 𝑅2//𝑅𝑖 )  𝑅𝑉 (𝑅1 + 𝑅2 ) = 2,6
𝑔
𝑔
Sostituendo i valori si ha:
400
4,7∗106
(R1 + 10* 103) = 2,6
Risolvendo rispetto ad R1 si trova R1  22K.
Scegliendo per il condensatore C il valore C = 220pF si trova che la costante di tempo di
carica del condensatore ( figura 2.3) è data da:
Rg// (R1 + R2//Ri) C  (R1 + R2//Ri) C =
= 32 * 103 * 220 *10-12 = 7sec.
La costante di tempo di scarica ( vedi figura 2.4) è sempre uguale a 6,6 sec . ο€ 
Si osservi che i tempi di carica e scarica del condensatore C sono molto inferiori al tempo
morto di 190sec. del tubo Geiger.
ο€ 
Blocco microcontrollore
4
Questo blocco conterà gli impulsi corrispondenti al passaggio delle particelle visualizzando
il conteggio su un display lcd ed inviando i dati al PC tramite porta seriale per ulteriori
elaborazioni.
3 Schema circuitale completo
Lo schema circuitale completo è mostrato in figura 3.1
5
Fig. 3.1 Schema circuitale completo del contatore geiger.
Il circuito del contatore Geiger realizzato è molto semplice ed essenzialmente è basato
sull’utilizzo di un microcontrollore Microchip del tipo 16F877 (IC1) adeguatamente
programmato: esso provvederà alla generazione del segnale ad onda rettangolare per il
funzionamento del convertitore DC-DC di tipo boost steep-up, necessario per portare la
tensione di 5V continui di alimentazione (nella progettazione si è immaginato che il
contatore potesse eventualmente funzionare anche in modo portabile per misure esterne)
ai 400V necessari al funzionamento del tubo Geiger- Muller, oltre che al conteggio delle
particelle ed invio dei valori attraverso porta seriale ad un PC nonché alla visualizzazione
dei dati su un display LCD di tipo 2X16.
La tensione di alimentazione di 5V continui proveniente da un alimentatore stabilizzato o
da un idoneo pacchetto di batterie viene applicato al morsetto contraddistinto nello
schema dalla scritta ”Power”: sulla linea di alimentazione è presente un fusibile di
protezione ed una adeguata rete di filtro costituita da vari condensatori da 100nF e da
100uF. Il PIC16F877 verrà resettato, ad ogni applicazione della tensione di alimentazione,
dalla rete costituita da R1, D1, C6 che provvederà a rendere basso il livello logico
presente sul piedino 1 (MCLR) per un breve intervallo di tempo riportandosi poi
stabilmente a livello logico 1 per il funzionamento del circuito.
Il clock del PIC16F877 viene ottenuto utilizzando il cristallo di quarzo QF1 da 8MHz in
abbinamento coi due condensatori C5 e C7 da 15 pF ciascuno; il microcontrollore
funzionerà quindi ad 8 MHz.
Il circuito può essere connesso ad un PC per potere effettuare la elaborazione dei dati
raccolti: questo avverrà attraverso la porta seriale del computer per cui sul circuito è
presente un convertitore del tipo MAXIM 232 (IC2) per potere adeguare i livelli logici del
microcontrollore (TX, RX) allo standard RS232; di questo blocco circuitale fanno parte
oltre ad IC2 i condensatori C12, C13, C14, C15 ed R14. La connessione al PC dovrà
essere fatta attraverso un cavo di tipo NULL Modem al morsetto JP1.
Sono inoltre presenti, ma al momento inutilizzati, due pulsanti ad uso generale ed un
buzzer (cicalino) in attesa della definizione di ulteriori funzionalità.
Sul piedino 17 (CCP1) sarà presente un segnale ad onda rettangolare con ton = 550uS,
toff = 110uS, T = 660 uS e quindi f = 1,5KHz ottenuto sfruttando il modulo PWM del
microcontrollore; tale segnale costituirà il segnale di switching del convertitore boost
costituito dal mosfet Q2 (IRFBE30), L1, D3, C16 che, unitamente alla rete limitatrice
costituita dagli zener D4, D5, D6, D7 ognuno da 100V ed alla resistenza R6, determinerà
ai capi di C16 una tensione pari a circa 400V; il transistor Q1 con la resistenza R5 servono
per indicare al microcontrollore il raggiungimento o meno della tensione richiesta ( i diodi
zener andranno in conduzione al raggiungimento dei 400 V portando alla saturazione Q1 e
fornendo quindi un livello logico 0 al piedino 7 (RA5) del microcontrollore) al fine di un
eventuale controllo energetico. Tale caratteristica , essendo nel nostro caso utilizzato un
alimentatore, non è ancora implementata nel software del PIC16F877 ed è stato
6
modificato il circuito stampato connettendo direttamente a massa la resistenza R6 invece
che alla base del transistor Q1 .
I 400V vendono applicati alla rete costituita da R8, tubo SBM20 (o equivalente), R9, R10,
Q3, R1, C17: quando il tubo non è colpito da particelle avrà resistenza molto elevata
quindi il transistor risulterà interdetto facendo in modo che il piedino 33 del PIC risulti a
livello alto; quando invece viene colpito da particelle avrà resistenza molto bassa per cui
il transistor Q3 andrà in saturazione portando il pin 33 (INT) del PIC a livello logico basso.
Il pin 33 (INT) viene utilizzato come pin di interrupt esterno attivo sul fronte di discesa e
ogni volta che particelle colpiscono il tubo verrà provocato un interrupt; quindi la routine di
interrupt verrà utilizzata per contare le particelle che colpiscono il tubo provocando ogni
volta una interruzione ed un incremento della variabile di conteggio nel software. Il led
verrà utilizzato per indicare quando il pin 33 (INT) del PIC passa da livello alto a livello
basso con una accensione di breve durata in modo da ottenere un lampeggio dipendente
dalle particelle che colpiscono il tubo.
Il circuito è completato da un display lcd 2x16 (DIS1) con i componenti R3 ed R2; tale
display viene utilizzato nel modo a 4 bit comandato dal PIC attraverso i piedini della porta
b (ad esclusione del piedino RB0 dedicato all’interrupt esterno).
7
4 Diagramma di flusso e software PIC
Il diagramma di flusso del programma del microcontrollore è mostrato in figura 4.1 per il
programma principale, mentre le routine di interruzione sono mostrate nella figura 4.2.
8
9
Il software del PIC è stato realizzato con il compilatore CCS C Compiler : tale compilatore
presenta il vantaggio, rispetto ad altri, di potere programmare il microcontrollore
praticamente ignorando i registri interni la cui struttura risulta essere spesso molto
complicata. Un “wizard” iniziale, attraverso cui definire il funzionamento dei moduli interni
al PIC, agevolerà enormemente il rapido sviluppo delle applicazioni.
La scrittura del programma avverrà utilizzando la sintassi del C ANSI in cui, naturalmente,
le funzioni predefinite fornite con le librerie potranno avere specificità differenti rispetto a
quelle utilizzate negli ambiti consueti.
Di seguito si riporta il listato del programma attualmente inserito:
#include <16F877.h>
#device ADC=10
#FUSES PUT
//Power Up Timer
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP
//No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD
//No EE protection
#FUSES NOWRT
//Program memory not write protected
10
#FUSES NOPROTECT
//Code not protected from reading
#use delay(crystal=8MHz)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=PORT1)
#define TEMPOBEEP 10
int8 i=0;
unsigned int16 particelle = 0;
unsigned int16 conteggio = 0;
int1 flagled = false;
int1 flagvideo = false;
#INT_EXT
void EXT_isr(void)
{
particelle = particelle + 1;
flagled = true;
}
#INT_TIMER0
void TIMER0_isr(void)
{
i = i + 1;
if(i >= 33){
i = 0;
conteggio = particelle;
particelle = 0;
flagvideo = true;
}
}
#define LCD_ENABLE_PIN PIN_B1
#define LCD_RS_PIN PIN_B2
#define LCD_RW_PIN PIN_B3
#define LCD_DATA4 PIN_B4
#define LCD_DATA5 PIN_B5
#define LCD_DATA6 PIN_B6
#define LCD_DATA7 PIN_B7
#include <lcd.c>
void main()
{
output_low(PIN_D0);
output_low(PIN_D1);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256|RTCC_8_bit);
//32,7 ms overflow
setup_timer_2(T2_DIV_BY_16,82,1);
//664 us overflow, 664 us interrupt
setup_ccp1(CCP_PWM);
set_pwm1_duty((int16)273);
11
lcd_init();
printf(LCD_PUTC,"\fSTARTING...");
delay_ms(100);
printf(LCD_PUTC,"\f GEIGER COUNTER");
ext_int_edge( H_TO_L );
enable_interrupts(INT_EXT);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
while(TRUE)
{
if(flagled){
output_high(PIN_D0);
output_high(PIN_D1);
delay_ms(TEMPOBEEP);
output_low(PIN_D0);
output_low(PIN_D1);
flagled = false;
}
if(flagvideo){
printf("%Li",conteggio);
printf(",");
printf("\r\n");
printf(LCD_PUTC,"\n
");
printf(LCD_PUTC,"\n ");
printf(LCD_PUTC,"%Li",conteggio);
printf(LCD_PUTC," cps");
flagvideo = false;
}
}
}
Il programma è realizzato per un utilizzo minimale del circuito ed infatti è limitato al
conteggio delle particelle/secondo, alla visualizzazione di tale valore sul display lcd della
scheda ed all’invio del medesimo attraverso seriale ad un PC il quale provvederà alla
elaborazione necessaria.
La logica di funzionamento è estremamente semplice: ogni volta che una particella
colpisce il tubo GM il piedino RB0 (INT) passa da un livello logico 1 ad un livello logico 0
provocando un interrupt di tipo EXT il quale, a sua volta, provoca la chiamata della
relativa funzione void EXT_isr(void) in cui viene incrementata la variabile “particelle” e
settato il flag “flagled” che abilita il lampeggio del led; all’avvio del circuito è stato anche
avviato il Timer0 del PIC settato per provocare un interrupt ogni 33mS circa provocando a
questa cadenza temporale la chiamata della funzione void Timer0_isr(void) in cui viene
12
incrementata una variabile di appoggio la quale una volta raggiunto il valore 33 (cioè
trascorso un secondo) viene riportata a zero acquisendo, prima del suo azzeramento,
anche il valore della variabile “particelle” che quindi avrà a questo punto il valore di
particelle al secondo che verrà inviato alla seriale ed al display lcd attraverso il settaggio
del flag “flagvideo”. Il lampeggio, l’invio del valore di particelle/secondo alla seriale e la
visualizzazione di tale valore sul display vengono fatti nel flusso del programma principale,
attraverso flag, per evitare di introdurre ritardi durante l’esecuzione delle routine di
interrupt. Il PIC provvede anche alla generazione del segnale ad onda rettangolare
attraverso l’utilizzo di uno dei due moduli PWM in esso contenuti il quale richiede anche
l’utilizzo del Timer2 del microcontrollore: il ciclo utile richiesto così come anche la
frequenza del segnale e l’avvio della generazione sono ottenuti dalle funzioni
set_up_timer2, setup_ccp1, set_pwm1_duty i cui parametri sono ottenuti dalle
impostazioni iniziali fatte attraverso il “wizard”.
5 Software del PC
I valori di particelle al secondo vengono inviati dal PIC , passando attraverso un
convertitore di livello MAX232 e attraverso un cavo tipo NULL-MODEM, alla porta seriale
del PC (nel caso il PC ne sia sprovvisto bisogna aggiungere un convertitore seriale-usb);
sul PC sarà stato avviato il software di acquisizione dati tenendo conto che il PIC invia il
dato facendolo seguire da un carattere virgola seguito a sua volta da “ritorno carrello e
nuova linea” per separare valori consecutivi. Il perché di questa scelta è giustificata dal
fatto che in questo modo è molto semplice ottenere files dati intelleggibili e soprattutto
conformi ai file di tipo *.csv facilmente interpretabili da software commerciali come Excel
e similari.
13
Fig 5.1 Schermata programma di acquisizione su PC
La figura mostra la schermata principale del programma di acquisizione dati realizzato per
interfacciarsi con il nostro circuito; si è volutamente evitato di creare qualcosa di molto
complicato o più professionale in quanto esula dai fini prefissati e per lasciare minori
vincoli a futuri eventuali sviluppi. Il programma demanda automaticamente , poi vedremo
come, l’elaborazione dei dati a software commerciali come Excel; questa scelta deriva
anche dal fatto che l’elaborazione di dati, anche in ambiti diversi da quello scolastico,
viene spesso fatta con strumenti software universali e non specifici quali un software
dedicato.
14
Fig 5.2 Schermata foglio dati Excel
La figura visualizza un esempio di foglio dati ottenuto durante la misura con relativi dati
statistici.
Tornando alla descrizione della schermata principale del software di acquisizione dati in
alto a sinistra sotto la label “N° Campioni” esiste il punto dove va inserito il numero di
campioni da acquisire e visualizzare nella “Tabella Dati” di destra dove oltre al valore del
campione vengono visualizzati tempo di acquisizione e data; terminata l’acquisizione del
numero di campioni richiesti la tabella verrà svuotata e reinizializzata. Il valore dell’ultimo
campione acquisito verrà visualizzato sotto la label “CPS” mentre sotto la label “Data In”
verrà visualizzato il numero di campioni attualmente acquisito e sotto la label “COM”
lampeggerà una spia indicante la ricezione di un valore dalla porta seriale. Il resto della
schermata è occupato dalla visualizzazione, in tempo reale, del valore ricevuto ( grafico
CPS – tempo). Alcuni strumenti che consentono di modificare tale visualizzazione grafica
sono disponibili cliccando sopra la freccetta nera in basso a sinistra.
Per ottenere il foglio di Excel, con l’automatica elaborazione dei dati, basterà fare click
destro sopra la tabella e scegliere Create – >Excel: si aprirà automaticamente il foglio di
Excel con già eseguite tutte le elaborazioni numerico – grafiche che naturalmente
potranno poi essere salvate o ignorate. E’ evidentemente necessario che sul PC sia
installato, in modo standard, Excel; è altresì possibile salvare, nello stesso modo, i soli dati
in un file di Word o di testo scegliendo però Create->Word o Create->Text.
Quando si sceglie di creare il file di Excel viene richiamato un file di template dello stesso
precedentemente creato con il tipo di elaborazione richiesta: è quindi facilmente
modificabile la elaborazione dei dati da fare o cambiando il template dalle impostazioni del
programma di acquisizione o ridefinendo il template già utilizzato. Il template dovrà essere
in formato “Excel 97- 2003” per garantirne la compatibilità e soprattutto dovrà essere
salvato lasciando libere le prime tre colonne con evidenziata la prima cella A1 per fare in
modo che a partire da quella cella vengano trasposti i dati provenienti dal software di
acquisizione.
15
6 Simulazione circuitale
Un aspetto molto importante della progettazione di un circuito elettronico è la simulazione
del medesimo perché consente una prima verifica del corretto funzionamento e
soprattutto ne consente l’affinamento e la modifica rapida senza avere i tempi morti e i
problemi derivanti da rotture circuitali per errori progettuali o per modifiche in corso
d’opera tipici dell’approccio progettazione – campionatura circuitale che era la procedura
utilizzata precedentemente. Ancora oggi sono molti i progettisti diffidenti nei confronti
della simulazione ma questo spesso deriva da una scarsa fiducia della reale capacità che
ormai è stata raggiunta dai software di simulazione: è possibile teoricamente , in molti
casi, andare in produzione senza avere mai costruito un campione anche se è vero che,
per maggiore sicurezza, viene comunque eseguita una fase di campionatura per l’analisi
di problematiche non strettamente legate al funzionamento; del circuito da noi realizzato,
ad esempio, il funzionamento è stato definito completamente in simulazione senza alcun
prototipo ed il circuito finale ha funzionato esattamente come previsto.
Il software da noi utilizzato per la simulazione è Proteus 8 Professional che, con le
opportune opzioni di licenza, è in grado di realizzare schemi, circuiti stampati e
simulazione analogica, digitale e anche di simulare circuiti con microprocessori e
microcontrollori; questa ultima caratteristica lo rende sicuramente superiore a tutti i
software analoghi.
Fig 6.1 Schermata Proteus
Nell’immagine è riportata la schermata di Proteus con lo schema utilizzato per la
simulazione del nostro circuito: si può notare l’oscilloscopio per controllare la tensione di
16
400V, il terminale virtuale (porta seriale) con i dati che il circuito invia al PC e anche nello
schema il display animato cosi come nella realtà.
Nel nostro caso, come descritto in altro capitolo, il software di simulazione è stato
utilissimo per lo studio del circuito convertitore boost in quanto a causa delle
caratteristiche del medesimo ( elevata e pericolosa tensione di 400V, bassa corrente
erogabile paragonabile a quella assorbita da un normale voltmetro digitale,
componentistica particolare come mosfet ad elevata Vds ed induttanza con valori critici) la
verifica sperimentale sarebbe stata improba con gli strumenti normalmente disponibili.
Nella verifica del convertitore boost è stata largamente utilizzata la capacità del software
di realizzare anche i grafici relativi a correnti e tensioni circuitali.
Fig. 6.2 Andamento tensione di alimentazione tubo geiger
Nella figura 6.2 è riportato l’andamento della tensione che va ad alimentatore il tubo GM
nel nostro circuito in assenza di particelle mentre quello che segue è in presenza di
particelle.
17
Fig 6.3 Andamento tensione alimentazione tubo geiger in presenza particelle
Nel grafico seguente invece si è simulato, a titolo di esempio, la rottura (apertura) di uno
dei quattro zener; notare come la tensione salga ad oltre 600 V.
18
Fig 6.4 Andamento tensione di alimentazione tubo geiger in caso di rottura zener
7 Il prototipo
Nella immagine in figura 7.1 viene mostrato il primo prototipo realizzato del circuito mentre
la figura 7.2 mostra il layout del medesimo così come ottenuto dal software di
progettazione.
19
Fig 7.1 Immagine primo prototipo contatore
Fig 7.2 Immagine layout circuito stampato contatore
La figura illustra il layout del circuito stampato che è stato realizzato, cosi come lo
schema, utilizzando il software Eagle Cadsoft. Lo stampato è stato fatto in doppia faccia
tenendo conto del fatto che nel circuito esistono tensioni fino a 400V; la realizzazione
materiale dello stampato è stato affidato a professionisti esterni e per minimizzare i costi
si è rinunciato alla realizzazione del “solder” e della serigrafia.
20