Як скласти список вимог до мікроконтролера для мого проекту? Як я можу знайти підходящі мікроконтролери?


20

Я працюю над проектом управління eBike на Arduino MEGA2560. Програма працює 3-кратними петлями керування PID, однією петлею управління ємністю акумулятора (інтерполяція на основі таблиць пошуку), спідометром (зразки на основі очеретяного вимикача), а також РК-екраном для відображення інформації. Його входи - 3 аналогові сигнали: напруга акумулятора, струм і вхід дросельної заслінки, а також цифровий вхід: спідометр (тростинний перемикач) сигнал увімкнення / вимкнення. В даний час, використовуючи все це на "довгій" арифметиці, Arduino вдається виконати 10 циклів в секунду. Оскільки РК-екран TFT займає величезну кількість обчислювальної потужності, я думаю про заміну його на буквено-цифровий екран.

Виходи складаються з аналогового сигналу дросельної заслінки, що надходить на контролер двигуна, РК-екрана та, можливо, кількох інших пристроїв, що потребують аналогових сигналів. Таким чином, перетворювачі АЦП є важливими, і ЦАП був би дуже корисним, хоча в даний час я використовую вихід ШІМ Arduino з RC фільтром низьких частот. Аналогічно, ємність зчитувати цифрові та аналогові сигнали, не перебиваючи процесор, була б великою.

Я б хотів потенційно зробити споживчий продукт із цього, отже, я хочу створити свою власну платформу з нуля за допомогою іншого мікроконтролера, який міг би дати мені щонайменше 100 проб в секунду (10 разів більше, ніж досягає Arduino). Крім того, щоб уникнути плаваючих точок, мої розрахунки використовують довгі змінні та, отже, числа, що перевищують 16 біт, тому я припускаю, що 32-бітний MCU був би хорошою ідеєю. Також MCU, здатний робити обчислення з плаваючою комою, може бути цікавим для спрощення математики в коді.

Зрештою я не впевнений, як почати шукати MCU, які б задовольнили ці вимоги та дозволили швидкий перехід із середовища Arduino. Будемо дуже вдячні за будь-які вказівки щодо пошуку таких MCU!


1
Мені не обов’язково хочеться, щоб мені були рекомендовані деталі, а лише метод або платформа чи будь-які вказівки щодо того, як знайти потрібну мені платформу.
Eliott W

5
Це набагато краще, ніж ваше попереднє запитання, але воно все ще дуже широке, і деякі моменти ваших вимог не зрозумілі. Наприклад, що ви маєте на увазі, "не перебиваючи процесор"? Я здогадуюсь, що ви теж не хочете робити опитуваного вводу / виводу. Вам також потрібно краще зрозуміти, скільки саме обчислень потрібно виконати для кожного набору зразків.
Трейд Дейва

1
Вам слід подумати про використання цілої математики. Це правильно робити.
Скотт Сейдман


4
Матеріальна цілість, довга або коротка, набагато швидша, ніж плаваюча точка; і ціла математика, яка довша, ніж "рідна" бітова глибина процесора, також буде повільною. Тож 32-бітний звучить як дуже гарна ідея, можливо, один із пристроїв типу "DSP".
pjc50

Відповіді:


18

(Це загальний посібник. Я підозрюю, що ви також можете скористатися оптимізацією коду, але це виходить за межі цього веб-сайту.)

Крок 1: Грубі розміри, бюджет, постачальник

Виберіть один із:

  • Комп'ютер (Raspberry Pi, Beagleboard, PC104 плата, Intel Edison тощо). Запускає операційну систему загального призначення та має велику потужність обробки. Дорожчі та енергетичні. 10 - 100 доларів.

  • Великий MCU. ARM Cortex-A / PIC32 / dsPIC / AVR32 / TI C серія DSP тощо. Пристойна обчислювальна потужність, ОС не обов'язкова. ~ 5 дол.

  • Малий MCU. Cortex-M / PIC16. Насправді не вистачає місця для справжньої ОС, можливо просто легкий планувальник завдань. ~ 2 долари.

  • Крихітний MCU. Тільки для програм, де ви дбаєте про кожен останній мікроламп споживання енергії. ~ 1 дол. США або менше.

На цьому етапі також слід розглянути, які постачальники та ланцюжки інструментів вам подобаються та не подобаються. Погляньте на вартість таких речей, як пристрої для налагодження в ланцюзі та IDE.

Крок 2: Мінімальна периферія

Вам потрібні такі речі, як USB? PCI? HDMI? SATA? Незвично швидкі АЦП або ЦАП? Практично всі категорії "малі" або "крихітні" їх не мають, хоча USB досить широко доступний.

Крок 3: Прототип

Виберіть щось, що відповідає вищевказаним критеріям, випадково, якщо необхідно, починайте, дізнайтеся, наскільки це можливо та скільки простору / потужності для обробки потрібно. Ви вже зробили щось із цього. Писання на С повинно зробити більшу частину логіки портативною.

Отримавши прототип, ви можете сказати собі: "Мені потрібен такий, але з більшою кількістю X", і нехай це керує вашими рішеннями.

Крок 4: Стискання

Як правило, простіше розпочати роботу з найбільшим (найчастіше Flash та RAM) членом сімейства процесорів, написати v1 своєї заявки, а потім вибрати менший, дешевший. Ви також можете витратити час на мистецтво розміщення програмного забезпечення на менші ресурси. Що варто, залежить від того, скільки одиниць ви збираєтеся виготовити.


14
Крок 0: ланцюжок інструментів (середовище розробки прошивки). Знайдіть середовище (и) розробки, яке ви можете змусити працювати для вас. Тут виграно чи програно. Навіть якщо у вас ідеально підходить кремній, але ви не можете змусити середовище розробки прошивки працювати (з будь-якої причини), ваш проект не зійде з місця. (Справа в суті: IDE Arduino зняв ваш дослідний зразок на базі Ардуїно.)
Нік Алексєєв

8
Класифікація Cortex-M як "малого MCU", а PIC32 / AVR32 як "великий MCU" здається трохи прикрою. Я особисто не використовував PIC32 / AVR32, але на основі швидкого огляду спектра специфікацій я б сказав, що вони повинні бути в одній дужці. (Є MCU Cortex-M, які працюють на> 200 МГц, мають багато мегабайт спалаху та більше половини мегабайт оперативної пам’яті)
Aleksi Torhamo

13

Гарний проект. Ось кілька підказок, але було б важко узагальнити це для кожного проекту.

Почніть з обчислювальних вимог

Це те, що підкаже, який ядро ​​вам потрібно, і загальні виступи 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 і забезпечують необхідні багатозадачні механізми).


Дуже дякую за всебічну відповідь! Зауважую, що MCU-модулі ARM Cortex працюють на 3.3V. Мій сигнал дросельної заслінки повинен масштабуватися між 1 і 5 В. Я здогадуюсь, що якщо я хочу використовувати контролер ARM, мені доведеться знайти спосіб посилити напругу, оскільки він буде обмежений на 3,3 В від MCU?
Eliott W

Так. Сигнал дроселя - це аналоговий вихід, правда? У цьому випадку ви можете використовувати підсилювач для його посилення.
дим

Я не впевнений, що згоден з останнім реченням про необхідність "справжньої ОС". Я думаю, це залежить від того, наскільки ви хочете готових рішень. Якщо ви хочете чогось, де ви можете просто кинути свою ділову логіку і почати вибухувати одиниці, так, повноцінна ОС (зауважте, що це не повинно означати щось на зразок Windows або навіть Linux!), Безумовно, корисно.
CVn

1
@ MichaelKjörling Звичайно, я не мав на увазі щось навіть віддалено, як Linux. Але, наприклад, FreeRTOS, Coocox OS або Nuttx. Це те, що я вважаю справжньою ОС, хоча і дуже мало. Я написав, що тому, що дійсно робити це на голому металі буде потрібно більше часу, буде налагоджувати і бути менш гнучким. І середовище Arduino (хоча я далеко не фахівець з цього питання), здається, не забезпечує механізми виконання завдань (і, як такий, я не вважаю це справжньою ОС).
дим

1
Ага. Що ж, я перечитав "справжню" частину, значить. Тільки для вигоди наших іноземців, які час від часу потрапляють сюди, ви можете розглянути питання про уточнення цієї частини у своїй відповіді.
CVn

4

Зауважте, що це широкий предмет, на який можна відповісти правильно, використовуючи декілька (суб'єктивних) підходів.

Крім того, формат stackexchange не дуже гарний при розробці рішень для проблем. Наприклад, ви рідко змушуєте людей розробляти обладнання для вас. Замість цього ви пропонуєте апаратну конструкцію і задаєте питання щодо неї.

Це сказало ...

Почніть з особливостей процесора, які ви не можете змінити. Такі як швидкість та розмір пам’яті (якщо застосовується). Дослідіть, чи потрібні вам перерви та наскільки складною має бути робота з перериванням.

Якщо вам потрібна периферійна підтримка, така як АЦП або ЦАП, ситуація є складнішою. Якщо ці функції мають бути вбудовані в процесор чи бути зовнішніми від процесора. Ціна, точність і рівномірний шум - фактори в цьому рішенні.

Якщо потрібно підтримувати зовнішні периферійні пристрої, розгляньте необхідний тип послідовних комунікацій. Зовнішнє обладнання може потребувати SPI, I2C або іншого типу UART. Якщо швидкість передачі даних висока, можливо, найкраще знайти процесор з функціями DMA, пов’язаними з його портами послідовного зв'язку.

Нарешті, якщо це вбудований процесорний додаток (що зазвичай означає процесор, призначений для завдання), подумайте про розбиття вимог на декілька груп та присвоєння процесору кожній. Наприклад, процесор відображення графічного інтерфейсу, ймовірно, не потребує функції АЦП. Цей об'єктивний підхід до вирішення проблем виявився успішним як у програмному забезпеченні, так і з падінням процесорних цін також може бути застосований до обладнання.

У реальному світі такий підхід є ітеративним. Тобто багато проектів починаються з одного процесора і замінюють різні процесори, коли виникають проблеми з апаратним та / або програмним забезпеченням або змінюється сфера проекту.


Ви краще оцінюєте, який тип чисел очікувати, ніж компілятор. Я б уникнув загального підходу використання плавців. Наприклад, можливо, що плаваючі результати неоднакові на різних платформах! Я використовував би цілу арифметику і підгадував рішення для ваших потреб.
st2000

3

Я не бачив, щоб хтось згадував вартість інструментів. Моя компанія обрала TI CC2541 і дізналася, що вона складена лише з компілятора IAR в $ 4 тис., Безумовно, стоп-шоу для любителів. Також програміст. Це може бути 20 або більше доларів. Дешевші інструменти здаються більшою мірою нормою, тому, можливо, це скоро буде минулою справою.

Крім того, якщо ви поповнюєте його самостійно, такі пакети, як TQFP, простіше, ніж, скажімо, BGA. Великий BGA важко отримати правильно, виходячи з особистого досвіду.


2

Якщо продукт порівняно з ціною і у вас є гідне фінансування на розробку, ви можете придбати купу комітетів для оцінки та профайлювати код на кожній, щоб отримати уявлення. Це має бути досить зрозумілим, якщо ваш код написаний на портативному C. Крім мікро, ви будете оцінювати ланцюжки інструментів з демо-версіями, перш ніж викладати вартість повномасштабного IDE, такого як IAR або Keil. У деяких випадках ви можете профілювати код вузького місця безпосередньо в IDE без обладнання.

Якщо ви сильно обмежені вартістю розробки, можливо, доведеться піти на компроміс, щоб знайти те, що не занадто дорого коштує для налаштування розробки.

Наприклад, ST має дошку ARM Cortex M7 eval з приємним кольоровим дисплеєм за <100 доларів. У нього є FPU з функціями DSP, тому ви можете робити все, про що говорили, легко - ймовірно, запустіть цикл PID на 100 кГц, а не лише на 100 ГГц. Це, ймовірно, надмірність, якщо цей показник не є пріоритетним.

Якщо ви прагнете до дешевшого процесора без FPU, ви, ймовірно, захочете профайлювати PID-код у його готовому вигляді. Переконайтеся, що включені всі коефіцієнти масштабування та лінеаризації та калібрування, оскільки вони можуть скластись за часом обробки.

Часто периферійні пристрої та пов’язана з цим якість та доступність програмного забезпечення (та ліцензійні умови) сильно впливатимуть на ваш вибір. Якщо для зберігання на палець-накопичувачі потрібні режим BT, Wifi або USB, а також файли FAT або швидкий інтерфейс SD, все це буде важливим фактором. Деякі мікросхеми мають вбудований РК-контролер та дигітайзерний контролер, що дозволяє дозволити використання відносно недорогих TFT-панелей. Не забувайте про високі ліцензійні платежі.

Якщо у вас є уявлення про необхідну пам'ять програми, швидкість обробки та периферійні пристрої (включіть до цього FPU), ви можете здійснити параметричний пошук у дистриб'ютора перед тим, як свердлити в таблиці. Деякі речі, які занадто стримують, можуть бути - пакет через отвір, внутрішній DAC, внутрішній Ethernet PHY, FPU. Жодне з них, ймовірно, не потрібне, і вони можуть надмірно обмежувати ваш вибір передчасно.

Удачі в цьому, для цього потрібно багато роботи, щоб зробити це правильно. На мій досвід, помилковою економією є надто близько до нового продукту, оскільки замовник (клієнти) неминуче проситимуть речі, які ви не очікували, і ви хочете мати запасні потужності, щоб поставити це, не починаючи заново. З іншого боку, якщо товар занадто дорогий, ви не зможете продати достатньо за достатньою ціною, щоб підтримувати бізнес.


1

Є кілька різних платформ, на які можна почати дивитися, як Arduinos, мікроконтролери PIC, FPGA та багато іншого. Раніше я працював з Arduinos, і він має порт АЦП, здатний досягати 74 кС / с. 100 проб в секунду надзвичайно повільно, і мені цікаво, як ви це виявили? З іншого боку, ви хочете запитати себе, чи потрібні вам будь-які інтерфейси, такі як SPI, CAN, I2C або UART. Всі вони можуть мати свої переваги, і ви самі повинні подумати, чи будете ви спілкуватися з одним або кількома рабами. Останнім, але, мабуть, найважливішим кроком було б вгадати, скільки штифтів на мікроконтролері вам потрібно буде використовувати.

"Можливість зчитувати аналогові та цифрові сигнали, не перебиваючи процесор, була б великою." Я можу сказати, що ви не хочете мати справу з зовнішніми або внутрішніми буферами, які будуть циркулювати ваші дані і потенційно сповільнюватимуть обробку даних. Це так? Якщо так, то для вас більше програмування, але процесори зазвичай здатні обробляти швидкість 100 зразків в секунду. Ви вирішуєте запрограмувати годинник, частоту вибірки та інше.

Також врахуйте переривання у вашій програмі, якщо ви хочете постійно зберігати вибіркові дані та виконувати інші завдання, коли прапор піднятий.


2
Я думаю, ви пропустили суть. У нього є прототип, побудований на ардуїно. Вибірка не є повільною. Петлі управління проходять повільно. У нього є три ПІД-контролери, які обчислюються за допомогою плаваючої точки на Ардуїно, тож вони повільніші, ніж патока в антарктичній зимовій. Отже, вибірка не є проблемою. Неефективний код є.
JRE

Ви маєте рацію з цього приводу.
12Lappie

Так, проблема полягає в тому, що хоча мої петлі знаходяться в довгій арифметиці і не мають плаваючих точок, існує стільки розрахунків, що, оскільки Arduino бере пробу один раз за цикл, швидкість моєї вибірки дуже мала (зараз 20 зразків в секунду) .
Eliott W
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.