Pianola

Ultrasuoni: commutazione tra due frequenze

Per risolvere il problema, abbiamo pensato di modulare il segnale a ultrasuoni non più in ampiezza (trasmissione a 40 kHz / assenza di trasmissione), ma in frequenza (trasmissione a frequenza f0 / trasmissione a frequenza f1) utilizzando due frequenze diverse nell'intorno di 40 kHz, comprese perciò nella "banda di lavoro" dei sensori piezoelettrici a nostra disposizione. La fattibilità di una simile soluzione ci è stata confermata da due articoli, in cui si suggerisce un approccio di questo tipo, pur lavorando con un solo trasmettitore e un solo ricevitore, per una misura di distanza particolarmente accurata: "A high accuracy ultrasonic distance measurement system using binary frequency shift-keyed signal and phase detection".

Articolo Ottobre 2002

Articolo Dicembre 2007

Di conseguenza abbiamo modificato il programma del PIC, portando il trasmettitore a trasmettere ciclicamente un numero determinato di impulsi a frequenza minore di 40 kHz e poi un certo numero di impulsi a frequenza maggiore di 40 kHz. La transizione tra le due frequenze al trasmettitore era pressoché immediata (un solo periodo a frequenza intermedia), al ricevitore invece c'erano sempre alcuni periodi di transizione, in numero che però pareva sempre uguale sui due canali. L'ampiezza, com'è naturale, non aveva più alcuna influenza e praticamente da subito rimaneva costante al valore di regime.

Abbiamo quindi scritto il programma per il DSP. Avendo a disposizione solo due timer e dovendo misurare il periodo su entrambi i canali (per rilevare la variazione di frequenza) e inoltre la differenza di tempo tra l'istante in cui la variazione avviene su un canale e quello in cui avviene sull'altro, abbiamo pensato a un algoritmo che in questo foglio Excel è illustrato in pseudocodice.

I due timer misurano il periodo sui due canali; la variabile owner tiene conto del canale che sta gestendo il conteggio della differenza di tempo e vale 0 se nessuno dei due canali sta contando. Se su un canale si ha variazione di frequenza, si guarda owner: se è 0, bisogna aprire il conteggio della differenza di tempo, se è l'altro canale bisogna terminare il conteggio.

I problemi sono sorti nell'implementazione sul DSP perché tutto avviene tramite interrupt. I risultati forniti erano spesso buoni, eppure peggioravano notevolmente ponendo l'emettitore all'incirca nel mezzo. Ovvio: quanto più l'emettitore è vicino al punto intermedio tra i due ricevitori, tanto più la gestione degli interrupt è complessa. Nel caso ideale in cui il trasmettitore fosse esattamente equidistante dai due ricevitori, le procedure di avvio e di interruzione del conteggio andrebbero attivate contemporaneamente. È evidente che una simile situazione è ingestibile.

Inoltre la diversità fisica tra i due ricevitori rischiava di essere ancora fonte di problemi. In ragione di queste considerazioni, abbiamo pensato di cambiare ancora una volta strategia e di ricondurci a un caso più standard, di minore complessità.