Spisu treści:

Wskaźnik obciążenia procesora Raspberry Pi: 13 kroków
Wskaźnik obciążenia procesora Raspberry Pi: 13 kroków

Wideo: Wskaźnik obciążenia procesora Raspberry Pi: 13 kroków

Wideo: Wskaźnik obciążenia procesora Raspberry Pi: 13 kroków
Wideo: Domoticz na Pi ZeroW w 2021 - wciąż daje radę !! [Domoticz #1] 2024, Lipiec
Anonim
Wskaźnik obciążenia procesora Raspberry Pi
Wskaźnik obciążenia procesora Raspberry Pi

Podczas uruchamiania Raspberry Pi (RPI) jako bezgłowego bez monitora konsoli, nie są dostępne żadne konkretne wizualne wskazania, aby rozpoznać, że RPI faktycznie coś robi.

Mimo że zdalny terminal jest używany z SSH, konieczne jest od czasu do czasu wykonanie polecenia systemu Linux, aby sprawdzić, jak duże obciążenie systemu obciąża teraz procesor

Tak więc obwód ten został stworzony, aby pomóc natychmiast rozpoznać rzeczywistą aktywność procesora (może być półrzeczywistą lub prawie rzeczywistą) w celu wykonania aktualnie stosowanych obciążeń systemu.

Chociaż tylko programowanie w Pythonie i znacznie prostszy obwód mogą obsługiwać tę samą funkcjonalność, do symulacji wyrafinowanej logiki sterowania LED wymaganej przez ten obwód wymagane będą nieco złożone kody Pythona.

Również paradoksalnie zwiększona złożoność kodu Pythona będzie bardziej obciążać procesor wraz ze zwiększonym obciążeniem systemu.

W związku z tym rozsądne będzie odciążenie dowolnej funkcjonalności sygnalizacyjnej na zewnętrzny obwód sprzętowy, ponieważ usługa ta powinna być uruchomiona przez cały czas i często, na przykład co 5 sekund.

A ten obwód doda trochę zabawnej funkcji do bezgłowego biegania RPI.

Krok 1: Sprawdzanie obciążenia procesora Polecenie Linuksa

Polecenie Linuksa sprawdzające obciążenie procesora
Polecenie Linuksa sprawdzające obciążenie procesora

Dostępne są różne polecenia sprawdzania obciążenia procesora, takie jak top, iostat, sysstat i uptime.

Każde polecenie ma określone korzystne cechy w zakresie różnorodności informacji i prostoty wyświetlania danych.

Polecenie Top jest najbardziej bogate w informacje, a bardzo szczegółowe dane są dostępne do natychmiastowego rozpoznania obciążenia systemu.

Ale działa jako tryb iteracji (ciągłe wyświetlanie danych na ekranie), a format informacji jest dość złożony, aby po prostu wyodrębnić tylko wymagane dane dotyczące obciążenia procesora.

Komenda iostat zapewnia szczegółowe informacje o obciążeniu systemu, oddzielając zadania kolejki uruchomione przez użytkownika i system, które obecnie obciążają procesor.

Ale jest również niepotrzebnie skomplikowane, aby uzyskać bieżące obciążenie procesora w szybki i intuicyjny sposób.

W przypadku uptime dostępne są bardzo proste dane o obciążeniu systemu w postaci średniej 1 minuty, średniej 5 minut i średniej sumarycznej 15 minut.

Jak wspomniano powyżej, uproszczenie kodu Pythona jest konieczne, ponieważ powinno być wykonywane dość często, np. co 5 sekund lub 10 sekund.

Kiedy kod Pythona stanie się złożony, znacznie obciąży procesor.

To rodzaj paradoksu, że obciążasz RPI monitorowaniem obciążenia systemu.

Dlatego wybieram polecenie uptime, aby zebrać obciążenie procesora i współpracować z obwodem wskaźnika, ponieważ jest to najprostsze.

Ale ponieważ czas pracy pokazuje średnią 1 minutę obciążenia systemu, obwód wskaźnika nie powinien działać w trybie ściśle czasu rzeczywistego.

Mimo to ten obwód może zapewnić pomocną wskazówkę wizualną, która pokazuje, jak radzi sobie teraz RPI.

Krok 2: Schematy

Schematy
Schematy

Obwód ten otrzyma 4 różne poziomy (np. 00->LOW, 01->LIGHT, 10->MEDIUM, 11->HIGH) bieżącego obciążenia procesora z RPI przez dwa wejścia transoptora.

74LS139 (dekoder 2 do 4 i demultiplekser) dekoduje dwa wejścia bitowe w jedno lub jedno wyjście spośród 4 możliwych sposobów, takich jak 00(LOW)->B0, 01(LIGHT)->B1, 10(MEDIUM)->B2, 11(WYSOKI)->B3.

Ponieważ wyjście 74LS139 ma poziom odwrotny (wejście 00 -> B0 staje się NISKIM, a pozostałe 3 wyjścia WYSOKIE), falownik 74HC04 jest używany do ponownego odwrócenia wyjścia.

Gdy wyjście 74LS139 jest normalnie WYSOKIE, 74HC04 nie będzie konieczne.

Ale jakoś 74LS139 jest tak wykonany. (Proszę sprawdzić tabelę prawdy 74LS139)

Po wybraniu dowolnego z wyjść 74LS139, aktywuje jeden określony przełącznik analogowy spośród 4 przełączników zawartych w CD4066 IC.

CD4066 może obsługiwać 4 przełączniki analogowe, a każdy przełącznik składa się z 1 wejścia sterującego i 2 wyjść analogowych.

Kiedy wejście sterujące staje się WYSOKIE, połączenie dwóch wyjść staje się o niskiej impedancji (rezystancja staje się 0), a inne stają się o wysokiej impedancji (rezystancja między dwoma ścieżkami wyjściowymi osiąga poziom kilkuset megaomów).

Po prostu kontroluj 1 (styk 13) CD4066 w stanie WYSOKI, ścieżka między wyjściem 1 (styk 1) i wyjściem 2 (styk 2) jest podłączona, podczas gdy inne wyjścia nie są podłączone (w stanie wysokiej impedancji).

Podobnie wejście HIGH sterowania 2 (pin 5) powoduje, że wyjście 1 (pin 4) i wyjście 2 (pin 3) są połączone, podczas gdy inne wyjścia są odłączone.

Następnie LM555 miga dwiema diodami LED z różną częstotliwością migania.

Jak widać na powyższym schemacie, NE555 będzie działał z jednym z wartości oporu spośród 4 (12k, 24k, 51k, 100k) możliwych poziomów oporu.

Krok 3: NE555 różne generowanie zegara

NE555 Inna generacja zegara
NE555 Inna generacja zegara

Jak pokazano na schemacie, NE555 będzie działał z jedną z możliwych wartości rezystancji, takich jak 12k, 24l, 51k i 100k.

W rzeczywistości część obwodu taktowania NE555 jest głównym wizualnym wskazaniem wspierającym część obwodu.

Schemat działania obwodu jest następujący.

- Gdy nie ma znaczącego obciążenia procesora, program Pythona zainstalowany w RPI wyśle 00 wyjść do obwodu wskaźnika. Następnie aktywuje się ścieżka dwóch wyjść CD4066 i NE555 pracuje z rezystorem o wartości 12k. Dlatego diody mrugają 1,5 raza na sekundę (mrugają dość szybko)

- Procesor jest lekko obciążony (wtedy długość kolejki uptime osiąga poziom 0,1 ~ 0,9), python wyśle 01 do obwodu. Następnie CD4066 aktywowany wyjściami połączonymi rezystorem 24k. W rezultacie miganie diody LED zmniejszyło się 1,2 razy na sekundę (miganie diody nieco spadło, ale nadal trochę szybko)

- Gdy obciążenie procesora znacznie wzrosło (wtedy długość kolejki uruchomieniowej uptime osiągnie poziom 1,0 ~ 1,9), python wyśle 10 do obwodu. Następnie ścieżka połączenia rezystora 51k zostaje otwarta i NE555 działa 0,8 razy na sekundę. Teraz częstotliwość mrugania zostaje znacznie zmniejszona.

- Duże obciążenia obciążające procesor i czas działania kolejki uruchamiania stają się dłuższe (więcej niż 2 zadania będą czekały na wykonanie przez procesor, a czas działania zgłosi więcej niż 2,0). Po wybraniu połączenia rezystora 100k, NE555 będzie migać diodą LED 0,5 razy na sekundę (prędkość migania staje się bardzo wolna)

***

Wraz ze wzrostem obciążenia systemu prędkość migania diody LED zostanie odpowiednio zmniejszona.

Gdy dioda mruga dość wolno, to RPI na pewno jest mocno przeciążone.

W ten sposób obwód wskazujący obciążenie informuje o aktualnym poziomie obciążenia RPI.

Krok 4: Części

Do wykonania tego obwodu wykorzystywane są różne układy scalone.

Chociaż wspominam o starych układach scalonych 74LSxx, CD40xx, możesz wykorzystać najnowsze typy układów TTL i CMOS, takie jak 74HC4066 i 74ASxx, gdy wybrany układ IC jest typu DIP.

Typ małej obudowy IC do montażu powierzchniowego może być również używany, gdy można odpowiednio przylutować małe na uniwersalnej płytce drukowanej.

Inne to części wspólne, które można łatwo kupić w sklepach internetowych.

- 74LS139 (dekoder od 2 do 4, demultiplekser) x 1

-74HC04 (6 falowników) x 1

- CD4066 (4 przełączniki analogowe IC) x 1

-NE555 układ scalony timera x 1

- Kondensatory: 10uF x 1, 0,1uF x 1

- Transoptor PC817 x 2 (można użyć dowolnego wspólnego 4-pinowego transoptora)

- Rezystory: 220ohm x 4 (ograniczenie prądu LED), 4,7K (interfejs transoptora) x 2, 12K, /24K/51K/100K (kontrola taktowania zegara) x 1

- LED x 2 (dowolne różne kolory, takie jak żółty, zielony lub czerwony, zielony)

- Płytka uniwersalna o wymiarach 30(W) na 20(H) otworów (można wyciąć dowolny rozmiar płytki uniwersalnej, aby pasowała do tego obwodu)

- Drut cynowy (do wykonywania wzorów okablowania na uniwersalnej płytce drukowanej)

- główka szpilki (3 piny) x 3

- Głowica pinów IC (4 piny) x 4

- przewody okablowania w kolorze czerwonym/niebieskim

***

Krok 5: Tworzenie rysunku PCB

Tworzenie rysunku PCB
Tworzenie rysunku PCB

Chociaż pokazuję rysunek PCB w każdym projekcie, projekt okablowania jest tylko punktem odniesienia, który poprowadzi Cię do prawidłowego lutowania każdej części na uniwersalnej płytce drukowanej.

Ale niekoniecznie trzymasz się tego schematu okablowania.

Jak widać na powyższym schemacie okablowania, jest on dość skomplikowany i wymaga bardzo dużej płytki drukowanej.

Możesz użyć zwykłego kabla do łączenia części zamiast drutu cynowego, aby zmniejszyć rozmiar gotowej lutowanej płytki drukowanej.

Rysunku PCB należy używać wyłącznie do sprawdzania i potwierdzania prawidłowego lutowania między częściami.

Gdy liczba układów scalonych TTL lub CMOS wzrasta, zwykle rysunek PCB staje się dość skomplikowany poza właściwą integracją z jednej strony PCB.

Dlatego wielowarstwowa płytka PCB jest powszechnie wykorzystywana w przemysłowych układach cyfrowych, które zawierają wiele TTL, CMOS i mikroprocesorów.

Krok 6: Lutowanie

Lutowanie
Lutowanie

Używam razem drutu cynowego i zwykłego kabla, aby maksymalnie zminimalizować rozmiar płytki drukowanej.

Porównując z rysunkiem PCB, lokalizacja każdej części jest całkowicie zmieniona.

Jednak nadal rysunek PCB służy do weryfikacji prawidłowego połączenia między częściami podczas lutowania.

Widać, że rezystory 12k/24k/51k/100k są włożone do głowicy pinu IC bez lutowania.

Dlatego możesz wymienić rezystory na inne wartości, aby później wygodnie zmienić schemat działania obwodu.

Krok 7: Montaż

Złożenie
Złożenie

Zakończony obwód wskaźnika obciążenia (zwany dalej INDICATOR) jest zainstalowany w skrzynce RPI odtwarzacza muzycznego, jak pokazano na powyższym rysunku.

Ten odtwarzacz muzyczny jest zainstalowany z DAC i używam go ostatnio do odtwarzania teledysków.

O tym pudełku RPI wyjaśnię później, a teraz skupmy się na WSKAŹNIKU, ponieważ obwód jest głównym tematem tego projektu.

Niedawno kupiłem Raspberry Pi 4 Model B 2GB (dalej RPI 4B) do obsługi aplikacji do odtwarzania wideo.

Ponieważ RPI 4B zwiększył wydajność 4-rdzeniowego procesora, obsługa obciążeń systemowych została znacznie ulepszona w porównaniu z RPI 3B+.

Dlatego dane wyjściowe dotyczące długości kolejki uruchomieniowej czasu działania powinny być traktowane inaczej niż RPI 3B+.

- W przypadku bardzo konwencjonalnego obciążenia systemu, takiego jak odtwarzanie wideo, długość kolejki uruchamiania zwykle jest mniejsza niż 0,5 (więc NISKIE obciążenie systemu będzie wynosić 0,0 ~ 0,5 poziomu)

- Przy niewielkim dodatkowym obciążeniu systemu, takim jak odtwarzanie wideo i kopiowanie plików zi do lokalnego katalogu, prace tego rodzaju powodują niewielkie obciążenie procesora. (Więc poziom obciążenia ŚWIATŁA będzie wynosił 0,5 ~ 1,0)

- Gdy stosowane są znaczne obciążenia, takie jak odtwarzanie wideo w przeglądarce na stronie Youtube i surfowanie po Internecie w innej przeglądarce, prędkość działania RPI 4 staje się nieco powolna (więc ŚREDNI poziom obciążenia powinien wynosić 1,0 ~ 2,0)

- Wreszcie obciążenie systemu RPI 4 staje się WYSOKIE podczas uruchamiania wielu przeglądarek internetowych i kopiowania dużej ilości plików na inny serwer RPI przez sieć (wówczas długość kolejki uruchamiania przekracza 2,0)

***

Te dane poziomu obciążenia będą wykorzystywane przez kod Pythona opracowany w następnym kroku.

Krok 8: Rewizja oryginalnego obwodu

Poprawianie oryginalnego obwodu
Poprawianie oryginalnego obwodu

Ze względu na kilka wad oryginalnego projektu obwodu modyfikuję obwód tak, jak pokazano na powyższym obrazku.

Powody zmiany są następujące.

- Impuls zegarowy NE555 składa się z przebiegu HIGH i LOW. Ale zwykle czas trwania sygnału WYSOKI i NISKI (t=1/f) nie jest taki sam (na przykład WYSOKI wynosi 70%, a NISKI 30% w oryginalnym obwodzie). Dlatego częstotliwość migania dwóch diod LED (zielona/żółta dioda LED w oryginalnym projekcie) nie jest taka sama (jedna dioda świeci dłużej niż druga). Z tego powodu wizualna sygnalizacja miganiem diody LED nie jest łatwo rozpoznawalna.`

- Dlatego dodaję więcej diod LED i robię kołowy wzór iteracji z CD4017, aby zapewnić łatwe rozpoznanie stanu pracy

- Również zmiana schematu migania diody LED na odwrót, np. powolne miganie przy NISKIM obciążeniu i szybsze miganie przy WYSOKIM obciążeniu. (Oryginalny obwód miga szybciej przy NISKIM obciążeniu i wolno miga przy WYSOKIM obciążeniu). W sytuacji WYSOKIEGO obciążenia wszelkie działania RPI stają się spowolnione. A powolne miganie diody LED nie sprawi, że będziesz szczęśliwy. (W aspekcie psychologicznym wybieram bardziej pozytywny schemat ekspozycji)

***

Chociaż część wyświetlacza LED została znacznie zmodyfikowana, ogólny poziom zmian w stosunku do oryginalnego obwodu nie jest zbyt duży, jak widać w następnym kroku.

Krok 9: Zmiana oryginalnego schematu

Oryginalna zmiana schematu
Oryginalna zmiana schematu

Poważną modyfikacją jest dodanie CD4017 i 8 diod LED.

Również w celu zmiany częstotliwości taktowania NE555 i schematu migania wstecznej diody LED, wartości rezystorów są zmieniane, jak pokazano na schemacie powyżej.

Ponieważ dodana część obwodu jest prostym obwodem chaserowym opartym na CD4017, pominę inne szczegółowe wyjaśnienia zmodyfikowanego obwodu.

Cała zmieniona część obwodu może być wykonana jako dodatkowa płytka PCB, do której przylutowane są CD4017 i 8 diod LED.

Płytę-córkę można przymocować do płyty głównej (płyty głównej), jak pokazano na rysunku w kroku 8.

Krok 10: Testowanie

Wideo testowe wszystkich etapów pracy (stan obciążenia LOW, LIGHT, MEDIUM i HIGH) jest pokazany w pliku zapisanym na dysku google poniżej.

***

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

***

W zależności od aktualnego obciążenia systemu częstotliwość migania zostanie zmieniona w jednym z 4 stanów pokazanych na filmie.

Krok 11: Kod Pythona

Kod Pythona
Kod Pythona

Ponieważ większość logiki sterującej jest zawarta w zewnętrznym obwodzie sprzętowym, logika operacyjna kodu Pythona jest stosunkowo prosta, w tym następujące kroki.

- Uzyskanie danych o temperaturze procesora w celu porównania względności między obciążeniem systemu a wzrostem temperatury

- Zbieranie średniego obciążenia systemu w ciągu 1 minuty z danych wyjściowych czasu pracy

- Tworzenie znacznika czasu w formacie rr-mm-dd gg:mm:ss

- Temperatura zapisu, obciążenie systemu wraz ze znacznikiem czasu

- Zgodnie z aktualnymi danymi wyjściowymi obciążenia systemu (00, 01, 10, 11) do obwodu INDICATOR

- Śpij 5 sekund przed rozpoczęciem kroków wymienionych powyżej

Ponieważ program python wymaga ścisłego wcięcia w kodzie źródłowym, pobierz plik źródłowy z dysku Google, klikając poniższy link.

***

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

***

Ponieważ nie używam RPI jako komputera stacjonarnego, uruchamianie aplikacji biurowych Libre lub przeglądarki internetowej jest bardzo rzadkie.

Zazwyczaj odtwarzam teledyski, kopiowanie/przenoszenie plików lub programowanie w Pythonie z nowo zakupionym RPI 4B 2GB.

Dlatego w moim przypadku średnie obciążenie jest zwykle mniejsze niż 1.0 i odpowiednio zmieniam poziomy NISKI/ŚREDNI/ŚREDNI/WYSOKI w moim kodzie. (W przeciwnym razie możesz zmienić warunki testu)

Ale kiedy często oglądasz filmy z YouTube za pomocą RPI, często zdarza się więcej niż 2,0 obciążeń systemu.

Krok 12: Względność między obciążeniem systemu a temperaturą procesora

Względność między obciążeniem systemu a temperaturą procesora
Względność między obciążeniem systemu a temperaturą procesora

Zwykle zgaduję i jestem pewien, że zwiększenie obciążenia systemu spowoduje wzrost temperatury procesora.

Ale do tej pory nie mam jasnego obrazu wzajemnego współdziałania między nimi.

Jak widać na powyższym wykresie, są one bardzo silną korelacją w następujący sposób.

- Dla łatwego porównania mnożę 10 do średniego obciążenia systemu. W przeciwnym razie skala obciążenia systemu jest bardzo mała (0,0 ~ 2,0), bezpośrednie porównanie staje się trudne.

-Ponieważ obwód wentylatora chłodzącego jest zainstalowany w odtwarzaczu muzycznym Pi, temperatura procesora nigdy nie przekracza 50C

- Gdy obciążenie systemu mieści się w zakresie 0.0 ~ 1.0, temperatura w zakresie 45 ~ 48C (metalowa osłona procesora lekko się nagrzewa)

- Ale stosowane jest duże obciążenie (zwykle przeglądarka internetowa i odtwarzanie filmów z YouTube), obciążenie gwałtownie rośnie, a więc temperatura

***

Ponieważ RPI 4B jest instalowany z 4-rdzeniowym procesorem, teoretycznie wydajność nie ulegnie znacznemu pogorszeniu do poziomu obciążenia (kolejki czasu działania) 4.

Jednak nadal mniej niż przeciętny poziom obciążenia 4, konieczna będzie odpowiednia kontrola temperatury.

Krok 13: Finalizacja

Finalizacja
Finalizacja

Kończę ten projekt instalując INDICATOR do skrzynki Pi jak na powyższym obrazku.

Podczas zwykłego użytkowania tego pudełka Pi, WSKAŹNIK rzadko pokazuje WYSOKI poziom i dynamiczne miganie diody LED.

Zwykle pozostawał w stanie wolno migających diod LED (a więc poziom LOW lub LIGHT).

W każdym razie, dodany wizualny wskaźnik jest trochę zabawny, przynajmniej pokazuje, że RPI robi coś w tej chwili.

Dziękuję za przeczytanie tej historii…..

Zalecana: