Hardware – czyli co w CPU piszczy

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!

Posted in Sto dni w kolorze.