?

Log in

No account? Create an account
Previous Entry Share Next Entry
photo25

Почему управление одним реле с помощью ARM процессора - это нормально?

Оригинал взят у alex_avr2 в Почему управление одним реле с помощью ARM процессора - это нормально?
Частенько вижу и слышу высказывания насчет того, что мол современные разработчики совсем обленились и разучились делать нормальную электронику и даже ради мигания светодиодиком ставят микроконтроллер, вычислительные мощности которого используются на 0.0001%. Я расскажу на примере, почему во многих случаях такое "расточительное" использование ресурсов не только плохо, но и хорошо и на самом деле экономит ресурсы.

Простейший, немного утрированный, но очень жизненный пример. Приходит ко мне заказчик и говорит: есть две лампочки и две кнопки. Хочу чтобы одна лампочка горела, а другая не горела. Если нажать первую кнопку - лампочка которая горит должна тухнуть, а та которая не горит - загораться. Если нажать вторую кнопку, то все наоборот.

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

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

Проходит месяц и опять звонит заказчик, грустный. Говорит, все круто работает, но хотим, чтобы вторая лампочка загоралась с задержкой три секунды, а еще спрашивает, а нельзя ли как-нибудь побыстрее поставить, чтобы на день рабочий блок не снимать? Чешу репу, думаю как сделать. Ладно, говорю, ждите, приеду. Задержка на три секнды, значит, ага, поставим простейшую схемку на нескольких дискретных элементах. Транзистор да конденсатор пойдут. Обрезаю плату кое как, паяю детальки, проверяю без блока управления, но вроде работает как надо. Еду к черту на кулички заказчику, вскрываю старый блок, обрезаю провода, прикручиваю их к новой плате, включаю, проверяю и... не работает! Ааааааа, говорю я, ну конечно, тут надо было резистор другой поставить, я ж за месяц забыл, что у заказчика не 12В, а 24В, а считал под 12. Чтож делать то? Находим в закромах заказчика какой-то древний советский резистор подходящего номинала. Отдираю неподходящий, на соплях к макетке прикручиваю подходящий. Включаем - работает, все довольны, хотя репутация чуть и подмочена, ну да ладно, с кем не бывает.

На следующий день звонит заказчик. Вам уже смешно? А мне нет - ехать то к черту на кулички :))
Отвалился тот резистор.

А теперь мы берем 32-х разрядный ARM микроконтроллер, с ядром работающем на частоте 48 Мгц, с оперативной и флеш памятью, с кучей всяких крутых встроенных фич и вообще, по многим параметрам существенно превосходящий, например, бортовой компьютер космических аппаратов Аполлон, которые летали на луну.

И да, кощунственно ставим его, чтобы управлять одним несчастным реле. Почему мы это делаем? Да все просто, ведь этот микроконтроллер, стоит дешевле, чем проехаться один раз на маршрутке (а уж тем более 4 раза на маршрутке и 2 раза на метро, к заказчику и обратно). Потому что использование микроконтроллера во многих случаях позволяет за считанные минуты поменять алгоритм - быстрее, чем паяльник будет греться.

Конечно, микроконтроллеры тоже нужно использовать с умом, ведь можно и под него сделать такую плату, которую не изменить, а без изменения платы часто и алгоритм менять бессмысленно. Тут я поступил следующим образом - разработал универсальную плату с микроконтроллером и минимально необходимым обвязом и сделал 4 эквивалентных разъема(физически один большой). В каждый из разъемов можно воткнуть один из стандартных модулей, всего их на текущий момент более десятка видов. А если вдруг нужно еще больше модулей, то платы без проблем связываются в сеть.



Получилась очень гибкая система. Под каждый подключаемый модуль заготавливается программный код, по сути небольшая библиотека, которая позволяет быстро и удобно работать с модулем, выполняя всю "грязную работу". Остается лишь написать простейший алгоритм работы.

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

И да, если мне нужно управлять одним реле от одной кнопки я ставлю такую плату. И да, у меня ARM микроконтроллер управляет одним реле и меня ничуть это не смущает, ибо в конечном счете мне это дешевле и по времени и по деньгам.

Разумеется, это решение имеет довольно ограниченную область применения и я ни в коем случае, нигде и никогда не утверждаю, что реле должны всегда управляться подобным образом. Речь лишь о том, что в ряде случаев это оправданно.

И конечно, каждое конкретное техническое решение должно быть использовано согласно своим достоинствам и недостаткам для решения задачи. Не бывает всегда "хороших" решений или всегда "плохих".


  • 1
ex_juan_gan May 19th, 2015
Очень хороший пример.

_winnie May 19th, 2015
Как комментаторы старательно доказывают, "надо так, а не так".

nponeccop May 19th, 2015
Ну тут стоит ещё заметить, что микроконтроллеры есть совершенно разные, с любым количеством ног ввода-вывода, функциональностью, оперативкой-быстродействием. В-общем, дискретные элементы теперь практически никогда нет смысла применять.

То есть, при большой партии можно ставить не дорогой армовский, а дешёвый. Со 100 байтами ОЗУ и 5 ногами. С сохранением всей гибкости, описанной в статье.

Автор же просто поставил то, что было в наличии, ввиду единичности изделия и экономии затрат на налаживание процесса софтописательства под новый проц.

А так микроконтроллеры сейчас повсеместно, в пылесосах-холодильниках-микроволновках.

Там в комментах, кстати, предлагают управлять не просто АРМом (вместо условной 6-ногой PIC), а целой Ардуиной или даже ПЛК за тыщи баксов.

Edited at 2015-05-19 02:04 am (UTC)

mbr May 19th, 2015
Срочная печать пп минимум тысяч 5. Плюс это надо развести и собрать. Ардуино всяко дешевле вышла бы. Но это не продашь.

sorhed May 19th, 2015
Продашь, если заказчик не разбирается в электронике, а ардуину не видно (можно же взять мини!)

blackyblack May 19th, 2015
В таких случаях ставят не то, что дешевле/целесообразнее, а то, что наиболее массово используется у исполнителя.

nponeccop May 19th, 2015

Я это и имел ввиду в третьем абзаце. Выбирается из того, для чего уже налажен процесс разработки (компиляторы-отладчики-программаторы) и того, что есть в наличии/шаговой доступности (на условном mouser заказывать оптимальный чип никто не будет если есть вариант не заказывать). У человека таким оказался Arm. А могло оказаться какое-то абсурдное лигаси вроде mcs-51 или та же ардуина/PLC. В комментах, собственно, каждый что у него болит - о том и говорит.


lyuden May 19th, 2015
Ну если 9 баксовый компьютер который сейчас на кикстартере действительно поддерживает Debian, я уже вообще не очень понимаю зачем нужны условные 6 ногие PIC, ну кроме может быть областей где энергопотребление критично.

enternet May 19th, 2015
Скорость старта критична везде, юзер не будет ждать три секунды пока там микроволновка дебиан себе загрузит.

nponeccop May 19th, 2015

Ну как же - в массовых изделиях дешевле 9 баксов или там, куда не пролезаем по габаритам и энергопотреблению. Кроме того, ОС не путается под ногами, если её сервисы не нужны. Автор пишет о вытеснении 9-ногих PIC стоногими армами с широким набором встроенной периферии и большим запасом по дрступным ресурсам типа времени и ОЗУ. Но, конечно, если налажено с дебианом то его и ставить.



Edited at 2015-05-19 08:49 am (UTC)

lyuden May 19th, 2015
Ну я имел в виду именно кастомные решения типа описанного в посте, которые нужно собрать руками.

В массовых да. Хотя судя по последним веяниям такое ощущение, что умная пыль будет исполнять тот же Дебиан.

lyuden May 19th, 2015
Я наверное так переформулирую. Может исчезнет ниша между программированием на Verilogе и программированием на высокоуровневых языках. Там где важно энергопотребление и размеры, будет кастомный хардварь, а выше будет уже более или менее полноценный Linux.

nicka_startcev May 19th, 2015
иногда важны габариты/вес. и тогда поставишь и 8-ногую за бОльшую цену.

lyuden May 19th, 2015
А блин. Не заметил что репост :)




Edited at 2015-05-19 03:07 am (UTC)

blackyblack May 19th, 2015
У нас обычно под такие задачи берут какую-нибудь уже имеющуюся плату, и допиливают нужный обвес.

sorhed May 19th, 2015
Ура! Голос разума!

(Нужно сделать арт-проект: помигать светодиодом с помощью суперкомпьютера из Top-500)

ti_ua May 19th, 2015
Если штучное решение - то да. А вот если в серии, от тысячи изделий, то может и нет. Хотя я допускаю сущестование заказчиков, которые захотят третью кнопку на всю серию добавить :)

amarao_san May 19th, 2015
А какая latency будет у ардуины в сравнении с реле? А какая предсказуемость? Я слышал много комплейнов из-за того, что все варианты "а у нас там дебиан" утыкаются в "а у нас там вытесенение процесса в любой момент времени, так что тайминги все идут лесом".

blackyblack May 19th, 2015
На ардуине дебиан штоле? Там AVR какая-то стоит (раньше стояла) и, максимум, РТОС.
Да и заказчика скорее всего плюс-минус полчаса на срабатывание реле допуск устроит.

nponeccop May 20th, 2015
С линуксом есть довольно годный вариант - ставишь многоядерный проц и выгоняешь линукс с части ядер. См. http://stackoverflow.com/a/13585364/805266

Кроме того, миллисекундные тайминги Линукс выдерживать уже в состоянии.

В-общем, со временем эти два механизма допишут, и область применения будет постоянно расширяться.

Ну а до этого будет уже испытанная схема - основной проц с RTOS или без ничего (а может, будет 1 ядро на ногу) и служебный с линуксом для веб-морды, сетевого стека и обновления прошивки. Всё внутри SOC-чипа.

mindfactor May 19th, 2015
Вспоминается старенькая заметочка:
Зарплата программиста, положим, пятьдесят тысяч в месяц.
...
Мегабайт места на диске вам сейчас обходится примерно в треть копейки. Три копейки — десять мегабайт. Чтобы человечеству окупился один (один!) день работы программиста, сэкономить по десять мегабайт должны 100000 (сто тысяч !) человек. Чтобы окупить лишний месяц его работы — два миллиона человек. С быстродействием, как легко догадаться, расклады примерно те же.

_winnie May 19th, 2015
Там не учтено, что стоимость мегабайта для пользователя - это не чисто стоимость диска.

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

Эти мегабайты раскиданы по куче кластеров ЖД, из-за чего неиллюзорно долго запускаются программы.


Edited at 2015-05-19 11:17 am (UTC)

mindfactor May 19th, 2015
Это верно.

Но также не учтено и другое:
В реале один программист уже давно почти ничего не может. Рулят танковые клинья и ковровые бомбардировки сплоченные команды, где кроме непосредственно программистов есть ещё куча народа, непосредственно в создании программы не участвующие: тестеры, архитекторы.
А ещё всем им требуется помещение, мебель, электричество-кондиционирование-канализация, уборщицы, бухгалтерия и так далее.

Так что заявленные цифры можно смело умножать на 20-50.


А ещё позабыты отпускные и больничные ;)

Edited at 2015-05-19 11:20 am (UTC)

_winnie May 19th, 2015
День компании в которой уже нужны уборщицы и архитекторы на один мегабайт конечно тратить бессмысленно.

Но потратить день работы одного человека на оптимизацию размера скачиваемой игры - вполне выгодно и с точки зрения бизнеса, а не только чувства прекрасного (как будто его мало:)

Потратить день компании на то, чтобы инсталлятор флагманского продукта занимал 100 мегабайт, а не гигабайт - скорее всего менеджеры с радостью разменяют день целой компании на это. Помимо частья заказчиков, они себе же работу оптимизируют, так как им каждый в день нужно инсталлировать/собирать разные новые версии программы.


Edited at 2015-05-19 11:37 am (UTC)

mindfactor May 19th, 2015
Я сейчас от хохота лопну !

[утирая слёзы]
Я немножко в курсе за то, как современные онлайн-игры делают. Инсайд у меня, хороший такой. Из самого из подбрюшья.

И реальность с вашими словами соотносится так же, как грёзы юной девы о прекрасном принце с жизнью в рабочих кварталах уральского города.

_winnie May 19th, 2015
Могут быть такие две реалистичные ситуации -

Первая - всем влом что-то исправлять в продукте, потому что зарплата от (микро)продаж не зависит, на жалобы игроков на форуме не обращать внимания, то что игра запускается по две минуты - уже привыкли и не думают, что можно иначе.

Есть вторая - это когда мы видим, что большой инсталлятор или время запуска игры всё-таки жмет, и арт-директор начинает смотреть, все ли текстуры 4096x4096 должны быть таковыми, программисты начинают писать инкрементальный торрент-апдейтер и выкидывать из графа ресурсов лишнее.

Видел оба варианта, и промежуточные (и обратную ситуацию, добавление гигабайта мусора для того, чтобы игра на 2CD была, но при этом не делать лишниее seek - тоже видел).


Edited at 2015-05-19 11:50 am (UTC)

mindfactor May 19th, 2015
ой-вей, реалистичных ситуаций может быть больше.

Например, реальные программисты в корее, причём методов воздействия на них никаких вообще.
А всё остальное - поддержка, продажи, сама инфраструктура и играющие - в РФ.

Там столько и настолько опупительные ситуации на ровном месте может быть, что какие-то жалкие 100 мб в дистрибутиве вообще песчинкой покажутся.

_winnie May 19th, 2015
> Например
Это в точности как раз первая ситуация (" всем влом что-то исправлять в продукте, потому что зарплата от (микро)продаж не зависит, на жалобы игроков на форуме не обращать внимания, то что игра запускается по две минуты - уже привыкли и не думают, что можно иначе.")

mindfactor May 19th, 2015
нет, это совсем другое.

Потому что зп программистов от продаж зависит.
Просто кусочком. тут зависит а тут не зависит.

Поэтому в каком-то месте программисты будут попу рвать на британский флаг, а в другом - вообще на всё наплевать, и тогда попу будут рвать уже другие люди.

  • 1