Questo articolo, dal carattere prettamente pratico, ha lo scopo di guidare il lettore nella realizzazione di un sintonizzatore FM digitale dalle prestazioni di assoluto rilievo. Di semplice e sicura realizzazione, il progetto servirà come base per l’allestimento di un semplice ma completo CarPC, ovvero un vero e proprio sistema di infotainment dotato di schermo touchscreen e interfaccia grafica avanzata.
Introduzione
Un tempo, i sistemi di intrattenimento che equipaggiavano le auto di serie, quando presenti, erano ridotti ai minimi termini. Ci si doveva accontentare di un’autoradio AM/FM (non sempre abbinata ad un’antenna di elevata qualità e selettività) e di un lettore di musicassette. I più fortunati, soprattutto se amanti della buona musica e dei watt, ricorrevano a soluzioni aftermarket, di elevata qualità ma anche piuttosto costose. L’avvento dell’era digitale e dei supporti multimediali (CD, DVD e, successivamente, unità di memoria con interfaccia USB) hanno radicalmente trasformato i sistemi di intrattenimento per applicazioni automotive. I sintonizzatori digitali, solitamente dotati di funzionalità RDS (Radio Data System) consentono una ricezione sempre ottimale del segnale radio, con handover automatico quando, viaggiando, la stessa stazione passa da una frequenza ad un’altra. I supporti multimediali consentono la riproduzione di audio e video in formato digitale (anche con compressione), garantendo sempre lo stesso standard qualitativo in ogni condizione operativa e senza essere soggetti ad usura (chi ha avuto modo di utilizzare i nastri, sa a cosa mi riferisco). I più moderni sistemi di infotainment sono gestiti da un’interfaccia HMI (Human Machine Interface) avanzata che include tasti multifunzione, encoder rotativi (rotary encoder), display multifunzione spesso dotati di funzionalità touchscreen con multi-touch capacitivo. Scopo di questo articolo è quello di proporre un progetto DIY semplice, economico e di facile realizzazione attraverso il quale il lettore può costruire un carPC, ovvero un sistema con prestazioni paragonabili a quelle appena descritte, basato su una piattaforma embedded molto diffusa tra i makers e gli appassionati di elettronica: il Raspberry Pi. In questa prima parte vedremo l’integrazione della funzionalità radio digitale FM con RDS, la base sulla quale costruire l’intero sistema.
Elenco componenti
Entriamo subito nel vivo del progetto esaminando la lista dei componenti richiesti per la realizzazione della prima parte del progetto carPC. L’elenco è il seguente:
- scheda Raspberry Pi 3 B/B+. Questa scheda, visibile in Figura 1, non ha bisogno di alcuna presentazione. Si tratta infatti di un Single Board Computer (SBC) particolarmente apprezzato dai makers per il suo ottimo rapporto qualità/prezzo, la capacità di supportare diverse distribuzioni Linux, nonché numerosi linguaggi e strumenti di sviluppo. Anche se nella realizzazione del progetto è stata utilizzata la versione 3, il componente non è di per sé critico e quindi può essere utilizzata una versione di board precedente, oppure la versione più recente, il Raspberry Pi 4. Consigliamo comunque di utilizzare almeno la versione 2 del Raspberry Pi, in modo tale da avere a disposizione una quantità di memoria RAM sufficiente per supportare le fasi successive del progetto. Il Raspberry Pi 3 è un buon compromesso tra prestazioni e prezzo e inoltre dispone di connettività Wi-Fi e Bluetooth integrate, molto utili se al carPC si volesse in futuro associare la funzionalità di navigatore oppure provare ad installare Android Auto;
- modulo radio basato sul chip Si4702/03 sviluppato e prodotto da Silicon Labs [1]. Il modulo, visibile in Figura 2, ha dimensioni estremamente compatte, è economico e facilmente reperibile online. Sul PCB del modulo sono presenti i seguenti componenti: il chip Si4702/03 di Silicon Labs, un vero e proprio tuner FM digitale con funzione RDS integrata, il chip amplificatore TPA6111A2 di Texas Instruments [2] (un amplificatore stereo in grado di erogare 150 mW RMS per canale, su un carico con impedenza tipica di 16 Ω) e infine una presa per cuffie da 2,5 mm. Il modulo dispone di una fila singola di 8 pin (pin header maschio con passo standard) utilizzabili per il collegamento con il microcontrollore host (il Raspberry Pi nel nostro caso). Nelle versioni più economiche del modulo, il pin header è compreso nel kit, ma la relativa saldatura è a carico dell’utente;
- un paio di cuffie o auricolari stereo, con connettore jack da 2,5 mm. In alternativa, all'uscita del modulo radio può essere collegato un amplificatore stereo (con relativo alimentatore) in grado di elevare ulteriormente la potenza di uscita, potendo così pilotare due o più altoparlanti con qualche watt di potenza;
- una scheda di memoria SD ad elevata velocità di lettura/scrittura con capacità di almeno 8 Gb;
- cavetti jumper tipo Dupont (visibili in Figura 3). Anche se il progetto richiede solo la versione femmina-femmina, è meglio comunque disporre di un set completo di cavetti, in modo tale da potere combinare tra loro più cavi ove fosse necessario ottenere una maggiore lunghezza dei collegamenti.
È inoltre consigliata la disponibilità di strumentazione base da laboratorio, in particolare un multimetro per controllare i cablaggi (continuità elettrica) e i livelli di tensione. L’oscilloscopio non è indispensabile, ma chi ne ha la possibilità può utilizzarlo per migliorare le proprie conoscenze, monitorando ad esempio l’andamento dei segnali che viaggiano sull’interfaccia tra il microcontrollore (o meglio, il SoC) Broadcom che equipaggia il Raspberry Pi e il modulo con il chip Si470x.
Il tuner Si4702/03 di SiLabs
L'unica differenza di rilievo esistente tra le versioni Si4702 e Si4703 è la funzionalità RDS di cui dispone la seconda, che quindi è preferibile alla prima. Il problema non dovrebbe comunque porsi durante la fase di acquisto del modulo, visto che normalmente i moduli in commercio sono tutti equipaggiati con la versione del chip Si4703. Il chip, di cui in Figura 4 è visibile lo schema a blocchi, consente di aggiungere la funzionalità radio FM a numerosi progetti embedded occupando una dimensione sul PCB estremamente ridotta (package QFN a 20 pin di soli 3x3 mm). L’Si4702/03 contiene al suo interno un processore digitale dedicato per la ricezione e decodifica delle informazioni RDS (acronimo di Radio Data System, utilizzato in Europa), e delle informazioni RBDS (acronimo di Radio Broadcast Data System, utilizzato negli Stati Uniti). Il processore esegue automaticamente la decodifica di tutti i simboli, la sincronizzazione dei blocchi, il rilevamento e la correzione degli errori. La funzionalità RDS rende disponibili una molteplicità di informazioni utili per l’utente, quali l’identificativo della stazione correntemente sintonizzata e altre informazioni trasmesse dall’emittente radiofonica, quali ad esempio: nome dell’artista e titolo del brano correntemente trasmesso, avvisi di vario tipo, numero di telefono o indirizzo web della stazione radio, ecc. Per quanto riguarda l'interfacciamento con il SoC del Raspberry Pi, si utilizzerà l'interfaccia seriale I2C, pienamente supportata a livello hardware dalla scheda. In basso a destra in Figura 4 sono evidenziati i segnali che compongono tale interfaccia: oltre a qualche segnale discreto (GPIO), possiamo osservare la presenza dei segnali di alimentazione, di abilitazione (enable) e reset del modulo, nonché i segnali di clock e dati previsti dallo standard I2C (SCLK e SDIO).
Setup hardware
Come è facile intuire, il progetto si compone di una parte hardware (che comprende i componenti precedentemente elencati) e di una software che illustreremo nel prossimo paragrafo. A parte l'eventuale pin header del modulo, il progetto non richiede alcuna saldatura, poiché tutti i componenti hardware possono essere collegati tra loro tramite cavetti jumper. Qualora si volesse dare al progetto una connotazione definitiva (ipotizzando ad esempio una installazione permanente a bordo del veicolo) potrebbe tuttavia essere conveniente sostituire i cavetti jumper con un cablaggio, o meglio una saldatura, in grado di sopportare le sollecitazioni meccaniche a cui è sottoposta la vettura durante il normale utilizzo. Tutti i collegamenti richiesti sono riassunti nella tabella seguente, nella quale sono elencati, nelle rispettive colonne, i pin utilizzati sul connettore GPIO del Raspberry Pi 3 B/B+ e i pin utilizzati sul pin header del modulo Si4702/03.
Raspberry Pi 3 B/B+ | Modulo Si470x |
3.3 V (Pin 1) | 3.3 V |
GND (Pin 6) | GND |
SDA (Pin 3) | SDIO |
SCL (Pin 5) | SCLK |
GPIO23 (Pin 16) | /RST (attivo basso) |
Per rendere le operazioni di cablaggio semplici anche a chi non ha mai utilizzato il Raspberry Pi con sensori o moduli esterni, i collegamenti lato modulo sono stati riassunti in Figura 5 (la foto si riferisce esattamente al modello utilizzato dall'autore). Nel riquadro giallo sono evidenziati i due segnali di alimentazione, nel riquadro rosso i segnali utilizzati dall'interfaccia I2C e, infine, nel riquadro azzurro il segnale discreto di reset del modulo (attivo basso).
In Figura 6, tratta dalla documentazione ufficiale del Raspberry Pi [3], possiamo invece osservare la disposizione dei vari pin sul connettore GPIO da 40 poli che equipaggia la board a partire dalla versione Raspberry Pi B+. Si noti, in particolare, come siano disponibili più pin di ground e più pin con l'alimentazione 3,3 V; nel progetto la scelta è ricaduta sui primi pin in ordine crescente, ma ovviamente possono essere utilizzati altri pin, purché svolgano la stessa funzione. Un'altra osservazione importante, parlando di General Purpose I/O (GPIO), riguarda i livelli di tensione. Il modulo con il chip Si470x richiede un'alimentazione di 3,3V e tutti i segnali digitali da esso utilizzati (sia in ingresso che in uscita) fanno riferimento a questo livello di tensione (fatta eccezione per il GND, che ovviamente corrisponde alla tensione di massa). Questi valori di tensione sono perfettamente compatibili con quelli della scheda Raspberry Pi 3 B/B+ e, pertanto, il progetto non richiede l'utilizzo di alcun traslatore di livello.
Setup software
Il primo passo della configurazione software consiste nella creazione, sulla scheda di memoria SD, dell'immagine della distribuzione ufficiale Raspbian. La scelta è ricaduta su questa "distro", che sappiamo derivare dalla nota distribuzione Linux Debian, sia perché è quella maggiormente supportata dalla Raspberry Foundation, sia perché include già tutti i pacchetti che ci serviranno per creare l'applicazione finale. Per scaricare l'immagine Raspbian occorre accedere alla pagina ufficiale per il download [4], selezionando poi la versione "Raspbian Buster with desktop and recommended software" come indicato in Figura 7.
Una volta scaricata l'immagine di Raspbian, si può programmare la scheda SD utilizzando il tool Etcher [5] oppure applicazioni similari. Al primo avvio della distribuzione, è opportuno cambiare la password (l'utenza di default ha user=pi e password=raspberry) tramite il comando passwd, come indicato in Figura 8. Successivamente, abilitare la connessione Wi-Fi e l'accesso remoto tramite SSH. Ciò permetterà di accedere alla scheda via rete Wi-Fi e scaricare i pacchetti software richiesti dall'applicazione, una soluzione molto più comoda che usare tastiera, mouse e monitor.
Ora, dobbiamo abilitare sul Raspberry Pi l'interfaccia I2C, necessaria per comunicare con il modulo radio. Apriamo una finestra terminale, tramite collegamento SSH oppure localmente alla board, e digitiamo il comando:
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2704 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.