Generazione di suoni con FUJITSU MB1460

Visualizzazione di contenuti grafici e riproduzione del suono sono divenute ormai caratteristiche irrinunciabili nei moderni sistemi embedded. Nel settore audio, in particolare, se da un lato esistono codec più o meno complessi che implementano le principali funzionalità per applicazioni ad elevata qualità, dall’altro i moderni microcontrollori integrano già periferiche che consentono facilmente la generazione di suoni in sistemi low-cost. Il presente articolo presenta in particolare alcuni esempi basati sui dispositivi della famiglia MB91460 di Fujitsu.

Il suono non è altro che una oscillazione dell’area percepita dall’udito come conseguenza della vibrazione di una sorgente di onde acustiche. Come al solito, si può rappresentare come sovrapposizioni di vibrazioni elementari che assumono forma di onde sinusoidali di ampiezza variabile a diverse frequenze; ogni armonica rappresenta un tono del segnale acustico. Acquisizione e riproduzione del suono si riducono quindi, al solito, al campionamento ed alla sintesi di segnali analogici.

Generazione del suono con modulazione PCM

PCM (Pulse-Code Modulation) è una tecnica piuttosto diffusa per la rappresentazione di un segnale analogico,  il quale viene campionato ad intervalli regolari, quantizzato e tradotto in un codice numerico (tipicamente binario); la frequenza minima di campionamento per evitare fenomeni di aliasing (comparsa di frequenze spurie nello spetto del segnale campionato) è dettata dal teorema di Nyquist e dipende dal contenuto in frequenza del segnale. Nel caso delle applicazioni audio, in particolare, considerata la risposta dell’orecchio umano, la frequenza di campionamento per ricostruire un suono di qualità accettabile è tipicamente compresa tra 16 KHz e 44.1 kHz. Utilizzata fin dai primi sistemi telefonici, la modulazione PCM ha trovato ampia applicazione soprattutto negli anni ’80 - nelle prime tastiere musicali, ad esempio - ed è stata successivamente adottata nei CompactDisk ‘Reed Book’, uno di primi standard per CD audio introdotto da Philips e Sony. Per sintetizzare un segnale audio mediante tecniche PCM è sufficiente quindi disporre, in linea di principio, della sequenza di campioni e di un circuito per riconvertire in analogico  il segnale digitale. I microcontrollori  della serie MB91460 di Fujitsu presentano, ad esempio, fino a 72 porte di GPIO che possono essere utilizzate per pilotare un classico convertitore A/D. Integrano inoltre un controller DMA che permette di trasferire direttamente i campioni dalla memoria alla porta di uscita alla frequenza di sintesi e senza intervento della CPU. Un metodo alternativo, utilizzato nelle applicazioni low-cost, si basa sulla modulazione PWM (PulseWidth Modulation). Nelle tecniche PWM, i simboli dell’informazione originaria (in questo caso i campioni del segnale audio) vengono impiegati per modulare proporzionalmente  il duty-cycle di un’onda quadra in uscita; il segnale modulato viene quindi utilizzato per controllare uno switch di corrente la cui uscita è filtrata mediante filtro passa-basso prima di finire in ingresso allo speaker. Gli amplificatori di classe D, ad esempio, si basano proprio su questo principio. In realtà, nelle applicazioni più semplici e qualora non sia richiesta elevata qualità dell’audio sintetizzato, il segnale PWM può essere portato in ingresso direttamente allo speaker sfruttandone le intrinseche proprietà fisiche (limitata risposta in frequenza, auto-induttanza, capacità parassita); la qualità dipende fortemente dalla particolare implementazione ma, come detto, la soluzione non richiede componenti aggiuntivi ed è piuttosto a basso costo. I  microcontrollori  Fujitsu  della  serie MB91460, in particolare, integrano fino a 16 controller PPG (Programmable Pulse Generator) che possono essere utilizzati per modulare un segnale PWM. La figura 1 mostra uno schema di principio delle risorse impiegate per la generazione del suono in base a tale schema; due controller possono essere utilizzati in parallelo nel caso di riproduzioni stereo.

Figura 1: generazione di suoni mediante modulazione PWM nei micro Fujitsu serie MB91460 (da [1]).

Figura 1: generazione di suoni mediante modulazione PWM nei micro Fujitsu serie MB91460 (da [1]).

Come nell’esempio precedente, la tabella dei campioni del segnale audio è contenuta in memoria.  Il controller DMA si occupa del trasferimento dei campioni da questa al PPG; il trasferimento  è sincronizzato dal Reload Timer. Il modulo è configurato con clock interno, software trigger (per poter controllare tramite programma l’inizio della riproduzione audio) ed opera in modalità reload/reload automatico; il valore del timer, in particolare, definisce la frequenza di ricostruzione del segnale audio. Al timeout, il timer ricarica automaticamente e genera una richiesta di trasferimento al controller DMA. Il controller  è configurato per trasferimento singolo a 16-bit, pari alla risoluzione del PPG. Tra i vantaggi  principali della soluzione vi sono la relativa semplicità circuitale ed il carico trascurabile sulla CPU che viene interrotta soltanto quando il controller DMA ha consumato l’intero buffer allocabile in memoria (128 kByte) per i campioni del suono da riprodurre. Gli svantaggi principali sono legati invece alla risoluzione del PPG a 16 bit che richiede necessariamente due byte per campione – anche se nelle applicazioni più semplici la risoluzione con cui il suono viene digitalizzato può essere di soli 8-bit – e l’elevata capacità di memoria richiesta – fino a 32 kByte al secondo ad una frequenza minima di campionamento di 16 kHz (tale difficoltà, del resto, è alla base dell’utilizzo degli algoritmi quali l’MP3 per la compressione dello stream audio). Inoltre, nel caso di attività della CPU sul bus interno ed a causa della priorità inferiore assegnata al controller DMA nell’arbitraggio delle risorse, si può determinare una perdita di sincronizzazione tra il reload del PPG ed il trasferimento  in DMA del campione con il risultato  di un deterioramento della qualità del suono riprodotto. Purtroppo però, tali effetti sono difficilmente prevedibili e dipendono fortemente dalla particolare applicazione.

Generazione del suono con modulazione di tono e ampiezza

Come abbiamo visto, uno degli svantaggi principali delle tecniche PCM descritte è legato alla elevata capacità di memoria richiesta per memorizzare  i campioni del segnale,  il che rende difficile nelle applicazioni embedded a basso costo eseguire lunghe sequenze audio; d’altro canto l’utilizzo di formati compressi per la memorizzazione dei dati richiederebbe un carico computazionale per la CPU non sempre sostenibile. Una soluzione più semplice, sebbene non in grado di garantire la stessa qualità del suono riprodotto, è basata su una modulazione di tono e ampiezza. In questo caso vengono mixati due segnali PWM. Il primo ha una frequenza variabile ma un duty-cycle costante del 50% e definisce il particolare tono del segnale (ovvero la frequenza dell’armonica corrispondente) che sarà riprodotto. Il secondo, invece, ha frequenza costante ma duty-cycle dettato dall’ampiezza del tono associato. I  microcontrollori Fujitsu della famiglia MB91460 integrano un Sound Generator che supporta appunto tale funzionalità. La figura 2 mostra lo schema di principio delle risorse utilizzate per la generazione di suono in tale modalità.

Figura 2: generazione di suoni mediante modulazione tono e ampiezza nei micro Fujitsu serie MB91460 (da [1]).

Figura 2: generazione di suoni mediante modulazione tono e ampiezza nei micro Fujitsu serie MB91460 (da [1]).

Figura 3: architettura dei micro MB91460 (da [1]).

Figura 3: architettura dei micro MB91460 (da [1]).

La frequenza del tono è derivata dalla frequenza di base dell’oscillatore mediante prescaler programmabile. All’interno di ogni ciclo di tono, poi, il duty-cycle del segnale PWM che ne determina infine l’ampiezza può essere configurata con risoluzione 8-bit; il segnale PWM associato è disponibile anche come uscita indipendente  (SGA) del microcontrollore. Il segnale audio da riprodurre viene descritto come una successione di note; ogni nota viene rappresentata in memoria con 3 byte che definiscono la frequenza del tono associato, l’ampiezza corrispondente e la costante di decadimento che è direttamente legata alla durata temporale della nota (ovvero al numero di cicli di tono per la quale la nota deve essere mantenuta pur riducendone ad ogni ciclo l’ampiezza). Tali parametri consentono di programmare i corrispondenti  registri di configurazione del microcontrollore; al termine di ogni nota il Sound Generator inoltra un interrupt verso la CPU per richiedere  il caricamento dei parametri della nota successiva. La dimensione della tabella in memoria che rappresenta il  suono da sintetizzare dipende dal tipo di melodia che si riproduce, ovvero dal numero di note presenti; nel caso precedente, invece, trattandosi di campioni di un segnale, la quantità di memoria necessaria dipendeva dalla lunghezza del suono e dalla frequenza di campionamento. La stessa quantità di dati trasferiti internamente è inferiore, per cui tale soluzione soffre meno di eventuali overhead sul bus dati della CPU; anche la frequenza di interruzioni è piuttosto bassa. Come già accennato in precedenza, tuttavia, la qualità del suono riprodotto è peggiore a causa soprattutto di una distorsione del segnale alle bassa frequenze;  il sistema inoltre non è in grado di sintetizzare suoni complessi derivanti dalla sovrapposizioni di armoniche e non può riprodurre, ad esempio, la voce.

 

 

 

Scarica subito una copia gratis

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend