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