Dziś zastanowimy się, jak na podstawie założeń opisanych w poprzednim poście wybrać serce (a raczej mózg) naszego projektu czyli mikrokontroler. Przyjrzymy się kilku rodzinom, które dość dobrze znam i z którymi pracuję na bieżąco. Oczywiście lista nie wyczerpuje tematu i na pewno jest jeszcze wielu, wielu innych kandydatów.
8-bitowy AVR:
Zalety:
- niska cena,
- trywialna konfiguracja,
- szeroka gama dostępnych systemów ewaluacyjnych (np. Arduino),
- logika 5V, odporna na zakłócenia
- w pełni darmowy toolchain, oparty o gcc
Wady:
- ograniczona wydajność,
- niewielka ilość wbudowanej pamięci flash (do 256kB) oraz RAM (do 16kB),
- niskie taktowanie zegara CPU – do 20MHz w przypadku AVR,
- ograniczony wybór mikrokontrolerów z wbudowanym kontrolerem CAN,
- mała ilość układów peryferyjnych (UART, SPI),
- brak elastycznej konfiguracji pinów (port mux),
- interfejs JTAG zajmujący kilka cennych pinów,
AVR32:
Zalety:
- większa wydajność niż w przypadku 8-bitowych kuzynów,
- do 64kB RAM i 512kB flash,
- duża ilość peryferiów,
Wady:
- brak wsparcia – układy nie są już produkowane,
PIC32:
Zalety:
- niezła wydajność,
- duża ilość pamięci RAM 256kB oraz flash 512kB,
- duża ilość układów peryferyjnych,
- wbudowany kontroler magistrali CAN,
Wady:
- mniej rozwinięte community niż w przypadku innych mikrokontrolerów,
- darmowa wersja kompilatora MPLAB nie pozwala na optymalizację kodu,
- mały wybór zestawów ewaluacyjnych,
STM32
Zalety:
- wysoka wydajność CPU, zwłaszcza w przypadku linii F4 oraz F7 (Cortex-M4),
- sprzętowe wsparcie dla operacji zmiennoprzecinkowych (FPU),
- duża ilość układów peryferyjnych,
- wbudowany kontroler magistrali CAN,
- konfigurowalny multiplekser pinów,
- duża ilość pamięci flash (do 1MB) oraz RAM (do 320kB),
- wygodny, dwuprzewodowy interfejs ST-LINK do debugowania,
- w pełni darmowy toolchain ,
Wady:
- złożona konfiguracja peryferiów,
- logika 3.3V, nieco bardziej wrażliwa na zakłócenia,
- większa ilość wymaganych zewnętrznych elementów dyskretnych – głównie kondensatorów odsprzęgających,
RaspberryPi Zero (Broadcom BCM2835):
Zalety:
- niska cena,
- ogromna ilość pamięci (512MB),
- kosmiczna wydajność (jak na nasze potrzeby),
Wady:
- skromna ilość interfejsów zewnętrznych,
- duży pobór prądu w stanie spoczynku,
Werdykt i uzasadnienie
Pierwszym, który odpadł z zestawienia był oczywiście AVR. Choć w swojej “przypakowanej” formie (ATmega) jest na prawdę bardzo silnym i wdzięcznym prockiem, to w zderzeniu z naszymi wymaganiami musi uznać wyższość konkurentów – zwłaszcza pod względem wydajności w grafice, która przecież jest jednym z kluczowych elementów. Dodatkowo niewielka ilość peryferiów skutecznie wyłącza go z gry. Podobnie sprawa się ma z “malinką” RaspberryPi Zero, która również nie może pochwalić się szeroką gamą układów I/O. Procesory ze stajni Microchipa (AVR32 oraz PIC32) są wydajne i dobrze wyposażone, jednak brak im wsparcia technicznego i rozbudowanej społeczności jaką wytworzył AVR czy popularne ARMy różnych producentów. Dodatkowo odstraszają ograniczone możliwości darmowej wersji kompilatora MPLAB.
Na koniec pozostał on, nolens volens nasz zwycięzca – STM32. Spośród konkurentów wyróżnia się przede wszystkim dobrą wydajnością, dużą gamą peryferiów, dobrym wsparciem technicznym i ogromnym community. Oczywiście na tle innych ARMów wypada dość przeciętnie, ot jest po prostu kolejnym przedstawicielem tej wielkiej rodziny. Dlatego zapewne wielu z Was zarzuci mi, że przecież:
procek XXX od YYY jest o niebo lepszy, bo ma ZZZ i ŻŻŻ i ŹŹŹ i w ogóle wymiata!
Ok, pewnie będzie w tym odrobina racji, ale pamiętajmy – ograniczyłem się celowo do układów, które znam, z którymi pracuję od wielu lat. Poznawanie nowych rodzin mikrokontrolerów jest ciekawe i zajmujące, ale na pewno nie jest najlepszym rozwiązaniem, jeśli mamy ograniczony budżet czasowy 🙂
Płytka prototypowa
Ponieważ wynajdywanie koła na nowo nie jest dobrym zwyczajem inżynierskim, jako bazę dla pierwszego prototypu postanowiłem wykorzystać płytkę prototypową STM32F4 z rodziny Discovery. Ma ona na swoim pokładzie mikrokontroler STM32F407VGT6 , wbudowany interfejs debugowy ST-LINK oraz kilka mniej lub bardziej nam przydatnych układów, pokroju akcelerometru. Wszystkie piny mikrokontrolera zostały wyprowadzone w wygodnej formie złącza goldpin. Służy mi już dzielnie od kilku ładnych lat i nie będzie to jej pierwszy projekt 🙂
W ten sposób udało nam się dokonać wyboru platformy sprzętowej oraz bazy dla prototypu, która powinna nam wystarczyć na pierwszym etapie prac.
Jutro zastanowimy się nad wyborem języka programowania i systemu operacyjnego dla naszego urządzenia, czyli pomyślimy jak tchnąć życie w kawałek krzemu. Do zobaczenia!