Rivista #229: “SHARK, a Fishino spuntano i denti”

Tra i contenuti del fascicolo 229 (Ottobre 2018), attualmente in edicola, c’è anche il progetto della board “Shark”, una nuova scheda Arduino-like con prestazioni tali da poter “divorare” le concorrenti. In questa prima puntata descriviamo l’hardware e il funzionamento.

Nel mare di Fishino spunta uno squalo, ma per fortuna senza pinna e i cui denti acuminati sono le sue caratteristiche, che gli consentono di “mordere” le applicazioni. Shark, così abbiamo chiamato questa nuova board, appartiene alla serie da 32 bit basata sui microcontroller PIC32MX della Microchip. Come le altre Fishino a 32 bit, mantiene buona compatibilità con il sistema di Arduino, offrendo prestazioni e capacità di memoria decisamente superiori. La Shark nasce dalla considerazione che, pur avendovi proposto la Fishino32, compatibile a livello di connettori con la Fishino UNO ma dotata in più di un ottimo codec audio, e la Fishino Piranha, compatibile con l’Arduino MKR1000 ma con funzionalità aggiuntive, volevamo una scheda a 32 bit che si distinguesse per disponibilità di pin di I/O, da destinare alle applicazioni più complesse e richiedenti maggior connettività hardware. Fishino Shark fornisce prestazioni e periferiche di una 32 bit nel format di un Arduino/Fishino MEGA.

Grazie a uno specifico bootloader, per aggiornare il firmware del modulo WiFi basta una pressione prolungata del tasto reset e la scheda si predisporrà automaticamente in modalità aggiornamento da connettore USB.

Se siete preoccupati per la programmazione di questa schede, potete tranquillizzarvi; un po’ grazie alla versatilità dell’attuale IDE Arduino, un po’ per il lavoro del team di Chipkit che abbiamo parzialmente sfruttato (anche se con parecchie modifiche), ma anche grazie a librerie software da noi scritte e/o adattate, la programmazione si esegue come su una comune Arduino UNO, ossia tramite l’IDE, nel quale dovete attivare gli strumenti di sviluppo per il PIC ed il gioco è fatto!

Per i componenti aggiuntivi abbiamo predisposto una serie di librerie, alcune delle quali sono in continuo sviluppo, ragion per cui consigliamo di visitare periodicamente il sito web www.fishino.it.

SCHEMA ELETTRICO

Lo schema ricalca in gran parte quello della Fishino32, rispetto alla quale utilizziamo un micro con maggior numero di I/O che è pressoché identico a quello della Fishino32, solo che qui è a 100 pin mentre nel modello più “piccolo” è a 64 pin.

Lo stesso microcontroller è disponibile con frequenze di clock che vanno dagli 80 MHz ai 120 MHz, però mentre sulla Fishino32 siamo riusciti a sfruttarlo a 120 MHz, sulla Fishino Shark abbiamo previsto la possibilità di selezionare la velocità tra 5 e 105MHz.

Lo schema elettrico è molto simile a quello della Fishino32, analizziamolo e vediamo le differenze.

STADIO DI CONTROLLO DELL’ALIMENTAZIONE

Questo blocco risulta decisamente più complesso rispetto ai modelli precedenti, per le seguenti ragioni:

  • la necessità di funzionare sia come host che come device USB;
  • la tripla alimentazione;
  • la possibilità di spegnimento software di tutto lo stadio di alimentazione;
  • la possibilità di attivare esclusivamente l’alimentazione del controller in standby.

Se la linea USBID è scollegata da massa (connessione tipo B), questa tensione positiva, attraverso R4, porta in conduzione il MOSFET a canale N Q3, il quale a sua volta porta in conduzione il Q1; contemporaneamente, sempre attraverso R4 i due MOSFET Q4 e Q5, vengono posti in interdizione ed essendo collegati in antiserie, non permettono il passaggio dell’alimentazione dai 5V di Fishino al connettore USB.

Sintetizzando, a USBID fluttuante, quindi quando inseriamo un connettore di tipo B, Fishino non fornisce alimentazione al connettore USB che, per contro, alimenta Fishino attraverso il MOSFET Q1. Otteniamo quindi la prima parte dello scopo  desiderato, ovvero che con un connettore di tipo B Fishino ricava l’alimentazione dalla linea USB comportandosi da device vero e proprio.

STADIO DI ALIMENTAZIONE SWITCHING

Questo stadio fa capo agli integrati U2 (SX1308), un convertitore asincrono step-up qui utilizzato in modalità SEPIC in grado di fornire un’uscita a 5V con tensioni in ingresso variabili da circa 3 a 20 V, ed all’integrato U3, che è un convertitore sincrono step-down, utilizzato per ricavare i 3,3 V di alimentazione per la maggior parte del circuito. Entrambi questi stadi sono già stati ampiamente descritti per le schede Fishino Mega e Guppy e, per quanto riguarda il funzionamento del SEPIC, nella scheda Torpedo.

STADIO CARICABATTERIA

Anche questo stadio, come nelle board precedenti, fa capo all’integrato MCP73831, un completo regolatore di carica integrato per LiPo a cella singola. Qui, l’unico elemento degno di nota è il mosfet Q8, un canale N utilizzato per abilitare o meno la funzione di carica della batteria.

SEZIONE MICROCONTROLLORE

Arriviamo finalmente al PIC32MX470F512L, un microcontroller a 32 bit di Microchip, capace di elevate prestazioni, consumi decisamente ridotti e con una ricca dotazione di periferiche.

Notiamo innanzitutto due quarzi, uno da 20 MHz e l’altro da 32,768 KHz. Ma perché due quarzi? Ebbene, perché il primo fornisce il clock principale, attraverso un PLL interno che lo moltiplica fino a 105 MHz; si tratta di un circuito non proprio a basso consumo, quindi da evitare nelle condizioni di risparmio energetico. Il quarzo da 32.768 Hz serve esclusivamente per il real-time-clock (RTC) interno al PIC, che è un circuito studiato appositamente per avere un bassissimo assorbimento e che può quindi essere lasciato in funzione anche in condizioni di stand-by.

Del micro notate le già accennate linee OFF, che gli permette di togliere l’alimentazione principale, PWRGOOD, che consente il controllo dello stato della medesima, ed MBAT che permette la misura della tensione della batteria.

STADIO RESET E LED

Questo stadio è piuttosto interessante perché ci ha permesso di utilizzare un solo pulsante di reset per svariate funzioni, in abbinamento con un apposito bootloader sul controller.

STADIO WIFI

Anche questo stadio è già stato descritto nelle precedenti schede, ma qui troviamo una differenza piuttosto consistente, quindi lo rivediamo in dettaglio.

Il modulo sfrutta sempre un firmware da noi realizzato, in grado di comunicare ad alta velocità tramite la porta SPI e non sulla seriale, come d’abitudine nei sistemi che utilizzano l’ESP8266; la differenza di prestazioni, come già notato, è notevole.

In questa scheda, per contro, non vediamo più il connettore ESPCONN al quale eravamo abituati nelle board precedenti ad 8 bit ed al quale facevano capo alcuni I/O e pin di controllo del modulo sfruttati, sia per programmarlo che, per alcuni di essi, come I/O aggiuntivi.

Come mai questa scelta? Semplicemente perché nella Fishino Shark abbiamo già liberato alcuni degli I/O che venivano usati per comunicare con il modulo e con la scheda SD, che erano il 4, 7 e 10; abbiamo inoltre separato la porta I²C dai due ingressi analogici A4 ed A5, ottenendo quindi 3 porte digitali e due porte analogiche in più a disposizione.

Quasi tutte le linee dell’ESP (salvo l’ingresso analogico) sono ora sotto controllo del processore principale, cosa che ci permette di effettuare le seguenti operazioni direttamente da software, senza impegnare alcun I/O :

  • resettare il modulo da software;
  • spegnere il modulo da software (cosa che in precedenza richiedeva l’uso di un I/O del Fishino);
  • caricare il firmware sul modulo senza dover effettuare collegamenti strani nè caricare sketch particolari;
  • ridirigere l’output seriale del modulo sulla seriale USB o su qualsiasi altra seriale, sia software che hardware, disponibile sul Fishino.

STADIO INTERFACCIA MICROSD

Questo stadio è assolutamente identico a quello delle schede già viste; sfrutta l’interfaccia SPI, come il modulo WiFi, mentre anche qui per la selezione della scheda viene utilizzato un I/O interno, lasciando libero quindi l’I/O D4 che prima era necessario per questo scopo.

STADIO CODEC AUDIO

Ed eccoci arrivati alla succosa novità presente nel Fishino32, il codec audio! Questo si basa su un chip, l’ALC5631Q, utilizzato in molti prodotti consumer (tablet, riproduttori audio, eccetera) e quindi dotato di prestazioni notevolissime pur conservando un prezzo più che accettabile.

Da questo punto di vista la scheda dsipone di una serie di caratteristiche impressionanti, che permetteranno di realizzare, senza alcun hardware aggiuntivo che non sia un altoparlante o un microfono, moltissimi progetti che coinvolgono l’audio digitale. Tra questi:

  • player audio (wav e Mp3);
  • registratore audio;
  • riconoscimento vocale;
  • sintesi musicale;
  • sintesi vocale.

Come vedrete in seguito, abbiamo già implementato un player per files .wav, .mp3 e .ogg/.ogb; per la registrazione abbiamo a disposizione una libreria in grado di creare files .wav. Esiste anche un encoder MP3, ma le sue prestazioni sono decisamente insufficienti ed è stato incluso solo per curiosità e per poter fare alcune prove; la compressione MP3 è infatti troppo onerosa per essere effettuata in real time dal nostro pur potentissimo controller.

Come già accennato parlando del modulo WiFi, il codec sfrutta un’interfaccia SPI dedicata, utilizzata in modalità I²S, per la gestione della quale abbiamo scritto un’apposita libreria software.

Il codec ha inoltre bisogno di una porta I²C (non necessariamente dedicata solo a lui, ed infatti abbiamo utilizzato la porta I²C standard del Fishino) per controllare tutte le varie funzioni disponibili.

Anche qui abbiamo creato un’apposita libreria in grado di controllare il funzionamento del codec; tramite questa si può, per esempio, decidere se registrare o riprodurre, modificare il volume audio, regolare l’equalizzatore, impostare l’ALC, eccetera. Come potrete ben immaginare, i controlli sono numerosissimi, quindi la libreria verrà estesa man mano che se ne presenterà la necessità.

GLI HEADER

In questa sezione sono raggruppati tutti i connettori che portano i segnali verso l’esterno della scheda, quindi gli header laterali a standard Arduino, quello doppio in fondo alla scheda, il connettore ISP (che su Fishino Shark non è utilizzato per programmare la scheda, ma inserito per compatibilità con gli shields esistenti), il connettore ICSP (In Circuit Serial Programming) che serve per programmare la scheda senza passare per il bootloader (ad esempio per programmare il bootloader stesso), e sul quale sono disponibili due I/O digitali aggiuntivi, ed il connettore USB.

Nella prossima puntata vi spiegheremo come gestirla dall’IDE di Arduino e vi proporremo un primo sketch di prova per testarne le potenzialità.

L’articolo completo è pubblicato sul numero 229, Ottobre 2018, acquistabile in tutte le edicole.

 

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Main Menu