05.03.2013 Views

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"

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!