Inhoudsopgave:

Raspberry Pi CPU-belastingsindicator: 13 stappen
Raspberry Pi CPU-belastingsindicator: 13 stappen

Video: Raspberry Pi CPU-belastingsindicator: 13 stappen

Video: Raspberry Pi CPU-belastingsindicator: 13 stappen
Video: The Universe and Dr. Einstein (Free Audiobook) by Lincoln Barnett 2024, November
Anonim
Raspberry Pi CPU-belastingsindicator
Raspberry Pi CPU-belastingsindicator

Bij het uitvoeren van Raspberry Pi (RPI) als headless zonder consolemonitor, zijn er geen specifieke visuele indicaties beschikbaar om te herkennen dat de RPI daadwerkelijk iets doet.

Hoewel de externe terminal wordt gebruikt met SSH, is het van tijd tot tijd uitvoeren van de Linux-opdracht vereist om te controleren hoeveel systeembelasting de CPU nu belast

Dus dit circuit is gemaakt om de echte activiteit van de CPU onmiddellijk te herkennen (misschien semi-reële of bijna echte manier) om de momenteel toegepaste systeembelastingen uit te voeren.

Hoewel alleen python-programmering en een veel eenvoudiger circuit dezelfde functionaliteit kunnen ondersteunen, zijn een beetje complexe python-codes vereist om de geavanceerde LED-besturingslogica te simuleren die door dit circuit wordt vereist.

Ook paradoxaal genoeg zal de toegenomen complexiteit van python-code de CPU meer belasten met een verhoogde systeembelasting.

Daarom is het redelijk om indicatiefunctionaliteit zoveel mogelijk naar een extern hardwarecircuit te verplaatsen, aangezien deze service altijd en vaak moet worden uitgevoerd, bijvoorbeeld per 5 seconden.

En dit circuit zal een beetje grappige functie toevoegen aan headless running RPI.

Stap 1: CPU-belasting Linux-opdracht controleren

CPU-belasting Linux-opdracht controleren
CPU-belasting Linux-opdracht controleren

Er zijn diverse Linux-commando's voor het controleren van de CPU-belasting beschikbaar, zoals top, iostat, sysstat en uptime.

Elke opdracht heeft specifieke voordelige kenmerken in termen van informatiediversiteit en het weergeven van gegevenseenvoud.

Top-opdracht is de meest informatierijke en zeer gedetailleerde gegevens die beschikbaar zijn voor het onmiddellijk herkennen van de systeembelasting.

Maar het werkt als iteratiemodus (gegevens continu op het scherm weergeven) en het informatieformaat is vrij complex om alleen de vereiste CPU-belastingsgegevens eenvoudig te extraheren.

Het iostat-commando biedt diepgaande informatie over de systeembelasting door de wachtrijtaken van de gebruiker en het systeem te scheiden die momenteel de CPU belasten.

Maar het is ook onnodig ingewikkeld om de huidige CPU-belasting zo snel en intuïtief te krijgen.

In het geval van uptime zijn zeer eenvoudige systeembelastingsgegevens beschikbaar in termen van 1 minuut gemiddeld, 5 minuten gemiddeld en 15 minuten samengevat gemiddelde.

Zoals hierboven vermeld, is het vereenvoudigen van de python-code noodzakelijk omdat deze vrij vaak moet worden uitgevoerd, bijvoorbeeld per 5 seconden of 10 seconden.

Wanneer python-code complex wordt, zal dit de CPU veel belasten.

Het is een soort paradox dat je RPI belast om de systeembelasting te bewaken.

Daarom kies ik de uptime-opdracht om de CPU-belasting te verzamelen en samen te werken met het indicatorcircuit, omdat dit de eenvoudigste is.

Maar aangezien de uptime de gemiddelde systeembelasting van 1 minuut laat zien, moet het indicatorcircuit niet in de strikt realtime-modus worden gebruikt.

Toch kan dit circuit een nuttige visuele hint geven die laat zien hoe RPI het nu doet.

Stap 2: Schema's

Schema's
Schema's

Dit circuit ontvangt 4 verschillende niveaus (bijv. 00->LOW, 01->LIGHT, 10->MEDIUM, 11->HIGH) van de huidige CPU-belasting van RPI via twee opto-coupler-ingangen.

74LS139 (2 tot 4 decoder en de-multiplexer) decodeert twee bit-ingangen in een van de vier mogelijke manieren, zoals 00(LOW)->B0, 01(LIGHT)->B1, 10(MEDIUM)->B2, 11(HOOG)->B3.

Aangezien de 74LS139-uitgang een omgekeerd niveau is (00-ingang -> B0 wordt LAAG en andere 3 uitgangen HOOG), wordt de 74HC04-omvormer gebruikt om de uitgang nog een keer omgekeerd te maken.

Wanneer de output van 74LS139 normaal HOOG is, is 74HC04 niet nodig.

Maar op de een of andere manier is 74LS139 zo gemaakt. (Controleer de waarheidstabel van 74LS139)

Wanneer een van de 74LS139-uitgangen is geselecteerd, wordt een bepaalde analoge schakelaar geactiveerd tussen 4 schakelaars die zijn opgenomen in de CD4066 IC.

CD4066 ondersteunt 4 analoge schakelaars en elke schakelaar bestaat uit 1 stuuringang en 2 analoge uitgangen.

Wanneer de stuuringang HOOG wordt, worden de twee uitgangen een lage impedantie (weerstand wordt 0) en andere worden een HOOG impedantie (weerstand tussen twee uitgangspaden wordt enkele honderden mega ohm).

Regel eenvoudig 1 (pin 13) van CD4066 wordt HOOG, pad tussen uitgang 1 (pin 1) en uitgang 2 (pin 2) aangesloten terwijl andere uitgangen niet zijn aangesloten (in hoge impedantietoestand).

Evenzo maakt de HOGE ingang van besturing 2 (pin 5) uitgang 1 (pin 4) en uitgang 2 (pin 3) aangesloten terwijl andere uitgangen zijn losgekoppeld.

Dan knippert LM555 twee LED's in verschillende knippersnelheid.

Zoals u in het bovenstaande schema kunt zien, werkt de NE555 met een weerstandswaarde van 4 (12k, 24k, 51k, 100k) mogelijke weerstandsniveaus.

Stap 3: NE555 verschillende klokgeneratie

NE555 Verschillende klokgeneratie
NE555 Verschillende klokgeneratie

Zoals te zien is in het schema, zal de NE555 een van de mogelijke weerstandswaarden gebruiken, zoals 12k, 24l, 51k en 100k.

Eigenlijk is het NE555-timingcircuitgedeelte een belangrijke visuele indicatie die een deel van het circuit ondersteunt.

Het werkingsschema van het circuit is als volgt.

- Wanneer er geen significante CPU-belasting is, stuurt het python-programma dat in RPI is geïnstalleerd 00-uitgangen naar het indicatorcircuit. Dan wordt het twee uitgangspad van de CD4066 geactiveerd en werkt de NE555 met een weerstandswaarde van 12k. Daarom knipperen LED's 1,5 keer per seconde (vrij snel knipperend)

- CPU is licht geladen (dan wordt de uptime-wachtrijlengte 0,1 ~ 0,9 niveau), python stuurt 01 naar circuit. Vervolgens wordt CD4066 geactiveerd met uitgangen verbonden met een 24k-weerstand. Als gevolg hiervan nam het knipperen van de LED 1,2 keer per seconde af (het knipperen van de LED iets afgenomen maar nog steeds een beetje snel)

- Wanneer de CPU-belasting aanzienlijk is toegenomen (daarna wordt de uptime-run-queue-lengte 1,0 ~ 1,9-niveau), zal python 10 naar het circuit uitvoeren. Vervolgens wordt het verbindingspad van de 51k-weerstand geopend en werkt de NE555 0,8 keer per seconde. Nu wordt de knipperfrequentie aanzienlijk verminderd.

- Zware belasting die de CPU belast en de run-wachtrij van de uptime wordt langer (meer dan 2 taken wachten om door de CPU te worden uitgevoerd en de uptime rapporteert meer dan 2.0). Als 100k-weerstandsverbinding is geselecteerd, knippert de NE555 0,5 keer per seconde LED (knippersnelheid wordt erg langzaam)

***

Samen met de verhoogde systeembelasting, zal de knippersnelheid van de LED dienovereenkomstig worden verlaagd.

Wanneer LED vrij langzaam knippert, dan is RPI zeker aanzienlijk overbelast.

Op deze manier rapporteert het belastingindicatiecircuit uw huidige belastingsniveau van RPI.

Stap 4: Onderdelen

Voor het maken van deze schakeling worden verschillende IC-chips gebruikt.

Hoewel ik 74LSxx, CD40xx-type oude IC-chips noem, kunt u recente typen TTL- en CMOS-chips gebruiken, zoals 74HC4066 en 74ASxx wanneer de geselecteerde IC-chip van het DIP-type is.

Een klein IC-pakket van het type Surface Mount kan ook worden gebruikt wanneer u de kleine goed op de universele PCB kunt solderen.

Andere zijn veelvoorkomende onderdelen die u gemakkelijk kunt kopen bij internetwinkels.

- 74LS139 (2 tot 4 decoder, de-multiplexer) x 1

- 74HC04 (6 omvormer) x 1

- CD4066 (4 analoge schakelaars IC) x 1

- NE555 Timer-IC x 1

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

- PC817 opto-coupler x 2 (elke gewone 4-pins opto-coupler kan worden gebruikt)

- Weerstanden: 220ohm x 4 (LED-stroombegrenzing), 4,7K (Opto-coupler-interface) x 2, 12K, /24K/51K/100K (kloktimingregeling) x 1

-LED x 2 (alle verschillende kleuren zoals geel, groen of rood, groen)

- Universeel bord met gaten van 30 (W) bij 20 (H) (u kunt elke maat universeel bord knippen om in dit circuit te passen)

- Tindraad (Voor het maken van bedradingspatronen op de universele print)

- speldkop (3 pinnen) x 3

- IC-penkop (4 pinnen) x 4

- rode/blauwe kleur bedrading kabels

***

Stap 5: PCB-tekening maken

PCB-tekening maken
PCB-tekening maken

Hoewel ik in elk project PCB-tekening laat zien, is het bedradingsontwerp slechts een referentie die u zal begeleiden bij het correct solderen van elk onderdeel op universele PCB.

Maar u houdt zich niet noodzakelijk aan dit bedradingsschema.

Zoals u het bedradingsschema hierboven kunt zien, is het vrij complex en vereist het een aanzienlijk grote PCB.

U kunt een gewone kabel gebruiken om onderdelen aan te sluiten in plaats van tindraad om de grootte van de gesoldeerde printplaat te verkleinen.

Gebruik de printtekening alleen voor het controleren en bevestigen van het correct solderen tussen onderdelen.

Wanneer het aantal TTL- of CMOS-IC's wordt verhoogd, wordt het tekenen van PCB's meestal behoorlijk complex en gaat het verder dan een goede integratie aan één kant van de PCB.

Daarom wordt meerlagige PCB vaak gebruikt voor digitale circuits van industriële kwaliteit, waaronder veel TTL, CMOS en microprocessors.

Stap 6: Solderen

Solderen
Solderen

Ik gebruik tindraad en gemeenschappelijke bedradingskabel samen om de PCB-afmetingen zoveel mogelijk te minimaliseren.

Bij vergelijking met PCB-tekening is de locatie van elk onderdeel volledig veranderd.

Maar toch wordt PCB-tekening gebruikt om de juiste verbinding tussen onderdelen tijdens het solderen te controleren.

U kunt zien dat 12k/24k/51k/100k-weerstanden op de IC-penkop worden geplaatst zonder te solderen.

Daarom kunt u weerstanden vervangen door andere waarden om later gemakkelijk het operationele schema van het circuit te wijzigen.

Stap 7: Montage

in elkaar zetten
in elkaar zetten

Voltooid laadindicatorcircuit (hierna INDICATOR genoemd) is geïnstalleerd op de RPI-box van de muziekspeler, zoals weergegeven in de afbeelding hierboven.

Deze muziekspeler is geïnstalleerd met DAC en ik gebruik deze onlangs voor het afspelen van muziekvideo.

Over deze RPI-box zal ik het later uitleggen en laten we ons nu concentreren op INDICATOR, aangezien het circuit het hoofdonderwerp van dit project is.

Ik heb onlangs Raspberry Pi 4 Model B 2GB (hierna RPI 4B) gekocht om de toepassing voor het afspelen van video's te ondersteunen.

Omdat RPI 4B de prestaties van de 4-core CPU heeft verbeterd, is de verwerking van systeembelastingen aanzienlijk verbeterd ten opzichte van RPI 3B+.

Daarom moet de uitvoer van de run-wachtrijlengte van de uptime anders worden behandeld dan RPI 3B+.

- Voor de zeer conventionele systeembelasting, zoals het afspelen van video, is de run-wachtrij meestal minder dan 0,5 (dus de LAGE systeembelasting is 0,0 ~ 0,5 niveau)

- Wanneer een lichte extra systeembelasting wordt toegevoegd, zoals het afspelen van video en het kopiëren van bestanden van en naar de lokale directory, resulteert dit in een lichte belasting van de CPU. (Dus het LICHT laadniveau zal 0,5 ~ 1,0 zijn)

- Wanneer aanzienlijke belastingen worden toegepast, zoals het afspelen van video in de browser op de YouTube-site en het surfen op het web in een andere browser, wordt de rijsnelheid van RPI 4 enigszins traag (het MEDIUM-laadniveau zal dus 1,0 ~ 2,0 zijn)

- Eindelijk wordt de RPI 4-systeembelasting HOOG bij het uitvoeren van meerdere webbrowsers en het kopiëren van grote hoeveelheden bestanden naar een andere RPI-server via het netwerk (dan wordt de run-queue-lengte meer dan 2.0)

***

Deze gegevens op het laadniveau zullen worden gebruikt door de python-code die in de volgende stap wordt ontwikkeld.

Stap 8: Herziening van het originele circuit

Herziening van het originele circuit
Herziening van het originele circuit

Vanwege verschillende defecten in het originele circuitontwerp, pas ik het circuit aan zoals weergegeven in de bovenstaande afbeelding.

De redenen om te veranderen zijn als volgt.

- NE555-klokpuls bestaat uit een HOGE en LAGE golfvorm. Maar meestal is de signaalduur HIGH en LOW (t=1/f) niet hetzelfde (HIGH is bijvoorbeeld 70% en LOW is 30% in het originele circuit). Daarom is de knippersnelheid van twee leds (groen/gele led in origineel ontwerp) niet hetzelfde (een led gaat langer aan dan de andere). Om deze reden is visuele indicatie door knipperende LED niet zo gemakkelijk herkenbaar.`

- Daarom voeg ik meer LED's toe en maak ik een cirkelvormig iteratiepatroon met CD4017 om de operationele status gemakkelijk te herkennen

- Ook omgekeerd LED-knipperschema veranderen, zoals langzaam knipperen bij LAGE belasting en sneller knipperen bij HOGE belasting. (Originele circuit is gemaakt om sneller te knipperen bij LAGE belasting en langzaam te knipperen bij HOGE belasting). In de HOGE belastingsituatie worden alle RPI-acties traag. En het langzaam knipperen van de LED's zal je niet gelukkig maken. (In het psychologische aspect kies ik voor een positiever weergaveschema)

***

Hoewel het LED-displaygedeelte aanzienlijk is gewijzigd, is het algehele veranderingsniveau met het originele circuit niet veel, zoals u in de volgende stap kunt zien.

Stap 9: Originele schematische wijziging

Oorspronkelijke schematische wijziging
Oorspronkelijke schematische wijziging

Toevoeging van CD4017 en 8 LED's zijn belangrijke modificaties.

Ook om de NE555-klokfrequentie en het omgekeerde LED-knipperschema te wijzigen, worden de weerstandswaarden gewijzigd zoals weergegeven in het bovenstaande schema.

Omdat het toegevoegde circuitgedeelte een eenvoudig op CD4017 gebaseerd chaser-circuit is, zal ik andere gedetailleerde uitleg van het aangepaste circuit overslaan.

Alle gewijzigde circuitgedeelten kunnen worden gemaakt als dochterprintplaat waarop CD4017 en 8 LED's zijn gesoldeerd.

Het dochterbord kan worden bevestigd aan het moederbord (moederbord) zoals afgebeeld in stap 8.

Stap 10: Testen

Testvideo van alle operationele stadia (LAAG, LICHT, GEMIDDELD en HOOG laadstatus) worden weergegeven door het bestand dat is opgeslagen in de Google Drive hieronder.

***

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

***

Afhankelijk van de huidige systeembelasting, wordt de knippersnelheid gewijzigd tussen een van de 4 statussen die in de video worden getoond.

Stap 11: Python-code

Python-code
Python-code

Aangezien de meeste besturingslogica zijn opgenomen in een extern hardwarecircuit, is de operationele logica van python-code relatief eenvoudig, inclusief de volgende stappen.

- CPU-temperatuurgegevens verkrijgen om de relativiteit tussen systeembelasting en temperatuurverhoging te vergelijken

- Verzamelen van de gemiddelde systeembelasting van 1 minuut uit uptime-output

- Tijdstempel maken zoals jj-mm-dd uu:mm:ss formaat

- Schrijftemperatuur, systeembelasting samen met tijdstempel

- Volgens de huidige uitgangsgegevens van de systeembelasting (00, 01, 10, 11) naar INDICATOR-circuit:

- Slaap 5 seconden voordat u de bovengenoemde stappen start

Aangezien het python-programma strikte inspringing in de broncode nodig heeft, downloadt u het bronbestand van Google Drive door de onderstaande link te volgen.

***

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

***

Omdat ik RPI niet als desktopcomputer gebruik, is het uitvoeren van Libre-kantoortoepassingen of webbrowser zeer zeldzaam.

Meestal speel ik muziekvideo, het kopiëren/verplaatsen van bestanden of python-programmering met de nieuw aangeschafte RPI 4B 2GB.

Daarom is de gemiddelde belasting in mijn geval meestal minder dan 1,0 en dienovereenkomstig verander ik de LOW / LIGHT / MEDIUM / HIGH-niveaus in mijn code. (U kunt de testomstandigheden anders wijzigen)

Maar wanneer u vaak YouTube-video's bekijkt met RPI, zal er vaak meer dan 2,0 systeembelastingen plaatsvinden.

Stap 12: relativiteit tussen systeembelasting en CPU-temperatuur

Relativiteit tussen systeembelasting en CPU-temperatuur
Relativiteit tussen systeembelasting en CPU-temperatuur

Meestal gok ik en ben ik er zeker van dat een toenemende systeembelasting de CPU-temperatuur zal verhogen.

Maar tot nu toe heb ik geen duidelijk beeld van de onderlinge samenwerking tussen hen.

Zoals je in de bovenstaande grafiek kunt zien, hebben ze als volgt een zeer sterke co-relatie.

- Voor een gemakkelijke vergelijking vermenigvuldig ik 10 met de gemiddelde systeembelasting. Anders is de schaal van de systeembelasting erg klein (0,0 ~ 2,0), wordt directe vergelijking moeilijk.

- Aangezien het koelventilatorcircuit is geïnstalleerd op de Pi-box die muziek speelt, overschrijdt de CPU-temperatuur nooit meer dan 50C

- Wanneer de systeembelasting binnen het bereik van 0,0 ~ 1,0 is, de temperatuur binnen het bereik van 45 ~ 48C (CPU-metalen deksel warmt enigszins op)

- Maar er wordt een zware belasting toegepast (meestal webbrowser en YouTube-video's afspelen), de belasting stijgt en dus de temperatuur

***

Aangezien RPI 4B is geïnstalleerd met een 4-core CPU, zullen de prestaties theoretisch niet veel worden verslechterd tot het laadniveau (uptime running queue) 4.

Maar nog steeds onder het gemiddelde belastingsniveau 4, zal een geschikte temperatuurregeling nodig zijn.

Stap 13: Afronding

Finalisatie
Finalisatie

Ik rond dit project af door INDICATOR in Pi-box te installeren, zoals bovenstaande afbeelding.

Tijdens het incidentele gebruik van deze Pi-box toont INDICATOR zelden HOOG niveau en dynamische LED-knipperingen.

Meestal bleef het in langzaam knipperende LED-statussen (dus LAAG of LICHT-niveau).

Hoe dan ook, de toegevoegde visuele indicator maakt een beetje grappig, het laat tenminste zien dat RPI nu iets doet.

Bedankt voor het lezen van dit verhaal…..

Aanbevolen: