Я работал над проектом управления eBike на Arduino MEGA2560. Программа запускает три контура управления ПИД-регулятора, один контур управления емкостью батареи (интерполяция на основе справочных таблиц), спидометр (выборки на основе герконов), а также ЖК-экран для отображения информации. Его входами являются 3 аналоговых сигнала: напряжение аккумулятора, ток и пользовательский дроссель, а также цифровой вход: сигнал включения / выключения спидометра (геркон). В настоящее время, когда все это работает по «длинной» арифметике, Arduino удается выполнить 10 циклов в секунду. Поскольку TFT LCD экран потребляет огромные вычислительные ресурсы, я думаю заменить его на буквенно-цифровой экран.
Выходы состоят из аналогового сигнала газа, поступающего на контроллер мотора, ЖК-экрана и, возможно, нескольких других устройств, требующих аналоговых сигналов. Таким образом, преобразователи АЦП необходимы, и ЦАП был бы очень полезен, хотя в настоящее время я использую ШИМ-выход Arduino с RC-фильтром нижних частот. Точно так же, способность считывать цифровые и аналоговые сигналы без прерывания работы процессора была бы велика.
Я хотел бы потенциально сделать из этого потребительский продукт, поэтому я хочу создать свою собственную платформу с нуля с помощью другого микроконтроллера, который мог бы дать мне по меньшей мере 100 выборок в секунду (в 10 раз больше, чем Arduino). Кроме того, чтобы избежать вычислений с плавающей запятой, в моих вычислениях используются длинные переменные и, следовательно, числа больше 16 бит, поэтому я предполагаю, что 32-битный MCU был бы хорошей идеей. Кроме того, MCU, способный выполнять вычисления с плавающей запятой, может быть интересен для упрощения математики в коде.
В конце концов, я не уверен, как начать искать микроконтроллеры, которые бы удовлетворяли этим требованиям и позволили бы быстро перейти из среды Arduino. Будем весьма благодарны за любые рекомендации о том, как найти такие MCU!
источник
Ответы:
(Это общее руководство. Я подозреваю, что вы могли бы также извлечь выгоду из оптимизации кода, но это выходит за рамки этого веб-сайта.)
Шаг 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 своего приложения, а затем выбрать более маленький и дешевый, чтобы он подходил. Вы также можете потратить время на искусство подгонки программного обеспечения к меньшему количеству ресурсов. Что стоит, зависит от того, сколько единиц вы собираетесь сделать.
источник
Хороший проект. Вот несколько советов, но было бы сложно обобщить это для каждого проекта.
Начните с вычислительных требований
Это то, что скажет вам, какое ядро вам нужно, и общие характеристики 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, который будет эффективно управлять им.
Теперь вы выбираете
Зайдите на сайт ST Micro / NXP / Atmel и используйте их инструменты выбора MCU. Вы также потратите много времени на чтение таблиц. Возьми это время. Это не впустую. Все, что вы узнаете здесь, даже если вы не используете это специально для этого проекта, может быть полезным.
На этом этапе вам также необходимо узнать количество PIN-кодов, которые вам действительно нужны, и проверить схему мультиплексирования выбранных кандидатов в MCU, чтобы убедиться, что вы можете использовать все необходимые функции PIN-кодов. Потому что, очевидно, вы захотите взять MCU с наименьшим количеством контактов, которые отвечают вашим требованиям (по соображениям стоимости / стоимости печатной платы).
Проверить цены / наличие на Mouser / Digikey. Но вам не нужно что-то особенно дорогое здесь. Может быть, 5 € или около того.
Последнее, что касается управления ЖК
Кажется, обновление ЖК-дисплея является частью вашего основного цикла. Это не должно Особенно, если вы зацикливаетесь 100 раз в секунду, это бесполезно. Заставьте цикл управления вычислять все и настраивать команду двигателя на каждой итерации, но просто обновляйте значения, чтобы они отображались в памяти. Затем сделайте еще один цикл с более низким приоритетом, чтобы показать эту информацию пользователю, когда нет ничего более важного, чтобы сделать.
Да, в идеале, это требует переключения задач и прочего. Фактически, настоящая ОС (ищите FreeRTOS, Coocox OS, Nuttx, ... они очень маленькие, в основном используются в Cortex-M и обеспечивают необходимые механизмы многозадачности).
источник
Обратите внимание, что это широкая тема, на которую можно правильно ответить, используя несколько (субъективных) подходов.
Кроме того, формат stackexchange не подходит для разработки решений проблем. Например, вы редко заставляете людей разрабатывать оборудование для вас. Скорее вы предлагаете аппаратный дизайн и задаете вопросы об этом.
Это сказал ...
Начните с особенностей процессора, которые вы не можете изменить. Такие как скорость и объем памяти (если применимо). Выясните, нужны ли вам прерывания и насколько сложной должна быть обработка прерываний.
Если вам нужна поддержка периферийных устройств, таких как АЦП или ЦАП, ситуация более сложная. Должны ли эти функции быть встроены в процессор или быть внешними по отношению к процессору. Цена, точность и даже шум являются факторами, влияющими на это решение.
Если внешние периферийные устройства должны поддерживаться, рассмотрите тип последовательной связи, которая необходима. Внешнему оборудованию может потребоваться SPI, I2C или UART другого типа. Если скорость передачи данных высока, лучше всего найти процессор с функциями DMA, связанными с его последовательными портами связи.
Наконец, если это приложение со встроенным процессором (которое обычно означает процессор, выделенный для задачи), рассмотрите возможность разбить требования на несколько групп и назначить процессор для каждой. Например, процессор отображения графического интерфейса, скорее всего, не нуждается в функции АЦП. Этот объективный подход к решению проблем оказался успешным в программном обеспечении, и при снижении цен на процессоры может также применяться к аппаратному обеспечению.
В реальном мире этот подход является итеративным. То есть многие проекты начинаются с одного процессора и заменяют разные процессоры, когда возникают проблемы с аппаратным и / или программным обеспечением или изменяется масштаб проекта.
источник
Я не видел, чтобы кто-то упоминал стоимость инструментов. Моя компания выбрала TI CC2541 и обнаружила, что он скомпилирован только с IAR-компилятором за 4 тыс. Долл., Что определенно является пробкой для любителя. Также программист. Это может быть 20 долларов или намного больше. Более дешевые инструменты сейчас кажутся более нормой, так что, возможно, это скоро уйдет в прошлое.
Кроме того, если вы перекомпилируете его сами, пакеты типа TQFP проще, чем, скажем, BGA. Большой BGA трудно понять правильно, исходя из личного опыта.
источник
Если продукт относительно чувствителен к цене и у вас есть приличное финансирование разработки, вы можете приобрести несколько оценочных плат и профилировать код на каждой, чтобы получить представление. Это должно быть довольно просто, если ваш код написан на переносном языке 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. Ничего из этого, вероятно, не является необходимым, и они могут чрезмерно ограничить ваш выбор преждевременно.
Удачи с этим, много работы, чтобы сделать это правильно. По моему опыту, это ложная экономия - слишком близко подходить к новому продукту, потому что покупатели неизбежно будут запрашивать вещи, которые вы не ожидали, и вы хотите иметь запасные мощности для их поставки без перезапуска. С другой стороны, если продукт слишком дорогой, вы не сможете продать достаточно с достаточной наценкой для поддержания бизнеса.
источник
Есть несколько разных платформ, на которые вы можете начать смотреть, такие как Arduinos, микроконтроллеры PIC, FPGA и многое другое. Я работал с Arduinos в прошлом, и у него есть порт ADC, способный достигать 74kS / s. 100 образцов в секунду - это очень медленно, и мне интересно, как вы узнали об этом? С другой стороны, вы хотите спросить себя, нужны ли вам какие-либо интерфейсы, такие как SPI, CAN, I2C или UART. Все они могут иметь свои преимущества, и вы сами должны решить, будете ли вы разговаривать с одним или несколькими рабами. Последний, но, вероятно, самый важный шаг - это угадать, сколько выводов на микроконтроллере вам понадобится.
«Способность считывать аналого-цифровые сигналы без прерывания работы процессора была бы великолепна». Я могу предположить, что вы не хотите иметь дело с внешними или внутренними буферами, которые будут распространять ваши данные и потенциально замедлять вашу обработку данных. Это правильно? Если это так, вам нужно больше программировать, но процессоры обычно способны обрабатывать скорость до 100 выборок в секунду. Это будет зависеть от вас, чтобы запрограммировать часы, частоту дискретизации и все остальное.
Кроме того, примите во внимание прерывания в вашей программе, если вы хотите непрерывно выполнять выборку данных и выполнять другие задачи при поднятии флага.
источник