Гарний проект. Ось кілька підказок, але було б важко узагальнити це для кожного проекту.
Почніть з обчислювальних вимог
Це те, що підкаже, який ядро вам потрібно, і загальні виступи MCU. Я пропоную почати з цього, оскільки це, очевидно, не може бути розширено за допомогою зовнішніх компонентів, на відміну від периферійних пристроїв.
По-перше, здається, ви використовуєте важкі математичні операції з великими цілими числами в циклі. Отже, як ви запропонували, 32-бітний тут був би корисний, тому ARM, таким чином, є ідеальним кандидатом. Що стосується частоти роботи: зараз ви використовуєте Arduino MEGA2560 (працює на 16 МГц, я вважаю) і ви можете робити 10 циклів / с. Якщо ви хочете досягти 100 циклів / с, вам слід добре відповідати Cortex-M3 / M4 в діапазоні 100 МГц або більше (приблизна оцінка). Зауважте, що Cortex-M4F має одиницю з плаваючою точкою.
Ми вже звузили вибір.
Вимоги до пам'яті
Це легко: виберіть MCU, який має найбільше оперативної пам’яті / спалаху свого діапазону для прототипу. Як тільки ви перевірите прототип, перейдіть до MCU з того самого діапазону, у якому достатньо просто оперативної пам’яті / спалаху, тепер, коли ви знаєте ваші точні вимоги.
Зауважте, що я не думаю, що вашій програмі не потрібні великі обсяги пам'яті.
Тепер периферія
Вам абсолютно потрібен деякий АЦП. У всіх MCU діапазону, який ми розглядаємо, є кілька, тому це не корисні критерії. Також немає цифрових входів / виходів, за винятком випадків, коли вам потрібна дуже велика їх кількість (що, здається, не у вашому випадку).
Вам, здається, потрібен ЦАП. Однак це те, що ви насправді не знайдете легко, і занадто сильно звузить кандидатів. Таким чином, ми не дотримуємося цієї вимоги, і ми залишимось із ШІМ та низьким пропуском (що, безумовно, прийнятно).
Ви не згадуєте жодного інтерфейсу зв'язку, окрім РК (пізніше про це). У будь-якому випадку, всі MCU мають I2C / SPI / UART / ..., якщо вони вам потрібні.
РК-дисплей
Це складніше, оскільки існує багато різних рішень, які ставлять зовсім інші вимоги до MCU. Але не вибирайте РК-дисплей залежно від MCU. Виберіть РК-дисплей для свого продукту, а потім виберіть MCU, який буде ефективно керувати ним.
- Якщо вам потрібен ЖК-персонаж: тоді найпростіший і найменш обмежуючий пристрій MCU - це поговорити з ним через якийсь послідовний інтерфейс (часто SPI). Таким чином, він не буде використовувати занадто багато PIN-кодів, ви можете використовувати менші / дешевші MCU, і швидкість - це не проблема.
- Якщо ви хочете графічний LCD TFT: якщо він невеликий, послідовне посилання все одно може бути доречним. Однак для 320x200 або більше, і якщо ви хочете мати гарний графічний інтерфейс, ви почнете бажати спілкуватися з паралельним інтерфейсом. У цьому випадку ви або використовуєте деякий GPIO (але це додасть більше навантаження на MCU, оскільки вам доведеться трохи відбивати контрольні лінії), або ви обираєте MCU, який має спеціальний інтерфейс LCD (який часто такий же, як і інтерфейс зовнішньої пам'яті). Останнє ставить сильне обмеження у виборі MCU, але у вас немає інших сильних обмежень, тому ...
Тепер ви обираєте
Перейдіть на веб-сайт ST Micro / NXP / Atmel і використовуйте їх засоби відбору MCU. Ви також витратите багато часу, читаючи таблиці даних. Скористайтеся цим часом. Це не марно. Все, що ви дізнаєтесь тут, навіть якщо ви не використовуєте його спеціально для цього проекту, може бути корисним.
На цьому етапі також потрібно переглянути кількість PIN-кодів, які вам справді знадобляться, і перевірити схему мультиплексування вибраних кандидатів MCU, щоб перевірити, чи можете ви використовувати всі необхідні PIN-функції. Тому що очевидно, ви захочете взяти MCU з найменшою кількістю штифтів, яка відповідає вашим вимогам (з міркувань вартості / PCB нерухомості).
Перевірте ціни / наявність на Mouser / Digikey. Але вам тут не потрібно щось особливо дороге. Можливо, 5 € або близько того.
Останнє, що стосується РК-керування
Здається, оновлення РК є частиною вашого основного циклу. Це не повинно. Особливо, якщо ви лупцюєте 100 разів на секунду, це марно. Зробіть цикл керування обчислити все та відрегулюйте команду двигуна на кожну ітерацію, але просто оновіть значення, щоб вони відображалися десь у пам'яті. Потім, ще одна петля з нижчим пріоритетом відображає цю інформацію користувачеві, коли нічого важливішого не робити.
Так, в ідеалі, це вимагає певного переключення завдань і іншого. Справді ОС, фактично (пошук FreeRTOS, Coocox OS, Nuttx, ... вони дуже малі, в основному використовуються на Cortex-M і забезпечують необхідні багатозадачні механізми).