Jeden duży mikrokontroler, czy wiele małych mikrokontrolerów?

24

Stosunkowo przyzwyczajam się do robienia podstawowych i prostych rzeczy za pomocą mikrokontrolerów. Rzeczy takie jak sterowanie diodami LED, uruchamianie silników, podstawowe procedury, GUI na postaciowych wyświetlaczach LCD itd., Ale zawsze tylko jedno kluczowe zadanie z maksymalnie kilkoma małymi zadaniami bocznymi. Sprowadziło mnie to do produktów niskiej jakości, ponieważ to naprawdę wszystko, co jest potrzebne w takich przypadkach.

Chciałbym zacząć projektować bardziej złożone rzeczy, ale górna część kontinuum mikrokontrolera nie jest czymś, na co jestem dobrze narażony. Tak więc miałem bardzo trudny czas, próbując wybrać mikrokontroler, w którym będę wykonywać wiele zadań jednocześnie - nie mogę powiedzieć tylko na podstawie numeru MIPS i zadowalającego pinouta, czy ma wystarczającą moc, aby zrobić to, czego chcę. do zrobienia.

Na przykład chciałbym sterować 2 silnikami BLDC za pomocą procedur PI, wraz z niektórymi komunikacjami szeregowymi i USB, GUI i mnóstwem innych zadań. Kusi mnie, aby mieć po prostu mikrokontroler dla każdego silnika, a następnie jeden do różnych zadań, dzięki czemu mogę zagwarantować, że koszty ogólne z różnych rzeczy nie spowodują krytycznego funkcjonowania silnika. Ale nie wiem, czy to naprawdę dobry pomysł, czy naiwny sposób postępowania.

Myślę, że moje pytanie jest naprawdę dwojakie:

  1. Czy podejście „wszystko w jednym” jest dobrym pomysłem, gdy trzeba wykonywać wiele zadań wielozadaniowych, czy lepiej jest segmentować i izolować, oraz

  2. Jak intuicyjnie dowiedzieć się, czy mikrokontroler, na który patrzę, ma wystarczającą moc obliczeniową, aby wykonać to, czego potrzebuję, na podstawie mojej listy zadań?

Patrzę na umiarkowane dsPIC33 aż do układów ARM z procesorami RTOS. Systematyczny sposób dopracowania tego, czego potrzebuję, bardzo by mi pomógł.

BB ON
źródło
2
xmos.com
Ignacio Vazquez-Abrams
4
Zbyt wiele odpowiedzi już, ale czasami uzyskanie wielu programowalnych mikrów na tej samej płytce, wszystkie mówiące tym samym językiem, jest o wiele bardziej pracochłonne niż używanie pojedynczej mikro, być może z niektórymi inteligentnymi urządzeniami peryferyjnymi.
Erik Friesen,

Odpowiedzi:

10

Odpowiedzi na pytania są różne w zależności od celu końcowego. Jeśli potrzebujesz garści tych urządzeń lub mniej, powinieneś ułatwić projektowanie i nie martwić się kosztami części. Jeśli masz zamiar zrobić ich tysiąc lub więcej, warto przeanalizować swoje wymagania i zmniejszyć koszty sprzętu.

Małe ilości

Jeśli robisz jednorazowy lub niewielki ciąg tych urządzeń, to wysiłki związane z programowaniem zwiększą koszty poszczególnych artykułów i powinieneś skoncentrować się na tym, co będzie najłatwiejsze / najszybsze dla ciebie, a nie na kosztach / wielkość mikroelektroniki.

Ogólnie kapsułkowanie może zmniejszyć złożoność, zwiększając wydajność. Jeśli masz jakieś trudne wymagania w czasie rzeczywistym, takie jak sterowanie BLDC, pętle PID itp., Może być szybsze korzystanie z oddzielnych kontrolerów specjalnie do zadań, które komunikują się z kontrolerami, w których utrzymujesz interfejs użytkownika i inne nierealne zadania czasowe.

W takim przypadku odpowiedź na twoje pytania brzmi:

Czy podejście „wszystko w jednym” jest dobrym pomysłem, gdy trzeba wykonywać wiele zadań wielozadaniowych, czy lepiej jest segmentować i izolować, oraz

Skala lekko przechyla się w kierunku segmentacji i izolacji. Głównym powodem jest to, że debugowanie systemu czasu rzeczywistego może być bardzo czasochłonne, a utrzymywanie takich zadań na własnym procesorze ogranicza zmienne, które należy mierzyć lub kontrolować podczas próby znalezienia przyczyny nieprawidłowego działania.

Jak intuicyjnie dowiedzieć się, czy mikrokontroler, na który patrzę, ma wystarczającą moc obliczeniową, aby wykonać to, czego potrzebuję, na podstawie mojej listy zadań?

W tym przypadku różnica kosztów między 32-bitowym procesorem z dużą ilością zasobów a 8-bitowym procesorem z ograniczonymi zasobami jest niewielka w stosunku do ilości czasu, który zamierzasz poświęcić na prace programistyczne. Nie ma powodu, aby próbować dowiedzieć się, ile mocy potrzebujesz - po prostu zdobądź największy procesor, który według Ciebie możesz opracować i z niego korzystać. Jeśli w pewnym momencie konieczne będzie zoptymalizowanie projektu, stosunkowo łatwo jest zmierzyć faktyczne zużycie zasobów procesora, a następnie wybierz procesor będący leasingodawcą, który może obsłużyć faktyczne obciążenie. Do tego czasu używaj największego i nie martw się o znalezienie „najlepszego dopasowania”.

Produkcja masowa

Jeśli planujesz wykonać wiele z tych urządzeń, dokładna analiza przyniesie znaczne oszczędności. Mówiąc ogólnie, większy mikrokontroler będzie kosztował mniej niż dwa mikrokontrolery zdolne do zastąpienia pojedynczego mikrokontrolera, choć z pewnością istnieją wyjątki w zależności od konkretnych wymaganych zadań. Przy tych ilościach koszt sprzętu prawdopodobnie będzie znacznie większy niż koszt rozwoju, więc powinieneś spodziewać się, że poświęcisz więcej czasu na analizę swoich wymagań i wykonanie rozwoju, niż gdybyś robił tylko kilka.

Czy podejście „wszystko w jednym” jest dobrym pomysłem, gdy trzeba wykonywać wiele zadań wielozadaniowych, czy lepiej jest segmentować i izolować?

Podejście kompleksowe będzie generalnie tańsze przez cały czas trwania projektu niż wiele procesorów. Będzie to wymagało więcej czasu na opracowanie i debugowanie, aby upewnić się, że różne zadania nie powodują konfliktów, ale rygorystyczne projektowanie oprogramowania ograniczy to prawie tak samo, jak posiadanie osobnego sprzętu.

Jak intuicyjnie dowiedzieć się, czy mikrokontroler, na który patrzę, ma wystarczającą moc obliczeniową, aby wykonać to, czego potrzebuję, na podstawie mojej listy zadań?

Musisz zrozumieć zadania, które chcesz wykonać, i ile zasobów biorą. Załóżmy, że następujące są prawdziwe:

Twoje procedury BLDC PI będą zużywać X cykli czasu procesora 100 razy na sekundę i każde z nich potrzebuje około 50 bajtów pamięci RAM do działania, 16 bajtów pamięci EEPROM do strojenia i 1k flashowania dla kodu. Każdy z nich potrzebuje 3 szesnastobitowych urządzeń peryferyjnych PWM w mikrokontrolerze. Może być konieczne określenie jittera, który będzie miał określone wymagania dotyczące opóźnienia przerwań.

Twoje procedury USB i szeregowe będą zużywać Y cykli czasu procesora według potrzeb, 2k RAM, 64 bajty EEPROM i 8k flash. Będzie wymagał USB i szeregowych urządzeń peryferyjnych.

Twój interfejs GUI zużywa 30 cykli zasilania procesora 30 razy na sekundę i potrzebuje 2k pamięci RAM, 128 bajtów pamięci EEPROM i 10k pamięci flash. Wykorzysta 19 I / O do komunikacji z wyświetlaczem LCD, przyciskami, pokrętłami itp.

Podczas pierwszego uruchomienia może być trudno zrozumieć, czym właściwie są X, Y, Z, a to się nieco zmieni w zależności od architektury procesora. Jednak powinieneś być w stanie zrozumieć, w ramach szacunku ballpark, ile pamięci RAM, eepromu i flasha będzie potrzebować twój projekt i jakich urządzeń peryferyjnych potrzebujesz. Możesz wybrać rodzinę procesorów, która spełnia wymagania dotyczące pamięci i urządzeń peryferyjnych oraz oferuje szeroki zakres opcji wydajności w obrębie tej rodziny. W tym momencie do programowania możesz po prostu użyć najmocniejszego procesora w rodzinie. Po wdrożeniu projektu możesz łatwo przenieść rodzinę pod względem mocy do opcji tańszej bez zmiany środowiska projektowania lub programowania.

Po wykonaniu wystarczającej liczby tych projektów będziesz mógł lepiej oszacować X, Y i Z. Dowiesz się, że procedury BLDC PI, choć często uruchamiane, są dość małe i wymagają bardzo niewielu cykli. Procedury USB i szeregowe wymagają wielu cykli, ale występują rzadko. Interfejs użytkownika często wymaga kilku cykli, aby znaleźć zmiany, ale na przykład będzie wymagał wielu cykli, aby zaktualizować wyświetlacz.

Adam Davis
źródło
11

Oddzieliłbym sterowanie silnikiem i miałbym osobny mikrokontroler, który zawiera PWM (być może PIC18) dla każdego z dwóch silników BLDC, ponieważ sterowanie PI jest izolowanym zadaniem po uruchomieniu i po napisaniu kodu można go używać na obu mikrofonach. Możesz podłączyć je z powrotem do głównego mikrokontrolera za pomocą interfejsu takiego jak I²C, a jeśli chcesz, pobierz stamtąd parametry kontroli PI. To pozwoli ci zmodyfikować je w GUI.

Następnie uruchomiłbym wszystko inne w głównym mikrokontrolerze, takim jak PIC24 (PIC32 prawdopodobnie przesadza, w zależności od wymienionych zadań). Ponadto najszybsze PIC24E mogą działać prawie tak szybko, jak PIC32.

Wybierając mikrokontroler, najpierw szacuję ilość potrzebnej pamięci flash i RAM, a następnie patrzę na długość słowa i szybkość procesora. W późniejszym okresie często najtrudniejszym do spełnienia jest najszybsze przerwanie, jakiego można się spodziewać. Jeśli na przykład wysyłasz dźwięk 16 kHz i przerywasz co 62,5 µs, lepiej mieć mikrokontroler z czasem instrukcji krótszym o kilkadziesiąt nanosekund, w przeciwnym razie nie będziesz w stanie go obsłużyć i uzyskać żadnego innego robota skończona.

tcrosley
źródło
7

Istnieje pół formalne podejście, którego możesz użyć, aby pomóc Ci wygenerować odpowiedź. Bardzo polecam przeczytanie drugiego rozdziału „Projektowanie systemów wbudowanych” White'a, z których większość jest dostępna w Google Books .

Ten rozdział mówi o projektowaniu architektury systemu i oferuje pół formalne podejście do tego, jak najlepiej obudować zadania. Chociaż rozdział dotyczy głównie jednego systemu sterowników, łatwo można go rozszerzyć na wiele sterowników. Pomoże ci to wyobrazić, które zasoby należy udostępnić, i pomoże ci wybrać poziom enkapsulacji dla każdego zadania.

Oferuje różnorodne poglądy do rozważenia, z których jeden pokazuję poniżej, ale istnieje wiele przydatnych manipulacji. To oczywiście nie ma większego sensu, ale mam nadzieję, że zachęci cię do zapoznania się z rozdziałem.

from White, Making Embedded Systems, Rozdział 2

Jeśli chodzi o „skąd mam wiedzieć, czy mam wystarczającą ilość kontrolera”, wolę włożyć tyle mocy do mojej piaskownicy projektowej, ile tylko mogę, a następnie dowiedzieć się, ile zasobów mogę ograniczyć, gdy projekt jest już w dobrym stanie droga. Różnica w cenie między mikrokontrolerem o wartości 10 USD i mikrokontrolerem o wartości 3 USD do celów prototypowania może być zaledwie tygodniami przezbrojenia i skręcania kciuków w oczekiwaniu na nowe części, a konstrukcja zawsze może się poruszać, jeśli masz wystarczającą moc.

Scott Seidman
źródło
5

Pracuję na systemie, który jest ogólnie tym, co opisujesz - silniki, IO, wyświetlacz, 3x UART + SPI + I2C działające na Coldfire 52259 (mikroprocesor 32-bitowy ~ 80 MHz mikro) i nie jest to zbyt trudne, chociaż uzyskanie ważna jest właściwa architektura oprogramowania - mamy wiele rzeczy działających na sprzęcie i przerwaniach (wszystko, co sprzęt może obsłużyć samodzielnie, działamy na sprzęcie i serwisie z przerwaniami), pozostawiając pętlę main (), aby wykonać całą pracę domową.

Osobiście nie podoba mi się większość RTOS, które widziałem, w dolnej części nadymają projekt, dodają kolejną rzecz do nauczenia się, a ty osiągniesz lepszą wydajność ze sprzętu, robiąc rzeczy bezpośrednio (używając dostępnych funkcji sprzętowych + przerwań) zamiast sfałszować go za pomocą oprogramowania.

W dzisiejszych czasach wydaje się, że margines między MCU jest tak złożony i wystarczająco mocny, że naprawdę korzysta z RTOS i czegoś takiego (SoC), który po prostu działa na wbudowanym Linuksie.

Jednak w tym przypadku powiedziałbym, że zastosowanie niewielkich tanich mikr do obsługi kluczowych funkcji (sterowanie silnikiem EG, w których kluczowe znaczenie ma taktowanie lub zatrzymywanie się na granicy) ma pewną wartość pod dowództwem głównego „mózgowego” procesora, więc nie polegasz w systemie operacyjnym „nie w czasie rzeczywistym”, aby zrobić coś w odpowiednim czasie.

John U
źródło
3

Każda odpowiedź jest lepsza, ale muszę dodać, że może być przydatna. Może to być nieco poza wyznacznikiem i chciałbym dodać to jako komentarz, ale istnieje reguła 50 powtórzeń :(

Krótka odpowiedź brzmi: to zależy, patrz wyżej, ale dlaczego nie pomyśleć o zaletach procesora.

1((1-p)+ps)

Oczywiście koszt, łatwość wdrożenia; itp. są ważne, a nawet ważniejsze do rozważenia.

Andrew Scott Evans
źródło
1

Odpowiedź może zależeć od szczegółów implementacji. Niektóre zadania są łatwiejsze do wykonania w czysty i niezawodny sposób na osobnych mikrokontrolerach. Można również wziąć pod uwagę zużycie energii - ogólnie mówiąc, jedna mikroprocesor obsługujący kilka zadań będzie wymagał mniej energii niż kilka mikroprocesorów obsługujących pojedyncze zadania.

użytkownik
źródło
1

„Moc” ma drugorzędne znaczenie w przypadku spełnienia ograniczeń czasu rzeczywistego.

Jeśli masz dwa wyjścia PWM i oba muszą się przełączać dokładnie w tym samym czasie, musisz mieć niezbędną równoległość, aby móc to zrobić. Jeśli masz dedykowany kontroler PWM, który dba o dokładną synchronizację, będzie działał nawet z dość małym mikrokontrolerem, a rozwiązanie oparte na GPIO będzie ogromnie skomplikowane, nawet jeśli dostępna będzie duża moc obliczeniowa.

W przypadku większości protokołów współczesne jednostki MCU mają wbudowane implementacje tych części protokołu, które mają ograniczenia w czasie rzeczywistym, więc jeśli można znaleźć jednostkę MCU, która ma wymagane urządzenia peryferyjne i ma wymaganą szybkość procesora do obsługi przepływów danych (tj. Twarde wymagania w czasie rzeczywistym degenerują się do miękkiego wymagania w czasie rzeczywistym formularza „będzie w stanie odczytać z FIFO, zanim będzie pełny i szybszy niż się zapełni”), byłby to optymalny wybór.

Jeśli takie rozwiązanie nie istnieje, możesz albo przenieść funkcje do oddzielnych kontrolerów, używając rozwiązania CPU + FPGA (np. FPGA z twardym rdzeniem ARM), lub czystego rozwiązania FPGA (opcjonalnie z miękkim procesorem, w zależności od wymagań złożoności).

Simon Richter
źródło