Niezły projekt. Oto kilka wskazówek, ale trudno byłoby uogólnić to dla każdego projektu.
Zacznij od wymagań obliczeniowych
To powie ci, jakiego rdzenia potrzebujesz i jakie są ogólne wyniki MCU. Proponuję zacząć od tego, ponieważ oczywiście nie można go rozszerzyć za pomocą komponentów zewnętrznych, w przeciwieństwie do urządzeń peryferyjnych.
Po pierwsze, wydaje się, że używasz ciężkich operacji matematycznych z dużymi liczbami całkowitymi w pętli. Tak jak zasugerowałeś, 32-bitowy byłby tutaj przydatny, dlatego ARM jest idealnym kandydatem. Jeśli chodzi o częstotliwość operacji: obecnie używasz Arduino MEGA2560 (zakładam, że 16 MHz, przypuszczam) i możesz robić 10 pętli / s. Jeśli chcesz osiągnąć 100 pętli / s, powinieneś być w porządku z Cortex-M3 / M4 w zakresie 100 MHz lub więcej (przybliżone oszacowanie). Zauważ, że Cortex-M4F ma jednostkę zmiennoprzecinkową.
Już zawęziliśmy wybór.
Wymagania dotyczące pamięci
Ten jest prosty: wybierz MCU, który ma najwięcej pamięci RAM / Flash w swoim zakresie dla prototypu. Po sprawdzeniu poprawności prototypu przełącz się na MCU z tego samego zakresu, który ma wystarczającą ilość pamięci RAM / Flash, teraz, gdy znasz dokładne wymagania.
Pamiętaj, że nie sądzę, aby Twoja aplikacja wymagała niesamowitej ilości pamięci.
Teraz urządzenia peryferyjne
Potrzebujesz absolutnie ADC. Wszystkie MCU z zakresu, na który patrzymy, mają pewne, więc nie jest to przydatne kryterium. Nie są też cyfrowymi wejściami / wyjściami, chyba że potrzebujesz bardzo dużej ich liczby (co nie wydaje się być twoim przypadkiem).
Wydaje się, że potrzebujesz przetwornika cyfrowo-analogowego. Jest to jednak coś, czego tak naprawdę nie znajdziesz łatwo i zbyt zawęzi kandydatów. Dlatego nie przestrzegamy tego wymogu i pozostaniemy przy PWM i dolnoprzepustowym (co z pewnością jest do zaakceptowania).
Nie wspominasz o żadnym interfejsie komunikacyjnym, z wyjątkiem wyświetlacza LCD (później). W każdym razie wszystkie MCU mają I2C / SPI / UART / ... jeśli potrzebujesz.
LCD
To jest trudniejsze, ponieważ istnieje wiele różnych rozwiązań, które nakładają całkowicie różne wymagania na MCU. Ale nie wybieraj LCD w zależności od MCU. Wybierz LCD, który chcesz dla swojego produktu, a następnie wybierz MCU, który będzie go skutecznie napędzał.
- Jeśli potrzebujesz znaku LCD: najłatwiejszym i najmniejszym ograniczeniem dla MCU jest rozmowa z nim przez interfejs szeregowy (często SPI). W ten sposób nie będzie używać zbyt wielu PIN-ów, możesz używać mniejszych / tańszych MCU, a szybkość nie stanowi problemu.
- Jeśli chcesz graficzny wyświetlacz TFT LCD: jeśli jest mały, łącze szeregowe może być nadal odpowiednie. Jednak w przypadku rozdzielczości 320 x 200 lub większej i jeśli chcesz mieć ładny interfejs graficzny, zaczniesz chcieć komunikować się z interfejsem równoległym. W takim przypadku albo użyjesz GPIO (ale to zwiększy obciążenie MCU, ponieważ będziesz musiał bit huknąć linie kontrolne) lub wybierzesz MCU, które ma dedykowany interfejs LCD (który często jest taki sam jak interfejs pamięci zewnętrznej). Ten ostatni stanowi silne ograniczenie wyboru MCU, ale nie masz innych silnych ograniczeń, więc ...
Teraz ty wybierasz
Wejdź na stronę ST Micro / NXP / Atmel i skorzystaj z narzędzi wyboru MCU. Spędzisz również dużo czasu czytając arkusze danych. Nie spiesz się. To nie jest zmarnowane. Wszystko, czego się tu nauczysz, nawet jeśli nie wykorzystasz go specjalnie do tego projektu, może być przydatne.
W tym momencie musisz również spojrzeć na liczbę PIN-ów, których naprawdę potrzebujesz, i sprawdzić schemat multipleksowania wybranych kandydatów MCU, aby sprawdzić, czy możesz użyć wszystkich potrzebnych funkcji PIN-ów. Ponieważ oczywiście będziesz chciał wziąć MCU z najniższą liczbą pinów, która spełnia twoje wymagania (ze względu na koszty / nieruchomości PCB).
Sprawdź ceny / dostępność w Mouser / Digikey. Ale nie powinieneś potrzebować tutaj czegoś szczególnie drogiego. Może około 5 €.
Ostatnia rzecz dotycząca sterowania LCD
Wygląda na to, że aktualizacja wyświetlacza LCD jest częścią głównej pętli. Nie powinno. Zwłaszcza jeśli zapętlasz 100 razy na sekundę, jest to bezużyteczne. Spraw, aby pętla sterująca obliczyła wszystko i dostosuj polecenie silnika przy każdej iteracji, ale po prostu zaktualizuj wartości, aby wyświetlały się gdzieś w pamięci. Następnie niech kolejna pętla o niższym priorytecie wyświetli tę informację użytkownikowi, gdy nie będzie już nic ważniejszego do zrobienia.
Tak, idealnie, wymaga zmiany zadań i innych rzeczy. Rzeczywisty system operacyjny (właściwie FreeRTOS, Coocox OS, Nuttx, ... są one bardzo małe, są w dużej mierze używane na Cortex-M i zapewniają wymagane mechanizmy wielozadaniowości).