Progetto di un contatore Geiger Mullercontatoregeigermuller.altervista.org/capitoli/cap5.pdf · ......

20
1 CAPITOLO V Progetto di un contatore Geiger Muller 1 Introduzione Nel presente capitolo verrà presentato un possibile progetto di un contatore Geiger- Muller. 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.

Transcript of Progetto di un contatore Geiger Mullercontatoregeigermuller.altervista.org/capitoli/cap5.pdf · ......

1

CAPITOLO V

Progetto di un contatore Geiger Muller

1 Introduzione

Nel presente capitolo verrà presentato un possibile progetto di un contatore Geiger-

Muller. 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.

2

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:

3

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 (R1 + 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

4

Ponendo VBsat = 0,68V si trova:

R2 = = 0,68

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 = 7sec.

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 190sec. del tubo Geiger.

Blocco microcontrollore

5

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

6

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

7

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).

8

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.

9

10

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

11

#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);

12

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

13

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.

14

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.

15

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.

16

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

17

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.

18

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.

19

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.

20

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.