Sommario:

Indicatore di carico della CPU Raspberry Pi: 13 passaggi
Indicatore di carico della CPU Raspberry Pi: 13 passaggi

Video: Indicatore di carico della CPU Raspberry Pi: 13 passaggi

Video: Indicatore di carico della CPU Raspberry Pi: 13 passaggi
Video: Pop!_OS 21.10 on the Raspberry Pi 4 - 2 GHz Overclock and resize partition 2024, Novembre
Anonim
Indicatore di carico della CPU Raspberry Pi
Indicatore di carico della CPU Raspberry Pi

Quando si esegue Raspberry Pi (RPI) come headless senza monitor della console, non sono disponibili indicazioni visive specifiche per riconoscere che l'RPI sta effettivamente facendo qualcosa.

Anche se il terminale remoto viene utilizzato con SSH, è necessaria l'esecuzione di volta in volta del comando Linux per verificare quanto carico di sistema sta gravando la CPU ora

Quindi questo circuito è fatto per aiutare a riconoscere immediatamente l'attività reale della CPU (forse in modo semi-reale o quasi reale) per eseguire i carichi di sistema attualmente applicati.

Sebbene solo la programmazione Python e un circuito molto più semplice possano supportare la stessa funzionalità, saranno necessari codici Python un po' complessi per simulare la sofisticata logica di controllo dei LED richiesta da questo circuito.

Inoltre, paradossalmente, la maggiore complessità del codice Python appesantirà maggiormente la CPU con un aumento del carico di sistema.

Pertanto, scaricare il più possibile qualsiasi funzionalità di indicazione sul circuito hardware esterno sarà ragionevole in quanto questo servizio dovrebbe essere sempre in esecuzione e frequentemente, ad esempio ogni 5 secondi.

E questo circuito aggiungerà una caratteristica un po' divertente all'RPI in esecuzione senza testa.

Passaggio 1: controllo del carico della CPU Comando Linux

Comando Linux per il controllo del carico della CPU
Comando Linux per il controllo del carico della CPU

Sono disponibili diversi comandi Linux per il controllo del carico della CPU come top, iostat, sysstat e uptime.

Ogni comando ha specifiche caratteristiche vantaggiose in termini di diversità delle informazioni e semplicità di visualizzazione dei dati.

Il comando Top è il più ricco di informazioni e i dati molto dettagliati sono disponibili per riconoscere immediatamente il carico del sistema.

Ma funziona come modalità di iterazione (visualizzazione continua dei dati sullo schermo) e formato delle informazioni è piuttosto complesso per estrarre semplicemente solo i dati di carico della CPU richiesti.

Il comando iostat fornisce informazioni approfondite sul carico del sistema separando i lavori in coda in esecuzione dell'utente e del sistema che attualmente gravano sulla CPU.

Ma è anche inutilmente complesso ottenere il carico corrente della CPU in modo rapido e intuitivo.

In caso di uptime, sono disponibili dati di carico del sistema molto semplici in termini di media di 1 minuto, media di 5 minuti e media di riepilogo di 15 minuti.

Come accennato in precedenza, è necessario semplificare il codice Python perché dovrebbe essere eseguito abbastanza spesso, ad esempio ogni 5 secondi o 10 secondi.

Quando il codice Python diventa complesso, grava molto sulla CPU.

È una specie di paradosso che tu carichi l'RPI per monitorare il suo carico di sistema.

Pertanto, sto scegliendo il comando uptime per raccogliere il carico della CPU e interagire con il circuito dell'indicatore perché è il più semplice.

Tuttavia, poiché il tempo di attività mostra una media di 1 minuto del carico del sistema, il circuito dell'indicatore deve essere utilizzato in modalità non strettamente in tempo reale.

Tuttavia, questo circuito può fornire un utile suggerimento visivo che mostra come sta andando RPI ora.

Fase 2: Schemi

Schematico
Schematico

Questo circuito riceverà 4 diversi livelli (es. 00->LOW, 01->LIGHT, 10->MEDIUM, 11->HIGH) del carico corrente della CPU da RPI tramite due ingressi fotoaccoppiatori.

74LS139 (decodificatore da 2 a 4 e demultiplatore) sta decodificando due ingressi bit in uno di una singola uscita tra 4 possibili modi come 00(LOW)->B0, 01(LIGHT)->B1, 10(MEDIUM)->B2, 11(ALTO)->B3.

Poiché l'uscita 74LS139 è a livello inverso (ingresso 00 -> B0 diventa BASSO e altre 3 uscite ALTO), l'inverter 74HC04 viene utilizzato per invertire l'uscita ancora una volta.

Quando l'uscita di 74LS139 è normale ALTA, 74HC04 non sarà necessario.

Ma in qualche modo 74LS139 è fatto così. (Si prega di controllare la tabella di verità di 74LS139)

Quando viene selezionata una qualsiasi delle uscite 74LS139, attiverà un determinato interruttore analogico tra i 4 interruttori inclusi nel CD4066 IC.

Il CD4066 può supportare 4 interruttori analogici e ogni interruttore è composto da 1 ingresso di controllo e 2 uscite analogiche.

Quando l'ingresso di controllo diventa ALTO, la connessione di due uscite diventa a bassa impedenza (la resistenza diventa 0) e altre diventano a livello di impedenza ALTA (la resistenza tra due percorsi di uscita diventa di diverse centinaia di mega ohm).

Basta controllare 1 (pin 13) di CD4066 che diventa HIGH, percorso tra l'uscita 1 (pin 1) e l'uscita 2 (pin 2) collegata mentre le altre uscite non sono collegate (in stato di alta impedenza).

Allo stesso modo, l'ingresso ALTO del controllo 2 (pin 5) collega l'uscita 1 (pin 4) e l'uscita 2 (pin 3) mentre le altre uscite sono disconnesse.

Quindi LM555 lampeggia due LED con una frequenza di lampeggio diversa.

Come puoi vedere nello schema sopra, NE555 funzionerà con uno dei valori di resistenza tra 4 (12k, 24k, 51k, 100k) possibili livelli di resistenza.

Passaggio 3: generazione di clock diversa NE555

NE555 Diverse generazioni di clock
NE555 Diverse generazioni di clock

Come mostrato nello schema, NE555 opererà uno dei possibili valori di resistenza come 12k, 24l, 51k e 100k.

In realtà la parte del circuito di temporizzazione NE555 è un'indicazione visiva principale che supporta la parte del circuito.

Lo schema di funzionamento del circuito è il seguente.

- Quando non c'è un carico significativo della CPU, il programma Python installato in RPI invierà 00 uscite al circuito dell'indicatore. Quindi il percorso di due uscite di CD4066 si attiva e NE555 funziona con un valore di resistenza di 12k. Pertanto, i LED lampeggiano 1,5 volte al secondo (lampeggiano abbastanza rapidamente)

- La CPU è leggermente caricata (quindi la lunghezza della coda di uptime diventa 0.1 ~ 0.9 livello), python invierà 01 al circuito. Quindi CD4066 attivato con uscite collegate con resistore da 24k. Di conseguenza, il lampeggio del LED è diminuito di 1,2 volte al secondo (il lampeggio del LED è leggermente diminuito ma ancora un po' veloce)

- Quando il carico della CPU è aumentato in modo significativo (quindi la lunghezza della coda di esecuzione del tempo di attività diventa 1,0 ~ 1,9 livello), python emetterà 10 sul circuito. Quindi il percorso di connessione del resistore da 51k viene aperto e NE555 funziona 0,8 volte al secondo. Ora la frequenza di lampeggio si riduce notevolmente.

- I carichi pesanti che gravano sulla CPU e la lunghezza della coda di esecuzione del tempo di attività diventano più lunghi (più di 2 lavori attenderanno di essere eseguiti dalla CPU e il tempo di attività riporterà più di 2.0). Quando è selezionata la connessione del resistore da 100k, NE555 lampeggerà il LED 0,5 volte al secondo (la velocità di lampeggio diventa molto lenta)

***

Insieme all'aumento dei carichi di sistema, la velocità di lampeggio dei LED verrà ridotta di conseguenza.

Quando il LED lampeggia abbastanza lentamente, l'RPI è sicuramente sovraccaricato in modo significativo.

In questo modo il circuito di indicazione del carico riporta il livello di carico corrente di RPI.

Passaggio 4: parti

Per realizzare questo circuito, vengono utilizzati vari chip IC.

Anche se sto citando 74LSxx, tipo CD40xx di vecchi chip IC, puoi utilizzare tipi recenti di chip TTL e CMOS come 74HC4066 e 74ASxx quando il chip IC selezionato è di tipo DIP.

Il tipo a montaggio superficiale di un piccolo pacchetto IC può essere utilizzato anche quando è possibile saldare correttamente i piccoli sul PCB universale.

Altre sono parti comuni che puoi facilmente acquistare negli e-store su Internet.

- 74LS139 (decodificatore da 2 a 4, demultiplatore) x 1

- 74HC04 (6 inverter) x 1

- CD4066 (4 interruttori analogici IC) x 1

- CI timer NE555 x 1

- Condensatori: 10uF x 1, 0.1uF x 1

- PC817 fotoaccoppiatore x 2 (è possibile utilizzare qualsiasi comune fotoaccoppiatore a 4 pin)

- Resistori: 220 ohm x 4 (limitazione di corrente LED), 4,7 K (interfaccia fotoaccoppiatore) x 2, 12 K, /24 K/51 K/100 K (controllo della temporizzazione dell'orologio) x 1

- LED x 2 (qualsiasi colore diverso come giallo, verde o rosso, verde)

- Dimensioni dei fori della scheda universale 30 (L) per 20 (H) (puoi tagliare qualsiasi dimensione della scheda universale per adattarla a questo circuito)

- Filo di stagno (per realizzare schemi di cablaggio sul PCB universale)

- testa pin (3 pin) x 3

- Testa pin IC (4 pin) x 4

- cavi di cablaggio colore rosso/blu

***

Passaggio 5: creazione del disegno PCB

Fare il disegno del PCB
Fare il disegno del PCB

Sebbene mostri il disegno del PCB in ogni progetto, il design del cablaggio è solo un riferimento che ti guiderà nella corretta saldatura di ogni parte sul PCB universale.

Ma non sei necessariamente fedele a questo schema di cablaggio.

Come puoi vedere lo schema elettrico sopra, è piuttosto complesso e richiede PCB molto grandi.

È possibile utilizzare un cavo comune per collegare le parti invece del filo di stagno per ridurre le dimensioni del PCB completato da saldatura.

Utilizzare il disegno del PCB solo per controllare e confermare la corretta saldatura tra le parti.

Quando il numero di circuiti integrati TTL o CMOS viene aumentato, di solito il disegno del PCB diventa piuttosto complesso oltre la corretta integrazione su un singolo lato del PCB.

Pertanto, il multistrato di PCB è comunemente utilizzato per circuiti digitali di livello industriale che includono molti TTL, CMOS e microprocessori.

Passaggio 6: saldatura

saldatura
saldatura

Sto usando il filo di stagno e il cavo di cablaggio comune insieme per ridurre al minimo le dimensioni del PCB il più possibile.

Quando si confronta con il disegno PCB, la posizione di ciascuna parte è completamente cambiata.

Ma ancora il disegno PCB viene utilizzato per verificare la corretta connessione tra le parti durante la saldatura.

Puoi vedere che i resistori 12k/24k/51k/100k sono inseriti sulla testa del pin IC senza saldature.

Pertanto, è possibile sostituire i resistori con altri valori per modificare comodamente lo schema operativo del circuito in un secondo momento.

Passaggio 7: assemblaggio

Assemblaggio
Assemblaggio

Il circuito dell'indicatore di carico completato (d'ora in poi INDICATOR) è installato sulla scatola RPI del lettore musicale come mostrato nell'immagine sopra.

Questo lettore musicale è installato con DAC e sto usando questo di recente per riprodurre video musicali.

A proposito di questo box RPI, lo spiegherò più avanti e ora concentriamoci su INDICATOR poiché il circuito è l'oggetto principale di questo progetto.

Di recente ho acquistato Raspberry Pi 4 Model B 2GB (di seguito RPI 4B) per supportare l'applicazione di riproduzione video.

Poiché RPI 4B ha migliorato le prestazioni della CPU a 4 core, la gestione dei carichi di sistema è migliorata in modo abbastanza significativo da RPI 3B+.

Pertanto, l'output della lunghezza della coda di esecuzione del tempo di attività dovrebbe essere trattato in modo diverso da RPI 3B+.

- Per il carico di sistema molto convenzionale come la riproduzione di video, la lunghezza della coda di esecuzione di solito è inferiore a 0,5 (quindi il carico di sistema BASSO sarà di livello 0,0 ~ 0,5)

- Quando viene aggiunto un leggero carico di sistema aggiuntivo, come la riproduzione di video e la copia di file da e verso la directory locale, i lavori comportano un leggero carico sulla CPU. (Quindi il livello di carico LIGHT sarà 0,5 ~ 1,0)

- Quando vengono applicati carichi significativi come la riproduzione di video sul browser sul sito Youtube e la navigazione web su un altro browser, la velocità di esecuzione di RPI 4 diventa leggermente lenta (quindi il livello di carico MEDIO deve essere 1.0 ~ 2.0)

- Infine il carico del sistema RPI 4 diventa ALTO quando si eseguono più browser Web e si copiano grandi volumi di file su un altro server RPI attraverso la rete (quindi la lunghezza della coda di esecuzione diventa superiore a 2.0)

***

Questi dati sul livello di carico verranno utilizzati dal codice Python sviluppato nel passaggio successivo.

Passaggio 8: revisione del circuito originale

Revisione del circuito originale
Revisione del circuito originale

A causa di diversi difetti della progettazione del circuito originale, sto modificando il circuito come mostrato nell'immagine sopra.

Le ragioni del cambiamento sono le seguenti.

- L'impulso di clock NE555 è costituito dalla forma d'onda ALTA e BASSA. Ma di solito la durata del segnale HIGH e LOW (t=1/f) non è la stessa (ad esempio HIGH è 70% e LOW è 30% nel circuito originale). Pertanto, la frequenza di lampeggio di due LED (LED verde/giallo nel design originale) non è la stessa (un LED si accende più a lungo dell'altro). Per questo motivo, l'indicazione visiva del LED lampeggiante non è molto facilmente riconoscibile.`

- Pertanto, sto aggiungendo più LED e creando un modello di iterazione circolare con CD4017 per garantire un facile riconoscimento dello stato operativo

- Cambiando anche lo schema di lampeggio del LED in modo inverso, come il lampeggio lento a carico BASSO e il lampeggio più veloce con carico ALTO. (Il circuito originale è fatto lampeggiare più velocemente con un carico BASSO e un lampeggiamento lento con un carico ALTO). Nella situazione di carico ALTO, qualsiasi azione RPI diventa lenta. E mostrare il LED che lampeggia lentamente non ti renderà felice. (Nell'aspetto psicologico, sto scegliendo uno schema di visualizzazione più positivo)

***

Sebbene la parte del display a LED sia significativamente modificata, il livello di cambiamento generale con il circuito originale non è molto come puoi vedere nel passaggio successivo.

Passaggio 9: modifica dello schema originale

Modifica dello schema originale
Modifica dello schema originale

L'aggiunta di CD4017 e 8 LED è una modifica importante.

Inoltre, per modificare la frequenza di clock del NE555 e lo schema di lampeggio inverso del LED, i valori dei resistori vengono modificati come mostrato negli schemi sopra.

Poiché la porzione di circuito aggiunta è un semplice circuito chaser basato su CD4017, salterò altre spiegazioni dettagliate del circuito modificato.

Tutta la parte del circuito modificata può essere realizzata come scheda PCB figlia a cui sono saldati CD4017 e 8 LED.

La scheda figlia può essere collegata alla scheda madre (scheda madre) come mostrato nell'immagine al punto 8.

Passaggio 10: test

I video di prova di tutte le fasi operative (stato di carico BASSO, LUCE, MEDIO e ALTO) sono mostrati dal file memorizzato nell'unità google di seguito.

***

drive.google.com/file/d/1CNScV2nlqtuH_CYSW…

***

In base all'attuale carico del sistema, la frequenza di lampeggio verrà modificata tra uno dei 4 stati mostrati nel video.

Passaggio 11: codice Python

Codice Python
Codice Python

Poiché la maggior parte delle logiche di controllo è inclusa nel circuito hardware esterno, la logica operativa del codice Python è relativamente semplice e include i seguenti passaggi.

- Ottenere i dati sulla temperatura della CPU per confrontare la relatività tra il carico del sistema e l'innalzamento della temperatura

- Raccolta del carico di sistema medio di 1 minuto dall'output del tempo di attività

- Creazione di timestamp come aa-mm-gg hh:mm:ss formato

- Scrittura della temperatura, carico del sistema e timestamp

- In base ai dati di uscita del carico del sistema corrente (00, 01, 10, 11) al circuito INDICATOR

- Dormi 5 secondi prima di iniziare i passaggi sopra menzionati

Poiché il programma Python richiede un rientro rigoroso all'interno del codice sorgente, scarica il file sorgente da Google Drive seguendo il link sottostante.

***

drive.google.com/file/d/1BdaRVXyFmQrRHkxY8…

***

Poiché non utilizzo RPI come computer desktop, l'esecuzione di applicazioni per ufficio o browser Web Libre è molto rara.

Di solito sto riproducendo video musicali, copia/spostamento di file o programmazione Python con RPI 4B 2GB appena acquistato.

Pertanto, il carico medio è di solito inferiore a 1.0 nel mio caso e di conseguenza sto modificando i livelli LOW/LIGHT/MEDIUM/HIGH nel mio codice. (Puoi modificare le condizioni del test in caso contrario)

Ma quando si visualizzano comunemente i video di Youtube con RPI, si verificheranno comunemente più di 2.0 di carichi di sistema.

Passaggio 12: Relatività tra il carico del sistema e la temperatura della CPU

Relatività tra il carico del sistema e la temperatura della CPU
Relatività tra il carico del sistema e la temperatura della CPU

Di solito immagino e sono certo che l'aumento del carico del sistema aumenterà la temperatura della CPU.

Ma fino ad ora non ho un'immagine chiara della reciproca interoperabilità tra loro.

Come puoi vedere nel grafico sopra, sono una correlazione molto forte come segue.

- Per un confronto facile, moltiplico 10 per il carico medio del sistema. In caso contrario, la scala del carico di sistema è molto piccola (0,0 ~ 2,0), il confronto diretto diventa difficile.

- Poiché il circuito FAN di raffreddamento è installato sulla scatola Pi che riproduce la musica, la temperatura della CPU non supera mai i 50C

- Quando il carico del sistema è compreso tra 0,0 ~ 1,0, la temperatura è compresa tra 45 e 48 °C (la copertura metallica della CPU si sta leggermente riscaldando)

- Ma viene applicato un carico pesante (di solito browser Web e riproduzione di video di Youtube), carico impennato e quindi la temperatura

***

Poiché RPI 4B è installato con CPU a 4 core, teoricamente le prestazioni non saranno molto degradate fino al livello di carico (coda di esecuzione dei tempi di attività) 4.

Ma ancora inferiore al livello di carico medio 4, sarà necessario un adeguato controllo della temperatura.

Passaggio 13: finalizzazione

finalizzazione
finalizzazione

Sto finendo questo progetto installando INDICATOR su Pi box come nell'immagine sopra.

Durante l'uso casuale di questa scatola Pi, INDICATOR mostra raramente il livello ALTO e il LED dinamico lampeggiante.

Di solito rimaneva negli stati dei LED a lampeggio lento (quindi livello LOW o LIGHT).

Comunque l'indicatore visivo aggiunto rende un po' divertente almeno mostra che RPI sta facendo qualcosa in questo momento.

Grazie per aver letto questa storia…..

Consigliato: