Gruppo di Continuità per Raspberry Pi con display OLED

Gruppo di continuità per la Raspberry Pi provvisto di uscita USB capace di ricaricare batterie al litio e ai polimeri di litio. È provvista di display OLED ed è configurabile mediante USB.

Con l’avvento dell’Internet of Things e della domotica, sempre più spesso i dispositivi devono rimanere accesi anche in caso di black-out. Sul mercato esistono innumerevoli tipi e modelli di gruppi di continuità o UPS (Uninterruptible Power Supply) utili a mantenere la tensione 220 Vac per ore, oppure per giorni, ma hanno il difetto di essere costosi, ingombranti e di consumare parecchia energia.

Nel caso utilizzassimo una Raspberry Pi come end-device IoT, scegliere un UPS tradizionale per mantenere in funzione il trasformatore di alimentazione in caso di blackout, sarebbe non solo costoso ma anche controproducente.

Quando l’autonomia della batteria è bassa, i gruppi di continuità si spengono, e per evitare danni al sistema operativo, dovrebbero pure provvede automaticamente allo spegnimento controllato della Raspberry Pi, ovvero a mandare in shutdown il sistema quando si arriva a un livello di carica che fa presagire l’insufficienza dell’alimentazione.

Una soluzione alternativa può essere rappresentata dall’utilizzo di un “Power bank” oppure di un dispositivo dedicato come il progetto descritto in queste pagine e che abbiamo chiamato PowerPi; si tratta sostanzialmente di un gruppo di continuità per Raspberry Pi, però di tipo “intelligente” in quanto governato da un microcontrollore ATSAMD21G18 a 32 bit e 48 MHz di clock, nel quale gira un firmware capace di interagire con la scheda “del lampone” in modo da chiuderne l’attività se, in condizione di assenza dell’alimentazione principale, rileva uno stato di carica della batteria che può comportare l’imminente spegnimento o comunque instabilità nel funzionamento.

La nostra scheda ha caratteristiche di tutto rispetto, che elenchiamo qui di seguito:
• display OLED con risoluzione 128 x 64 pixel;
• alimentazione da 3,9 V a 14 V;
• corrente di carica massima 2,5 A;
• corrente massima in uscita 8 A;
• compatibile con batterie Li-Po, Li-ion o LiFePO4;
• programmazione da terminale tramite USB;
• salvaschermo temporizzato del display OLED;
• spegnimento automatico quando la batteria è scarica;
• spegnimento controllato della Raspberry Pi;
• compatibilità con la Raspberry Pi 2, 3, 3 B+, 4 B, Zero e Zero W;
• indicatori a LED dello stato di carica e di allarme;
• alimentazione mediante connettore USB tipo C;
• protezione sovracorrenti sulle porte USB in entrata e in uscita;
• presa USB per la ricarica rapida compatibile con dispositivi Samsung e Apple;
• corrente massima in uscita sul connettore USB di uscita 1,7 A;
• Protezione da cortocircuito sulla porta USB in uscita.

Ciò esposto, passiamo ora ad analizzare l’hardware da cui è composta la nostra scheda UPS.

Schema elettrico dell’UPS per Raspberry Pi

Analizziamo dunque il circuito partendo dallo schema a blocchi di Fig. 1, che vi farà meglio comprendere la struttura dello schema elettrico.

La PowerPi può essere alimentata sia tramite la presa USB tipo C sia tramite il morsetto a vite a due vie (nello schema elettrico siglati rispettivamente USB1 e CON2) con una tensione continua compresa tra 3,9 V e i 14 V; tale range consente l’uso anche in auto. L’entrata è protetta da un fusibile autoripristinante (F1) da 3 A e dal varistore VR1.

Le linee di bus D+ e D- della porta USB1 a loro volta sono protette dalle sovratensioni da ulteriori due varistori VR2 e VR3. La presenza della tensione in entrata viene segnalata dall’accensione del diodo LED di colore verde LD1, e poiché il range di tensione di alimentazione può variare da 3,9 a 14 V, non potevamo limitare la corrente del diodo LED con una semplice resistenza.

Per questo abbiamo dovuto utilizzare un limitatore di corrente BCR402, nello schema elettrico siglato U4, che limita la corrente a 20 mA a prescindere dal voltaggio di alimentazione della PowerPi.

Fig. 1 Schema a blocchi della PowerPi.

 

La gestione della carica della batteria è affidata al collaudato chip BQ25895 prodotto dalla Texas Instruments, nello schema elettrico siglato U1, progettato per la ricarica delle batterie a cella singola.

Può erogare una corrente massima di carica di 5 A e possiede una porta seriale di tipo I2C (abbreviazione di Inter Integrated Circuit) per l’interfacciamento e il controllo mediante un microcontrollore.

Per il nostro progetto abbiamo scelto il microcontrollore ATSAMD21G18 (siglato U3), lo stesso montato sulle schede Arduino M0, un ARM CORTEX M0+ a 32 bit con frequenza di clock di 48 MHz, prodotto dall’Atmel.

La scelta di questo microcontrollore ci ha consentito l’utilizzo delle innumerevoli librerie dell’ambiente di sviluppo Arduino IDE facilitandoci la fase di programmazione. Il microcontrollore è provvisto di 256 kB di memoria Flash per il firmware e 32 kB di memoria RAM, peccato sia sprovvisto di una memoria interna non volatile di tipo EEPROM (Electrically Erasable Programmable Read Only Memory) come nel più datato e meno prestante ATMega328.

Per salvare i parametri delle impostazioni siamo stati costretti ad utilizzare una memoria esterna EEPROM I2C 24LC64, siglata U6, aumentando ulteriormente la complessità del circuito.

Per monitorare i parametri di carica della batteria abbiamo aggiunto un display OLED da 0,96 pollici SSD1306, siglato LCD1 nello schema elettrico.

La durata di vita di questi display, è nettamente inferiore rispetto ai comuni display LCD. Le sostanze organiche utilizzate per la loro produzione tendono a deperirsi, soprattutto gli OLED di tipo blu hanno attualmente un’autonomia breve che, se mantenuti accesi alla massima luminosità, si aggira attorno alle 20.000 ore, ossia all’incirca due anni di vita.

Questo significa che il display con il tempo tenderà a perdere la sua luminosità iniziale e i pixel, a seconda della loro usura, presenteranno una differente luminosità, rendendo la visione del display sgradevole e difficoltosa.

Per ovviare a questo inconveniente abbiamo implementato una funzione salvaschermo temporizzata, il cui intervento può essere impostato a piacimento oppure disattivato.

Tutti i parametri possono essere impostati e modificati da terminale interfacciando la PowerPi ad un PC tramite la presa USB-C.

A tale scopo possiamo utilizzare il “monitor seriale” dell’ambiente di sviluppo Arduine IDE, avviabile dal menu “strumenti”.

La tensione e la capacità delle batterie vengono monitorati dal chip “Fuel gauge” MAX17048, siglato U2 nello schema elettrico.

Questo chip, grazie all’algoritmo proprietario denominato “ModelGauge” riesce a calcolare la percentuale di capacità residua presente nella batteria, monitorando lo stato di carica relativa (Relative State of Charge), estrapolandola dalle ripetute variazioni di carica e scarica. Non preoccupatevi se, alla sostituzione della batteria, dopo la prima ricarica la capacità non raggiungerà il 100 %.

Date tempo al chip di monitorare lo stato della batteria e dopo due o tre ricariche noterete che la misurazione sarà corretta. Per incrementare la tensione della batteria a 5 V abbiamo utilizzato un convertitore booster sincrono TPS61178 prodotto dalla Texas Instruments, nello schema elettrico siglato U7.

Il MOSFET Q1 posto sull’uscita del convertitore ha il compito di isolare l’uscita dall’entrata in caso di cortocircuiti o quando il TPS61178 viene spento, altrimenti ci ritroveremo sull’uscita lo stesso voltaggio presente all’entrata. Questo chip è in grado di erogare una corrente di picco di ben 10 A che ci permette di avere una notevole riserva di potenza.

La tensione di uscita viene impostato con le resistenze R20 e R21. Con i valori da noi forniti la tensione in uscita raggiunge i 5,15 V.

Chi avesse il bisogno di modificare la tensione in uscita può calcolare i valori delle resistenze utilizzando la formula:

Ad esempio per carichi gravosi potete aumentare la tensione in uscita a 5,25 V scegliendo per R21 un valore di 56 Kohm e per R2 un valore di 187 Kohm.

Il costruttore consiglia di usare per la resistenza R21 un valore inferiore a 100 Kohm, in modo che la corrente, che fluisce attraverso questa resistenza, sia 100 volte maggiore della corrente di dispersione sul piedino 5 FB, la quale, datasheet alla mano, si aggira tipicamente tra 10 e 60 nA. Come specificato nell’elenco componenti accertatevi che la tolleranza sia dell’1 % o se possibile inferiore, altrimenti il voltaggio in uscita scosterà da quello calcolato. Dato che le resistenze SMD con tolleranza all’1 % sono molto più economiche di quelle con tolleranze inferiori (0,5 % o 0,1 %), consigliamo di acquistarne una decina e con il multimetro scegliere quella che scosta meno dal valore desiderato.

La tensione, la corrente e la potenza assorbita in uscita vengono misurati dall’integrato INA219, siglato U5, mediante la resistenza di shunt R22, la quale deve avere una tolleranza bassa di almeno 1 %, altrimenti le misurazioni non saranno esatte. La PowerPi è provvista di un’uscita USB ausiliaria protetta dall’integrato TPS2553, nello schema elettrico siglato U9, che limita la corrente in uscita a 1,7 A.

La limitazione di corrente viene impostata con la resistenza R12 collegata al piedino 2 siglato “ILIM”, il cui valore deve essere compreso tra i 15 Kohm e i 232 Kohm. Per chi volesse modificare il circuito per le proprie esigenze, nella Tabella 1 riportiamo i valori della resistenza in funzione della corrente da limitare.

L’uscita a sua volta è protetta dalle scariche elettrostatiche e dalle sovratensioni transitorie mediante l’integrato USBLC6-2 siglato U11.

Grazie all’emulatore di carica MAX14630, nello schema elettrico siglato U10, la porta USB può essere usata anche come caricabatteria per la carica veloce degli smartphone compatibile con i modelli sia Samsung sia Apple.

La compatibilità viene selezionata portando alto (per dispositivi Apple) o basso (per dispositivi Samsung) il bit di controllo (CB) piedino 3 dell’integrato U10. La selezione della compatibilità viene programmata da console tramite la porta USB-C. Terminiamo la descrizione dello schema elettrico analizzando l’ultimo integrato MIC5205 siglato U8, un regolatore lineare a basso rumore da 3,3 V.

Tabella 1 Valori della resistenza R12 per la limitazione della corrente nell’integrato TPS2553.

Impostazione dei parametri

Tutti i parametri d’impostazione possono essere visualizzati o modificati mediante terminale, collegando la PowerPi al PC tramite la presa USB-C. I parametri da modificare vengono selezionati digitando la lettera dell’alfabeto, sia in maiuscolo che minuscolo, scelta dal menu dalla A alla P.

Analizziamo assieme ogni singolo parametro e vediamo come modificarlo.

Con la lettera “A” impostiamo la corrente massima con cui verrà caricata la batteria. La capacità della batteria viene indicata con la lettera “C”; per non accorciare la vita media della batteria, durante le ricariche si consiglia di non applicare correnti di carica che in valore assoluto superino “C”. Ad esempio, per una batteria da 1.500 mAh la corrente di carica non deve superare 1,5 A; in breve la batteria non dovrebbe essere ricaricata in meno di un’ora.

Se volete ricaricare una batteria con una corrente superiore alla capacità “C”, sappiate che questa si surriscalderà e con correnti superiori, a causa dello sprigionamento di gas al suo interno, può gonfiarsi e anche esplodere. Se non volete accorciare la vita della vostra batteria, cercate di ricaricarla con una corrente non superiore a 0,5 C. Le batterie ricaricabili dopo la carica, a causa della resistenza interna, con il tempo tendono a scaricarsi. Per ovviare a questo inconveniente le batterie nichel-cadmio (NiCd), nichel metallo idruro (NiMH) o al piombo (Pb) vengono mantenute sotto carica con una corrente di mantenimento pari o inferiori a 1/40 C.

Con le batterie agli ioni e ai polimeri di litio questo non è possibile poiché non permettono sovraccariche, per questo motivo la carica viene gestita da circuiti integrati dedicati appositamente progettati, che terminano la ricarica della batteria quando la capacità ha raggiunto il 100 %.

Dopo questa lunga e doverosa spiegazione, per impostare la carica con una corrente di 1 A dobbiamo lanciare da terminale il comando “a = 1000”.

Con la lettera “B” impostiamo la tensione di carica massima. Seppure le batterie Lipo o Li-Ion a riposo hanno una tensione nominale di 3,7 V, la loro ricarica deve invece avvenire con una tensione superiore, definita dal costruttore e riportata anche sull’etichetta posta sull’involucro della batteria oppure nei data sheet.

Di solito questa tensione si aggira attorno ai 4,2 V. Nella PowerPi questo parametro può essere modificato da terminale lanciando il comando “b = 4200”.

Nel caso, terminata la carica, notiate che sul display la capacità della batteria non raggiunge il 100 %, potete incrementare questo parametro di alcuni millivolt. Nel nostro prototipo, utilizzando gli accumulatori che trovate qua a destra abbiamo impostato questo parametro a 4.256 mV.

Entrambe i parametri, corrente limite e tensione limite di carica, sono definiti dalla grandezza dei registri interni del chip BQ25895, rispettivamente il 0x04 per la corrente limite (valore a 7 bit) e il 0x06 per la tensione limite (valore a 6 bit). Vi diciamo questo, perché noterete che i valori inseriti da terminale verranno arrotondati in difetto in modo da adattarli alle dimensioni dei suddetti registri.

Con la lettera “C” impostiamo la capacità minima della batteria, valore sotto al quale la PowerPi inizia la sequenza di spegnimento. Possiamo definire questo parametro come una protezione per non scaricare eccessivamente la batteria. Questo valore può essere impostato tra il 20 % e il 70 %; l’impostazione predefinita prevede il 20 % (ad esempio “c = 20”).

Con la lettera “D” impostiamo il valore minimo di capacità, che la batteria deve raggiungere in fase di carica dopo uno spegnimento, prima di poter alimentare il carico in uscita. Questo parametro permette di consentire alla batteria di ricaricarsi dopo un blackout proteggendola soprattutto quando è troppo scarica. Questo valore può essere impostato tra 40 % e il 90 % e per impostazione predefinita è 40 % (per esempio “d = 40”).

Con la lettera “E” impostiamo un ritardo “∆T” prima dell’inizio della sequenza di spegnimento, impostata con il parametro “C”.
Permette di evitare falsi spegnimenti in presenza di correnti variabili. Questo valore può essere impostato da 0 a 90 secondi, di default è impostato a 10 secondi (per esempio “e = 10”).

Con la lettera “F” impostiamo il timer del screen saver, cioè il tempo di funzionamento del display. Questo valore può essere impostato da 0 a 60 minuti, ma per default è impostato a 1 minuto. Quando impostiamo il valore a zero il display rimarrà sempre acceso: per esempio “f = 1”.

Con la lettera “G” impostiamo il timer di commutazione delle schermate del display. Il display possiede due tipi di schermate, sulla prima sono visualizzati i parametri di carica della batteria, mentre sulla seconda i valori del voltaggio, della corrente e della potenza assorbita in uscita.

Vedi Fig. 2 e Fig. 3. Il passaggio della visualizzazione di una schermata all’altro avviene con una doppia pressione del pulsante di accensione.

Questo valore può essere impostato da 0 a 300 secondi, di default è impostato a zero. Esempio “g = 0”. Con la lettera “H” impostiamo il tempo di attesa per consentire alla Raspberry Pi di terminare la sequenza di shutdown, la quale termina quando va basso il piedino 12 sul connettore a 40 pin, nello schema elettrico siglato Con1.

Questo valore può essere impostato da 10 a 300 secondi; l’impostazione predefinita è 10 secondi (ad esempio “h = 10”). Con la lettera “I” impostiamo il bit per informare il sistema che la PowerPi è connessa alla Raspberry Pi. Per impostazione predefinita, questa impostazione è attivata.

Con la lettera “L” impostiamo l’opzione che permette di spegnere la PowerPi mediante il pulsante dell’interfaccia grafica o attraverso il comando shutdown del sistema operativo Raspbian; con il riavvio del sistema operativo la nostra PowerPi non si spegnerà. Questo comportamento è attivo per impostazione predefinita.

Con la lettera “M” impostiamo l’opzione di riaccensione automatica della PowerPi dopo lo spegnimento successivo a un blackout; questa impostazione è attivata per default.

Con la lettera “N” impostiamo l’attivazione di un segnale acustico di allarme, che si attiva ogni 8 secondi, per avvertirci della mancanza dell’alimentazione. Di default questa impostazione è attivata.

Con la lettera “O” impostiamo l’attivazione del segnale acustico di sistema alla pressione del pulsante di accensione. Per impostazione predefinita, questa impostazione è attivata. Con la lettera “P” impostiamo il tipo di emulatore della porta USB. Possiamo scegliere di simulare il caricabatteria per dispositivi “Samsung” oppure “Apple”. L’impostazione predefinita è la ricarica di dispositivi “Samsung”.

Fig. 2 Nella prima schermata sono visualizzati i parametri di carica della batteria.

 

Fig. 3 Nella seconda schermata sono visibili il voltaggio, la corrente e la potenza assorbita in uscita.

Piano di montaggio dell’UPS per Raspberry Pi

Elenco componenti

R1, R2: 1,5 kohm
R3, R4, R6, R7, R11, R23, R25, R26, R27: 10 kohm
R5: 130 ohm
R8, R9: 150 ohm 
R10: 68 ohm
R12: 15 kohm 1%
R13: 100 kohm
R14, R15: 5,1 kohm
R16: 348 kohm
R17: 51,1 kohm
R18: 15 kohm
R19: 150 kohm
R20: 267 kohm 1%
R21: 82 kohm 1% 
R22: 01 ohm 1% 3W
R24: 100 ohm
C1, C4, C5: 22 µF 25 VL ceramico
C2: 4,7 µF 16 VL ceramico
C3: 1 µF 6,3 VL ceramico
C6: 47 nF ceramico
C7: 100 nF ceramico
C8, C12, C15: 10 µF 6,3 VL ceramico
C9, C10, C11, C26, C27: 22 µF 6,3 VL ceramico: 
C13, C29, C32, C35, C37, C38, C39, C40, C41, C44: 100 nF ceramico
C14: 100uF 10V Tantalio 
Case B
C16, C33, C34: 100 nF ceramico
C17: 4,7 µF 6,3 VL ceramico
C18, C19: 10 µF 6,3 VL ceramico
C20: 22 nF ceramico
C21: 22 nF ceramico
C22: 6,8 nF ceramico
C23: 10 pF ceramico 
C24, C25: 22 µF 6,3 VL ceramico
C28: 100 µF 6,3 VL ceramico
C30: 470 pF ceramico
C31: 2,2 µF 10 VL Tantalio Case A
C36: 150 µF 6,3 VL ceramico
C42, C43: 22 pF ceramico
LED1, LED3: LED verde
LED2: LED giallo
LED4: LED blu
D1: 1N4148
D2: MSS2P3-M3/89A - Schottky
Q1: CSD25402Q3A
Q2: BSS138
U1: BQ25895RTWR
U2: MAX17048G+T10
U3: ATSAMD21G18
U4: BCR402RE6327
U5: INA219AIDCNR
U6: 24LC64
U7: TPS61178
U8: MIC5205-3.3YM5-TR
U9: TPS2553DBVR
U10: MAX14630 
U11: Protezione ESD USBLC6-2: 
LCD1: Display OLED 0,96” 
VR1: TVS SMBJ5.0A 
VR2, VR3: TVS CG0603MLC-05E
XT1: Quarzo 32,768 kHz 
L1: Induttanza 1 µH 
L2: Induttanza 1,8 µH 
BZ1: Trasduttore magnetico 
F1: Fusibile Ripristinabile 3A 24V 
BAT1: Portabatteria 18650 
USB1: Connettore USB-C 
USB2: Connettore USB-A 
SW1: Microswitch 3,5x2,9mm 
CON1: Connettore femmina 2x20 pin lunghi 12,5 mm 
CON2: Morsetto a 2 vie P. 3,5 mm 
CON3: Connettore JST 2 pin P. 2 mm 
JTAG1: Strip maschio 2x5 pin SMD P. 1,27 mm


Varie
- Strip femmina 4 poli 
- Strip maschio 4 poli 
- Distanziali esagonali F/F M2,5x18
- Distanziali esagonali F/M M2x12
- Vite M2,5x6 
- Vite M2x6 
- Dado M2 
- Circuito stampato S1534 (86x57 mm)

Realizzazione pratica dell’UPS per Raspberry Pi

Ora che abbiamo analizzato lo schema elettrico e spiegato il funzionamento del circuito, passiamo alla realizzazione della PowerPi, partendo dal circuito stampato a doppia faccia, ottenibile per fotoincisione partendo dai file Gerber disponibili nella sezione download e utilizzando il servizio PCBPRODUCTION.

Poiché il circuito è stato realizzato utilizzando componentistica a montaggio superficiale, in particolare per i semiconduttori U1, U2, U7, U10 e Q1, avrete bisogno di una stazione saldante ad aria calda simile a quella disponibile a catalogo con il codice “8220-VTSS210” oppure quella provvista anche di stilo codice “8220-VTSS230”.

Per il montaggio dei componenti restanti andrà benissimo un saldatore stilo a punta sottile con potenza non troppo elevata (20÷25 watt) e del filo di lega saldante possibilmente non superiore a 0,7 mm di diametro.

Consigliamo inoltre di usare un flussante di ottima qualità che non lascia scorie residue, utile soprattutto se usate leghe saldanti senza piombo che notoriamente aderiscono con difficoltà e possono richiedere del flussante aggiuntivo per ottenere buone saldature.

Per posizionare i componenti aiutatevi con delle pinzette a punta fine possibilmente amagnetiche (inox) altrimenti, magnetizzandosi i componenti vengono attratti, complicandovi il lavoro.

Per saldare i semiconduttori con l’aria calda, in particolar modo quelli con case QFN, consigliamo l’utilizzo di una pasta saldante specifica per SMD come quella a catalogo.

Spalmate un velo di pasta sulle piazzole, con le pinzette centrate il semiconduttore in posizione, rispettando l’orientamento come indicato nel piano di montaggio, e con il saldatore ad aria calda riscaldate il componente fino alla completa stagnatura. Durante questa fase state attenti che il flusso di aria non sposti il componente oppure lo surriscaldi rischiando di bruciarlo.

Per chi ha poca pratica con la saldatura ad aria calda, consigliamo di iniziare a scaldare, con movimenti circolatori, non solo il componente ma anche l’area circostante ad esso e quando si nota il flussante sciogliersi, di concentrare il calore sul componente fino a saldatura completata.

Per eliminare i residui di flussante utilizzate un piccolo pennello a setole rigide o in alternativa uno spazzolino da denti inumidito con alcol isopropilico, oppure un prodotto più specifico come l’anti flussante spray F-02 codice “6935-F02”.

Per saldare il microcontrollore U3, consigliamo di spalmare le piazzole di flussante e centrare il componente in posizione saldando prima un solo piedino.

Dopo aver controllato la corretta centratura dei rimanenti piedini alle piazzole saldate il piedino del lato opposto in modo da bloccarlo, dopodiché potete saldare tranquillamente i rimanenti piedini. Cercate di saldare i piedini alternando il lato, in modo da non surriscaldare eccessivamente il componente. Se non siete pratici, fate delle pause per permettere al componente di raffreddarsi.

Lo stesso discorso vale per tutti i semiconduttori. Una volta stagnati i componenti attivi potete iniziare a saldare quelli passivi, ricordando di fare attenzione al corretto orientamento dei condensatori al tantalio C14 e C31, che andranno orientati come indicato nel piano di montaggio.

Una volta montati tutti i componenti SMD possiamo iniziare a saldare i componenti a foro passante, ossia quelli a montaggio tradizionale.

Raccomandiamo una certa attenzione nel saldare il connettore USB1, che possiede piedini SMD e foro passante, al fine di non surriscaldarlo. L’ultimo componente da saldare è il display OLED LCD1.

Saldate una strip da 4 piedini maschio sul display e una strip femmina da 4 piedini sul circuito stampato, fate attenzione che i piedini dello strip entrino nei rispettivi fori e fissate il display al PCB con due distanziatori M2 da 11 mm e quattro viti da M2x5 mm.

Seppure utilissimo per monitorare lo stato di carica della batteria e la corrente assorbita dal carico, il display in realtà è opzionale e la sua assenza non compromette il corretto funzionamento del circuito; potete quindi dedicere di farne a meno.

Poiché la batteria 18650 per alcuni utilizzi risulta eccessivamente ingombrante e pesante, sul lato inferiore del circuito stampato (Fig. 4) abbiamo predisposto il montaggio di un connettore a montaggio superficiale JST passo 2 mm per collegare una batteria LiPo da 1.100 mAh che dovrà essere fissata a sua volta al PCB con del nastro biadesivo.

Se invece avete bisogno di più autonomia potete usare quella da 5.000 mAh, per esempio quella a catalogo Futura Elettronica con il codice “7893-PLIB5000MAH”.

Se la PowerPi verrà utilizzata per alimentare una Raspberry Pi 4, vi informiamo che rispetto alle versioni precedenti scalda parecchio, quindi vi consigliamo di acquistare un kit di dissipatori per il suo raffreddamento.

Fate attenzione a non confondere la presa USB-C, inserite il cavo di alimentazione nella presa TypeC del PowerPi con le versioni precedenti il problema non sussisteva perché il connettore della Raspberry Pi era microUSB, ma comunque non preoccupatevi, intervengono le protezioni e non succede niente, comunque è meglio non rischiare.

Fig. 4 Collegamento della batteria LiPo da 1100 mAh codice “6374-PLIB1100-2MM”.

Programmazione dell’UPS

Completato il montaggio è giunto il momento di programmare la PowerPi. La prima cosa da fare è caricare il bootloader.

Alla destra del display OLED, si trova il connettore JTAG1 a 10 piedini usato per la programmazione e il debug del microcontrollore ATSAD21G18.

Questo connettore, la cui piedinatura è visibile nella Fig. 5, lo utilizzeremo solo una volta per caricare il bootloader nella memoria flash del microcontrollore per permetterci di caricare successivamente il firmware. A tale scopo ci servirà un programmatore hardware tipo Atmel ICE oppure PicKit 4.

 

Fig. 5 – Modifica della scheda Arduino M0 pro.

In alternativa noi consigliamo l’utilizzo di una scheda Arduino M0 PRO sulla quale è montato il chip EDBG, modificarla e utilizzarla come programmatore a basso costo. La modifica è semplicissima basta dissaldare due resistenze siglate rispettivamente R2 ed R3 e saldare il connettore SWD strip da 2×5 pin passo 1.27 mm, se assente. Procuratevi un cavetto JTAG da 10 pin oppure realizzatelo utilizzando uno spezzone di cavetto flat riciclando il connettore IDE-ATA 2 a 40 pin passo 2×2,54 mm utilizzato per i vecchi dischi rigidi da computer, di cui utilizzeremo solo 10 conduttori. Alle due estremità monteremo crimpando due connettori IDC da 10 pin passo 1.27 mm, assicurandovi di posizionarli nel verso giusto cioè pin to pin. In alternativa, cercando nei negozi on-line potete acquistarlo già assemblato per pochi soldi.

Fig. 7 Programmazione della PowerPi mediante Arduino M0 PRO modificato.

 

Collegate la scheda Arduino M0 PRO alla porta USB, come in Fig. 7, e dal menu a tendina “strumenti”, dell’ambiente di sviluppo Arduino IDE, selezionate la scheda Arduino M0 PRO (programming port) e la corretta porta seriale, successivamente sempre dal menu strumenti selezionate Scrivi bootloader.

Se non vengono visualizzati errori, il microcontrollore è stato programmato e l’ambiente Arduino IDE lo riconoscerà come una scheda Arduino M0.

A questo punto scaricate il firmware compilato dal sito web www.elettronicain.it. Nel file compresso “PowerPi.rar” oltre al firmware “powerpi.hex”, il programma “avrdude.exe”, il file di configurazione “avrdude.conf”, troverete lo script “powerpi.bat”, nel quale dovrete modificare, nella seconda riga, il numero della porta seriale “comportA” con quello assegnato alla vostra scheda dal PC.

Per scoprire il numero basta scegliere il sottomenu “porta” nel menu a tendina “Strumenti” di Arduino Ide; ad esempio, se la porta assegnata e la 5 nella seconda riga dovete scrivere “set comportA=5”.

Programmata la PowerPi passiamo a programmare la Raspberry PI. Apriamo il terminale “LXterminal” e lanciamo il comando “sudo nano /boot/config.txt”. Con il cursore ci spostiamo alla fine del file e aggiungiamo due righe di testo, nella prima riga scrivete “dtoverlay=gpio-poweroff, gpiopin=18, active_low=”y”, debounce=1500” e nella seconda “dtoverlay=gpio-shutdown, gpio_pin=27”.

Il primo comando definisce il piedino GPIO 18 come output, che andrà a livello logico basso quando la Raspberry PI ha finito la sequenza di shutdown informandoci che è pronta per essere spenta. Il secondo comando definisce il piedino GPIO 27 come input, il quale se messo a livello logico basso fa partire la procedura di shutdown. Tenete presente che i comandi “gpio-poweroff” e “gpio-shutdown” non sono presenti in tutte le immagini. Il comando gpio-shutdown manca su alcune vecchie immagini, mentre dalla “2017-11-29-raspbian-stretch-lite” sono presenti entrambi.

Fate attenzione perché il kernel fa riferimento ai pin del chip Broadcom, indicati come numeri “BCM”, e non al numero dei piedini del connettore GPIO header a 40 pin indicati come piedini “BOARD”.

Fig. 8 Corrispondenza tra i piedini GPIO del connettore a 40 pin “BOARD” con quelli “BCM”.

 

Ad esempio nel nostro progetto utilizziamo i piedini BOARD 12 e 13 che corrispondono rispettivamente ai piedini GPIO 18 e 27 “BCM”, vedi Fig. 8. Se desiderate monitorare lo stato delle porte GPIO da terminale lanciate il comando “sudo gpio readall”.

Se avete una Raspberry Pi 4, probabilmente a monitor comparirà il seguente messaggio “Oops – unable to determine board type… model: 17”. Per risolvere il problema, accertatevi che “wiringPi” sia aggiornato alla versione 2.52 lanciando da terminale il comando “gpio -v”; in caso contrario dovete aggiornarlo lanciando i seguenti comandi:

cd /tmp
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb

 

Abbiamo cercato di progettare un dispositivo versatile che implementi in un singolo circuito di dimensioni contenute, il massimo delle funzionalità, cercando per quanto possibile di semplificarne l’hardware.

Speriamo, così, di aver soddisfatto le esigenze di tutti, non solo di quelli che hanno bisogno di un UPS per alimentare una Raspberry Pi, ma anche di chi ha bisogno di un’alimentazione sicura e senza interruzioni a 5V per realizzare progetti come antifurti, circuiti per la videosorveglianza, l’automazione sia in ambito domestico che in campo automobilistico.

 

Download

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Menu