Alcune note sull'uso del calcolatore elettronico ... - Fisica "E. Fermi"
Alcune note sull'uso del calcolatore elettronico ... - Fisica "E. Fermi"
Alcune note sull'uso del calcolatore elettronico ... - Fisica "E. Fermi"
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>Alcune</strong> <strong>note</strong> sull’uso <strong>del</strong> <strong>calcolatore</strong> <strong>elettronico</strong><br />
nelle esperienze <strong>del</strong> primo anno <strong>del</strong> Corso di Laurea in <strong>Fisica</strong><br />
Bruno Barsella - gennaio 2001<br />
1
Introduzione<br />
Questo manualetto vorrebbe introdurre, entrando anche in qualche dettaglio, i problemi<br />
e le soluzioni adottate per effettuare un certo numero di misure <strong>del</strong> laboratorio didattico<br />
<strong>del</strong> primo anno di <strong>Fisica</strong>. Una caratteristica di tutte queste misure è che il <strong>calcolatore</strong><br />
<strong>elettronico</strong> fa parte degli strumenti usati, qualche volta usandolo proprio come strumento<br />
di misura.<br />
Il manualetto è diviso in tre sezioni: la prima riguarda le esperienze in cui il <strong>calcolatore</strong><br />
funziona da strumento di misura di tempi, usando come generatore di tempo il suo clock e<br />
come strumento un programma che riceve un segnale logico dall’esterno attraverso la porta<br />
<strong>del</strong>la stampante. Nella seconda si esamina il caso di una misura di posizione di uno o due<br />
pendoli usando un segnale analogico (una tensione generata da un dispositivo esterno) che<br />
viene acquisito attraverso l’ingresso audio stereo <strong>del</strong>la scheda audio <strong>del</strong>la macchina. Nella<br />
terza si esamina con qualche dettaglio il dispositivo Vscope che consente di fare misure di<br />
posizione nello spazio di un certo numero di oggettini.<br />
E’ chiaro che per poter comprendere bene i temi che sono il contenuto di queste pagine<br />
è necessaria una conoscenza, anche ridotta, <strong>del</strong> funzionamento di un moderno <strong>calcolatore</strong><br />
<strong>elettronico</strong> personale sia dal punto di vista hardware che da quello software. Questa parte<br />
esula, almeno per ora, da queste pagine ma è comunque essenziale perché ad essa dovremo<br />
fare ogni tanto riferimento.<br />
INDICE<br />
Introduzione pag. 2<br />
1 - Misure di tempi usando la porta parallela pag. 3<br />
2 - Misure sui pendoli usando la scheda audio pag. 8<br />
3 - Misure sul tavolo ad aria usando il Vscope pag. 10<br />
Appendici<br />
A - Listati di alcuni programmi pag. 13<br />
2
Misure di tempo<br />
Tutti i calcolatori elettronici moderni possono diventare ottimi misuratori di tempo<br />
in quanto tutto il loro funzionamente logico è regolato da uno o più segnali periodici<br />
generati da oscillatori controllati a quarzo. In particolare la CPU (Central Processing Unit)<br />
principale riceve dall’esterno un segnale logico di tempo che viene convertito all’interno (per<br />
moltiplicazione di frequenza) nel clock fondamentale che temporizza tutti i processi <strong>del</strong>la<br />
CPU stessa. Tutte le istruzioni <strong>del</strong> codice macchina hanno durate che sono un multiplo<br />
<strong>del</strong> periodo di questo clock fondamentale, la cui frequenza negli ultimi anni è cresciuta<br />
regolarmente passando dai 40 MHz <strong>del</strong>le CPU 486 a quella di 600 − 1200 MHz ed oltre dei<br />
moderni Pentium III e AMD K7.<br />
Le esperienze che vengono montate nei laboratori didattici <strong>del</strong> primo anno di Pisa<br />
richiedono la misura di segnali di tempo che vengono generati nell’apparato sperimentale<br />
e che vengono in seguito condizionati in modo da farli diventare un unico segnale elettrico<br />
a livello logico: questo segnale viene fornito al PC attraverso un pin in input sulla porta<br />
<strong>del</strong>la stampante.<br />
L’apparato sperimentale che genera tale segnale varia da esperienza ad esperienza.<br />
Per la misura <strong>del</strong> moto di sfere su un piano inclinato un paio di traguardi ottici montati in<br />
un modo che dipende dalla specifica esperienza vengono mescolati tramite un OR logico<br />
in modo da formare un unico segnale di tempo. Nel caso <strong>del</strong> pendolo quadrifilare un<br />
traguardo ottico rileva i passaggi in entrata e in uscita di una bandierina di cartone montata<br />
sul pendolo. Infine, nel caso <strong>del</strong> volano in rotazione, uno shaft-encoder ottico a 20 settori<br />
montato sull’asse <strong>del</strong> volano, genera, con l’aiuto di poca elettronica logica esterna, il segnale<br />
che viene inviato al PC.<br />
1 - Il generatore di tempo e i timers interni di un PC<br />
Il generatore <strong>del</strong> segnale di tempo di un <strong>calcolatore</strong> moderno è un circuito oscillante<br />
controllato a quarzo che oscilla a una frequenza che è un sottomultiplo di quella che viene<br />
denunciata come frequenza <strong>del</strong> <strong>calcolatore</strong> e che è al giorno d’oggi sempre molto più grande<br />
di 1 MHz. Da questo segnale vengono derivati tutti i segnali di tempo usati da tutti i<br />
componenti <strong>del</strong> sistema: la CPU, di solito, contiene una serie di componenti (moltiplicatori<br />
di frequenza) che moltiplicano questa frequenza portandola al valore consentito dalle<br />
tecnologie di costruzione moderne e che ora sta raggiungendo 1.5 GHz. Altri componenti<br />
generano i segnali di temporizzazione dei buses (nota: viene chiamato bus quel complesso<br />
di componenti, tracce stampate e connettori che servono a trasportare segnali all’interno<br />
e, magari, all’esterno di un <strong>calcolatore</strong>) <strong>del</strong>le varie schede (oggi questi bus hanno raggiunto<br />
frequenze di 133 MHz) e dei bus seriali esterni (il cosiddetto Firewire e lo USB, Universal<br />
Serial Bus). Inoltre viene derivato anche un segnale periodico di periodo 1 µs che viene<br />
inviato ai timers che sono dotazione comune di tutti i PC. Questo segnale è buono nel senso<br />
che è abbastanza preciso (ha una precisione relativa <strong>del</strong>l’ordine di 10 −4 ) ed è ancor meglio<br />
stabile (stabilità migliore di 10 −5 ) dato che l’interno di un <strong>calcolatore</strong> è ragionevolmente<br />
termostatato. Ovviamente la stabilità è molto più importante, ai fini di una misura in<br />
cui la taratura temporale precisa non è troppo essenziale. Tutti questi segnali periodici<br />
vengono chimati, in gergo, i clocks <strong>del</strong> <strong>calcolatore</strong>.<br />
3
I timers di un PC sono di solito due e sono chiamati timer 0 e timer 1. Sono contatori<br />
a 16 bit in cui entra il clock a 1 MHz detto prima. Il timer 0 è dedicato all’importante<br />
funzione <strong>del</strong> mantenimento <strong>del</strong>l’ora (il TOD, Time Of Day) e dunque deve essere lasciato<br />
assolutamente in pace. Per far questo il timer 0 genera periodicamente un interrupt, cioè<br />
un segnale che viene inviato su un pin <strong>del</strong>la CPU (il pin in questione ha nome NMI, Non-<br />
Maskable Interrupt) e interrompe, da cui il nome, il normale funzionamento provocando<br />
la attivazione di una speciale parte <strong>del</strong> codice macchina che provvede all’incremento <strong>del</strong><br />
contatore da cui il <strong>calcolatore</strong> deriva il valore <strong>del</strong>l’ora <strong>del</strong> giorno. Questo segnale viene<br />
detto in gergo lo interrupt <strong>del</strong> tempo reale.<br />
Il timer 1, chiamato anche lo user timer, è invece disponibile per l’utente e può essere<br />
liberamente utilizzato: dato però che è un oggetto a 16 bit esso non può contare per più<br />
di 2 16 = 65536 unità di tempo, cioè 65.536 ms. Questo può andare benissimo per misure<br />
su piccolissimi intervalli di tempo, ma non certo nel caso <strong>del</strong>le nostre esperienze in cui la<br />
misura impiega tempi totali molto superiori ad un secondo.<br />
Per superare la difficoltà dovuta alla lunghezza <strong>del</strong> contatore è stata usata una routine<br />
in assembly language, scritta per eseguire misure di tempi nel Laboratorio 3 e riadattata per<br />
il Laboratorio 1: l’autore originale è il prof. Paolo Minguzzi e il riadattattore lo scrivente<br />
di queste <strong>note</strong>. Questa routine non può sostituire un contatore reale, per esempio un<br />
contatore a 32 bit, in quanto ha uno sgradevole problema che vedremo in dettaglio in<br />
seguito, ma si mostra sufficiente nella maggior parte dei casi.<br />
2 - La routine in assembly language per la misura <strong>del</strong> tempo<br />
Questa routine ha diverse parti che eseguono compiti diversi: preparare lo stato<br />
iniziale di tutta la parte di acquisizione, ridirigere l’interrupt di tempo reale in modo<br />
da azzerare il timer 1 all’istante di modifica <strong>del</strong> TOD, registrare le transizioni fra stati<br />
logici che avvengono sul bit 1 <strong>del</strong>la porta parallela e, infine, trasformare il valori registrati<br />
dei contatori in una sequenza di tempi in secondi e decimali da restituire al programma<br />
chiamante. La routine non ha nessun automatismo di ricerca <strong>del</strong>la porta stampante usata:<br />
la modifica è compito <strong>del</strong> programmatore. Anche la scelta <strong>del</strong> verso <strong>del</strong>la transizione è<br />
totalmente riservata al programmatore. Nel listato (disponibile in ftp ad astrpi.difi.unipi.it,<br />
directory pub\Laboratorio, routines stream.asm o stream2.asm, sono messi in evidenza<br />
i punti e i valori da usare per effettuare queste modifiche.<br />
La routine, di nome generico stream.asm, è stata scritta per il MASM, MicroSoft<br />
Macro Assembler, ma può essere facilmente trasportata sotto gli altri assemblers disponibili<br />
in MS-DOS. La routine è stata pensata per lavorare in single data segment mode, il<br />
che significa che il buffer di acquisizione è relativamente limitato dalla limitazione a 64<br />
KiloBytes <strong>del</strong> segmento. In pratica una variabile definita all’inizio <strong>del</strong>la routine, max misure,<br />
limita a 3000 il numero massimo di tempi acquisibili, in modo da usare solo lo spazio<br />
disponibile per immagazzinarvi i dati di tempo.<br />
Durante la sua esecuzione bisogna stare attenti a non disturbare in alcun modo il<br />
<strong>calcolatore</strong>: il solo interrupt attivo deve essere lo NMI (Non-Maskable Interrupt). Alla<br />
fine <strong>del</strong>la acquisizione, che può comunque essere interrotta dalla pressione di un tasto<br />
(quello di SysReq or Alt-PrtSc), la routine restituisce al programma chiamante un vettore<br />
di reali in doppia precisione contenente i tempi in secondi.<br />
4
I programmi in Turbo Pascal, anche essi disponibili in ftp sulla macchina e nel<br />
directory citati sopra (files Pendolo.pas, Piano incl.pas, Volano.pas), mostrano alcuni<br />
usi tipici <strong>del</strong>la chiamata <strong>del</strong>la routine e perciò anche quella che viene comunemente chiamata<br />
la calling sequence. Il linguaggio che è stato usato per i programmi di livello superiore nel<br />
Laboratorio è stato il Turbo Pascal per la semplice ragione che è il linguaggio che è stato<br />
prescelto dal Piano Nazionale per l’Informatica nella Scuola Secondaria Superiore e perciò<br />
è forse noto ad alcuni degli studenti di <strong>Fisica</strong>. La routine può però, con lievi ritocchi, venir<br />
chiamata anche da programmi C o Fortran .<br />
La routine è largamente commentata in inglese, cioè nella lingua tipica <strong>del</strong>la computer<br />
science internazionale. Se la si va ad esaminare in dettaglio si nota che la parte cruciale per<br />
l’analisi <strong>del</strong>le caratteristiche di errore <strong>del</strong>la misura è costituita da un limitatissimo numero<br />
di istruzioni:<br />
poll_1: mov dx,CtrlAddr ; load port address<br />
mov al,00000100b ; preset OUT register of Ctrl<br />
cli ; for OR-ing with input data<br />
out dx,al<br />
in al,dx ; read data from Ctrl register<br />
and al,00000001b ; only bit 0 = input(1)<br />
cmp al,[bp-08] ; changed?<br />
jne time_read_1 ; yes -> exit pool loop<br />
sti<br />
mov ax,ds:[0017h] ; get keyboard word flag<br />
test ah,00000100b ; bit flag of SysRq pressed<br />
jz poll_1<br />
jmp elabora ; key pressed? -> stop measure<br />
La parte attiva, quella cioè che definisce la finestra di acquisizione e perciò l’errore<br />
massimo assoluto <strong>del</strong>la determinazione <strong>del</strong> tempo, è costituita dalle istruzioni elencate<br />
meno l’ultima, inserita per indicare che lì l’acquisizione è di un tempo è terminata. Se,<br />
usando il manuale dei microprocessori <strong>del</strong>la serie 80x86 e Pentium, si contano e si sommano<br />
i cicli <strong>del</strong>le istruzioni si arriva ad un totale di XX cicli <strong>del</strong> clock interno <strong>del</strong> microprocessore:<br />
per gli 80486 più lenti questo fa 25XX ns e 15.15XX ns per i più veloci. Usando un<br />
moderno Pentium a 500 MHz il risultato sarebbe 2XX ns.<br />
Si può notare perciò che anche su calcolatori non giovanissimi la finestra di acquisizione<br />
è inferiore a 10 µs, quindi il valore <strong>del</strong> tempo in secondi restituito dalla routine ha almeno<br />
cinque cifre significative dopo il punto. Per giunta un vettore di tempi di un migliaio e più<br />
di elementi può consentire una analisi abbastanza raffinata <strong>del</strong> fenomeno studiato. Questo<br />
in effetti succede sia per l’esperienza <strong>del</strong> pendolo che per quella <strong>del</strong> volano. Purtroppo,<br />
quando l’acquisizione si protrae per qualche decina di secondi e, per giunta, gli istanti<br />
di acquisizione sono molto ravvicinati, è molto probabile che appaia evidente il disturbo<br />
ineliminabile dato dalla apparizione, all’interno <strong>del</strong>la finestra di acquisizione, di un interrupt<br />
<strong>del</strong> TOD. Questo interrupt impedisce il polling veloce <strong>del</strong>la porta parallela (nota: to poll, in<br />
inglese, ha, tra i vari significati, quello di “registrare i voti”. Nel gergo dei calcolatori viene<br />
usato per significare la operazione di esaminare lo stato di un registro software o hardware<br />
5
<strong>del</strong>la macchina) e, per così dire, acceca per un tempo che può essere di parecchie decine<br />
di microsecondi il sistema di acquisizione: per dirla in poche parole, talvolta la finestra<br />
di acquisizione passa dal suo valore inferiore a 10 µs a un valore un ordine di grandezza<br />
più grande. Questo fenomeno sposta in avanti l’istante di riconoscimento <strong>del</strong>la transizione<br />
sulla porta parellela e perciò modifica il tempo registrato. Nell’esperienza <strong>del</strong> pendolo<br />
questo fatto succede tanto raramente che non mi pare sia mai stato visto, nelle misure<br />
fatte negli anni passati; al contrario, nel moto <strong>del</strong> volano l’evento può verificarsi anche<br />
quattro o cinque volte. Vedremo nella sezione dedicata alle singole esperienze in che modo<br />
questa circostanza appaia e quali conseguenze porta nell’analisi <strong>del</strong> moto.<br />
3 - Breve descrizione dei programmi in Turbo Pascal<br />
Questi programmi hanno tutti la stessa struttura: una prima parte di dichiarazione<br />
di variabili e di scambio di informazioni con lo sperimentatore per inizializzare la misura,<br />
una zona centrale in cui viene effettuata la chiamata <strong>del</strong>la routine di acquisizione dei tempi<br />
e una parte finale in cui i tempi ricevuti vengono scritti, in qualche formato ragionevole,<br />
sullo schermo o in un file su disco. In tutti i programmi è presente una coppia di istruzioni:<br />
Procedure Stream(NMax:Integer; Var NMis:Integer; Var Times:ArTimes); external;<br />
{$L STRMUD.OBJ}<br />
che hanno il compito di dichiare esterna la routine Stream e di dare le informazioni sul file<br />
necessario e poi la istruzione<br />
Stream(NMax,NMis,Times);<br />
che effettua la chiamata <strong>del</strong>la routine.<br />
i - Moto su un piano inclinato: la routine Piano incl.pas si limita ad acquisire una<br />
coppia di tempi alla volta e a restituire, sullo schermo, la loro differenze che costituisce,<br />
a seconda <strong>del</strong> caso, il tempo di volo o il tempo di transito <strong>del</strong>la pallina tra i traguardi<br />
ottici. Per evitare che lo sperimentatore debbe richiamare ogni volta il file eseguibile,<br />
si chiede quante volte si vuol eseguire la misura.<br />
ii - Moto di un volano, sia libero che con forza esterna: le due routines, Volano.pas e<br />
Pesino.pas in questo caso eseguono una singola misura. Al solito, iniziano preparando<br />
i dati di acquisizione: nel caso <strong>del</strong> volano si può chiedere il numero massimo di giri, nel<br />
caso <strong>del</strong> pesino è meglio fare prima qualche prova per vedere quanti giri fa il volano<br />
prima di arrestarsi, in modo da fornire al programma un valore ragionevole. Alla fine<br />
<strong>del</strong>la misura, il programma scrive, nel directory corrente, tre files<br />
- NOME.DAT, dove NOME è VOLANO o PESINO a seconda <strong>del</strong> programma, che<br />
contiene tutti i tempi misurati.<br />
- NOME.VAI, dove NOME è VOLANO o PESINO a seconda <strong>del</strong> programma, che<br />
contiene una preelaborazione dei tempi. VAI significa “velocità angolare istantanea”,<br />
cioè il rapporto fra l’ampiezza <strong>del</strong> settore <strong>del</strong>l’encoder (π/20) e il tempo di<br />
transito sul settore.<br />
- NOME.VAM, dove NOME è VOLANO o PESINO a seconda <strong>del</strong> programma, che<br />
contiene una successiva elaborazione. VAM significa “velocità angolare media”,<br />
cioè una media sul giro <strong>del</strong>le velocità scritte nel file .VAI.<br />
6
Dato che i nomi dei files sono scritti nel programma, gli eventuali files precedenti<br />
vengono sovrascritti. E’ necessario che lo sperimentatore li rinomini o li salvi altrove<br />
ad una successiva esecuzione, E’ durante l’esecuzione di questo programma che è<br />
facile incappare nel problema <strong>del</strong>l’interrupt di tempo reale: le velocità angolari che<br />
si possono raggiungere con questo sistema sono <strong>del</strong>l’ordine di 30 rad/s, quindi gli<br />
intervalli di tempo misurati sono spaziati di circa 10 ms. Il numero di tempi misurati<br />
può essere <strong>del</strong>l’ordine di alcune migliaia: nel file VOLANO.VAI è frequente incontrare<br />
violenti sbalzi <strong>del</strong>la velocità angolare media dovuti a questo fenomeno. Ovviamente,<br />
questo fatto sparisce completamente quando si fa la media su 20 valori, cioè su un<br />
giro.<br />
iii - Moto di un pendolo: in questo caso ls routine da chiamare è pendolo. Il listato<br />
<strong>del</strong> programma Pascal sta nel file Pendolo.pas disponibile in ftp; il programma<br />
scrive un solo file, di nome fisso, PENDOLO.DAT, contenente tutti i tempi misurati<br />
scritti in sequenza. Volendo utilizzare questi dati, ricordarsi di segnarsi la larghezza<br />
<strong>del</strong>la bandierina di cartoncino appesa sotto la massa pendolare. Volendo ottenere<br />
dei risultati da vedere immediatamente, si può usare il comando pendred cge è un<br />
eseguibile ottenuto convertendo comandi scritti in un linguaggio un po esoterico,<br />
almeno per la maggioranza, che si chiama APL, acronimo per A programming Language,<br />
un linguaggio di programmazione pensato da Kenneth Iverson molti anni fa, implementato<br />
in un linguaggio di programmazione in IBM e caratterizzato dal fatto di poter<br />
lavorare in modo nativo usando vettori e matrici rettangolari e non di dimensioni<br />
qualsivoglia (naturalmente entro i limiti <strong>del</strong>la memoria disponibile sulla macchina!).<br />
Questo programmma richiede, ovviamente, la larghezza <strong>del</strong>la bandierina e produce un<br />
paio di files, PENDOLO.TAB e PENDOLO.TRY: il primo contiene una tabella, la cui prima<br />
colonna rappresenta il tempo, la seconda il periodo, la terza e la quarta la velocità<br />
massima e il suo quadrato e l’ultima il fattore di merito <strong>del</strong> pendolo. Il secondo<br />
file interessa coloro che posseggono la versione IBM di pubblico dominio per scopi<br />
educativi di APL2, TryAPL2.<br />
7
Pendoli e scheda audio<br />
Questa esperienza è una modifica di una esperienza usata precedentemente nel corso<br />
di Esperimentazioni di <strong>Fisica</strong> 1: una coppia di pendoli, accoppiati mediante una molla,<br />
oscillano e il loro moto viene registrato estrando un segnale elettrico analogico da un<br />
semplice dispositivo resistivo e inviandolo a un dispositivo x − t che trasforma il segnale<br />
in un grafico su carta.<br />
Il sistema veniva usato anche per una misura <strong>del</strong>la curva di risonanza di un pendolo e<br />
poneva un sacco di problemi, oltre ad avere un costo <strong>note</strong>vole al momento in cui si doveva<br />
sostituire un x − t, dato che questi dispositivi sono ormai sempre meno usati. Il sistema di<br />
acquisizione è stato allora sostituito con un sistema <strong>elettronico</strong> su <strong>calcolatore</strong> sviluppato<br />
da una piccola azienda di laureati nel Corso di Laurea in <strong>Fisica</strong> di Pisa. Il sistema usa un<br />
dispositivo divenuto ormai comunissimo su tutti i PC: la scheda audio: questa contiene<br />
un convertitore ADC (Analog to Digital Converter) e l’idea di questi giovani è stata quella<br />
di utilizzarlo per la conversione digitale <strong>del</strong> segnale in tensione generato dall’apparato<br />
sperimentale. Purtroppo, proprio a causa <strong>del</strong> fatto che la scheda si chiama audio, la<br />
efficienza in input <strong>del</strong>l’ingresso di segnale audio è pressoché nulla almeno fino alle prime<br />
frequenze acustiche, cioè almeno un centinaio di Hertz: i pendoli invece oscillano con<br />
frequenze <strong>del</strong>l’ordine <strong>del</strong>lo Hertz. Il segnale in tensione allora viene usato per modulare un<br />
oscillatore ad onda quadra alla frequenza di 500 Hz. Il segnale ottenuto viene portato al<br />
livello giusto per l’ingresso line <strong>del</strong>la scheda audio e poi campionato in modo da trovare,<br />
mediante una taratura effettuata in precedenza, un valore per lo spostamento in funzione<br />
<strong>del</strong> tempo.<br />
Questo sistema, che può essere anche esteso a parecchi altri fenomeni in cui il segnale<br />
fisico può essere trasfomato in segnale elettrico analogico, ha ovviamente alcuni difetti<br />
rispetto al più ovvio ma molto più costoso sistema di usare una scheda di acquisizione vera<br />
e propria: il primo è che solo il <strong>calcolatore</strong> funziona da sistema di acquisizione per cui il<br />
tempo ha un significato che non è proprio quello di tempo reale. Al contrario una scheda<br />
di acquisizione può avere un suo clock interno e perciò il tempo acquisito può esser pensato<br />
reale. Il secondo è che, proprio per il meccanismo di trasformazione in segnale modulato<br />
a frequenza acustica, la finestra temporale di acquisizione diventa <strong>del</strong>l’ordine di alcuni<br />
millisecondi e questo limita la possibilità di analisi di fenomeni rapidamente variabili.<br />
Il programma che è stato fatto per l’acquisizione (è stato scritto usando il linguaggioautore<br />
per multimediali “Macromedia Director” e funziona sotto Windows 95/98, usando<br />
parecchie routines Lingo) ha il pregio di fornire una visione accattivante <strong>del</strong> moto dei due<br />
pendoli per cui è stato previsto e di consentire anche qualche strumento di misura on-line,<br />
e fornisce in ogni caso i dati acquisiti (i raw-data) in modo da permettere una analisi<br />
approfondita off-line. Proprio nel file generato dalla routine Lingo che permetto l’output<br />
dei dati sta qualche problema, in quanto l’istruzione Lingo non consente di formattare in<br />
modo gradevole i dati prodotti: in ogni caso non c’è alcun problema a leggerli da Pascal o<br />
da C.<br />
A parte il problema <strong>del</strong> tempo non esattamente reale e <strong>del</strong>la necessità, almeno per<br />
ora, di lavorare in Windows, il sistema di usare la scheda audio fornisce un metodo<br />
assolutamente non costoso di aumentare le possibilità di uso di un PC in laboratorio,<br />
8
almeno nel caso di problemi in cui si possa lavorare con un paio al massimo di segnali<br />
analogici. Naturalmente una scheda di acquisizione effettiva permetterebbe una migliore<br />
e più affidabile acquisizione: il costo di una scheda di acquisizione di tipo industriale, <strong>del</strong><br />
software necessario a pilotarla e <strong>del</strong>le maggiori conoscenze tecniche che ne richiede l’uso va<br />
riservato, almeno in un corso di Laurea in <strong>Fisica</strong>, ai laboratori degli anni superiori.<br />
In ogni caso, da qualche anno, i produttori di schede audio possono fornire librerie di<br />
routines che ne permettono l’utilizzo, senza dover riscrivere il software di base, da parte<br />
di programmi scritti nei principali linguaggi di programmazione e per i principali sistemi<br />
operativi disponibili.<br />
9
Vscope e tavolo ad aria<br />
Anche questa è un’esperienza che è presente nel Corso di Laurea da parecchi anni; la<br />
tecnica di ridurre l’attrito nei moti di oggetti ha una storia molto lunga: si può far risalire<br />
ai primi anni ’60 quando il corso di fisica <strong>del</strong> PSSC (Physical Science Study Committee) è<br />
arrivato in Italia, è stato aprezzato e introdotto in molte scuole italiane per l’entusiasmo<br />
e il lavoro di un certo numero di allora giovani fisici, in gran parte legati all’Università di<br />
Pisa. I film che accompagnavano il corso mostravano in molti casi esperimenti eseguiti con<br />
gli ice pucks, i dischi a ghiaccio secco che sono stati dli antesignani dei sistemi ad aria.<br />
Il tavolo ad aria è un tavolo, idealmente piano ed orizzontale, che costituisce la<br />
superficie superiore di una scatola in cui si insuffla aria debolmente compressa che tende<br />
a sfuggire dai molti forellini di cui il tavolo è costellato. I getti d’aria che così si formano<br />
generano uno straterello d’aria al di sotto di dischi che sul piano sono appoggiati e riducono<br />
fortemente l’attrito fra piano e superficie inferiore <strong>del</strong> disco. Il moto di questi dischi vien<br />
assunto allora senza attrito anche se l’attrito con l’aria stessa e i microcontatti fra disco<br />
e piano dovuti ai problemi di lavorazione e alla ineliminabile polvere lasciano un visibile<br />
attrito residuo. La stessa cosa può esser realizzata, e anche in modo migliore date le<br />
migliori possibilità di lavorazione, su una rotaia: in questo caso, ovviamente, il moto è<br />
unidimensionale. La rotaia viene ovviamente chiamata “rotaia ad aria”.<br />
Il modo tradizionale di acquisizione su un sistema di questo genere è stato, originariamente,<br />
la fotografia stroboscopica. A parte il costo di macchine e flash che consentano<br />
questa tecnica, uno dei difetti principali è sempre stato quello di non consentire a più di un<br />
gruppo di sperimentatori di lavorare contemporaneamente. A Pisa, dove di tavoli ad aria<br />
ne sono presenti due e, al contrario, c’è sempre stata estrema carenza di spazio, la fotografia<br />
stroboscopica era stata sostituita da fotografia Polaroid di dischetti su cui era montato un<br />
piccolo oscillatore alimentante uno o due LED (Light Emitting Diode) messi in posizione<br />
strategica sul dischetto che rappresenta il corpo in moto. Questo sistema permette a due<br />
o più tavoli di funzionare contemporaneamente nella stessa stanza: si immagini però una<br />
stanza in cui una decina di studenti, un esercitatore e due tavoli funzionano AL BUIO e<br />
ci si rende contro <strong>del</strong>la non proprio agevole realizzabilità di questa esperienza.<br />
1 - Il Vscope <strong>del</strong>la ditta Litvak<br />
Da alcuni anni però una ditta israeliana commercializza un prodotto che consente di<br />
risolvere tutti i problemi sopra elencati ed anche qualcuno di più! La ditta è la Litvak di<br />
Tel Aviv e il dispositivo ha il nome di Vscope: viene oggi regolarmente usato quando si<br />
richieda una analisi di moti anche tridimensionali di un certo numero di oggetti o di parti<br />
di un oggetto. Per esempio, viene usato per la registrazione ed analisi <strong>del</strong> moto <strong>del</strong> corpo<br />
di un ballerino: questi dati sono essenziali quando si vuole costruire una copia sintetica di<br />
un oggetto <strong>del</strong> mondo reale. Film come Jurassic Park ed altri sarebbe stati molto meno<br />
realistici senza strumenti di questo genere!<br />
L’idea base di questo sistema di acquisizione di posizioni è il seguente: se un emettitore<br />
infrarosso genera un segnale luminoso di breve durata e un ricevitore emette, alla ricezione<br />
<strong>del</strong> segnale infrarosso, un segnale ultrasonoro, la misura <strong>del</strong> ritardo <strong>del</strong>la ricezione <strong>del</strong><br />
segnale sonoro rispetto alla partenza <strong>del</strong> segnale luminoso costituisce la base per una<br />
10
misura di distanza. In effetti, nella normale disposizione nel nostro laboratorio, le distanze<br />
sono <strong>del</strong>l’ordine <strong>del</strong> metro dunque i tempi di volo <strong>del</strong> segnale luminoso sono <strong>del</strong>l’ordine<br />
di 3 nanosecondi. Il segnale sonoro impiega invece un tempo <strong>del</strong>l’ordine di 3 millisecondi<br />
dunque 6 ordini di grandezza più grande.<br />
Il sistema è allora costituito da:<br />
1 - tre torrette, poste sulla parete ai vertici di un triangolo rettangolo verticale. I cateti<br />
<strong>del</strong> triangolo hanno lunghezze di poco inferiori a 1 metro. La torretta posta all’incrocio<br />
dei due cateti, torretta A, è quella <strong>del</strong>egata, al comando <strong>del</strong> <strong>calcolatore</strong> in tempo reale<br />
di controllo, ad emettere il segnale infrarosso di trigger.<br />
2 - uno o più (fino a quattro) ricevitori infrarossi ed emettitori ultrasonori, montati sugli<br />
oggetti di cui si vuo misurare la posizione. Questi ricevitori emettono ultrasuoni di<br />
differente frequenza e sono dunque “riconoscibili”.<br />
3 - un <strong>calcolatore</strong> in tempo reale, <strong>del</strong>egato a pilotare le torrettee a eseguire tutti i<br />
calcoli necessari per trovare la posizione dei ricetrasmettitori e a gestire il protocollo<br />
di scambio con il <strong>calcolatore</strong> in mano allo sperimetatore. Questo scambio vien fatto<br />
usando una linea seriale connessa alla porta seriale <strong>del</strong> PC e avviene contestualmente<br />
alla misura e permette perciò al <strong>calcolatore</strong> esterno di mostrare i risultati <strong>del</strong>la misura<br />
mano a mano che la misura avviene.<br />
4 - un <strong>calcolatore</strong> in tempo differito, asincrono rispetto al tempo reale <strong>del</strong>l’esperienza,<br />
sincronizzato con il <strong>calcolatore</strong> di acquisizione dal protocollo di scambio sopra citato.<br />
Su questo <strong>calcolatore</strong> viene fatto girare un software che consente di programmare modi<br />
e tempi di acquisizione, di visualizzare i risultati man a mano che il sistema reale li<br />
fornisce e di salvare i risultati su disco alla fine <strong>del</strong>l’acquisizione in tempo reale.<br />
La figure di pagina XX mostrano i vari componenti <strong>del</strong> sistema, la disposizione scelta<br />
per le torrette, l’interfaccia utente <strong>del</strong> software e qualche esempio dei risultati che il sistema<br />
consente di ottenere.<br />
A parte l’interesse fisico che questa esperienza può avere e che discuteremo in seguito<br />
sugli esempi che vengono normalmente usati nel corso di Esperimentazioni, questo sistema<br />
di acquisizione ha grande interesse perchè rappresenta un esempio di come si utilizzano i<br />
calcolatori, sia nell’industria che nella ricerca scientifica avanzata. Il disaccoppiamento<br />
<strong>del</strong> <strong>calcolatore</strong> di acquisizione dal <strong>calcolatore</strong> di processo, che è qui articolato in due<br />
stadi, esemplifica le tecniche di stratificazione <strong>del</strong>le CPU in strati in tempo reale (quelli<br />
direttamente connessi all’apparato sperimentale) e strati in tempo differito (quelli <strong>del</strong>egati<br />
alla analisi fisica dei dati sperimentali) connessi da uno strato che realizza il protocollo di<br />
accoppiamento-disaccoppiamento fra i due strati estremi.<br />
2 - Uso <strong>del</strong> Vscope sul tavolo ad aria<br />
Tornando a vedere la fisica che si fa a Pisa con questi sistemi, notiamo subito che,<br />
proprio per l’utilizzo sul tavolo ad aria, le velocità degli oggetti che si studiano sono di poco<br />
superiori ad 1 m/s: dato che il Vscope permette una cadenza temporale minima di 20 ms e<br />
dichiara una sensibilità spaziale <strong>del</strong>l’ordine di 0.1 mm le posizioni acquisite sono in numero<br />
sufficiente e di precisione sufficiente per una analisi efficiente <strong>del</strong> moto. Le esperienze<br />
effettuate con una sola pedina, con cadenza temporale tipica di 25 ms, consentono di salvare<br />
files dei raw data di parecchie decine di posizioni in funzione <strong>del</strong> tempo.<br />
11
Qualche problema appare nel caso che si voglia fare esperimenti con una coppia di<br />
sensori: il software alterna ciclicamente la misura <strong>del</strong>la posizione dei vari sensori, quindi<br />
una cadenza temporale quale quella unidimensionale si traduce in dati spaziati di 50 ms<br />
e, peggio ancora, non contemporanei sui due sensori. Questa situazione, che si presenta<br />
quando si fanno esperimenti d’urto, crea parecchi problemi specialmente nella misura <strong>del</strong>le<br />
condizioni iniziali dei due oggetti che si urteranno. Per giunta, in esperimenti di questo<br />
genere, la dimensione spaziale estesa <strong>del</strong>le pedine aggiunge gradi di libertà rotazionali che<br />
non possono misurati con questa tecnica. Ovviamente, nel caso di tre o quattro sensori, il<br />
tempo base si moltiplica per tre o per quattro.<br />
Lo studio di un moto sul piano consente di analizzare con una certa precisione le<br />
caratteristiche <strong>del</strong>l’acquisizione di posizione: dato che il sistema restituisce posizioni in<br />
tre dimensioni, nel moto piano si può usare la coordinata verticale z per fare test sul<br />
rumore presente nel sistema. Un modo migliore di studiare questo problema è poi quello<br />
di misurare la posizione di una pedina ferma sul piano. Si vede che, per quanto la ditta<br />
fornitrice dia un decimo di millimetro come precisione <strong>del</strong> dato, le coordinate possono<br />
fluttuare per un millimetro e più. D’altra parte, usando la funzione <strong>del</strong> software che<br />
permette di fare un test <strong>del</strong> sistema, si nota che proprio la struttura fisica <strong>del</strong> sistema<br />
“tavolo ad aria” introduce un repporto segnale/rumore il cui inverso non è mai inferiore a<br />
qualche dieci per cento. Il rumore <strong>del</strong>l’aria compressa nei tubi di trasporto e sui fori d’uscita<br />
è responsabile di ciò, in particolare sulla torretta più vicina ai giunti di ingresso <strong>del</strong>l’aria.<br />
Quindi, per quanto il sistema sia raffinato (ad esempio, la variazione <strong>del</strong>la velocità <strong>del</strong><br />
suono con la temperatura viene controllata misurando la temperatura <strong>del</strong>l’aria mediante<br />
termistori inseriti nelle torrette) è ben difficile poter assegnare alle misure di posizione un<br />
errore inferiore al millimetro.<br />
In aggiunta, e ciò si può vedere facendo riferimento al disegno 1 in una pagina<br />
successiva, la stessa geometria <strong>del</strong> tetraedro irregolare che serve di base al sistema di<br />
misurazione può forzare errori di approssimazione nel caso che gli angoli diventino molto<br />
piccoli: purtroppo, nulla si sa <strong>del</strong>l’algoritmo esatto usato per la ricostruzione geometrica,<br />
da cui dipende la ricostruzione <strong>del</strong>le coordinate x, y e z fornite dal sistema.<br />
In ogni caso, comunque, la misura di posizione è sufficientemente raffinata e frequente<br />
da poter fornire un ragionevole insieme di dati di base. Da questi il software permetterebbe<br />
di ricavare anche velocità ed accelerazioni, ma è meglio, in assenza <strong>del</strong>le specifiche dei<br />
programmi che lo fanno, scrivere programmi esterni che consentono di usare algoritmi di<br />
cui è noto l’errore. Se a questo si aggiunge il fatto che la misura viene fatta in condizioni<br />
di illuminazione normale, ci si rende conto che il sistema è molto adatto ad un’aula di<br />
esercitazioni.<br />
Le illustrazioni nella pagina che segue mostrano alcuni aspetti <strong>del</strong> sistema, da un<br />
disegno <strong>del</strong>la geometria usata per l’acquisizione al <strong>calcolatore</strong> di interfaccia e alle pedine<br />
attive.<br />
12
disegno 1<br />
13
1 - Programma Pendolo.pas<br />
Listati di alcune routines TurboPascal<br />
{$N+}<br />
{$F+}<br />
program Volano;<br />
uses Crt;<br />
type<br />
ArTimes = array[1..3001] of Double;<br />
TypeName = string[12];<br />
var<br />
Giri,NMax,NMis,j: integer;<br />
Times: ArTimes;<br />
Name: TypeName;<br />
cc: char;<br />
oufil: text;<br />
ITim: double;<br />
Procedure Stream(NMax:Integer;Var NMis:Integer;Var Times:ArTimes);external;<br />
{$L STRMUD.OBJ}<br />
begin<br />
Writeln(’Programma di lettura di tempi di un pendolo’);<br />
Writeln(’-------------------------------------------------’);<br />
Writeln(’ ’);<br />
Writeln(’Dai il numero di periodi da misurare (minore o uguale a 1000):’);<br />
Read(Giri);<br />
if (Giri>1000) then Giri := 1000;<br />
NMax := 1+Giri*4;<br />
Writeln(’Preparare apparato e premere ENTER per iniziare la misura ..’);<br />
Readln(cc);<br />
Stream(NMax,NMis,Times);<br />
Times[NMis+1] := 0.0;<br />
Writeln(’Sono state fatte ’,NMis,’ misure di tempo’);<br />
j := 1;<br />
ITim := Times[1];<br />
repeat<br />
Times[j] := Times[j] - ITim;<br />
j := j+1;<br />
until (j>NMis);<br />
Name := ’PENDOLO.DAT’;<br />
Assign(oufil,Name);<br />
Rewrite(oufil);<br />
j := 1;<br />
repeat<br />
Writeln(oufil,Times[j]:20:12,Times[j+1]:20:12);<br />
14
j := j+2;<br />
until (j>NMis+1);<br />
Close(oufil);<br />
Writeln(’La misura e’ terminata’);<br />
Writeln(’I tempi sono stati scritti in ’,Name,’ (due per riga)’);<br />
end.<br />
1 - Programma Volano.pas<br />
{$N+}<br />
{$F+}<br />
program Volano;<br />
uses Crt;<br />
type<br />
ArTimes = array[1..3001] of Double;<br />
TypeName = string[12];<br />
var<br />
Giri,NMax,NMis,j: integer;<br />
Times: ArTimes;<br />
Name: TypeName;<br />
cc: char;<br />
oufil: text;<br />
Procedure Stream(NMax:Integer;Var NMis:Integer;Var Times:ArTimes);external;<br />
{$L STREAM.OBJ}<br />
function RString : TypeName;<br />
var<br />
N: TypeName;<br />
i: integer;<br />
a: char;<br />
begin<br />
for i:=1 to 12 do N[i] :=’ ’;<br />
i := 1;<br />
repeat<br />
a := ReadKey; Write(a);<br />
if (a #13) then begin<br />
N[i] := a; i := i+1; end;<br />
until (a=#13) or (i=9);<br />
Writeln(#10);<br />
N[i] := ’.’;N[i+1] := ’D’;N[i+2] := ’A’;N[i+3] := ’T’;<br />
Rstring := N;<br />
end;<br />
begin<br />
Writeln(’Programma di lettura di tempi di un volano’);<br />
15
Writeln(’------------------------------------------’);<br />
Writeln(’ ’);<br />
Writeln(’Numero di giri da misurare (minore o uguale a 150):’);<br />
Read(Giri);<br />
if (Giri>150) then Giri := 150;<br />
NMax := 1+Giri*20;<br />
Writeln(’Preparare apparato e premere ENTER per iniziare ......’);<br />
Readln(cc);<br />
Stream(NMax,NMis,Times);<br />
Times[NMis+1] := 0.0;<br />
Writeln(’Sono state fatte ’,NMis,’ misure di tempo’);<br />
Writeln(’Nome <strong>del</strong> file dei risultati (max 8 chars):’);<br />
Name := Rstring;<br />
Assign(oufil,Name);<br />
Rewrite(oufil);<br />
j := 1;<br />
repeat<br />
Writeln(oufil,Times[j] :20 :12 , Times[j+1] :20 :12);<br />
j := j+2;<br />
until (j>NMis+1);<br />
Close(oufil);<br />
Writeln(’Misura terminata: i tempi sono scritti in ’,Name);<br />
Writeln(’(due per riga)’);<br />
end.<br />
16