Wojtek każdy film zaczyna od stwierdzenia, iż jest ekspertem, bo pracował dla dużego amerykańskiego producenta układów scalonych, ale od niego odszedł i wypuścił własny produkt. Takie uporczywe podkreślanie własnych osiągnięć w każdym filmie wzbudza moją podejrzliwość.
Fachowcy nie muszą się chwalić swoją fachowością – to zwyczajnie widać w tym, co robią lub prezentują. Dave Jones z kanału EEVBlog nie zaczyna każdego swojego filmu od listy osiągnięć. Moim prywatnym, osobistym zdaniem kariera Wojtkowi nie do końca wyszła, dlatego teraz nagrywa filmy na YouTube.
W filmach tych wyraża opinie o wątpliwej wartości merytorycznej, popełniając przy tym szkolne błędy. Od kiedy to PIC, AVR czy STM32 to nazwy architektur? (Autor zmienił tytuł filmu na bardziej poprawny po zwróceniu uwagi przez widzów.) Film z tym błędem skłonił mnie do napisania tego felietonu.
Gwoli wyjaśnienia – te ośmiobitowe mikrokontrolery AVR i PIC to układy RISC oparte na zmodyfikowanej architekturze harwardzkiej.
Rodzina 16-bitowych PIC-ów też używa architektury harwardzkiej RISC, zoptymalizowanej dla języka C, a rodzina PIC32 opiera się na rdzeniach MIPS M4K/M-Class oraz ARM Cortex-M.
Z kolei rodzina STM32 od STMicroelectronics to rdzenie ARM Cortex-M. Wojtek w ogóle odradza używanie mniej niż 32 bitów. O architekturze ‘50 czy 68k nawet nie wspomina.
Dla niego najlepsze mikrokontrolery to te, które mają Wi-Fi i Bluetooth Low Energy, czyli właśnie wybrane modele STM32, ESP32 czy układy od firmy Nordic.
Dla Wojtka może to być szok, ale nie każde urządzenie potrzebuje procesora ARM ani łączności radiowej z całym światem. Ba, architektura ‘51, która ma więcej lat niż ja w 2024 roku, miała wartość rynkową 8,5 miliarda dolarów i będzie rosła dalej.
W omawianym przeze mnie w poprzednim wydaniu EP module MaixCAM jednym z rdzeni był właśnie 8-bitowy 8051, choć nie był on bezpośrednio dostępny dla programisty.
Dla Wojtka (i dla Czytelnika) szokującym może być fakt obecności na rynku mikrokontrolerów 4-bitowych, których wartość rynkowa w 2024 roku wyniosła 2,1 mld dolarów.
Układy te trafiają na przykład do szczoteczek elektrycznych Braun Oral-B.
W sumie nie potrzeba zbyt wiele mocy obliczeniowej, by odliczać czas i sterować prostym silnikiem elektrycznym i diodą LED oraz kontrolować napięcie akumulatorka i stan przycisku zasilania.
W innych filmach Wojtek popełnia podobne błędy. Widać niezdrową fascynację ARM i RISC-V z odrzucaniem wszystkiego, co było wcześniej lub co jest inne.
Dziwi na przykład krytyka mniej znanych chińskich producentów mikrokontrolerów kosztujących centy, gdy jednocześnie Wojtek zachwyca się rodziną ESP32, również chińskiego producenta (ale już nie zaleca ESP8266).
Pomija fakt, iż Espressif Systems sprawiło szpetną niespodziankę użytkownikom przy przejściu ESP-IDF z wersji 4.x na 5.x, co spowodowało zmiany w API i wycofanie niektórych starych funkcji, z których korzystali użytkownicy.
O ile faktycznie chińskie mikrokontrolery mniej znanych producentów mają duże problemy z dobrą dokumentacją czy z IDE, to cena liczona w centach za układ do prostych zastosowań jest nie do pobicia.
W innym filmie Wojtek wymienia mikrokontrolery do zastosowań bateryjnych. Z jakiegoś powodu nie ma nic o PICach, za to na pierwszym miejscu jest rodzina Ambiq Apollo 510. Co to za rodzina i producent? Nie mam zielonego pojęcia, bo pierwszy raz o nich słyszę.
W polskich sklepach nie do kupienia, u zagranicznego dystrybutora przykładowy układ kosztuje 40 złotych od sztuki. Pobór prądu? Trudno powiedzieć, bo na początku noty jest podana wydajność na milidżul. W tabeli poboru prądu mamy wyniki w mikrowatach. Trudno powiedzieć, czy się poborem chwalą, czy się go wstydzą.
Swoją drogą rodzina Apollo 510 to dość potężna rodzina układów z GPU i wsparciem dla sieci neuronowych. Wojtek zaleca go do zastosowań bateryjnych, tylko nie podaje takich faktów, jak pobór prądu w głębokim uśpieniu – 13,8 µA/1,8 V.
Układy PIC32CM Lx osiągają 1,7 µA w trybie standby z podtrzymaniem całej pamięci RAM i poniżej 100 nA w trybie wyłączonym.
Wojtek w filmie o najlepszych układach do zastosowań bateryjnych wymienia też układy TI z rodziny MSP430, wymienia je też jako jedne z najgorszych układów do nowych projektów i jako jedną z najgorszych „architektur” (choć zmienił tytuł filmu na „rodziny” po moim upomnieniu).
Jeden Wojtek, kilka filmów, a tyle już napisałem. Zmieńmy więc nieco temat i porozmawiajmy o sensie rekomendowania konkretnych rodzin, architektur czy marek oraz po czym można poznać złego inżyniera.
Wybory, wybory…
Pytanie o wybór mikrokontrolera czy rodziny mikrokontrolerów do projektu jest o tyle trudne, iż do wyboru mamy tysiące układów od dziesiątek producentów.
Większość układów w produkcji to wariacje na temat kilku bazowych typów.
Generalnie największą różnicą między nimi jest liczba bitów w ALU, co przede wszystkim wpływa na wydajność obliczeniową, pobór prądu i złożoność programowania, jeśli wzorem naszych przodków będziemy pisać programy w asemblerze. Ale ponieważ wszyscy piszą już w C/C++, to architektura nie ma znaczenia dla programisty. Co się zatem liczy?
Peryferia, pobór energii i cena. Oraz dostępność w hurcie. Kilku komentujących film Wojtka o najgorszych architekturach wspomniało, iż stworzyli produkty na układach PIC, które po dekadzie lub dwóch wciąż są produkowane i sprzedawane w setkach tysięcy egzemplarzy. Prawda jest taka, że w większości urządzeń codziennego użytku osiem lub mniej bitów w zupełności wystarczy.
Blender czy mikrofalówka nie potrzebują niczego lepszego niż PIC12F/16F czy STM8, by obsłużyć załączanie i wyłączanie zasilania, regulację mocy czy odmierzanie czasu.
Mikrokontroler STM8 znalazłem w najlepszym podgrzewaczu do mleka i jedzenia dla dzieci, jaki był dostępny na rynku (nie jest produkowany od lat i sam musiał kupić model używany sześć lat temu). Urządzenie nie miało nawet czujnika temperatury (tylko bezpiecznik termiczny dla grzałki) i dobierało czas podgrzewania na bazie wskazanego rodzaju produktu (mleko czy jedzenie), objętości (co bodaj 10 ml) oraz tego, czy pojemnik jest w temperaturze pokojowej, wyjęty z lodówki czy z zamrażarki. Jedną wadą był zasilacz beztransformatorowy, który się z czasem psuł, oraz nierozbieralna konstrukcja.
Dobrą zasadą wyboru mikrokontrolera do projektu jest sprawdzanie, co spełni minimalne wymagania pod kątem peryferiów, ceny i dostępności. Jeśli to nie jest projekt IoT, to nie trzeba mikrokontrolera z wbudowanym radiem.
Nawet jak to jest projekt IoT, to może się okazać, że taniej i prościej będzie użyć gotowego modułu radiowego: Wi-Fi, BLE czy LoRa.
Odpada wtedy konieczność certyfikacji radia pod względem EMI/EMC. Często moduły takie mają lepsze parametry pod względem poboru prądu, zwłaszcza w trybie uśpienia.
W wielu przypadkach nie potrzeba też dużej wydajności mikrokontrolera. Apollo Guidance Computer, który pozwolił Amerykanom wylądować na Księżycu, posiadał zegar 1,024 MHz, 16-bitową architekturę, ale z powodu unikalnej konstrukcji jego wydajność wynosiła tylko maksymalnie 0,085 MIPS. A mimo to wystarczył do zadań, do których został stworzony.
Inaczej pisząc, nie potrzeba układu taktowanego zegarem 240 MHz z dwoma wysoce wydajnymi rdzeniami ARM, by obsłużyć prosty termostat albo kontrolować garść programowalnych LED-ów.
Przed erą mikrokontrolerów termostat robiło się z tranzystora, rezystora, termistora i potencjometru. Jeszcze wcześniej wystarczyły dwie blaszki z różnych metali i wkręt do regulacji odległości styku od końca tych blaszek. Swoją drogą takie przełączniki termiczne są wciąż używane, głównie jako zabezpieczenia.
W większości sytuacji moc obliczeniowa mikrokontrolera nie ma tak naprawdę znaczenia, gdyż każdy mikrokontroler jest w stanie wykonać każde zadanie, pod warunkiem, iż ma wystarczająco dużo miejsca na program. Nawet nie trzeba zbyt wiele pamięci RAM, bo na rynku dostępne są układy SRAM komunikujące się przez interfejs szeregowy.
Czy ma sens ładowanie modelu AI do ośmiobitowego mikrokontrolera? Oczywiście, że nie, ale moim zdaniem generalnie nie ma zbyt wielu sytuacji, w których trzeba ładować model AI do systemu embedded.
Kwestia peryferiów jest dość ciekawa. Microchip oferuje setki różnych mikrokontrolerów ośmiobitowych, które różnią się głównie pojemnością pamięci programu, RAM i Flash/EEPROM oraz właśnie kombinacją peryferiów. Najbardziej „wypasione” mają wszystkiego po trochu, ale generalnie można dobrać coś pod konkretną sytuację.
Ponad dekadę temu trafiłem na przykład na układ przeznaczony do budowy przetwornic impulsowych – i to nie jakichś prostych bucków czy boostów, ale wszystkich topologii, którym wystarczą cztery sygnały kontrolne.
Wielu „starych wygów” mówiło mi wtedy, że nie da się zrobić przetwornicy na mikrokontrolerze, zwłaszcza takiej pracującej z dużymi mocami, bo będzie się ona wieszać od EMI i trzeba czegoś analogowego w stylu TL494.
Najwidoczniej ktoś tego nie powiedział inżynierom z Microchip, bo ci wzięli i zaprojektowali PIC16F785 właśnie do budowy zasilaczy i nawet przetestowali kilka przykładowych konfiguracji.
Mój pomysł na ten układ zakładał budowę zasilacza, który składa się z „klocków” zależnie od potrzeb i konfiguruje się przez UART.
Projekt okazał się trochę zbyt ambitny jak na moje ówczesne umiejętności, ale nauczyłem się sporo o przetwornicach i o konieczności prowadzenia dobrej dokumentacji.
Innym moim ambitnym projektem był emulator PDP-8 na PIC24. Dlaczego? Bo jedyny projekt emulatora jakiegokolwiek komputera DEC PDP potrzebuje Raspberry Pi – komputera 20…30 tysięcy razy wydajniejszego od najszybszego wariantu PDP-11/70, który emuluje. Z wybranym układem PIC24 osiągnąłbym prędkość zbliżoną do PDP-8/S, co by mi w zupełności wystarczało. Teraz prawdopodobnie wybrałbym inny model układu, ale też raczej z rodziny PIC24/dsPIC, zwracając szczególną uwagę na grubość erraty. Ale moim skrytym marzeniem jest emulator komputera Odra 1305 na FPGA.
Wracając do mikrokontrolerów – to istnieje wiele robiących wrażenie projektów, które są realizowane na Arduino, czyli ATMega328 z IDE, które, prowadząc początkującego programistę „za rączkę”, ma raczej mało wydajne funkcje dostępu do I/O i peryferiów. Programista nieco bardziej zaawansowany ma możliwość sięgnąć do „gołego metalu” i operować bezpośrednio na rejestrach.
Ostatnia kwestia to cena i dostępność. Weźmy na przykład płytkę rozwojową BlackPill z układem STM32F411CEU6. Na AliExpress takie płytki kosztują 7…15 złotych od sztuki. Sam mam ze dwie i programowałem je w VS Code z pomocą PlatformIO. Ale jeśli chciałbym zrealizować komercyjny projekt na tym układzie ARM od STMicroelectronics, to u polskiego dystrybutora sam układ kosztuje 25,50 zł netto. Jak to możliwe, skoro płytka z Chin z tym układem kosztowała sporo mniej? Odpowiedź jest prosta: polski dystrybutor komponentów elektronicznych ma oryginalne układy z fabryki STMicroelectronics, a w Chinach mają klony, które mogą nie spełniać parametrów podanych w nocie katalogowej oryginału.
To mi przypomina ciekawy przypadek układów nRF24L01+ firmy Nordic – oryginalne układy miały błąd w krzemie, przez co nie wszystko działało poprawnie. Chińskie klony tych układów powstały częściowo na podstawie noty katalogowej i tego błędu nie mają.
Wybierając mikrokontroler do masowej produkcji (oraz inne komponenty) trzeba patrzeć na cenę hurtową. Przy okazji może się okazać, iż taniej wyjdzie wybrać nieco droższy mikrokontroler, który ma na przykład wbudowany wzmacniacz operacyjny rail-to-rail, niż kupować ten komponent osobno. Przy okazji można też oszczędzić miejsce na PCB. Kwestia dostępności wygląda nieco ciekawiej.
Układy od Microchip czy STMicroelectronics mogę kupić zarówno od polskiego dystrybutora, jak i od kilku dystrybutorów zagranicznych. Ba, mogę zamówić te układy bezpośrednio od producenta, z opcją wgrania firmware w fabryce, a za dodatkową opłatą mogę dostać własne logo i nazwę na układzie, by utrudnić inżynierię wsteczną mojego nowego produktu.
W jednym Wojtek miał rację: kupując najtańszy chiński mikrokontroler jesteśmy zależni od chińskiego producenta i chińskiego dystrybutora i zazwyczaj nie ma alternatyw.
Biorąc pod uwagę obecną, niestabilną sytuację geopolityczną oraz wchodzące niedługo cła na chińskie produkty, stosunek ryzyka do oszczędności zaczyna wyglądać mniej korzystnie dla Chin. Zachodni producenci zazwyczaj są w stanie zagwarantować długoterminową dostępność komponentów.