Zmena frekvencie zariadenia
možnosti zabezpečenia nízkej spotreby mikrokontroléra pomocou zmeny frekvencie
Spotreba zariadenia
Spotreba zariadenia sa s časom môže a aj bude meniť. Aktuálna spotreba závisí od mnohých vecí, ale najmä od toho, aké komponenty má zariadenie pripojené a čo s nimi robí. Napríklad rozsvietenie LED diódy sa prejaví zvýšením spotreby o 2 mA (spotreba samozrejme závisí od jej typu).
Spotreba LED diódy je však v porovnaní s inými zariadeniami zanedbateľná. Napr. doska Raspberry Pi Pico 2 W obsahuje modul CYW43, ktorý zabezpečuje komunikáciu cez WiFi a Bluetooth.
Pracovná frekvencia mikrokontroléra
Jedným zo spôsobov zníženia spotreby zariadenia je zníženie jeho pracovnej frekvencie. Tým, že zariadenie spomalíme, znížime aj jeho spotrebu.
Zistenie pracovnej frekvencie
Na zistenie aktuálnej pracovnej frekvencie zariadenia slúži funkcia
freq() v module machine. Ak je funkcia
zavolaná bez parametrov, vráti hodnotu aktuálnej frekvencie zariadenia v
hertzoch:
>>> import machine
>>> machine.freq()
150000000Mikrokontrolér RP2350 na doske Raspberry Pi Pico 2 má teda predvolenú pracovnú frekvenciu 150 MHz. Staršia doska Raspberry Pi Pico s mikrokontrolérom RP2040 má predvolenú frekvenciu 125 MHz.
Zmena pracovnej frekvencie
Pracovnú frekvenciu mikrokontroléra je možné zmeniť volaním rovnakej funkcie s parametrom, ktorým je jej nová hodnota v hertzoch. Ak je potrebné nastaviť pracovnú frekvenciu zariadenia na 100 MHz, bude volanie funkcie vyzerať takto:
>>> machine.freq(100 * 10**6)
>>> machine.freq()
100000000Výrobca garantuje činnosť mikrokontroléra RP2350 pri
frekvencii najviac 150 MHz [1]. Jazyk MicroPython dovolí nastaviť aj
vyššiu frekvenciu, vtedy však ide o tzv. pretaktovanie, pri ktorom
správnu činnosť mikrokontroléra nikto nezaručuje. Nie každú frekvenciu
je navyše možné z hodinového signálu vytvoriť. Ak to možné nie je,
funkcia vyvolá výnimku ValueError so správou
"cannot change frequency".
Frekvencia periférií
Okrem pracovnej frekvencie mikrokontroléra je možné druhým parametrom
funkcie freq() nastaviť aj frekvenciu periférií. Tá môže
byť buď 48 MHz, alebo zhodná s pracovnou frekvenciou
mikrokontroléra. Predvolená hodnota je 48 MHz:
>>> machine.freq(100 * 10**6, 100 * 10**6)Ak sa frekvencia periférií zmení, všetky existujúce inštancie rozhraní UART a SPI zmenia svoju prenosovú rýchlosť a je potrebné ich znova nakonfigurovať. Inak nemusia pracovať správne.
Upozornenie
Ak budete experimentovať s pracovnou frekvenciou mikrokontroléra, dajte si pozor. Pri nízkej frekvencii sa napríklad nemusí inicializovať modul CYW43, ktorý zabezpečuje komunikáciu cez WiFi a Bluetooth, a farebné LED diódy (NeoPixel) nemusia zobrazovať správne farby.
Ak sa nebudete môcť k mikrokontroléru pripojiť (napr. preto, že
nevhodnú pracovnú frekvenciu nastavujete už v súbore
boot.py), tak:
- nahrajte do mikrokontroléra najprv firmvér
flash_nuke.uf2, ktorým vymažete obsah pamäte flash, a potom - nahrajte potrebný firmvér pre jazyk MicroPython.
Spotreba pri zmene frekvencie
Zmenou pracovnej frekvencie mikrokontroléra je možné ovplyvniť aj jeho spotrebu. Čím nižšia je pracovná frekvencia, tým nižší je aj odber zariadenia. Zariadenie však zároveň pracuje pomalšie, takže tú istú prácu vykonáva dlhšie.
Spotreba pri zapnutí WiFi modulu
Po zapnutí odoberá mikrokontrolér prúd okolo 16mA pri pracovnej frekvencii 150MHz. Ak však zapneme WiFi modul, tak krátkodobo uvidíme spotrebu na úrovni takmer 60mA. To je spôsobené tým, že sa WiFi modul potrebuje inicializovať. Akonáhle sa inicializuje, jeho spotreba klesne na hodnotu 30 - 35 mA, čo zodpovedá prúdovej spotrebe modulu rádia v stave nečinnosti.
>>> import network
>>> wlan = network.WLAN(network.STA_IF)
>>> wlan.active(True)Keď sa WiFi modul úspešne pripojí k WiFi sieti, jeho spotreba sa bude pohybovať okolo hodnoty 55mA.
>>> wlan.connect('ssid', 'password')
>>> wlan.ifconfig()Ak sa WiFi modul odpojí od WiFi siete, spotrebou sa dostaneme na úroveň 30-35 mA:
>>> wlan.disconnect()Aby sme sa dostali na pôvodnú hodnotu, v ktorej bolo zariadenie v
kľude, potrebujeme WiFi modul vypnúť. To urobíme metódou
.deinit() a spotreba sa opäť dostane na hodnotu
16mA:
>>> wlan.deinit()Ďalšie zdroje
machine.freq([hz])- dokumentácia funkciefreq()z modulumachine