Как мне составить список требований к микроконтроллеру для моего проекта? Как я могу найти микроконтроллеры, которые подходят?

20

Я работал над проектом управления eBike на Arduino MEGA2560. Программа запускает три контура управления ПИД-регулятора, один контур управления емкостью батареи (интерполяция на основе справочных таблиц), спидометр (выборки на основе герконов), а также ЖК-экран для отображения информации. Его входами являются 3 аналоговых сигнала: напряжение аккумулятора, ток и пользовательский дроссель, а также цифровой вход: сигнал включения / выключения спидометра (геркон). В настоящее время, когда все это работает по «длинной» арифметике, Arduino удается выполнить 10 циклов в секунду. Поскольку TFT LCD экран потребляет огромные вычислительные ресурсы, я думаю заменить его на буквенно-цифровой экран.

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

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

В конце концов, я не уверен, как начать искать микроконтроллеры, которые бы удовлетворяли этим требованиям и позволили бы быстро перейти из среды Arduino. Будем весьма благодарны за любые рекомендации о том, как найти такие MCU!

Элиотт W
источник
1
Я не обязательно хочу быть рекомендованными частями, а просто методом или платформой или любым руководством о том, как найти нужную платформу.
Eliott W
5
Это намного лучше, чем ваш предыдущий вопрос, но он все еще очень широк, и некоторые пункты в ваших требованиях не ясны. Например, что вы имеете в виду, «не прерывая работу процессора»? Я предполагаю, что вы на самом деле не хотите делать опрашиваемый ввод-вывод. Вам также необходимо лучше понять, сколько вычислений необходимо выполнить для каждого набора выборок.
Дэйв Твид
1
Вы должны рассмотреть возможность использования целочисленной математики. Это правильно.
Скотт Сейдман
4
связанные: Как выбрать платформу MCU?
Ник Алексеев
4
Целочисленная математика, длинная или короткая, намного быстрее, чем с плавающей точкой; и целочисленная математика, которая длиннее «родной» разрядности процессора, также будет медленной. Так что 32-битная звучит как очень хорошая идея, может быть, одно из устройств типа «DSP».
pjc50

Ответы:

18

(Это общее руководство. Я подозреваю, что вы могли бы также извлечь выгоду из оптимизации кода, но это выходит за рамки этого веб-сайта.)

Шаг 1: примерный размер, бюджет, поставщик

Выберите одно из:

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

  • Большой MCU. DSP серии ARM Cortex-A / PIC32 / dsPIC / AVR32 / TI C и т. Д. Достойная вычислительная мощность, опциональная ОС. ~ $ 5.

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

  • Крошечный MCU. Только для приложений, где вы заботитесь о каждом последнем микроамперном энергопотреблении. ~ $ 1 или меньше.

На этом этапе вы также должны подумать, какие продавцы и наборы инструментов вам нравятся и не нравятся. Взгляните на стоимость таких вещей, как встроенные устройства отладки и IDE.

Шаг 2: Минимальные периферийные устройства

Вам нужны такие вещи, как USB? PCI? HDMI? SATA? Необычно быстрые АЦП или ЦАП? Почти все «маленькие» или «крошечные» категории не имеют их, хотя USB достаточно широко доступен.

Шаг 3: Прототип

Выберите что-то, что соответствует вышеперечисленным критериям, наугад при необходимости, начните, выясните, насколько это возможно и сколько места / вычислительной мощности вам нужно. Вы уже сделали это. Запись в C должна сделать большую часть переносимой логики.

Когда у вас есть прототип, вы можете сказать себе: «Мне нужен такой, но с большим количеством Х», и пусть он будет направлять ваши решения.

Шаг 4: Сжатие

Как правило, проще начать с самого большого (чаще всего Flash и RAM) члена семейства процессоров, написать v1 своего приложения, а затем выбрать более маленький и дешевый, чтобы он подходил. Вы также можете потратить время на искусство подгонки программного обеспечения к меньшему количеству ресурсов. Что стоит, зависит от того, сколько единиц вы собираетесь сделать.

pjc50
источник
14
Шаг 0: Цепочка инструментов (среда разработки прошивки). Найдите среду (ы) разработки, в которой вы можете работать за вас. Это где он выиграл или проиграл. Даже если у вас есть кремний, который идеально подходит, но вы не можете заставить среду разработки прошивки работать (по любой причине), тогда ваш проект не сдвинется с мертвой точки. (Показательный пример: в среде IDE Arduino ваш прототип на базе Arduino сорвался с земли.)
Ник Алексеев
8
Категоризация Cortex-M как «Маленького MCU» и PIC32 / AVR32 как «Большого MCU» кажется немного неудачной. Лично я не использовал PIC32 / AVR32, но, если взглянуть на диапазон спецификаций, я бы сказал, что все они должны быть в одной скобке. (Существуют микроконтроллеры Cortex-M, которые работают на частоте> 200 МГц, имеют много мегабайт флэш-памяти и более половины мегабайта оперативной памяти)
Алекси Тохамо
13

Хороший проект. Вот несколько советов, но было бы сложно обобщить это для каждого проекта.

Начните с вычислительных требований

Это то, что скажет вам, какое ядро ​​вам нужно, и общие характеристики MCU. Я предлагаю вам начать с этого, поскольку он, очевидно, не может быть расширен с помощью внешних компонентов, в отличие от периферийных устройств.

Во-первых, кажется, вы используете тяжелые математические операции с большими целыми числами внутри цикла. Итак, как вы предложили, 32-битная версия была бы полезна здесь, поэтому ARM является идеальным кандидатом. Что касается частоты работы: в настоящее время вы используете Arduino MEGA2560 (работающий на 16 МГц, я полагаю), и вы можете сделать 10 циклов / с. Если вы хотите достичь 100 циклов / с, вам будет хорошо с Cortex-M3 / M4 в диапазоне 100 МГц или более (грубая оценка). Обратите внимание, что Cortex-M4F имеет единицу с плавающей запятой.

Мы уже сузили выбор.

Требования к памяти

Это легко: выберите MCU, у которого больше всего RAM / Flash из своего диапазона для прототипа. После проверки прототипа переключитесь на MCU из того же диапазона, в котором достаточно RAM / Flash, теперь, когда вы точно знаете свои требования.

Обратите внимание, что я не думаю, что вашему приложению требуется невероятное количество памяти.

Теперь периферия

Тебе обязательно нужен АЦП. У всех MCU диапазона, на который мы смотрим, есть некоторые, так что это бесполезный критерий. Также нет цифровых входов / выходов, за исключением случаев, когда вам нужно их очень большое количество (что, похоже, не ваш случай).

Кажется, вам нужен ЦАП. Тем не менее, это то, что вы на самом деле не найдете легко и слишком сузите кандидатов. Таким образом, мы не соблюдаем это требование, и мы останемся с ШИМ и НЧ (что на самом деле приемлемо).

Вы не упоминаете ни о каком интерфейсе связи, кроме LCD (позже). В любом случае, все MCU имеют I2C / SPI / UART / ... если вам нужно.

ЖК

Это хитрее, потому что есть много разных решений, которые предъявляют совершенно разные требования к MCU. Но не выбирайте ЖК-дисплей в зависимости от MCU. Выберите нужный вам ЖК-дисплей, а затем выберите MCU, который будет эффективно управлять им.

  • Если вам нужен символьный ЖК-дисплей: тогда самый простой и наименее ограничивающий для MCU - поговорить с ним через некоторый последовательный интерфейс (часто SPI). Таким образом, он не будет использовать слишком много PIN-кодов, вы можете использовать меньшие / более дешевые микроконтроллеры, и скорость не является проблемой.
  • Если вам нужен графический TFT LCD: если он маленький, последовательная связь все еще может быть подходящей. Тем не менее, для 320x200 или более, и если вы хотите иметь хороший графический интерфейс, вы начнете хотеть общаться с параллельным интерфейсом. В этом случае либо вы используете некоторый GPIO (но это увеличит нагрузку на MCU, потому что вам придется разбивать контрольные линии), либо вы выбираете MCU с выделенным ЖК-интерфейсом (который часто совпадает с интерфейс внешней памяти). Этот последний накладывает сильное ограничение на выбор MCU, но у вас нет других сильных ограничений, так что ...

Теперь вы выбираете

Зайдите на сайт ST Micro / NXP / Atmel и используйте их инструменты выбора MCU. Вы также потратите много времени на чтение таблиц. Возьми это время. Это не впустую. Все, что вы узнаете здесь, даже если вы не используете это специально для этого проекта, может быть полезным.

На этом этапе вам также необходимо узнать количество PIN-кодов, которые вам действительно нужны, и проверить схему мультиплексирования выбранных кандидатов в MCU, чтобы убедиться, что вы можете использовать все необходимые функции PIN-кодов. Потому что, очевидно, вы захотите взять MCU с наименьшим количеством контактов, которые отвечают вашим требованиям (по соображениям стоимости / стоимости печатной платы).

Проверить цены / наличие на Mouser / Digikey. Но вам не нужно что-то особенно дорогое здесь. Может быть, 5 € или около того.

Последнее, что касается управления ЖК

Кажется, обновление ЖК-дисплея является частью вашего основного цикла. Это не должно Особенно, если вы зацикливаетесь 100 раз в секунду, это бесполезно. Заставьте цикл управления вычислять все и настраивать команду двигателя на каждой итерации, но просто обновляйте значения, чтобы они отображались в памяти. Затем сделайте еще один цикл с более низким приоритетом, чтобы показать эту информацию пользователю, когда нет ничего более важного, чтобы сделать.

Да, в идеале, это требует переключения задач и прочего. Фактически, настоящая ОС (ищите FreeRTOS, Coocox OS, Nuttx, ... они очень маленькие, в основном используются в Cortex-M и обеспечивают необходимые механизмы многозадачности).

тусклый
источник
Большое спасибо за исчерпывающий ответ! Я заметил, что все микроконтроллеры ARM Cortex работают на 3,3В. Мой сигнал дроссельной заслонки должен масштабироваться от 1 до 5 В. Я предполагаю, что если я захочу использовать контроллер ARM, мне нужно будет найти способ увеличить напряжение, так как оно будет ограничено при 3,3 В от MCU?
Элиотт W
Да. Сигнал дроссельной заслонки является аналоговым выходом, верно? В этом случае вы можете использовать операционный усилитель, чтобы усилить его.
тусклый
Я не уверен, что согласен с последним предложением о требовании «настоящей ОС». Я полагаю, это зависит от того, сколько с точки зрения готовых решений вы хотите. Если вам нужно что-то, что вы можете просто вставить в свою бизнес-логику и начать распределять модули, да, полноценная ОС (обратите внимание, что это не обязательно означает что-то вроде Windows или даже Linux!), Безусловно, полезна.
CVn
1
@ MichaelKjörling, конечно, я не имел в виду что-то такое, как Linux. Скорее, например, FreeRTOS, Coocox OS или Nuttx. Это то, что я считаю настоящей ОС, хотя и очень маленькой. Я написал это, потому что, действительно, выполнение этого на голом металле займет больше времени, будет труднее отлаживать и быть менее гибким. И среда Arduino (хотя я далеко не эксперт в этом), похоже, не предоставляет механизмов управления задачами (и, как таковая, я не рассматриваю ее как настоящую ОС).
тусклый
1
Ах. Ну, тогда я неправильно понял "настоящую" часть. Только для нас, чужеземцев, которые иногда оказываются здесь, вы можете рассмотреть возможность разъяснения этой части в своем ответе.
CVn
4

Обратите внимание, что это широкая тема, на которую можно правильно ответить, используя несколько (субъективных) подходов.

Кроме того, формат stackexchange не подходит для разработки решений проблем. Например, вы редко заставляете людей разрабатывать оборудование для вас. Скорее вы предлагаете аппаратный дизайн и задаете вопросы об этом.

Это сказал ...

Начните с особенностей процессора, которые вы не можете изменить. Такие как скорость и объем памяти (если применимо). Выясните, нужны ли вам прерывания и насколько сложной должна быть обработка прерываний.

Если вам нужна поддержка периферийных устройств, таких как АЦП или ЦАП, ситуация более сложная. Должны ли эти функции быть встроены в процессор или быть внешними по отношению к процессору. Цена, точность и даже шум являются факторами, влияющими на это решение.

Если внешние периферийные устройства должны поддерживаться, рассмотрите тип последовательной связи, которая необходима. Внешнему оборудованию может потребоваться SPI, I2C или UART другого типа. Если скорость передачи данных высока, лучше всего найти процессор с функциями DMA, связанными с его последовательными портами связи.

Наконец, если это приложение со встроенным процессором (которое обычно означает процессор, выделенный для задачи), рассмотрите возможность разбить требования на несколько групп и назначить процессор для каждой. Например, процессор отображения графического интерфейса, скорее всего, не нуждается в функции АЦП. Этот объективный подход к решению проблем оказался успешным в программном обеспечении, и при снижении цен на процессоры может также применяться к аппаратному обеспечению.

В реальном мире этот подход является итеративным. То есть многие проекты начинаются с одного процессора и заменяют разные процессоры, когда возникают проблемы с аппаратным и / или программным обеспечением или изменяется масштаб проекта.

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

Я не видел, чтобы кто-то упоминал стоимость инструментов. Моя компания выбрала TI CC2541 и обнаружила, что он скомпилирован только с IAR-компилятором за 4 тыс. Долл., Что определенно является пробкой для любителя. Также программист. Это может быть 20 долларов или намного больше. Более дешевые инструменты сейчас кажутся более нормой, так что, возможно, это скоро уйдет в прошлое.

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

BSEE
источник
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), вы можете выполнить параметрический поиск на распространителе, прежде чем углубляться в таблицы данных. Некоторые вещи, которые слишком ограничивают, могут быть - сквозной пакет, внутренний ЦАП, внутренний Ethernet PHY, FPU. Ничего из этого, вероятно, не является необходимым, и они могут чрезмерно ограничить ваш выбор преждевременно.

Удачи с этим, много работы, чтобы сделать это правильно. По моему опыту, это ложная экономия - слишком близко подходить к новому продукту, потому что покупатели неизбежно будут запрашивать вещи, которые вы не ожидали, и вы хотите иметь запасные мощности для их поставки без перезапуска. С другой стороны, если продукт слишком дорогой, вы не сможете продать достаточно с достаточной наценкой для поддержания бизнеса.

Спехро Пефхани
источник
1

Есть несколько разных платформ, на которые вы можете начать смотреть, такие как Arduinos, микроконтроллеры PIC, FPGA и многое другое. Я работал с Arduinos в прошлом, и у него есть порт ADC, способный достигать 74kS / s. 100 образцов в секунду - это очень медленно, и мне интересно, как вы узнали об этом? С другой стороны, вы хотите спросить себя, нужны ли вам какие-либо интерфейсы, такие как SPI, CAN, I2C или UART. Все они могут иметь свои преимущества, и вы сами должны решить, будете ли вы разговаривать с одним или несколькими рабами. Последний, но, вероятно, самый важный шаг - это угадать, сколько выводов на микроконтроллере вам понадобится.

«Способность считывать аналого-цифровые сигналы без прерывания работы процессора была бы великолепна». Я могу предположить, что вы не хотите иметь дело с внешними или внутренними буферами, которые будут распространять ваши данные и потенциально замедлять вашу обработку данных. Это правильно? Если это так, вам нужно больше программировать, но процессоры обычно способны обрабатывать скорость до 100 выборок в секунду. Это будет зависеть от вас, чтобы запрограммировать часы, частоту дискретизации и все остальное.

Кроме того, примите во внимание прерывания в вашей программе, если вы хотите непрерывно выполнять выборку данных и выполнять другие задачи при поднятии флага.

12Lappie
источник
2
Я думаю, что вы упустили момент. У него есть прототип, построенный на Arduino. Выборка не медленная. Циклы управления являются медленными. У него есть три ПИД-регулятора, рассчитываемые с использованием плавающей запятой на Arduino, поэтому они медленнее, чем патока зимой в Антарктике. Таким образом, выборка не проблема. Неэффективный код есть.
JRE
Вы правы в этом.
12Lappie
Да, проблема в том, что, хотя мои циклы имеют длинную арифметику, а не числа с плавающей запятой, нужно сделать так много вычислений, что, поскольку Arduino берет выборку один раз за цикл, моя частота выборки очень мала (в настоящее время 20 выборок в секунду) ,
Элиотт W