Перевод статьи из блога Matthew Cashdollar
Я постоянно задаюсь этим вопросом, во время занятий своим хобби, – разработкой домашней системы автоматического контроля (умного дома), основанной на 16-битном микроконтроллере, – действительно ли это верный подход? Полтора месяца назад, я уже писал в своем блоге на тему «Микроконтроллеры против систем-на-чипе». Так вот, я опять собираюсь писать об этом.
Частично к этому меня побудило появление в продаже Stellaris Launchpad и Arduino Due. Они оба основаны на 32-битных микроконтроллерах, и во многом, очень похожи. Я изучил спецификации (datasheet) к обоим, и хотя они прилично отличаются по цене, они рассчитаны на одну целевую аудиторию. Я задумывался о том, что возможно мне стоит перейти с MSP430 на Stellaris, а может быть даже пересесть на принципиально иную систему, использовать что-то вроде Raspberry Pi, вместо микроконтроллеров.
Оба, Stellaris Launchpad и Arduino Due, очень мощны, но не предназначены для запуска Linux. Они работают либо на исполняемом коде, написанном непосредственно для них, либо под управлением операционной системы реального времени (RTOS), – минималистичной ОС, с очень коротким временем реакции на внешние события. Так же они оба значительно сложнее, чем MSP430 или 8-битные AVR.
C другой стороны, в реальной жизни (за границами интернета), большинство, кого я знаю, используют Raspberry Pi или другие встраиваемые системы на Linux. Использование именно микроконтроллеров, довольно редкий случай, среди тех, кого я встречал. Даже Arduino, гораздо менее популярно, в моем окружении, чем встраиваемый Linux. Как я это понимаю, – зачем кому-то покупать Arduino, когда можно приобрести Raspberry Pi, который может гораздо больше, а стоит столько же или меньше? Под Linux есть огромное количество готового софта, и на нем можно программировать, используя простые скриптовые языки.
Лично для меня, причина, по которой я не желаю использовать Linux, это потому что я ежедневно использую его на работе, и возвращаясь домой, не испытываю удовольствия от необходимости опять работать на Linux-подобных системах. У меня нет проблем с использованием Linux, но его слишком много повсюду, он меня гнетет. Мне гораздо интересней работать с простыми электронными устройствами на 8-ми / 16-битных микрочипах.
Тем не менее, я не отворачиваюсь от реальности. Если я хочу оставаться на одной волне с реальным миром, я должен использовать те инструменты, которые используют в реальном мире. Иначе, это похоже на желание водить машину с паровым двигателем, лишь потому, что двигатель внутреннего сгорания слишком обыденный, я его итак все время использую. Если окружающий мир переходит на более продвинутую технологию, необходимо освоить ее, нравиться мне это или нет. В особенности, если я хочу, что бы мой блог был интересен людям и оставался релевантным.
В моем проекте умного дома, я реально столкнулся с этой проблемой. Я уже сделал драйвер локальной сети для системы контроля на MSP430, и все выглядит очень достойно. По сути, я могу сделать все, что необходимо для системы автоматизации на MSP430. Тем не менее, я задумываюсь, правильно ли то, как я это делаю? Не пытаюсь ли я, есть суп вилкой, когда есть ложка? Может быть, Linux более походящая система? Позвольте, я объясню.
Если остановиться и взглянуть на текущую ситуацию, по технологическим достижениям на ноябрь 2012 года. Я спрашиваю себя, достаточно ли хороши и актуальны микроконтроллеры, по сравнению с системами-на-чипе, использующими Linux?
Если перечислять проекты на встраиваемых системах, которые приходят мне в голову, это: дроны, роботы, домашняя автоматизация, контроллеры моторов, сенсоры, наручные часы, 3D-принтеры и т.п. В каких из этих случаев, встраиваемый Linux подходит больше, чем микроконтроллеры? И почему?
Я так считаю, что есть три ситуации, когда микроконтроллер лучший выбор: там, где важна моментальная (realtime) реакция на события; там, где необходимо экстремально низкое потребление энергии; и там, где нужно использовать микросхемы максимально низкой стоимости.
Для начала, использование дешевых микросхем, не столь важный для меня момент. Я занимаюсь моим хобби для себя и не собираюсь когда-либо выпускать конкурентно-способные продукты. Мне не приходиться обдумывать перенос производства на завод, использующий рабский труд, дабы иметь конкурентную цену для тех мелких проектов, которые я разрабатываю. Я был бы счастлив, если бы смог, распаивать более одной платы в день, благодаря своим способностям!
Например, для проекта умного дома, я могу разработать, дистанционно контролируемый выключатель. Он может включать/выключать свет или что-то еще. В тоже время, я могу пойти в местный магазин электротехники и купить то же самое за $20, произведенное в Китае. Смогу ли я когда-нибудь перебить эту цену, попытавшись продавать собственный выключатель? Не думаю, что это возможно.
Если задуматься, это относится и к множеству остальных вещей, необходимых для домашней автоматизации. Датчики температуры, дыма, движения и т.д., я вполне способен самостоятельно сделать такие же, но вряд ли, из этого можно извлечь финансовую выгоду. Кому интересно покупать такие вещи у меня за $75, когда они могут найти их за $20 в Хозтоварах?
Если размышлять об извлечении какой-то выгоды из своего хобби, то лучше обратить внимание на более дорогие и сложные продукты. Например, контроллер домашней автоматизации или термостат, обычно стоят более $100, и оставляют больше свободы для индивидуального творчества, можно построить один, продать своим соседям и даже заработать что-то на этом.
Но желание, добиться более выгодной цены окончательного устройства, не означает, что нужно использовать самый дешевый микроконтроллер на Земле. На самом деле, это плохая идея, т.к. время разработки то же имеет свою стоимость, как и используемые детали. Возможно, микроконтроллер дешев, но требует больше времени для написания управляющего кода. Время – деньги, и если вы работаете быстрее, вы успеете большего добиться.
Все эти размышления, подводят меня к выводу, что выгодней разрабатывать систему умного дома на Linux, чем на микроконтроллерах, несмотря на мои личные предпочтения, не использовать Linux (мне нравится программирование низкого уровня больше чем скрипты, Linux нагоняет на меня скуку).
Если вернуться к теме топика, цена микроконтроллеров, это может быть важный фактор для крупных корпораций, собирающихся выпустить новый продукт, но на индивидуальном уровне, если пытаться вести бизнес в стиле Kickstarter, этот фактор уже не столь значим, по факту, быстрое время разработки, более важно, чем стоимость компонентов.
С другой стороны, микроконтроллеры могут быть лучшим выбором, чем системы-на-чипе, когда необходимо низкое потребление энергии. В таких системах есть два момента: низкое потребление самой схемы, во время работы, и короткое время старта. Типичным способом экономии батареи для мелких устройств, является само-отключение (shut off). Когда вы выключаете компьютер на Linux, ему нужно приличное время, что бы вернуться к работе, иногда до нескольких минут. Такое время не приемлемо для встраиваемых систем.
Если взять такой микроконтроллер, как MSP430, то он может годами работать от одной батарейки. Stellaris Launchpad и Arduino Due, в принципе то же на такое способны, они потребляют больше энергии чем MSP430, но все-равно очень мало, по сравнению с Raspberry Pi. Еще, MSP430, может моментально стартовать, после выключения.
Таким образом, я абсолютно уверен, что во всех ситуациях, где необходимы низковольтные операции, имеет смысл использовать микроконтроллеры. Существует большое количество разнообразных устройств, работающих на батарейках, где возникает такая необходимость.
В третьем случае, как я уже говорил, использование микроконтроллера более осмысленно, чем Linux, в операциях требующих моментальной реакции (realtime response). Я имею в виду такие устройства, как 3D-принтеры и станки ЧПУ, я знаю, о чем говорю, так как посвятил много времени их изучению. По своей природе, они требуют высокой точности в работе, которая чуть менее чем полностью зависит от времени реакции на команды.
Например, если у вас запущена циркулярная пила, которая отрезает в данный момент кусок дерева или метала, вы не можете остановить процесс, из-за того что компьютеру который ей управляет, понадобилась пауза, что бы скинуть данные из памяти на диск или что-то иное в том же духе. Любой, кто использовал ПК, знаком со случайными подвисаниями, периодически возникающими во время самой обычной работы. А теперь представьте себе, что у вас большой сверлильный станок, под управлением ПК, который вдруг начинает проверять обновления для Windows, во время работы, и дрель, сверлит насквозь стол, на котором стоит, т.к. компьютер потерял над ней контроль.
ПК и системы-на-чипе не предназначены для работы в реальном времени, хоть с Windows, хоть с Linux, но само собой они пытаются к этому приблизиться. Как пример, существует патч реального времени для ядра Linux, и специальный ЧПУ софт, созданный для работы такого рода. Я не достаточно знаком с этим патчем Linux, и не знаю, насколько он гибок, для полного контроля событий реального времени. Но думаю, что это лишь возможная альтернатива, т.к. Linux, какие бы патчи на него не навешали, никогда не побьет микроконтроллеры в этой области, благодаря наличию у них системы прерываний.
В заключение, хочу сказать, что потратил много времени, пытаясь найти области, где применение микроконтроллеров в моих проектах имеет преимущество. И все выглядит так, что пришла эпоха мирового доминирования Raspberry Pi и Beaglebones. Это текущая ситуация в DIY сообществе. В большинстве случаев, быстрее и легче разрабатывать на этих системах, так что зачастую это лучший выбор для большинства проектов.
Для микроконтроллеров остаются только области низковольтных устройств, операций реального времени и устройств низкой стоимости.
Это не зависит от того, что микроконтроллеры могут казаться «веселее» чем ПК. Это то, с чем придется смириться.
Перевод с английского языка оригинального поста “Are Microcontrollers Obsolete?” в блоге Matthew Cashdollar, посвященного его DIY разработкам в области домашней автоматизации.
Автор: Tabke
Всем плевать