Микроконтроллер выбрать как


Выбираем микроконтроллер вместе / Habr

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

Тем, кто знает, что на фотографии нет ни одного микроконтроллера — прошу в комментарии, дополнить мой рассказ и тем самым поделиться своим опытом с начинающими. Остальным, непременно под кат!

На мой взгляд чем проще будет каждый этап обучения — тем проще будет дойти до самостоятельного плаванья. Поэтому я считаю, что на начальном этапе следует брать все готовое. Ничего не придумывать самому. Представьте:
вы выбрали контроллер,
проглядели даташит,
развели под него плату,
или нашли ее на просторах интернета,
купили все компоненты(или аналоги если советуемых не было),
запаяли все,
написали первый «hello world»,
собрали программатор, прошили контроллер

И… и ничего не происходит! Что-то не работает, и вы не можете понять что: то ли в пайке ошибка, то ли что-то с программой, то ли в интернете кривая схема, то-ли проблемы с софтом.

Новичка такая ситуация ставит в тупик, знаю это по себе.
Чтобы такого не случилось проще всего сделать первые шаги под чьим-то руководством.

Преимущество простого старта отлично показывает платформа Arduino. Посудите сами: возможности контроллеров совсем не велики, цены на платы огромны, зато огромная поддержка сообщества и все уже готова, любые платы расширения, кучи примеров.
За счет этого и живет платформа!

Давайте посмотрим какой у нас вообще есть выбор! На рынке огромное количество производителей и архитектур. Но выбор на самом деле совсем не велик:
я бы сразу отсек все 8-ми и 16-ти битные архитектуры, кроме PIC и AVR, да иногда производители предлагают отладочные платы и контроллеры по очень заманчивой цене
но я не советую их брать потому, что это малораспространенные архитектуры и на них меньше примеров + пересаживаться на другие контроллеры будет сложнее.
По той же самой причине отсек все 32-х разрядные архитектуры кроме ARM + с ними еще начинаются проблемы с примерами, и они постепенно вымирают.

Арм микроконтроллеры делятся на ARM7, ARM9, Cortex M0, 3, 4.
Седьмые и девятые постепенно замещаюся кортексами и вскоре их тоже не будет.

Итого имеем:
AVR
PIC
ARM Cortex

Про пики сказать много не могу, но по-моему AVR их вытесняет из-за распространенности Arduino.
Но я все-же советовал Cortex, их возможности намного шире, к тому же есть выбор между производителями, а это на мой взгляд большой плюс. Да и существует масса упрощающих жизнь библиотек и даже генераторов кода, которые новичкам позволят не сильно вчитываясь в юзер мануал написать первую программу.

Итак, какие производители представлены у нас?
NXP, ST, Freescale, TI, Luminary Micro, Atmel и много других но поменьше распространенных.

Как выбрать из такого большого количества производителей?
надо выбирать не контроллер а отладочную плату, библиотеки, среду разработки и сообщество.

Сам щупал только NXP, ST и Freescale.

Первые 2 производителя наводнили Москву и другие города России дешевыми/бесплатными отладками — это очень хорошо в том смысле, что всегда есть у кого спросить, есть к кому обратиться.
Также не нужны никакие программаторы — все есть на борту!

Для NXP есть альтернатива от Olimex www.chipdip.ru/product/lpc-p1343.aspx
Есть и минусы: когда захочется расширить их возможности придется искать новую.

Больше всего мне понравилась отлатдка от Freescale, с которой столкнулся на работе.
На мой взгляд это лучший вариант для новичка, но у нее есть один огромный минус:
пока довольно сложно найти в продаже и регионам придется заказывать, но оно того стоит:
Первое и самое важно преимущество: стандартные платы расширения (сначала покупаете стандартный набор, потом докупаете вайфай, сенсоры и тп)

Еще большущий плюс это среда разработки: благодаря Processor Expert можно генерировать код, и море примеров с объяснениями.

Итак подведем итоги:

1 купить Arduino Uno c AVR за 1000р на плате практически ничего нет, зато в продаже множество плат расширения и огромное сообщество

2 купить STM32L-DISCOVERY c M3 за 16.22дол c сенсорными кнопками, USB и маленьким LСD-дисплеем и дебагером на борту

3 купить за 1000р LPCEXPRESSO c M3 с просто выведеными контактами и дебагером на борту

4 купить KWIKSTICK с M4 за 30дол+ доставку с большим сегментным LCD, USB, входом под наушники, динамиком, сенсорными кнопками, литиевой батарейкой, микрофоном, ИК портом, слотом под SD-карту + возможность расширения функционала без пайки и больших вложений. Большой набор библиотек, примеров и хорошая IDE.

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

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

UPD: stm32l-discovery по таким ценам можно купить в Компэле
Kwikstick на сайте freescale

habr.com

Выбор микроконтроллера для создания вашего робота.

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

Микроконтроллер — это вычислительное устройство, способное выполнять программы (то есть последовательность инструкций).

Он часто упоминается как “мозг” или “центр управления” робота. Как правило, микроконтроллер отвечает за все вычисления, принятие решений и коммуникации.

Содержание статьи

Для того, чтобы взаимодействовать с внешним миром, микроконтроллер имеет ряд штырей или выводов для электрического распознавания сигнала. Так сигнал может быть включен на максимум (1/С) или минимум (0/выкл) с помощью инструкции программирования. Эти выводы также могут быть использованы для считывания электрических сигналов.  Они поступают с датчиков или других приборов и определяют, являются сигналы высокими или низкими.

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

Что может делать микроконтроллер?

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

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

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

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

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

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

Какие существуют более специализированные функции микроконтроллера?

Специальное оборудование, встроенное в микроконтроллеры позволяет этим устройствам сделать больше, чем обычный цифровой ввод/вывод, базовые расчеты и принятие решений. Многие микроконтроллеры с готовностью поддерживает наиболее популярные протоколы связи, такие как UART (RS232 или другой), SPI и I2C. Эта функция невероятно полезна при общении с другими устройствами, такими как компьютеры, датчики, или другие микроконтроллеры.

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

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

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

Аналоговые или цифровые?

Какие нужно использовать входные и выходные сигналы зависит от поставленной задачи и условий. Например, если у вас стоит задача просто что-то включить или выключить, то вам достаточно чтобы сигнал на входном контакте микроконтроллера был цифровой. Двоичное состояние переключателя 0 или 1. Высокий уровень сигнала может быть 5 вольт, а низкий 0. Если же вам нужно измерить, например, температуру, то нужен аналоговый входной сигнал. Далее АЦП на микроконтроллере интерпретирует напряжение и преобразует его в числовое значение.

Как программировать микроконтроллеры?

Программирование микроконтроллеров стало более простым благодаря использованию современных интегрированных сред разработки IDE с полнофункциональными библиотеками. Они легко охватывают все наиболее распространенные задачи и имеют много готовых примеров кода.

В настоящее время микроконтроллеры могут быть запрограммированы на различных языках высокого уровня. Это такие языки как C, C++, С#, Ява, Python, Basic и другие. Конечно, всегда можно написать программу на ассемблере. Хотя это для более продвинутых пользователей с особыми требованиями (с намеком на мазохизм). В этом смысле, любой должен быть в состоянии найти язык программирования, который лучше всего соответствуют его вкусу и предыдущему опыту программирования.

Программировать микроконтроллеры становится еще проще, так как производители создают графические среды программирования. Это пиктограммы, которые содержат в себе несколько строк кода. Пиктограммы соединяются друг с другом. В результате создается программа визуально простая, но содержащая в себе большое количество кода. Например, одно изображение может представлять управление двигателем. От пользователя требуется только разместить пиктограмму там, где необходимо и указать направление вращения и обороты.

Разработанные микроконтроллерные платы достаточно удобны в эксплуатации. И их проще использовать долгое время. Они также обеспечивают удобные питание от USB и интерфейсы программирования. Следовательно, есть возможность подключаются к любому современному компьютеру.

Почему не использовать стандартный компьютер?

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

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

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

Как выбрать микроконтроллер правильно?

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

  • Ардуино
  • BasicATOM
  • BasicX
  • Lego EV3
  • и многие другие

Для того чтобы правильно выбрать микроконтроллер задайте себе следующие вопросы:

Какой микроконтроллер самый популярный для моего приложения?

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

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

Есть какие-то особенные требования у вашего робота?

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

Возможно другим контроллерам требуется специфическое оборудование (например, АЦП, ШИМ, и коммуникационный протокол поддержки). Также требования к памяти и скорости, а также число выводов должны быть приняты во внимание.

Какие компоненты доступны для конкретного микроконтроллера?

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

Большинство датчиков и компонентов может взаимодействовать напрямую со многими микроконтроллерами. Хотя некоторые комплектующие предназначены для взаимодействия с конкретным микроконтроллером. Возможно они будут уникальными и несовместимыми другими типами микроконтроллеров.

Что нас ждет в будущем?

Цена на компьютеры резко идет вниз, и достижения в области технологии делают их меньше и эффективнее. В результате одноплатные компьютеры стали привлекательным вариантом для роботов. Они могут работать с полноценной операционной системой (Windows и Linux являются наиболее распространенными).

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

Практическая часть

Для того чтобы выбрать микроконтроллер составим список нужных нам критериев:

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

Этим критериям соответствует модуль EV3 из набора Lego Mindstorms EV3.

Обзор модуля EV3

legoteacher.ru

Как выбрать правильный микроконтроллер для вашего приложения

Добавлено 17 сентября 2019 в 18:14

Сохранить или поделиться

Данная статья продолжает серию «Введение в микроконтроллеры» с обсуждением наиболее важных вещей, которые следует учитывать, когда вы пытаетесь найти лучший микроконтроллер для своего следующего проекта.

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

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

Выбор производителя

Список производителей полупроводниковых устройств, продающих микроконтроллеры, довольно длинный. Тем не менее, я настоятельно вам рекомендую начать с производителя, который уделяет большое внимание своей линейке микроконтроллеров. Это обеспечит вам доступ к множеству полезных ресурсов по разработке – примечания к применению, примеры кода, качественная интегрированная среда разработки (IDE), удобные инструменты программирования, и так далее.

Simplicity Studio, бесплатная IDE от Silicon Labs, предоставляет вам одну среду разработки, которая поддерживает множество различных микроконтроллеров.

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

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

Если ваш опыт разработки на микроконтроллерах всё еще довольно ограничен, я рекомендую выбрать одного из следующих производителей: Texas Instruments, STMicroelectronics, Silicon Labs или Microchip. (Atmel также определенно должен быть включен в этот список, но он был приобретен Microchip в 2016 году.)

Критические параметры

Следующим шагом является определение ваших наиболее важных и специфических требований. Многие виды функциональных возможностей обработки и периферийных устройств будут доступны практически в любом современном микроконтроллере. Например, вам не нужно будет искать MCU, который предлагает базовую последовательную связь, тактовые частоты выше 10 МГц, достаточное количество флеш-памяти и оперативной памяти, внутренний генератор, таймеры общего назначения или встроенный модуль отладки (они часто используют интерфейс JTAG).

В следующих подразделах приведены некоторые примеры «менее стандартных» функций, которые помогут вам сузить список микроконтроллеров, которые могут подходить для заданного проекта.

Цифро-аналоговый преобразователь (ЦАП)

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

Синусоида, сгенерированная 12-разрядным ЦАП, встроенным в микроконтроллер SAM4S от Atmel.

Аналого-цифровой преобразователь (АЦП)

Я только что сказал, что АЦП распространены, и это правда, но стоит отметить, что производительность многих микроконтроллерных АЦП находится в диапазоне от низкого до среднего уровня. Если вам нужен АЦП с необычно высоким разрешением или необычно высокой частотой дискретизации, вам придется сделать это приоритетом в процессе выбора. Несколько лет назад я оказался в подобной ситуации, и, если я правильно помню, ничто не могло сравниться с C8051F060 от Silicon Labs (у него есть два встроенных АЦП, которые могут выполнять 16-разрядное преобразование со скоростью один миллион выборок в секунду).

Тактовая частота

Если вам нужен микроконтроллер, который более совместим с интенсивными вычислительными функциями DSP (цифрового сигнального процессора), вам нужно отдать приоритет устройствам, которые поддерживают высокие частоты процессора. У Silicon Labs есть два 8-разрядных семейства, работающих на частоте 100 МГц, а у STMicroelectronics и Microchip есть высокопроизводительные 32-разрядные микроконтроллеры, работающие на частоте 120 МГц.

Универсальная последовательная шина (USB)

Интерфейс USB является доминирующей формой последовательной связи. Я обнаружил, что это очень эффективный способ передачи данных между встраиваемым устройством и компьютером, и в контексте бытовой электроники он незаменим. Если вы ищете компактный, простой метод включения USB соединения в вашу систему, я рекомендую вам сосредоточиться на микроконтроллерах, которые включают в себя USB модуль. Я использовал EFM8 Universal Bee от Silicon Labs, а Microchip предлагает 8-разрядные, 16-разрядные и 32-разрядные USB микроконтроллеры.

Емкостной датчик прикосновения

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

Интерфейс на емкостных датчиках на базе микроконтроллера MSP430 от Texas Instruments

Стоимость и размер корпуса

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

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

Оценка аппаратного обеспечения

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

Заключение

Надеюсь, что данная статья поможет вам ориентироваться в иногда пугающем процессе выбора одного микроконтроллера из числа тысяч, доступных на рынке. После того, как мы выбрали микроконтроллер, пришло время начать чтение технического описания (datasheet, «даташит») и проектирование системы, и мы рассмотрим эти темы в следующих статьях.

Оригинал статьи:

Теги

MCUMicrochip TechnologySilicon LabsSTMicroelectronicsTexas InstrumentsВстраиваемые системыМикроконтроллерПроектирование встраиваемых систем

Сохранить или поделиться

radioprog.ru

Карпутер 3. Выбираем микроконтроллер — DRIVE2

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

Как выбирают контроллер?

Во-первых, по личным предпочтениям. Кому-то нравится одна архитектура, кому-то другая. У кого-то уже есть опыт с одними микроконтроллерами и ему лень изучать другие … Но я считаю, что раз опыта и предпочтений нет, поэтому — stm32. Вам на данном этапе все равно, а мне потом спасибо скажете.

Во-вторых, по скорости. Если задача сложная, то думаю понятно, что работающий на 72МГц контроллер обгонит работающего на 16МГц (грубо — у кого больше литраж у двигателя, тот быстрее разгонится или больше увезет). А если устройство работает от батареек, то наоборот, устройство работающее на 16МГц легко даст фору работающему на 72х (опять же, чем больше литров, тем чаще на заправку надо будет ездить). Но на данном этапе нам совершенно все равно, какая скорость у контроллера — для нас подойдет любая.

И наконец, по числу портов и их возможностями. Все порты делятся на два типа: цифровые и аналоговые. Цифровые оперируют уровнями типа "есть сигнал" и "нету сигнала", а аналоговые — "какой уровень у сигнала?". Говоря другими словами — кнопки, выключатели и прочие переключатели — это цифровые, а всякие регуляторы, измерители и прочее — аналоговые. На каждую кнопку, релюшку или измеритель надо по одному порту (конечно, есть куча возможностей, как от этого уйти, но пока нам этого не надо). И крайне рекомендую при выборе зарезервировать пару портов под всякие доделки и внезапно всплывшие идеи.

Ладно, хватит разговоров, пора выбирать то, на чем делать будем, а то очень охота в магазине денег потратить, пока еще есть возможность.

Что будем делать-то? В смысле для чего мы все это затеяли? Давайте начнем с простого. Пусть будет система автоматического включения света в машине. Как пример использования: садимся в машину, включаем зажигание, заводим машину и через некоторое время наш контроллер включает фары. Выключили зажигание — все выключилось. Сплошные бонусы: стартеру легче крутить двигатель — фары не отбирают лишних ампер и вам не надо будет помнить о включении фар.

Какой будет алгоритм работы?

1. Измеряем напряжение бортовой сети
2. Напряжение меньше 13В? если да, иди на п.1
3. Подождать 5 секунд.
4. Включить фары.

Все, никаких заморочек. Просто и совсем не страшно. Как видно, нам потребуется всего 2 порта: один аналоговый для измерения напряжения в сети и один цифровой, для управления релюшкой фар.

(отступление) Не хотите фары включать? Ну тогда например можно автоматически включать и выключать компрессор в пневмосистеме. Или в зависимости от температуры включать нагреватель или вентилятор. В общем, подойдет любой вариант "измерил что-то и как это что-то достило такого-то уровня — включил или выключил нечто".

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

Теперь готовимся скачать много из сети. Для начала нам нужна программа STM32CubeMx. (Все поисковики ее легко находят, но вот прямая ссылка www.st.com/web/catalog/to…533/PF259242?sc=stm32cube там мотайте страницу в самый низ и справа будет маленькая красная кнопочка Download).

Зачем нужна эта программа? Как я писал в первом посте, STM32 имеют один, но очень большой и неприятный минус — очень сложно начать с ними работать. В этих микроконтроллерах очень много возможностей и вариаций, поэтому даже просто запустить его составляет очень большую проблему. Команды инициализации, предназначенные для одной серии, не подходят для другой. Один и тот же порт может выполнять разные функции на разной частоте, причем все это настраивается в четырех или пяти местах. В общем, реальный кошмар после атмеловских контроллеров и 99% причин неработащих программ.

Вот и придумали этакий "генератор кода инициализации", когда можно мышкой не торопясь повыбирать порты и их функции. При этом идет одновременный контроль правильности использования порта и непересечение его с другими функциями. В общем, скачивайте, распаковывайте и запускайте программу (может потребовать java, так что тоже ставьте). Как ставить программы, нажимая next, я рассказывать не буду :)

Перед вами откроется очень информативное окно. New Project — это создать новый проект, Load Project — загрузить старый, который редактировали раньше. Нам естесственно надо выбрать создать новый. И тут …

И тут перед вами откроется окно, в котором собрана вся (почти) линейка микроконтроллеров. Первая вкладка — MCU Selector позволяет выбрать подходящие контроллеры в их голом виде. Слева в табличке функционал, справа — подходящие контроллеры. Скажем, нужно нам в нашем проекте использовать одновременно ethernet и часы реального времени, так значит ставим галочки и получаем, что нам подходят 88 микроконтроллеров из 590 (на момент написания). Но эта вкладка для продвинутых пацанов.

Нам нужна следующая вкладка, которая называется Board Selector. Тут уже можно выбрать готовые платы, со всем распаянным. Сразу рекомендую нажать кнопку ">>", которая будет показывать изображение платы.

Механизм тот же самый — слева выбираем что хочется, а справа получаем список того, где это есть. Потом открываем веб-сайт ближайшего магазина электроники и смотрим на наличие и цену. Лично у меня есть платы STM32L100 и STM32F3 (именно она изображения на скриншоте). Так как F3 мне нравится больше, то и в дальнейшем я буду использовать именно эту плату. Но повторюсь, вы можете использовать любую плату или процессор — главное, что бы он вам подошел по характеристикам.

Выбрав плату или процессор, жамкаем на кнопоку ОК в самом низу. Компьютер немного подумает и потом выдаст примерно вот такую картинку.

Слева будут всякие возможности, которые умеет процессор, а справа — как и на что распределены ножки и процессора. Если вы вышли сюда из выбора плат, то программа сама показала, что на плате куда подключено. Как видите, все ножки помечены разными цветами.

Желтенькие и светлозеленые — ножки, назначение которых изменить нельзя. Питание, земля и прочие подобные ножки.
Оранживенькие — ножки, на которые повешено то, что есть на плате и что можно либо отключить, либо заиспользовать. У меня это кварцевые резонаторы, гироскоп с компасом, USB порт и так далее.
Зелененькие — это ножки, на которые тоже повешено то, что есть на плате, но это ТО — кнопки, светодиодики и прочее. Грубо говоря, отличие только в сложности с точки зрения контроллера. Таким же цветом будут обозначаться и ножки, которые вы выделили для вашего проекта.
Серенькие — свободные ножки, которые можно использовать.

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

Как менять назначение ножек? Есть два способа. Первый — это просто мышкой ткните на ножке. Вот для примера я ткнул на ножке, которая у меня подключена к голубой кнопке.

Как видите, эта ножка может выполнять аж 17 функций, но сейчас она работает как GPIO_Input (я ниже объясню, что это значит).

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

Как видим, у функции вообще горит желтый предупреждающий знак, который показывает, что что-то с ней не то. Открыв ее, можно увидеть подсвеченным красным подфункцию. В данном случае это IN1. Подведя мышку к красному, можно узнать, что с чем конфликтует. В данном конкретном случае можно увидеть, что 1й канал 1го аналого-цифрового преобразователя конфликтует на ножке процессора PA0, которая уже стоит в режиме GPIO_Input. Белиберда, да? Но ничего. Для примера можно обидеться и раз нам не дают использовать IN1, выбрать IN3, что бы это не значило. И обратите внимание, на рисунке процессора справа одновременно начнет показываться как "занятая" соответствующая ножка процессора. В нашем случае это PA3, в левом нижнем углу.

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

Итак, как же понять, какие функции можно повесить на ножку? Что бы не забивать голову, я опишу только наиболее нужные и часто используемые функции. Назначение других можете узнать сами, когда прижмет (но 90% это никогда не понадобится).

Итак, что можно выбрать?

ADC — Или АЦП, аналогово-цифровой преобразователь. Показывает значение напряжения. У большинства АЦП есть каналы, к которым он может подключаться. А каналы напрямую подключены к ножкам. То есть когда вам надо измерить напряжение на 1,2 и 3й нож

www.drive2.ru

Разработка электроники. О микроконтроллерах на пальцах / Habr

Задумывая технологический стартап, вы совсем не обязаны быть асом в электронике, гораздо больше шансов на хорошую идею имеет узкий специалист со знанием основ маркетинга, но, даже заказывая кому-то разработку, ориентироваться в возможностях современной элементной базы и представлять цену решения необходимо обязательно. Иначе можно потребовать невозможного, либо получить устройство с завышенной себестоимостью на устаревшей элементной базе.
Под катом попытка кратко и просто рассказать о возможностях современных микроконтроллеров людям от них далёким. Для тех, у кого есть идея нового электронного устройства, но отсутствует представление о том, что такое микроконтроллер. Те, кто хочет сделать первый шаг от занимательных экспериментов с платформой ардуино к проектированию собственных устройств, также могут найти в ней простые, но полезные советы. Я старался, не останавливаясь на технических подробностях, для этого и книги не достаточно изложить суть и дать несколько простейших, но полезных советов по схемотехнике, чтобы предостеречь от элементарных ошибок начинающих.

Краткое содержание статьи:


Как микроконтроллеры завоевали мир
Архитектура ARM — сегодняшний лидер рынка микроконтроллеров
Конкуренция с младшими братьями
Об укладке асфальта, пользе сна и его разновидностях
Совсем коротко о технологии изготовления и о том, как появляются серии микроконтроллеров
Периферия простейшего ARM микроконтроллера за пол бакса
Самый дешёвый способ получить дополнительные функции
А что добавит переход на Cortex-M4, кроме возросшей в пару раз цены?
Cortex-M7 — когда хочется большего…

Защита кода, возможность его обновления и многообразие помогли микроконтроллерам завоевать мир

Любой умный прибор требует управления. В большинстве случаев сегодня этим занимаются микроконтроллеры — чипы, которые совмещают в себе микропроцессорное ядро, память и периферийные модули, отвечающие за связь с остальными компонентами устройства и внешним миром.

Микроконтроллеры — мастера на все руки. Один микроконтроллер способен заменить десятки специализированных микросхем, которые были бы необходимы для выполнения требуемых функций в случае, если бы роль вычислителя занимал микропроцессор.

Одно из неоспоримых преимуществ микроконтроллера — программа, под управлением которой он работает, скрыта внутри его корпуса (в секции под названием “память программ”) и очень хорошо защищена от взлома, конечно, в случае, если разработчик микрокода об этом позаботился, активизировав встроенные механизмы защиты. Таким образом, вы получаете защиту интеллектуальной собственности настолько большую, насколько это возможно в наши дни.

Что нельзя взломать — то можно скопировать. Зачем пытаться считать код, встроенной в микроконтроллер программы, с помощью дорогостоящих хитроумных приспособлений, если проще и дешевле найти профессионала, который может написать его заново? Возможно результат будет даже лучше, а функционал богаче чем у прототипа. Да это стоит денег, но содержание FLASH памяти сегодняшних микроконтроллеров настолько хорошо защищено, что попытки грубого “взлома” обойдутся ещё дороже. Кроме того, решается проблема интеллектуальной собственности, а вы, вместе с исходными кодами программы, получаете возможность развивать и совершенствовать своё устройство.

Память программ, в современных универсальных микроконтроллерах, является перезаписываемой, причём процесс перезаписи можно повторять не один десяток тысяч раз. Напрашивается использование этого факта для обновления программного обеспечения с целью устранения найденных в нём ошибок или расширения функций уже работающего устройства. Это достаточно просто реализовать — добавив в программу специальный участок кода под названием “бутлоадер”, вы получаете возможность обновлять программное обеспечение вашего прибора различными способами: в пункте сервисного обслуживания (если устройство имеет специальный, скрытый внутри корпуса от посторонних глаз, разъём), подключив к компьютеру по USB, через сетевой или даже беспроводной интерфейс. Главное, предусмотреть в приборе необходимую для этого периферию. Предоставляя возможность обновления ПО, всегда следует думать о безопасности, если этот процесс недостаточно защищён, мало того, что злоумышленники могут похитить ваш код, они могут модифицировать его и использовать в своих не исключено, что коварных целях. Например, взять под контроль вещи вашего “умного дома” или шпионить с помощью, установленной вами же у себя дома, WEB камеры.

Архитектура ARM — сегодняшний лидер рынка микроконтроллеров

Со времён Царя Гороха микроконтроллеры принято разделять по разрядности данных, над которыми они проводят операции. В подавляющем большинстве случаев, сегодня, в новых разработках, стоит останавливать свой выбор на 32 битных микроконтроллерах с ядром АRM. Существует огромное количество их модификаций и всегда можно подобрать экземпляр, наилучшим образом подходящий для решения вашей задачи. В зависимости от набора функций и производительности, цена чипа может составлять от десятков центов до десятков долларов.
Микроконтроллеры(MCU), в зависимости от архитектуры вычислительного ядра, принято разделять на крупные семейства. На сегодняшний день, для разработок устройств малой и средней сложности, наиболее популярны микроконтроллеры c ядрами от Cortex-M0 до Cortex-M7. Чем больше цифра, тем больше вычислительные (и не только) возможности, цена и максимальное энергопотребление. Не последнюю роль в популярности ARM сыграла преемственность архитектуры. Разработчик может с минимальными издержками модифицировать программный код своих предыдущих наработок, переходя от микроконтроллеров одного производителя к чипам другого и мигрируя между ядрами с разной производительностью.
Конкуренция с младшими братьями

Однако ARMы «рулили» не всегда. Я хорошо помню времена, когда абсолютными лидерами рынка были 8 битные микроконтроллеры и, с занятых позиций, их безуспешно пытались оттеснить 16 битные коллеги, но, по иронии судьбы, удалось сделать это только 32 битным старшим братьям. Так сложилось, что к моменту их появления, технологии изготовления чипов сильно удешевили интеграцию в них больших объёмов FLASH памяти. Воспользовавшись удобным случаем, программисты стали переходить с ассемблера на язык более высокого уровня — Си, структура которого отлично ложилась на 32 битную архитектуру. В результате 32 битные микроконтроллеры выполняли вычисления гораздо быстрее своих 8 и 16 битных коллег, но была одна проблема — у них был выше ток потребления.

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

Известно, что средний ток потребления вычислительного ядра микроконтроллера существенно увеличивается с поднятием его тактовой частоты. Поначалу 8 битные модели микроконтроллеров отличались заметно меньшим потреблением при сходной частоте и, кроме того, были способны работать от низкой тактовой частоты, вплоть до 32 кГц.

Энергопотребление микроконтроллеров сильно зависит от тактовой частоты ядра и периферии, чтобы её регулировать, для генерации стали использовать, широко применявшийся в радиопередающих устройствах, узел формирования тактовой частоты на основе ФАПЧ. Это позволило в широких пределах изменять тактовую частоту, не меняя задающий кварцевый резонатор. Периферийным модулям совсем не обязательно иметь такую же тактовую частоту, что и вычислительному ядру. Чтобы снизить их энергопотребление, частоту на них стали подавать через делители с программно-регулируемым коэффициентом деления. Ввели возможность отключать неиспользуемые модули. Эти меры сильно уменьшили энергопотребление, но оно по прежнему оставалось существенно больше, чем у 8 битных.

На короткое время сложился паритет — 32 битные MCU захватили нишу топовых приложений, а 8 битные уверенно удерживали позиции в устройствах, для которых было важно низкое энергопотребление. Он сохранялся до тех пор, пока 32 битные MCU не освоили в совершенстве «импульсный» режим работы.

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

Об укладке асфальта, пользе сна и его разновидностях

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

Понаблюдайте за строительными рабочими которые кладут асфальт. Они резко активизируют свою работу, когда пришёл грузовик с новой порцией асфальта, а после его укладки снижают темп. Так и микроконтроллеры умеют повышать и снижать частоту тактирования ядра. Однако, им это даётся не так просто, как рабочим — одновременно изменится и частота работы всей внутренней периферии, поэтому, чувствительные к этому её части придётся перенастраивать.
Не проще ли, выполнив быстро всю работу, немного поспать. Зачастую, да. Причём виды сна микроконтроллеров отличаются ещё более драматично, чем у человека.

Можно просто вздремнуть. В этом случае наш чип всегда наготове и как только зазвенел будильник таймера или его потревожило внешнее прерывание, он просыпается практически мгновенно. Как человек во время дремоты может снять напряжение, но не выспаться толком, когда тебя постоянно дёргают, так и микроконтроллер может снизить своё энергопотребление в этом режиме “всего” раз в 10, называют этот режим SLEEP.

Лучший способ хорошо выспаться — раздеться, лечь в постель, задёрнуть шторы на окне и включить будильник. Однако, после такого сна, уже моментально в работу не включишься. Придётся, как минимум, предварительно ополоснуться холодной водой и одеться. Есть такой режим и у микроконтроллера, когда он ограничивает количество внешних раздражителей и выключает основной тактовый генератор. Это режим STOP. В нём можно уменьшить потребление в 1000 раз, но и на выход из него уже потребуется существенное время.

Теперь, представьте себе, что вы перед сном выпили изрядную дозу снотворного, отключили будильник и телефон, закрыли все окна и двери. Это будет режим STAND BY. Вывести из такого режима микроконтроллер можно только с помощью особых выводов и большая часть памяти о том, чем он занимался перед таким сном будет потеряна навсегда, придётся начинать работу заново. Зато находясь в таком режиме MCU потребляет ещё в два раза меньше.

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

Выбирая режим экономии энергопотребления необходимо помнить о последствиях применения:

  • чем глубже сон, тем дольше пробуждение
  • чем глубже сон, тем меньше способов вывести из него микроконтроллер
  • чем глубже сон, тем меньше остаётся информации о предыдущем состоянии микроконтроллера
  • для достижения минимальных заявленных значений, во многих режимах необходимо принимать дополнительные меры, например — отключения периферии
  • для минимизации энергопотребления устройства в целом необходимо грамотно спроектировать схемотехнику всего устройства
  • для минимизации энергопотребления устройства в целом, нужно позаботиться о том, чтобы остальные компоненты и цепи также имели микропотребление в неактивном режиме. Глупо предпринимать огромные усилия для того, чтобы опустить потребление микроконтроллера ниже одного микроампера и, при этом, применять в устройстве дешёвый стабилизатор с током собственного потребления в 100 микроампер но встречается такое сплошь и рядом
  • для успешного использования режимов глубокого сна не только программа, но и схемотехника, должны быть тщательно продуманы, иначе, вместо экономии, можно получить весьма серьёзные проблемы — редко случающееся, зато “мёртвое” зависание устройства по необъяснимой причине, либо слишком частое пробуждение и, как результат, потребление на порядки выше ожидаемого


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

Физически активная часть микроконтроллера, как и подавляющее количество других микросхем, обычно сформирована на пластине монокремния (назовём его, в данном контексте, ЧИП). Чипы занимают очень маленькую площадь, технологически же выгодно производить пластины большого диаметра, поэтому, обычно большое количество чипов, как соты, размещают на одной большой пластине и формируют, в ходе одного технологического процесса. В последствии пластины нарезают на кусочки, получая уже отдельные чипы, которые и помещают в корпуса. Разработка топологии и отладка технологических процессов нового чипа стоит очень дорого, а занимаемое на пластине одним чипом место, как правило, не велико. Производителям выгодно выпускать чипы крупными партиями, но пользователям требуются микроконтроллеры в разных корпусах — кому то важно получить корпус поменьше и подешевле, другому наоборот требуется побольше выводов, чтобы управлять LCD или внешней памятью с параллельным интерфейсом. Производителям выгодно перекрывать все ниши, чтобы клиенты не перебегали к конкурентам, не найдя оптимальной для себя модели.

Очень часто бывает выгодней выпустить крупной партией один универсальный чип и помещать его в разные корпуса, чем запускать десяток различных. У чипов, помещённых в корпуса с малым количеством выводов, часть портов (в данном контексте, под портами будем понимать контактные площадки на поверхности чипа, служащие для общения с внешним миром) просто останутся неподсоединёнными. Часто производители идут дальше — чтобы поднять спрос и цену на микроконтроллеры с большим количеством ножек, они искусственно обрезают функциональность тех, у которых их меньше — отключают некоторые функции, ограничивают объём доступной памяти и т. п.

Так на основе одного чипа формируют серии микроконтроллеров, существенно отличающиеся по объёму памяти и набору периферийных модулей, иной раз и в разы по цене. При этом чипы, в них установленные, могут нарезаться из одних и тех же пластин. Поскольку площадь, на которой размещается один чип, невелика, вклад её в себестоимость конечного изделия также мал и им можно пожертвовать. Становится выгодным отключение дополнительной памяти и других функций, например, на этапе тестирования — либо с помощью однократно программируемых битов конфигурации, либо пережиганием перемычек лазером. Лишь для наиболее массовых изделий имеет смысл для этого создавать слегка изменённый фотошаблон. Причём, совсем не обязательно там будет физически отсутствовать неиспользуемая память, её, опять же, можно просто отключить, удалив перемычки в шаблоне.


Так из одного стандартного дизайна чипа формируется целая серия микросхем.
Периферия простейшего ARM микроконтроллера за пол бакса

Процессорное ядро — это мозг, но, чтобы он не был подобен “сферическому коню в вакууме”, требуются аналоги органов чувств и конечностей.

В микроконтроллере их роль играют выводы на корпусе, к которым внутри корпуса могут подключаются порты(контактные площадки) чипа. В свою очередь, через внутренние коммутаторы, к одному и тому же порту могут подключаться различные периферийные модули.
Для начала рассмотрим периферию одной из простейших серий от ST на основе ядра Cortex-M0 — stm32F03.

Для этой серии имеем следующий набор базовых функций:
Часы реального времени (Real Time Clock или RTC), которые могут запитываться с помощью отдельного вывода и работают от отдельного низкочастотного резонатора. Этот модуль потребляет крайне мало энергии, в случае пропадания основного питания он может часами работать от заряженного конденсатора, или годами от маленькой встроенной в прибор батарейки. Кроме этого, он может служить в качестве будильника, выводя микроконтроллер из состояния даже самого глубокого сна в заранее заданное время.

WatchDog — сторожевая собака мешающая микроконтроллеру заснуть навсегда, например, свалившись в бесконечный цикл или перейдя по несуществующему адресу. Его принцип работы прост. Программист настраивает таймер защиты от “зависания” на определённый период времени, допустим на секунду, и запускает его. Затем он расставляет, в выбранных им местах программы, короткие участки кода, которые перезапускают таймер с нулевого значения. Если за секунду не произошло ни одного сброса таймера, WatchDog считает, что с программой что-то не так и устраивает микроконтроллеру перезапуск. Программа начинает работать с начала, причём существует возможность определить являлся ли инициатором ресета WatchDog и учесть этот факт при запуске.

Универсальные цифровые входы-выходы (General Purpose Input-Output GPIO) — это самая распространённая функция, которую поддерживают большинство выводов микроконтроллера. Они могут конфигурироваться либо как входы, либо как выходы.

Рассмотрим работу в качестве входа. Если напряжение на входе микроконтроллера меньше некоего порога (как правило близкого к половине питания), то оно воспринимается как логический ноль, в противном случае как 1. Цифровые входы обычно имеют очень высокое входное сопротивление, поэтому, если их оставить не подключенными, их состояние может скакать из нуля в единицу и обратно, под действием наводок электромагнитных полей. Для того, чтобы этого не происходило, существуют специальные режимы, когда внутри чипа вход соединяется через сопротивление 20 — 50 КОм с плюсом питания микроконтроллера (pull-up) или с минусом (pull-down).

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

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

На рисунке выше изображён участок схемы, спроектированного мной устройства (спутникового модема), с элементами простейшей защиты портов микроконтроллера. X4 — разъём для внешних коммуникаций. Нас интересуют контакты 5-7, к которым присоединяются тревожные кнопки. Сигналом тревоги служит замыкание на землю, поэтому, в нормальном состоянии, на портах должно присутствовать напряжение питания микроконтроллера, что и обеспечивают резисторы R24-R26, номиналом 1 КОм. Супрессоры VD4-VD6 ограничивают напряжение на уровне 5 вольт, это допустимо потому, что применяемый мной микроконтроллер, хотя и питается напряжением 3,3 вольта, но имеет порты толерантные к напряжению 5 вольт. Резисторы R29-R31 на 100 Ом.
Подобная защита спасёт порты вашего микроконтроллера от внешних перенапряжений. У некоторых микроконтроллеров отдельные порты не боятся напряжений, превышающих их напряжение питания. Так у многих микроконтроллеров STM32Fxx почти все порты будучи сконфигурированными как цифровые могут работать с 5 вольтовыми цепями, но если они работают в аналоговом режиме, например в качестве входа АЦП, теряют эту способность и это необходимо учитывать при разработке схемы.

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

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

Используя порты микроконтроллеров в качестве выходов, также стоит свериться с даташитом. Отдельные порты могут иметь разное ограничение по максимальному току, который от них можно получить не опасаясь выхода их строя — нагрузочную способность. Кроме этого, сам чип имеет максимальную нагрузочную способность всех выходов в сумме, которую не следует превышать.
Последнее, о чём хочется упомянуть, выходные порты ARM микроконтроллеров не реагируют на программные инструкции мгновенно, как у 8-битных микроконтроллеров. Они управляются через шину, и их быстродействие зависит от частоты тактирования соответствующего узла, которую можно менять программно. Если вы хотите быстрой реакции, позаботьтесь об увеличении этой частоты, если важнее уменьшить энергопотребление, наоборот выберите менее скоростной режим.


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

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

Интерфейсы обмена данными Различные микроконтроллеры данной серии могут иметь по нескольку наиболее распространённых интерфейсов, сильно облегчающих общение с другими чипами и внешним миром:

  • USART — асинхронный последовательный порт, часто использующийся для связи с компьютером там он называется COM или RS232, модемами и другими устройствами
  • SPI — высокоскоростной интерфейс, который имеют очень многие чипы, например внешняя память
  • I2C — двухпроводной интерфейс, разработанный для общения с датчиками и другой периферией на небольшом расстоянии и небольших скоростях обмена. Большой его плюс заключается в том, что одновременно к одной шине можно подключить десятки различных устройств

Все эти интерфейсы несложно реализовать программно с помощью обычных GPIO, но они будут работать гораздо медленнее и отнимать много ресурсов вычислительного ядра.

Аналого-цифровой преобразователь АЦП или ADС на котором придётся остановиться подробнее.

Чрезвычайно полезный модуль, который способен измерять напряжение аналоговых сигналов. Оценивает он их в долях от величины опорного источника сигнала, в нашем случае это напряжения питания аналогового модуля микроконтроллера, которое может быть равным или немного ниже основного напряжения питания чипа. Теоретическая точность работы АЦП зависит от его разрядности. В современных микроконтроллерах чаще всего применяется 12 разрядный АЦП последовательного приближения, реже 10 и как экзотика встречается 16.

При питании 3 вольта 12 разрядный АЦП микроконтроллера будет иметь разрешающую способность 3/4096=0.00073 Вольта — лучше одного милливольта.

Но на практике достичь этого идеала бывает не просто.

Подробности для начинающих разработчиковНа практике всё бывает далеко не так красиво и точность измерений может снижаться по многим причинам. Ниже перечисляю основные, хорошо известные любому опытному электронщику, а также простые но эффективные способы сведения их пагубного влияния до минимума
нестабильность напряжения источника питания АЦП
  • применять для питания MCU линейные стабилизаторы с хорошими параметрами
  • применять для питания аналоговой части MCU высокостабильные источники опорного напряжения

импульсные помехи по питанию АЦП
  • подключать аналоговое питание к цифровому через простейшие фильтры низкой частоты — подавать питание на аналоговую часть MCU через индуктивность и в непосредственной близости от входа микроконтроллера устанавливать керамический конденсатор с диэлектриком XR7 ёмкостью 100 нанофарад, а ещё лучше, параллельно ему включить танталовый конденсатор с ёмкостью в одну — две микрофарады.

импульсные помехи на входе АЦП
  • пропускать входной сигнал хотя бы через простейший ФНЧ, состоящий из резистора и конденсатора. Для борьбы с помехами от передающих радиотрактов и короткими импульсными помехами иногда достаточно одиночного конденсатора с диэлектриком NP0 ёмкостью в несколько десятков пикофарад, установленного между входом и землёй, в непосредственной близости от входа АЦП
  • не экономить на блокировочных конденсаторах, по крайней мере самого микроконтроллера, устанавливать их в непосредственной близости от каждого вывода питания и в других местах, рекомендованных производителем, рекомендованного им номинала
  • тщательно выбирать месторасположение компонентов и соблюдать правила трассировки цепей питания и особенно “земли”, в идеале аналоговая и цифровая земли должны соединяться в одной точке — рядом с выводом аналоговой земли микроконтроллера

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

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

От цепи VBUT питается вся цифровая часть микроконтроллера. На всякий случай привожу номиналы элементов: R5-10 Ом, С10 0.1 мкФ, без индуктивностей L1 и L2 BLM18PG471SN1D в большинстве случаев можно обойтись.

Ещё один любопытный пример из моей практики. В плате, на которой размещалось большое количество высокопотребляющих чипов ASIC, необходимо было измерять их температуру. Самый простой и дешёвый способ — использование высокоомных термисторов. В качестве фильтров я применил конденсаторы достаточно большой ёмкости, воспользовавшись тем фактом, что температура меняется сравнительно медленно. Для оцифровки звука такой фокус однозначно бы «не прокатил».

Осталось упомянуть ещё одну важную особенность АЦП, характерную для микроконтроллеров. Собственно, модулей АЦП в нём, как правило, один или два, а вот входов может быть много. В описываемой серии модуль 1, а входов может быть до 16. Как же так? Очень просто, входы подсоединены к нему через коммутатор. Если вы собираетесь измерять напряжение с 10 входов, то должны организовать цикл — последовательно переключить коммутатор к каждому из 10 входов и сделать измерение. Это необходимо учитывать, рассчитывая времена измерения. В данной серии АЦП, теоретически, способно сделать измерение за 1 микросекунду. Получается, что полный цикл 10 измерений у вас займёт точно больше 10 микросекунд!


Система прямого доступа в память ПДП или DMA — ещё одна архиважная вещь. Этот модуль позволяет пересылать данные от периферии в память или наоборот.

Например, с его помощью вы можете выделить участок памяти для хранения данных, приходящих из АЦП и сделать из него кольцевой буфер. Далее запускается АЦП в режиме считывания данных через равные промежутки времени. Используя механизмы DMA, считанные данные будут, без участия ядра, самостоятельно, байт за байтом, помещаться в выделенный буфер. Когда буфер будет полностью заполнен, ядро получит сигнал и приступит к их программной обработке, а система DMA начнёт процесс загрузки сначала. Поскольку DMA имеет несколько каналов, то никто не мешает реализовать для нашего случая автоматический вывод на USART данных из буфера. В результате мы получим, работающий без использования ядра процесс передачи считанных с АЦП в USART, и не простая работа программиста по конфигурации DMA окупится сторицей.

Модуль широтно-импульсной модуляции ШИМ или PWM, в силу ограниченности статьи не будем останавливаться на нём подробно, отмечу только, что это крайне полезная и широко используемая функция, с помощью которой возможно управлять яркостью светодиодов, скоростью вращения двигателей, рулевыми машинками, конструировать интеллектуальные DC-DC преобразователи и даже звук синтезировать.

Что можно получить, добавив 30 центов?

Переход на Cortex-M0+. Самый дешёвый способ получить дополнительные функции

А какие дополнительные плюшки предлагает микроконтроллер новейшей серии с ядром чуть посовременнее Cortex-M0+, при стоимости на 20-50 центов дороже аналогов в рассмотренной выше серии по корпусу и количеству выводов?

Таблица отличий между сериями

  • в два раза увеличилась максимальная тактовая частота
  • с 2 до 1.7 вольт понизилось минимальное напряжение питания
  • АЦП способно работать в два с половиной раза быстрее
  • появились два канала 12 битного цифро-аналогового преобразователя. Это крайне полезная функция, с помощью которой возможно формировать на выводах сигнал заданного напряжения с точностью лучшей чем 1 мВ, например сигналы произвольной формы в звуковом диапазоне частот
  • появились компараторы — устройства для сравнения величин двух аналоговых сигналов, это бывает полезным скажем для определения момента возникновения перегрузки по току
  • добавлен USB интерфейс, посредством которого можно подключать устройства к компьютеру. Особый интерес вызывает наличие поддержки опций управления питанием для реализации USB type3-C совместимого интерфейса. О нём я рассказывал в одной из своих статей на Хабре
  • появился ускоритель AES для процедур 256 битного шифрования/дешифрации
  • UART получил возможность работы в режимах сна и аппаратную поддержку протоколов LIN (простая сеть, широко используется в автопроме), IRDA (протокол передачи данных посредством инфракрасных светодиодов, вспомните телевизионные пульты), SIMcard…
  • расширены возможности таймеров и модуля PWM
  • верхняя граница температурного диапазона работы поднялась до 125 градусов
  • увеличена надёжность работы за счёт расширения режимов перезапуска при возникновении проблем с питанием
  • добавлен “честный” аппаратный генератор случайных значений — полезная функция в криптографии

Ну что же, для многих применений незначительная добавка в цене себя вполне окупает, поскольку можно отказаться от перехода на более дорогостоящие микроконтроллеры старших модельных рядов.
А что добавит переход на Cortex-M4, кроме возросшей в пару раз цены?

  • Максимальная тактовая частота вырастает уже до 80 МГц
  • Появился блок для ускорения вычислений с плавающей точкой
  • Ясное дело, максимальная встроенная память увеличилась
  • Модели с количеством ног 100 и более поддерживают работу с внешней статической памятью
  • USB научился работать в режиме HOST
  • Появился контроллер CAN интерфейса. Это очень перспективный интерфейс разработанный для высоконадёжных приложений. Своё победное шествие он начал с автомобильной промышленности и уже почти 20 лет ведёт затяжную войну с давно устаревшим RS-485 в крайне консервативной отрасли промышленной автоматизации.
  • Появился интерфейс для подключения SDcard. Очень полезная функция — добавляете в своё устройство держатель за 50 центов и получаете съёмный носитель размером в десятки Гигабайт! С большинством карт удаётся работать и по обычному SPI, но намного медленнее
  • Добавили встроенный Операционный Усилитель с большим разнообразием режимов работы. Именно благодаря этой и предыдущей функциям, для своего последнего проекта беспроводного стетоскопа, пришлось остановить выбор на M4 вместо M0+. В результате появилась возможность управлять усилением сигнала с MEMS микрофона и сохранять десятки часов аудиозаписей работы сердца на SD карте
  • Криптомодуль научился аппаратно считать HASH функции.
  • Контроллер сенсорных приложений усовершенствован и теперь поддерживает уже не только кнопки, но и элементы прокрутки

Cortex-M7 — когда хочется большего...

В подавляющем количестве проектов возможностей предоставляемых вышеописанными ядрами достаточно, но случаются и исключения. Лично со мной такое случалось всего пару раз, причём лишь один раз по действительно уважительной причине — требовалась высокая производительность для подготовки данных для ASIC, контроллер Ethernet и шина CAN-FD c повышенной скоростью обмена.

Если на уровне универсальных микроконтроллеров с ядрами Cortex 4 и ниже, на мой субъективный взгляд, по параметру цена/функциональность сейчас лидирует фирма ST, то в области более высокопроизводительных чипов она уступает лидерство ATMEL, вернее, теперь уже недавно поглотившему его MICROCHIP. Поэтому я остановил свой выбор на серии ATSAMV71, стоимостью от 6 долларов.

Помимо вышеописанного (контроллер Ethernet и шина CAN-FD), по большому счёту, мы получаем, существенно увеличивающее производительность ядро с ускорителем операций, работающее на тактовой частоте до 300 МГц, интерфейсы для подключения видеоматрицы и поддержку динамической памяти.

В заключении попрошу имеющих опыт общения с микроконтроллерами попрошу выбрать подходящий ответ на вопрос.

habr.com

Советы начинающим программистам микроконтроллеров / Habr

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

1. Многие начинающие электронщики не знают с чего начать, поэтому спрашивают совета. Большинство бывалых радиолюбителей ответят, что начни собирать какую нибудь схему. Естественно в голове любого начинающего сразу мелькает LCD дисплей с jpeg картинками, какой нибудь mp3 плеер или часы, без малейшей мысли о том, что не имея базовых знаний это неподъемная задача.

Я категорически против такого подхода. Обычно это все заканчивается — либо ничем, либо забитые форумы с мольбами помочь. Даже если кому то помогают, то в 90% он больше никогда не всплывет на сайтах по электронике. В остальных 10% он так и продолжает заливать форумы мольбами, его будут сначала пинать, затем поливать грязью. Из этих 10% отсеивается еще 9%. Далее два варианта: либо таки до глупой головы доходит и все же происходит goto к началу, либо в особо запущенных вариантах, его удел копировать чужие конструкции, без единой мысли о том как это работает. Из последних зачастую рождаются ардуинщики.

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

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

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

2. Перед решением задачи, дробите ее до абсурда вплоть до «припаять резистор», это помогает, проверено. Мелкие задачи решать куда проще. Когда большая задача разбита на кучу мелких действий, то все что остается — это выполнить их. Могу привести еще один годный совет, хоть он вам и покажется бредовым — заведите блокнотик и пишите в него все что собираетесь сделать. Вы думаете, итак запомню, но нет. Допустим сегодня у меня хорошее настроение и думаю о том, как собрать плату. Запиши план действий: сходить купить резистор, подготовить провода, сделать крепление дисплея. Потом все забудешь, откроешь блокнотик и смотришь — ага сегодня настроение попилить и построгать, сделаю крепление. Или собираешь ты плату и уже осталось допаять последний компонент, но не тут то было резисторы кончились, вот записал бы перед тем как паять, то вспомнил.

3. Не пользуйтесь кодогенераторами, нестандартными фичами и прочими упрощалками, хотя бы на первых этапах. Могу привести свой личный пример. Во времена активного использования AVR я пользовался кодогеном CAVR. Меня он полностью устраивал, хотя все говорили, что он кака. Звоночки звенели постоянно, были проблемы с библиотеками, с синтаксисом, с портированием, но было тяжело от этого отказаться. Я не разбирался как это работает, просто знал где и как поставить галочки.

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

По поводу всех улучшалок и упрощалок, было одно очень хорошее сравнение, что они подобны инвалидным коляскам, которые едут по рельсам, можно ехать и наслаждаться, но вставать нельзя, куда везут — туда и приедешь.

4. Изучайте язык Си. Эх, как же часто я слышу, как начинающие радиолюбители хвалятся, что хорошо знают сишку. Для меня это стало кормом, всегда люблю проконсультироваться у таких собеседников. Обычно сразу выясняется, что язык они совершенно не знают. Могу сказать, что не смотря на кажущуюся простоту, людей которые действительно хорошо бы его знали, встречал не так много. В основном все его знают на столько, на сколько требуется для решения задач.

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

Очень многие начинающие брезгуют изучением языка, поэтому если вы не будете как все, то сразу станете на две ступени выше остальных новичков. Так же не никакой разницы, где изучать язык. На мой взгляд, микроконтроллер для этого не очень подходит. Гораздо проще поставить какую нибудь Visual studio или Qt Creator и порешать задачки в командной строке.

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

5. Изучение ассемблера? Бояться его не нужно, равно как и боготворить. Не нужно думать, что умея написать программу на ассемблере, вы сразу станете гуру микроконтроллеров, почему то это частое заблуждение. В первую очередь это инструмент. Даже если вы не планируете использовать его, то все равно я бы настоятельно рекомендовал написать хотя бы пару программ. Это сильно упростит понимание работы микроконтроллера и внутреннего устройства программ.

6. Читайте даташит. Многие разработчики, пренебрегают этим. Изучая даташит вы будете на две ступени выше тех разработчиков. Делать это крайне полезно, во первых это первоисточник, какие бы сайты вы не читали, в большинстве случаев они повторяют информацию из даташита, зачастую с ошибками и недосказанностями. Кроме того, там может находиться информация, о которой вы не задумываетесь сейчас, но которая может пригодиться в будущем. Может статься так, что вылезет какая то ошибка и вы вспомните что да, в даташите об этом было сказано. Если ваша цель стать хорошим разработчиком, то этого этапа не избежать, читать даташиты придется, чем раньше вы начнете это делать, тем быстрее пойдет рост.

7. Часто народ просит прислать даташит на русском. Даташит — это то, что должно восприниматься как истина, самая верная информация. Даже там не исключены ошибки. Если к этому добавятся ошибки переводчика, он ведь тоже человек, может даже не нарочно, просто опечататься. Либо у него свое видение, может что-то упустить, на его взгляд не важное, но возможно крайне важное для вас. Особенно смешной становится ситуация, когда нужно найти документацию на не сильно популярные компоненты.

На мой взгляд, намного проще исключить заранее весь слой этих проблем, чем вылавливать их потом. Поэтому я категорически против переводов, единственный верный совет — изучайте английский язык, чтобы читать даташиты и мануалы в оригинале. Понять смысл фразы с помощью программ переводчиков можно, даже если уровень вашего языка полный ноль.

Мною был проведен эксперимент: в наличии был студент, даташит и гугл переводчик. Эксперимент №1: студенту вручен даташит и дано задание самостоятельно найти нужные значения, результат — «да как я смогу», «да я не знаю английский», «я ничего не нашел/я не понял» типичные фразы, говорящие о том, что он даже не пытался. Эксперимент №2: тому же студенту, вручен все тот же даташит и тоже задание, с той разницей, что я сел рядом. Результат — через 5 минут он сам нашел все нужные значения, абсолютно без моего участия, без знания английского.

8. Изобретайте велосипед. Например, изучаете какую то новую штуку, допустим транзистор, дядька Хоровиц со страниц своей книги авторитетно заявляет, что транзистор усиливает, всегда говорите — НЕ ВЕРЮ. Берем в руки транзистор включаем его в схему и убеждаемся что это действительно так. Есть целый пласт проблем и тонкостей, которые не описываются в книгах. Прочувствовать их можно только, когда возьмешь в руки и попробуешь собрать. При этом получаем кучу попутных знаний, узнаем тонкости. Кроме того, любая теория без практики забудется намного быстрее.

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

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

9. А как бы я сделал это, если бы находился на месте разработчиков? Могу ли я сделать лучше? Каждый раз задавайте себе эти вопросы, это очень хорошо помогает продвигаться в обучении. Например, изучите интерфейсы 1wire, i2c, spi, uart, а потом подумайте чем они отличаются, можно ли было сделать лучше, это поможет осознать почему все именно так, а не иначе. Так же вы будете осознавать, когда и какой лучше применить.

10. Не ограничивайтесь в технологиях. Важно что этот совет имеет очень тонкую грань. Был этап в жизни, когда из каждой подворотни доносилось «надо бы знать ПЛИС», «а вот на ПЛИС то можно сделать». Формально у меня не было целей изучать ПЛИСины, но и пройти мимо было никак нельзя. Этому вопросу было выделено немного времени на ознакомление. Время не прошло зря, у меня был целый ряд вопросов, касаемых внутреннего устройства микроконтроллеров, именно после общения с плисинами я получил ответы на них. Подобных примеров много, все знания, которые я приобретал в том или ином виде, рано или поздно пригодились. У меня нет ни единого бесполезного примера.

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

11. Если спросить начинающего радиолюбителя, что ему больше нравится программирование или схемотехника, то с вероятностью 99% ответ будет программирование. При этом большую часть времени эти программисты тратят на изготовление плат ЛУТом/фоторезистом. Причины в общем то понятны, но довольно часто это переходит в некий маразм, который состоит в изготовлении плат ради изготовления плат.

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

12. Следующий совет, особенно болезненный, мне очень не хочется его обсуждать, но надо. Часто мне пишут, мол ххх руб за ууу дорого, где бы подешевле достать. Вроде бы обычный вопрос, но обычно я сразу напрягаюсь от него, так как зачастую он переходит в бесконечные жалобы на отсутствие денег. У меня всегда возникает вопрос: почему бы не оторвать пятую точку и не пойти работать? Хоть в тот же макдак, хоть на стройку, потерпеть месяц, зато потом можно приобрести парочку плат, которых хватит на ближайший год. Да я знаю, что маленьких городах и селах сложно найти работу, переезжайте в большой город. Работайте на удаленке, в общем нужно крутиться. Просто жаловаться нет смысла, выход из ситуации есть, кто ищет его тот находит.

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

Не говорю что дешевое = плохое, нет — все зависит от ситуации. Вернусь к примеру кримпера, было время когда обжимал чем попало, поэтому часто возникали проблемы. Особенно неприятно, когда заводишь плату и она не работает, после долгих поисков ошибки понимаешь что из-за плохо обжатого проводочка, обидно. С тех пор как появилась нормальная обжимка этих проблем нет. Да внутренняя жаба и квакала, и душилась от ее стоимости, но ни разу не пожалел об этом решении. Все что я хочу сказать, что поработав с нормальным инструментом, совершенно не хочется возвращаться к плохому, даже не хочется обсуждать это. Как показывает практика, лучше не экономить на инструментах, если сомневаетесь — возьмите у кого нибудь потестить, почитайте отзывы, обзоры.

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

15. Тонкий вопрос: профильное высшее образование, нужно ли оно? Мне известны не единичные случаи, когда люди работали абсолютно без образования и по опыту и знаниям они могли дать прикурить любому дипломированному специалисту. Собственно, у меня нет профильного образования, испытываю ли я от этого дискомфорт? В определенной степени да.

Еще в самом начале, когда микроконтроллеры были для меня хобби, я много помогал с курсовыми и дипломами разных вузов, просто чтобы оценить свой уровень. Могу сказать уверенно, что уровень в целом невысок вне зависимости от имени вуза. Учиться несколько лет, для того чтобы написать такой диплом, совершенно необязательно. Достигнуть этого можно самостоятельно за весьма короткий срок. И все же зачастую бывали моменты, когда студенты знали какой то предмет, который они проходили на 2-3 курсе, а я этого не знал. Хоть все эти знания и компенсировались самообразованием, но все же лучше было бы не тратить на это время.

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

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

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

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

16. Поздно ли начинать программировать в 20, 30, 40, 50 лет? Практика других людей показывает, что возраст вообще не помеха. Многие почему то не учитывают то, что есть целый пласт работы, которую молодые в силу своих амбиций не хотят делать. Поэтому работодатели предпочитают брать тех, кто будет ее тащить. Это ваш шанс зацепиться, а дальше все зависит только от вас.

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

habr.com

«Ужасные» трёхцентовые MCU – краткий обзор микроконтроллеров стоимостью менее $0,1

Я, в числе прочих, поразился прошлогоднему известию в блоге EEVblog о том, что какие-то микроконтроллеры продаются всего по $0,03 за штуку. Как это было возможно? Многие предположили, что это распродажа или старые остатки. Покопавшись в истории, я пришёл к выводу о существовании целого сегмента рынка сверхдешёвых микроконтроллеров. Почти все они произведены малоизвестными компаниями из Китая или Тайваня. В данной статье я свёл результаты своих изысканий в этой довольно необычной нише.

Мы уже знаем, что существует довольно большой спектр очень мощных микроконтроллеров стоимостью по $1.00, но что насчёт MCU по $0,1? Так ли они «ужасны», как о них пишут?

Методология


Как определить микроконтроллер стоимостью в $0,1? Да как хотите; выбор определения произволен. Я решил пойти напрямик, используя стоимость 100 штук в магазине LCSC. Я обнаружил шесть производителей, предлагавших один или несколько чипов стоимостью менее $0,1, и все они были из Азии. Если чипы предлагались в различных корпусах, я выбирал вариант SOP8. У некоторых производителей было несколько кандидатов, поэтому мне пришлось ограничиться выбором типичных устройств для финального списка из 8 кандидатов.

У крупных дистрибьюторов, вроде Digikey или Mouser, микроконтроллеров по $0,1 я не нашёл. Очевидно, что это не означает, что найти такие MCU у западных производителей невозможно – всё зависит от объёма заказа. Тут играет роль два фактора: во-первых, LCSC работает с гораздо меньшей наценкой, чем крупные дистрибьюторы. Во-вторых, крупные производители MCU не зависят от мелких клиентов, поэтому свободно назначают цену на товары, покупаемые в небольших количествах.

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

Обзор


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

В ней есть очевидные сходства – все устройства спроектированы для аккумуляторной архитектуры, и, несомненно, на основе Microchip PIC12. За исключением MDT, все производители изменили и дополнили схемы своих чипов. Причин, пожалуй, две: во-первых, они хотели избежать юридических проблем с Microchip, а во-вторых, у PIC12 есть серьёзные ограничения. Они поработали с основными недостатками – отсутствие прерываний, адресного пространства JMP/CALL, переключения банков памяти и периферии.

К сожалению, производители не поделились таким деталями, как кодирование инструкций или алгоритмы памяти. Вся разработка для этих устройств должна идти посредством IDE от производителей. За исключением Holtek, все устройства зависят от высоковольтного интерфейса программирования, и их не так-то легко программировать на месте. Только Padauk и Holtek предлагают устройства, которые можно программировать больше одного раза.

→ Кликабельно. Есть PDF-версия

Отдельные находки


Bojuxing Industrial


Чип BJ8P509F по цене в $0,0466 – это немного усовершенствованный вариант PIC12C509. Набор инструкций расширен с 12 до 13 бит. Это позволяет использовать jmp с полной адресацией памяти. Кроме того, добавлены возможности работы с прерываниями и расширенным HW-стеком.

Имеется спецификация на английском языке, и она достаточно подробна для работы с чипом. К сожалению, веб-сайт и IDE производителя есть только на китайском.

Eastsoft Micro


У Eastsoft Micro имеется большой портфель микроконтроллеров, произведённых на основе PIC. Они называют свой вариант архитектуры HR7P RISC. Это полноценная аккумуляторная архитектура с поддержкой прерываний, 8-уровневым стеком и доступом к памяти и I/O без переключения банков.

У них есть один чип стоимостью до $0,1, и это HR7P153P45SA. Среди примечательных особенностей – поддержка ADC 12 бит, низкоскоростной осциллятор для работы при пониженном питании и добавление двух таймеров с поддержкой PWM.

К сожалению, веб-сайт и спецификация есть только на китайском.

Holtek


Holtek – известный производитель микроконтроллеров из Тайваня. Их представитель в данной категории HT68F001 довольно уникален: ограниченное устройство с 512 словами программной флэш-памяти и 16 байтами RAM. Архитектура очень похожа на PIC12, синхронизируется только от внутреннего осциллятора на 32 кГц. Поскольку на выполнение каждой инструкции уходит 4 такта, он выполняет только 8000 инструкций в секунду! Судя по всему, этот чип предназначен для применения в условиях ультранизкого энергопотребления, не требовательного к производительности.

У чипа отличная документация. Тут и веб-сайт, и спецификация, и заметки по применению, и IDE. Это также единственный чип с возможностью флэш-программирования на низком напряжении. Всё это ставит продукцию Holtek особняком на фоне остальных.

Однако, учитывая ограниченную функциональность этого чипа, по-видимому, сегмент ультрадешёвых чипов не является для Holtek приоритетным.

Padauk


Совершенно ясно, что на рынке чипов до $0,1 Padauk чувствует себя, как дома. В этом ценовом диапазоне они предлагают десятки продуктов с разнообразными возможностями и видами корпусов.

Все они основаны на архитектуре MCU Padauk, значительно более развитой по сравнению с PIC12: она использует отдельные участки памяти для I/O и SRAM, позволяет выполнять адресацию ко всей памяти без переключения банков. В отличие от всех остальных устройств, здесь стек находится в оперативной памяти. Большинство инструкций выполняются за один такт.

Один интересный и необычный аспект архитектуры Padauk состоит в том, что она заточена под синхронную многопоточность, и позволяет выполнять более одной программы параллельно на одном ядре MCU по схеме вытесняющей многозадачности. Они называют эту концепцию «программируемая пользователем процессорная матрица» (FPPA). Сходную концепцию использует XMOS в архитектуре XCore Architecture. Один полезный вариант применения многопоточности в небольших MCU – создание виртуальной периферии, например, UART, I2C, работающей параллельно с основной программой.

Я выбрал три их репрезентативных продукта в корпусе SOP8: PMS150C, PFS154 и PFS173. У всех них есть один модуль FPPA, поэтому они не поддерживают многопоточность.

PMS150C – самый дешёвый вариант, стоящий $0,033, то есть, это оригинальный «трёхцентовый MCU». У устройства одноразовая программируемая память на 1 килослово и 64 байта RAM. Периферию представляют множество соревнующихся вариантов – 16-битный таймер, 8-битный таймер с ШИМ, низкочастотный осциллятор, аналоговый компаратор с опорным напряжением 4 бит DAC, который можно использовать для реализации простейших вариантов АЦП. Всего этого достаточно для реализации простых функций датчика и управляющего модуля.

PFS154 стоит почти в два раза дороже. Однако, в отличие от PMS150, у него есть флэш-память на 2 килослова, его можно программировать многократно, что гораздо удобнее для реальной разработки. Периферия расширяется ШИМ-модулями 3х11 бит, неплохо подходящими для управления RGB светодиодами.

Наконец, PFS173 далее улучшает чип PFS154, добавляя 8-битный АЦП и расширяя флэш-память до 3 килослов и RAM до 256 байт.

Padauk обеспечивает IDE для разработки на ассемблере и достаточно загадочный диалект С (Mini-C). У них есть отличные спецификации на английском и китайском, а также двуязычный сайт. Программирование устройств осуществляется высоковольтным протоколом на 5 или 6 проводов, что затрудняет программирование чипа на месте.

Набор инструментов с открытым кодом


Вокруг Padauk MCU на сайте EEVblog сформировалось небольшое сообщество, пытающееся создать набор инструментов с открытым кодом для их чипов. Большинство работы описывается в этой ветке.

На август 2019 закончен инженерный разбор кодирования инструкций, описан протокол программирования, разработан открытый программатор, в SDCC интегрирована поддержка нескольких вариантов PDK архитектуры. Уже возможно вести разработку для всех упомянутых чипов от Padauk при помощи полностью открытого набора инструментов.

Puolop


Puolop – китайский производитель микроконтроллеров и различных смешанных аналогово-цифровых схем со штаб-квартирой в Шэньчжэне. Они предлагают широкий спектр чипов от Padauk под своим брендом, в частности, старые OTP-версии.

К примеру, Puolop PTB150CSE выглядит абсолютно идентично Padauk PMS150C. Стоимость у них чуть меньше оригинала ($0,0315 против $0,334). Неясно, какая связь существует между этими брендами, но, судя по всему, Padauk выступает в роли поставщика для Puolop.

Веб-сайт компании и вся документация есть только на китайском. Никаких причин предпочесть чипы от Puolop чипам от Padauks не наблюдается – разве что экономия небольшой части цены.

Yspring Tech / MDT


Yspring Tech – китайская компания, предлагающая широкий спектр устройств, функционально сравнимых с конкурентами от Microchip. Судя по всему, большая часть ассортимента взята у MDT, тайваньской компании, которую Yspring либо купила, либо сделала партнёром. Microchip противилась их бизнес-модели в прошлом.

Ysprings добавляет в этот обзор MDT10P509 по цене в $0,0795. Это устройство, судя по всему, является полным клоном PIC12C509. Оно может оказаться полезным в качестве дешёвой замены оригинала, но оно явно уступает по характеристикам другим продуктам из этой категории.

MDT10P509 предлагает 1 килослово одноразовой памяти, 41 байта RAM, и единственный 8-битный таймер в качестве периферии. В нём, как и в PIC12C509, нет прерываний, есть только двухуровневый HW-стек, а инструкции выполняются за 4 такта.

Заключение


Являются ли эти микроконтроллеры на самом деле «ужасными»? Очевидно, зависит от точки зрения. Они попадают в особую категорию необслуживаемых продуктов небольшой функциональности с небольшой стоимостью для оптовых закупок. Вам нужно подождать нажатия кнопки, а потом пять раз мигнуть светодиодом? Вам нужно управлять ночником на батарейках? Чипы стоимостью до $0,1 помогут вам уменьшить себестоимость и укоротить время разработки.

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

Если вам нравится работать с дешёвыми микроконтроллерами, то серия от Padauk, без сомнения, будет лучшим выбором. У них наиболее мощная архитектура, широкий спектр устройств, включая варианты с флэш-памятью, хорошая документация, и единственная линейка с набором открытых инструментов.

habr.com

Какой выбрать микроконтроллер? | Техника и Программы

   Какой МК выбрать любителям

   Если вспомнить олимпийский девиз: «Быстрее, выше, сильнее» (лат. «Citius, Altius, Fortius»), то применительно к МК он прозвучит так: «Выше тактовая частота, больше объём памяти, меньше энергопотребление». Но не надо в спешке выбирать по каталогу самую «крутую» микросхему. Это не поможет. Радиолюбительская практика ограничивается тремя важными факторами: стоимостью, технологией пайки, доступностью программного обеспечения.

   Стоимость ультрасовременных «навороченных» МК доходит до нескольких десятков долларов США. В простых любительских конструкциях нет смысла ориентироваться на большие деньги. Одну и ту же не очень сложную задачу дешёвый и дорогой М К решают с одинаковым успехом. Зачем платить больше?

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

   в корпусах SOIC, QFP, рассчитанных на автоматизированный поверхностный монтаж. Расстояние между выводами составляет 0.5… 1.27 мм. Не каждый монтажник без специальных приспособлений и микроскопа сможет качественно запаять все 44…208 выводов такой микросхемы.

   В домашних условиях имеется большой риск повредить и сам чип, и тонкие дорожки печатной платы. Следовательно, двухрядная чёрная китайская панелька с шагом между выводами 2.54 мм останется ещё долгое время объективной реальностью в радиолюбительском деле.

   Если всё-таки понадобится использовать более совершенный МК, то стоит задуматься о приобретении так называемого «отладочного комплекта». Он состоит из печатной платы, на которой уже распаяны: МК, кварцевый резонатор, стабилизатор питания, разъёмы для подключения периферийных устройств, а зачастую и ЖК-индикатор с кнопочной тастатурой. Кроме того, в комплект поставки входят средства проектирования — программный компилятор и отладчик. В целом получается хороший стартовый набор при относительно небольшой цене от 15 до 100 долларов США в зависимости от периферии.

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

   Житейская мудрость определила ряд здоровых принципов отбора МК. Во-первых, не гнаться за экзотикой, во-вторых,не связываться с единственным семейством, в-третьих, не экономить на средствах отладки и программирования. Теперь понятно, почему на сегодняшний день наиболее популярными среди любителей являются 8-битные МК семейств ATmega, ATtiny, PIC 12, PIC 16, PIC 18. Сравнительно низкие цены, доступность на рынке, хорошие технические характеристики, наличие микросхем в DIP-корпусе, множество учебников и примеров — вот залог успеха.

   Какой МК выбрать профессионалам

   Инженеры, по долгу службы занимающиеся разработкой аппаратуры для встраиваемых применений, могут позволить себе роскошь «ни в чём не отказывать» (конечно, в разумных пределах). Проблемы стоимости, технологии производства и доступности элементной базы отходят на второй план. Действительно, управляющий МК в сложных комплексах является далеко не самым дорогим элементом, хотя именно от него во многом зависят эксплуатационные характеристики изделия и успешность продаж на рынке. Критериями отбора для профессионального разработчика служат следующие факторы: технические параметры, лицензионная чистота программного обеспечения, удобство в обслуживании.

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

   Таблица 1.1. Рекомендации по выбору МК

   Главный параметр

   Рекомендуемые МК разрядностью 8/16/32 бита

   Быстродействие

   Atmel ARM, NXP LP210x, Microchip PIC24/dsPIC, Ubicom SX

   Помехозащищённость

   NXP LP2xxx, Microchip PIC (модели после 2003 г.)

   Экономичность

   Texas Instruments MSP430, Microchip P1CI2/16/18

   Миниатюрность

   Microchip PIC 10/12, Atmel ATtiny

   Универсальность

   Atmel ATmega, Microchip PIC 18, Silicon Laboratories C8051F

   Кри птоустойч и вость

   Texas Instruments TMS320F, Atmel AT91SO, Atmel ATXmcga

   Электромагнитная совместимость

   STMicroelectronics STR71xF

   установки в автомобиль, то придётся искать МК с расширенным диапазоном температур —40…+ 125°С и, желательно, с наличием интерфейса CAN. Если требуется быстрая реакция на внешнее воздействие или прогнозируются сложные математические расчёты, то понадобится высокоскоростной МК с разрядностью 16 или 32 бита. Если проектируется миниатюрное изделие с батарейным питанием, то лучше применить микромощный МК в компактном SMD-корпусе, способный работать при пониженном напряжении и малой тактовой частоте.

   В Табл. 1.1 приведены некоторые рекомендации по выбору МК. Понять их суть можно на примере микросхемы STR710FZ1T6 фирмы STMicroelectronics, которая рекомендуется для устройств с низким электромагнитным излучением (ЭМИ). В её даташите имеется специальный раздел «ЕМС characteristics», где приводятся уровни паразитного излучения МК по частотным диапазонам. Это даёт основание полагать, что на заводе-изготовителе серьёзно подходят к проблемам электромагнитной совместимости и периодически проверяют соответствие параметров, т.е. гарантируют их. Не исключено, что продукция других фирм тоже имеет показатели ЭМИ не хуже, но ведь об этом в их даташитах ничего не написано, значит, в Табл. 1.1 таким МК путь «заказан».

   Таблица 1.1. Рекомендации по выбору МК

   Лицензионная чистота программного обеспечения — это «больное место» многих разработок на малых и средних по численности предприятиях. Любая сколько-нибудь серьёзная проверка приводит к штрафам. Закон о нарушении авторских прав предусматривает весьма строгие наказания.

   Если изделие простое и программист использует бесплатно поставляемый фирменный Ассемблер, то проблем нет. Здесь и исходный код можно продемонстрировать, и «вживую» откомпилировать проект в присутствии представителя контролирующей организации. Хуже обстоит дело с языками высокого уровня, для которых через Интернет обычно доступны только демо-версии коммерческих компиляторов с весьма урезанными возможностями. Полные версии фирменных компиляторов стоят денег (и немалых), что делает их покупку экономически убыточным при малых партиях изготавливаемой продукции.

   На помощь может прийти смена семейства МК и перевод исходных листингов в среду свободно распространяемых программных продуктов. В частности, для AVR-контроллеров используют бесплатный Си-компилятор AVR-GCC, входящий в пакет WinAVR [1-8], а для PIC-контроллеров в простых случаях годится демо-версия компилятора MikroC фирмы mikroElektronika [1-9], имеющая лимит на длину кода, но без ограничения действия во времени.

   

   Удобство в обслуживании является важной составляющей коммерческого успеха. Не секрет, что программисты, как и все обычные люди, допускают ошибки. Для их исправления, а также для удовлетворения эксклюзивных запросов и пожеланий капризных заказчиков, приходится «на ходу» изменять алгоритм работы устройства. Применительно к МК это означает, что надо перепрограммировать его внутреннее флэш-ПЗУ.

   Чтобы не отправлять постоянно «гонцов» в командировки с программатором в кейсе, практикуют удалённую смену прошивок через Интернет. Однако для этого следует ещё на начальном этапе разработки выбрать такой тип МК, который имеет функцию самопрограммирования («BootLoader»). В любительских конструкциях столь щепетильный подход не обязателен, хотя и всячески приветствуется.

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

   

Источник:
Рюмик С.М. 1000 и одна микроконтроллерная схема. (Выпуск 1)

nauchebe.net

Что такое микроконтроллер, зачем он нужен и как его используют

Область применения микроконтроллеров безгранична. Их используют в любых электронных устройствах для осуществления контроля. Кроме того, они находятся во всех бытовых приборах – микроволновках, электрочайниках, утюгах, стиральных машинах — микроконтроллер можно запрограммировать под любую функцию.

История появления

Работы над изобретением микропроцессора велись с начала 1970-х годов. Первой компанией, разработавшей его, была компания Intel. Уже в 1971 году ее был выпущен первый микроконтроллер 4004, который состоял из 2300 полупроводниковых транзисторов, а по размеру был не больше ладони. Это стало возможным, после того как для микросхемы был специально разработан кристалл процессора.

Несмотря на маленькие размеры, производительность микропроцессора не уступала компьютеру Eniac, имеющему габариты в 85 м3. Особенностью этого устройства было то, что оно могло обрабатывать только 4 бита информации.

В ближайшие полгода еще несколько компаний заявили о создании аналогичных изделий.

К концу 1973 года Intel выпускает 8-зарядный микропроцессор. Он был настолько удачно разработан, что и сегодня считается классикой.

Через несколько месяцев фирма Motorola выпускает свой 8-битовый микропроцессор 6800. Он стал сильным конкурентом интеловской микросхеме, т. к. имел более значительную систему прерываний и одно напряжение электропитания. В 8080 их было три.

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

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

В 1978 году Интел выпустила 16-разрядный микропроцессор, который IBM использовала для разработки персональных компьютеров. Моторола не отстала от своего конкурента и тоже выпустила 16-разрядный микропроцессор, который использовали Atari и Apple.

Сейчас существует более 200 разновидностей микроконтроллеров. Количество компаний, их изготавливающих, перевалило за два десятка. Широкое распространение у разработчиков получили:

  • 8-битные микроконтроллеры Pic компании Microchip Technology и AVR от Atmel;
  • 16-битовые MSP 430 фирмы TI;
  • 32-битные ARM от одноименной компании.
В России пользуются популярностью микроконтроллеры Renesas Electronics, Freescale, Samsung.

Что такое микроконтроллер

Микроконтроллер по сути является микросхемой, который состоит из:

  • Центрального процессора. В него входят блок управления, регистры, ПЗУ (постоянное запоминающее устройство).
  • Периферии, которая включает порты ввода-вывода, контроллеры прерываний, таймеры, генераторы различных импульсов, аналоговые преобразователи и подобные элементы.

Зачастую микроконтроллер называют микропроцессором. Но это не совсем так. Последний осуществляет только определенные математические и логические операции. А в состав микроконтроллера входит и микропроцессор с другими элементами, являясь лишь частью МК.

Принцип работы микроконтроллера

Несмотря на сложное устройство принцип работы микроконтроллера очень прост. Он основан на аналоговом принципе действия. Система понимает лишь две команды («есть сигнал», «нет сигнала»). Из этих сигналов в его память вписывается код определенной команды. Когда МК считывает команду, он ее выполняет.

В каждом из МК прописаны свои базовые наборы команд. И только их он способен принимать и выполнять. Сочетая отдельные команды между собой, можно написать уникальную программу, по которой будет работать любое электронное устройство именно так, как требуется.

В зависимости от содержащихся в МК набора программ, они делятся на:

CISC – комплекс большого числа базовых команд;
RISC – только необходимые команды.

Большинство контроллеров содержит RISC набор. Объясняется это тем, что такой МК проще изготовить, он дешевле и больше пользуется спросом у разработчиков электронной техники.

Назначение и область применения микроконтроллера

Благодаря тому, что микроконтроллеры AVR очень просты в использовании, обладают высокой способностью интегрирования и низкой потребляемой мощностью, области их применения разнообразны:

  • автомобилестроение;
  • робототехника;
  • самолето- и судостроение;
  • промышленное оборудование;
  • электронные детские игрушки;
  • компьютеры, телефоны;
  • электронные музыкальные инструменты;
  • бытовая техника;
  • медоборудование;
  • управление шлагбаумами и воротами;
  • светофоры, семафоры;
  • железнодорожный транспорт.

Это не полный перечень областей применения МК.

Основное назначение МК – контролировать все процессы, которые происходят на его платформе. От включения или выключения света по хлопку до поднятия штор при изменении освещенности на улице. По сути, МК осуществляет контроль за состоянием неких переменных и изменение системы в динамических условиях.

Питание микроконтроллера

Для работы микроконтроллеру, как и любому электронному устройству, необходима энергия. Напряжение МК Atmel AVR находится в диапазоне 1.8–5.5 Вольт и зависит от модели и серии. Большинство приборов работает от 5 Вольт. Но встречаются и низкочастотные модели (Attiny 2313), нижняя граница у которых от 1,8 В.

Кроме того, на работу МК влияет и частота поступающего тока. Низкое напряжение требует и низких пределов частот. Чем выше частота, тем быстрее работают определенные модели.

Так, чтобы обеспечить работу контроллеров серии AVR, на все плюсовые входы нужно подавать 5 В, а нулевой заземляют.

Если у модели несколько вводов и выводов питания, то подключать их нужно все.

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

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

Подключение

Через микроконтроллер можно подключить к локальной сети любой девайс. В качестве таковой можно рассмотреть Ethernet. Прежде всего, определимся с понятиями.

Ethernet – это набор стандартов IEEE 802.3, которые описывают разнообразные технологии локальных сетей: общий канальный уровень и набор технологий физического уровня, включающий в себя для передачи информации оптоволокно, витую пару, коаксиал с различными скоростями.

Понять, как работает локальная сеть, можно через модель OSI. Она включает в себя несколько уровней:

  1. Физический. Состоит из витой пары, драйверов и трансформаторов, по которым происходит передача данных.
  2. Канальный. Через него передаются Ethernet-фреймы между узлами локальной сети.
  3. Сетевой. По нему происходит передача пакетов. Они могут передаваться через несколько сетей, различающихся по технологиям физического и канального уровней.
  4. Транспортный. Связывает узлы между собой. Перед отправкой данных транспортный уровень представляет их в виде пакета сетевого уровня и передает другому узлу. Он может отправлять и группы пакетов одновременно. Если используется протокол с установкой соединения, то перед отправкой транспортный уровень устанавливает соединение, контролирует его качество, а только потом передает пакет данных.
  5. Прикладной. Решает прикладные задачи, те, ради которых создавался. С внешним миром он обменивается данными по стандартному или эксклюзивному протоколу.

Каждый из последующих уровней обслуживается предыдущим или нижележащим. Так образуются вертикальные межуровневые связи. Особенности обслуживания каждого уровня скрыты от остальных.

При взаимодействии двух сетей каждый из уровней одной сети контактирует с аналогичным уровнем другой. Так образуются горизонтальные связи.

Управление микроконтроллером

Управление МК может осуществляться двумя способами:

  1. Проводной путь. Управление исполнительными механизмами происходит через электропроводное соединение управляющих цепей и исполнительных механизмов. Включение — по нажатию кнопки на диспетчерском пункте или кнопочном пульте.
  2. Беспроводной путь. Такой способ управления не требует проводного соединения. С передатчика или пульта дистанционного управления (ПДУ) передается сигнал, который идет на приемник.

Сигналы беспроводного соединения могут быть:

  • Оптическими. Подобными сигналами управляется домашняя бытовая техника: телевизоры или кондиционеры.
  • Радио. Есть несколько вариантов: Wi-Fi, Bluetooth и др.

Развитие современных средств связи позволяет управлять контроллерами как через ПДУ, находясь в непосредственной близости к прибору, так и по интернету из любой точки мира через локальную сеть.

Обеспечивает поддержку cети Wi-Fi МК ESP 8266. В продаже он может быть в виде микросхемы или распаян, как arduino. У него 32-битное ядро, программировать его нужно через последовательный порт UART. Бывают более продвинутые платы с возможностью прошивки по USB – это NodeMCU. Они могут хранить информацию, записанную, например, с датчиков. Такие платы работают с различными интерфейсами, в т. ч. SPI, I2S.

Поддерживает большое число функций:

  • планировщик задач;
  • таймер;
  • канал АЦП;
  • формирование на выходе ШИМ сигнала;
  • аудиопроигрыватель и многое другое.

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

Тактирование микроконтроллеров

Тактовая частота МК – это количество тактов за секунду, выполняемых контроллером. Чем она выше, тем большее количество операций он может выполнить.

Существуют несколько способов тактирования МК. Они зависят от использования:

  • Внутреннего RC-генератора. Он может работать только на частоте 1, 2, 4, 8 МГц. Если нужна другая частота, то он не подойдет. При необходимости использования точных временных интервалов тоже нельзя пользоваться этим методом, т. к. его задающая частота колеблется в зависимости от температуры.
  • Внешнего кварца. Этот способ имеет более сложное подключение. Емкость конденсатора должна находиться в интервале 15–22 пФ. Один выход присоединяется к резонатору, а другой заземляется.
  • Внешнего генератора. Этот генератор также нестабилен при разной температуре, как и внутренний.
  • RС-цепочек. Для данной схемы подойдет конденсатор емкостью от 22 пФ, резистор 10–100 кОм.

Для простейших микроконтроллеров подойдут внутренний или внешний генератор и RC-цепочки. Для проектирования более точных МК потребуются стабильные источники тактирования.

Семейства микроконтроллеров

Все МК объединяются в семейства. Основная характеристика, по которой происходит это деление, — структура ядра.

 Под ядром МК подразумевают набор определенных команд, цикличность работы процессора, организацию как памяти программ, так и баз данных, систему прерываний и базовый набор периферийных устройств (ПУ).

Различаются представители одного семейства между собой объемом памяти программ и баз данных, а также разнообразием ПУ.

Объединяют все МК в семейства одинаковость двоичного кода программирования.

Семейства делятся на:

  • MSC-51, производства Intel. Монокристальный МК на основе Гарвардской архитектуры. Основной представитель этого семейства 80С51, созданный по технологии CMOS. И хотя эти контроллеры разработаны еще в 80-х годах прошлого века, но до сих пор широко применяются. И сегодня многие компании, такие как Siemens, Philips и др. выпускают свои контроллеры с подобной архитектурой.
  • PIC (Microchip). МК Гарвардской архитектуры. В его основе лежит архитектура с сокращенным набором команд, встроенная память команд и данных, низкое энергопотребление. В это семейство входят более 500 различных МК (8-ми, 16-ти, 32-битные) с различными наборами периферии, памяти и прочими характеристиками.
  • AVR (Atmel). Высокоскоростные контроллеры разработаны на собственной архитектуре. Основой контроллера является Гарвардский RISC-процессор с самостоятельным доступом к памяти программ и баз данных (Flash ПЗУ). Каждый из 32 регистров общего назначения может работать как регистр-аккумулятор и совокупность 16-битных команд. Высокая производительность в 1 MIPS на каждый МГц тактовой частоты обеспечивается за счет порядка выполнения команд, который предусматривает выполнение одной команды и одновременную подготовку к следующей. Для поддержания своей продукции компания Atmel выпускает бесплатную и качественную среду разработки Atmel
  • ARM (ARM Limited) разработаны на собственной архитектуре. В семейство входят 32-х и 64-битовые МК. ARM Limited занимается только разработкой ядер и их инструментов, а лицензии на производство продает другим компаниям. Эти процессоры потребляют мало энергии, поэтому находят широкое применение в производстве мобильных телефонов, игровых консолей, маршрутизаторов и т. д. К компаниям, выкупившим лицензии, относятся: STMicroelectronics, Samsung, Sony Ericsson и др.
  • STM (STMicroelectronics). 8-разрядные контроллеры (STM8) относятся к категории высоконадежных с низким энергопотреблением изделий. В это же семейство входят контроллеры STM32F4 и STM Их основу составляет-32 битный Cortex. Такие контроллеры обладают отлично сбалансированной архитектурой и имеют большие перспективы развития.

Это не все семейства микроконтроллеров. Здесь мы привели только основные.

Типы корпусов микроконтроллеров

Внешних отличий МК от других микросхем нет. Кристаллы размещены в корпусах с определенным количеством выходов. Все МК выпускаются только в 3-х типах корпусов:

  • Корпус DIP имеет два ряда выводов. Расстояние между ними 2,54 мм. Выводы вставляются внутрь отверстий на контактных площадках.
  • Корпус SOIC. Он подходит для монтажа, который предполагает поверхностную припайку выходов к контактной площадке. Расстояние между выходами 1,27 мм.
  • Корпуса QFP (TQFP). Выводы расположены со всех сторон. Расстояние между ними в 3 раза меньше, чем в DIP. Корпус имеет квадратную форму. Предназначаются только для поверхностной пайки.
  • Корпус QFN. Самый маленький по сравнению с предыдущими. Контакты выходят в 6 раз чаще, чем в DIP. Имеют большое распространение в промышленном производстве, т. к. позволяют значительно уменьшить габариты выпускаемых приборов.

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

В чем отличие микроконтроллера от микропроцессора?

Весь компьютерный функционал микропроцессора (Micro Processor Unit — MPU) содержится на одном полупроводниковом кристалле. По характеристикам он соответствует центральному процессору компьютера ЦП (Central Processing Unit — CPU). Область его применения – хранение данных, выполнение арифметико-логических операций, управление системами.

МП получает данные с входных периферийных устройств, обрабатывает их и передает выходным периферийным устройствам.

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

Устройства на микроконтроллерах

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

На МК могут быть следующие устройства:

  • Аналоговый компаратор. Основная его задача сравнивать поступающее (измеряемое) напряжение с идеальным. Если измеряемое напряжение выше, чем идеальное, то компаратор выдает сигнал логической 1 (прибор отключается), если ниже, то логический 0 (прибор продолжает работать).
  • Аналогово-цифровой преобразователь (АЦП). Измеряет аналоговое напряжение в период времени и выдает его в цифровой форме. Есть не у всех МК.
  • Таймер/счетчик. Представляет собой сочетание 2-х форм таймера и счетчика. Таймер формирует интервалы времени, а цифровой счетчик считает количество импульсов, идущих от внутреннего генератора частот, или сигналы от внешних источников. Одним из представителей работы таймера /счетчика может быть ШИМ (широтно-импульсный модулятор). Он предназначен для управления средним значением напряжения при нагрузке.
  • Сторожевой таймер. Его задача перезапускать программу через определенный временной промежуток.
  • Модуль прерываний. Он сообщает МК о наступлении какого-либо события и прерывает выполнение программы. После завершения события возобновляет прерванную программу.

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

Что нужно для программирования микроконтроллера

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

Путь программирования проходит несколько этапов:

  1. Перед тем как приступить к написанию кода программы, надо определиться с конечной целью.
  2. Составляется алгоритм работы программы.
  3. Непосредственное написание кода программы. Коды пишутся на языке Си или Ассемблере.
  4. Компиляция программы, т. е. перевод ее в двоичную или шестнадцатеричную систему 1 и 0. Только так ее сможет понять МК.
  5. Откомпилированный код записывают в память контроллера.
  6. Прошивают МК с помощью программатора. Они бывают двух типов подключения: через COM или USB порт. Самый простой и дешевый программатор USBASP.
  7. Тестирование и отладка МК на реальном устройстве.

Радиолюбители иногда обходятся без прописывания алгоритма работы программы на бумаги. Они держат его в голове.

Языки программирования

Языки программирования для МК мало чем отличаются от классических компьютерных. Основное отличие заключается в том, что МК ориентируются на работу с периферией. Архитектура МК требует битово-ориентированных команд. Поэтому для контроллеров создавались особые языки:

  • Ассемблер. Самый низкий уровень языка. Программы, написанные на нем, получаются громоздкими и труднопонимаемыми. Но несмотря на это он позволяет наиболее полно раскрыть все возможности контроллеров и получить максимальное быстродействие и компактный код. Подходит преимущественно для маленьких 8-битных МК.
  • С/С++. Более высокий уровень языка. Программа, написанная на нем, более понятна человеку. На сегодняшний день есть много программных средств и библиотек, позволяющих писать коды на этом языке. Его компиляторы есть практически на любой модели МК. На сегодня это основной язык для программирования контроллеров.
  • Еще более удобный для восприятия и проектирования язык. Но он мало применяется для программирования МК.
  • Старинный язык программирования. На сегодня почти не применяется.

Выбор языка для программирования зависит от решаемых задач и необходимого качества кода. Если нужен компактный код, то подойдет Ассемблер, для решения более глобальных задач выбор ограничится только С/С++.

Среда разработки

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

Вот несколько сред программирования:

  • FlowCode – универсальная графическая среда. Программируется с помощью построения логических структур блок-схем.
  • Algorithm Builder. Тоже графическая среда. Но написание кода проходит в 3–5 раз быстрее, чем в FlowCode. В ней совмещены графический редактор, компилятор, симулятор МК, внутрисхемный программатор.
  • В ней объединены Ассемблер и С/С++. Функционал среды позволяет самостоятельно прошивать МК.
  • Image Craft. Как и предыдущая поддерживает Ассемблер и С/С++ языки. В ее составе есть библиотека, позволяющая работать с отдельными устройствами МК.
  • Популярная среда для любителей. Имеет Си-подобный язык, но отличающийся от других. Он более понятен человеку. Поддерживает библиотеки, в составе которых есть драйвера для подключения некоторых платформ.

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

Основы программирования

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

Если Ассемблер окажется сложен, то можно начинать с Си. Одной из сильных его сторон является то, что он хорошо переносит коды с одного вида МК на другой. Но для этого надо правильно все прописать, разделив рабочие алгоритмы и их реализации в машине по разным частям проекта. Это позволит переносить алгоритм в другой контроллер, переделав всего лишь интерфейсный слой, в котором прописано обращение к «железу», оставив рабочий код без изменений.

Далее действуют по следующей схеме:

  1. Выбор компилятора и установка среды (подробнее о них писалось выше).
  2. Запуск среды и выбор в ней нового проекта. Необходимо будет указать место расположения. Путь нужно выбирать наиболее короткий.
  3. Настройка проекта. Классическим действием будет создание make-файла, в котором прописываются все зависимости. На первой странице указывают еще частоту работы МК.
  4. Настройка путей. В них надо добавить директорию проекта. В нее можно добавлять сторонние библиотеки.
  5. Постановка задачи.
  6. Сборка схемы. На этом этапе надо соединить модуль USB-USART конвертера с аналогичными выводами МК. Это позволит прошить микроконтроллер без программатора. Нужно накинуть джамперы, соединяющие LED1 и LED2. Этим действием мы подключим светодиоды LED 1 и 2 к выводам PD4 и PD5.
  7. Пропись кода.
  8. Добавление библиотек и заголовков с определениями.
  9. Главные функции. Язык Си состоит из одних функций. Они могут быть вложенными и вызываться в любом порядке относительно друг из друга и разными способами. Но все они имеют три обязательных параметра: 1) возвращаемое значение; 2) передаваемые параметры; 3) тело функции. В зависимости отданных, все возвращаемые или передаваемые значения должны быть определенного типа.
  10. Компиляция и запуск эмуляции.
  11. Отладка программы.

После того как прописали программу на языке Си, можно понаблюдать, как и что происходит в МК. Это поможет выстроить аналогию с программированием на Ассемблере.

Советы начинающим программистам микроконтроллеров

Чтобы первый опыт в программировании МК не закончился неудачей и навсегда не отбил охоту заниматься этим делом, нужно следовать некоторым советам:

  • Начинать с изучения периферии и ее особенностей.
  • Каждую большую задачу надо разделять на максимально количество мелких.
  • В начале пути не стоит упрощать себе жизнь и пользоваться кодогенераторами, нестандартными фичами и т. п. вещами.
  • Обязательно нужно изучать языки программирования (Си и Ассемблера).
  • Читайте Даташит.
  • Соберите необходимый набор инструментов. Это стоит определенных денег, но окупит себя экономией времени и качеством работы.

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

future2day.ru

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



Модульная техника всё более и более плотно входит в нашу жизнь: системы умного дома, модульные компьютеры и смартфоны. Но зачастую, сами модули, даже при всех положительных намерениях разработчиков выпускаться только ими самими и такие проекты быстро прекращают существование.

Ключевые слова: модульная техника, микроконтроллеры.

Самым широко известным модульным устройством, пожалуй, можно назвать обыкновенный персональный компьютер. Системный блок имеет стандартизированные места для размещения модулей, 5” отсеки для CD приводов, 3.2” отсеки для жестких дисков, винтовые отверстия для любых форм-факторов материнских плат. Как и сами материнские платы, сокет центрального процессора, разъемы для модулей оперативной памяти, слоты карт расширения.

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

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

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

Допустим ситуацию: Производитель классических элитных выключателей предпринимает попытку выхода на рынок умных домов. Он тут же гарантировано получит проблему: Как не сделать устройство слишком дорогим, из за обилия сложных совместимостей с различными системами умных домов? Самым элегантным решением сложившейся ситуации (подразумевая что у систем умных домов используются различные протоколы передачи данных) будет: использование лишь одного передатчика в самом выключателе и создания модулей приемников, для каждой системы которую он хочет поддерживать. Покупатель в таком случае не будет переплачивать за не нужные ему дополнительные передатчики, обеспечивающие совместимость.

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

Цель работы

Необходимость грамотной документации, и создания методики выборки платформ реализации, возникла у меня как у автора модульного устройства. Попытавшись получить необходимый для разработки инструментарий у производителей бытовой техники, я столкнулся с ограничениями, связанными с закрытостью технологий. Единственным выходом для меня осталось создание собственного устройства с открытым инструментарием и документацией. Так что бы сами производители, создавали модули связи, с моим устройством, не противоречащие их собственным протоколам защиты.

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

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

Микроконтроллеры.

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

Среди микроконтроллерных архитектур были выбраны:

‒ AVR 8bit — за дешевизну, широкий выбор периферии, бесплатную среду разработки, большое число документации.

‒ PIC 8bit — всё те же плюсы что и AVR, рассматривается как конкурент.

‒ ARM Cortex M0 — широко применяемая 32 битная микроконтроллерная архитектура, M0 энергоэффективен и разрабатывался специально для применения во встраиваемых устройствах.

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

Осуществление выборки

Для сбора данных использовались селекторы на сайтах производителей (Рис. 1).

Рис. 1: Селектор микроконтроллеров на сайте производителя AVR

Для микроконтроллеров STM32 были обработаны данные сразу нескольких производителей таких как Atmel, Microchip, ST, Texas Instruments.

Так как производители напрямую не занимается продажей своей продукции, данные о ценах были получены от одного из наиболее популярных дистрибьюторов Digi-Key. Так как закупочная цена напрямую зависит от объема покупки, цена за штуку была взята из расчета на партию в 1000 штук. (Рис. 2) По причине частых колебаний курса валют на момент проводимого исследования цены представлены в валюте магазина, доллары США.

Рис. 2: Данные о ценах исходя из размера партии Digi-Key

Однако любой микроконтроллер может быть представлен в огромном количестве корпусов. Это бы сильно увеличило объем обрабатываемой информации и очень сильно затруднило выборку цен. Но так как разные корпуса не меняют функционал микроконтроллера, было принято решение исходить только из наиболее компактных корпусов поверхностного монтажа, таких как SO, TQFP, QFN и BGA. В выборку попадает только один из возможных — наиболее миниатюрный, чаще всего QFN (Рис. 3).

Рис. 3: QFN наиболее популярный миниатюрный корпус

Основные критерии выборки

Так как порой выборки представляют более 300 микроконтроллеров подходящих под нужные критерии (наличие периферии для передачи данных), необходимо было найти ключевые точки. То есть критерии по которым микроконтроллер попадает в отчётную таблицу и участвует в методике выбора.

Среди данных критериев наметились следующие большие группы:

  • По количеству портов ввода вывода
  • По количеству встроенной памяти

‒ По количеству встроенной программной памяти

‒ По количеству встроенной оперативной памяти

‒ По количеству встроенной энергонезависимой памяти

  • По наличию дополнительных интерфейсов

‒ По наличию аппартного USB

‒ По наличию передатчика Bluetooth

‒ По наличию передатчика Zig-bee

‒ По наличию передатчика Wi-Fi

  • По наличию аналого-цифрового преобразователя
  • По возможностям работы на низком напряжении

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

  • Наличие 8 дополнительных I/O портов для реализации цифровой матричной клавиатуры 4 на 3.
  • Наличие 16 дополнительных I/O портов, управление матричными светодиодами панелями 8 на 8.
  • Наличие 24 дополнительных портов, большое комплексное устройство.

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

Для наличия аналогово цифрового преобразователя были выбраны 2 категории по количеству ADC каналов:

  • До 8 включительно
  • Более 8

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

  • Бюджетные (до 1$)
  • Средние (до 5$)
  • Дорогие (от 5$)

Заключение

Таким образом в результате работы были выявлены критерии по которым будет осуществятся поиск (протоколы) и критерии по которым найденные микроконтроллеры будут попадать в сводную таблицу методики. Для каждой микроконтроллерной архитектуры AVR, PIC, STM32, будет составляться отдельная сводная таблица, так как выбор архитектуры осуществляется обычно отдельно от выбора микроконтроллера, исходя из наличествующих лицензий, навыков и инструментария.

Литература:

  1. Каталогмикроконтроллеров PIC // Microchip Advanced Part Selector. URL: http://www.microchip.com/maps/microcontroller.aspx (дата обращения: 22.03.2016).
  2. Каталогмикроконтроллеров AVR // Atmel Parametric Product Selector. URL: http://www.atmel.com/products/selector_overview.aspx (дата обращения: 22.03.2016).
  3. Каталог микроконтроллеров STM32 // STM32 32-bit ARM Cortex MCUs. URL: http://www.st.com/web/en/catalog/mmc/FM141/SC1169?sc=stm32 (дата обращения: 22.03.2016).

Основные термины (генерируются автоматически): AVR, QFN, PIC, микроконтроллер, производитель, наличие передатчика, наличие, мое устройство, модульная техника, сводная таблица.

moluch.ru

ARM жаждет крови / Habr

Года так 2 назад на одном из форумов по радиоэлектронике я попросил посоветовать, какой микроконтроллер изучать — и больше всего голосов было в поддержку AVR — популярных, 8-и битных МК, под которые легко писать, программатор можно сделать одной рукой (из проводов и резисторов)… Будущее было ясным и безоблачным, пока в 2009-м году не пошли новости про новые микроконтроллеры на ядре ARM Cortex-M0, которые должны были стоить меньше 1$ (во что в принципе никто не верил) и перекрыть кислород 8-и битным микроконтроллерам.

Сейчас на дворе середина 2011 года и пришла пора посмотреть, что и по какой цене у нас можно купить, и какая получается расстановка сил (цены — из terraelectronica.ru).

МК Ядро Цена (рубли в розницу) Flash-память (кб) ОЗУ (кб) Производительность (MIPS) Потребление энергии (мА/Mhz)
LPC1111FHN33 ARM 32-bit Cortex M0 56 8 2 0.9*50 0.15
STM32F100C4T6B ARM 32-bit Cortex-M3 28.15 16 4 1.25*24 0.23
AtTiny13A Atmel 8bit 25.5 1 0.064 20 0.3 (1mhz)
0.55 (20 mhz)
atmega48 Atmel 8bit 47.06 4 0.5 20 0.3 (1mhz)
0.55 (20 mhz)
MSP430F2101IPW TI 16bit MSP430 52.12 1 0.12 16 0.25 (1mhz)
0.4 (16mhz)
PIC16F676 PIC16 8bit 36.8 2 0.22 5 0.1*4
PIC12F509 PIC12 8bit 26.3 2 0.041 5 0.087*4
PIC10F200T PIC10 8bit 14 0.25 0.016 1 0.043*4

Пояснения: Потребление энергии — указаны в оптимальных условиях в соответствии с datasheet (минимальное напряжение для данной частоты + отключена лишняя периферия). На «высоких» частотах у некоторых МК потребление на MHz выше т.к. требуется более высокое напряжение.

Также нужно помнить, что MIPS-ы у ARM-ов существенно более мясистые, чем у 8/16-и битных МК. Умножение 32x32 за 1 такт это вам не шутки…

Выводы

Определенно, Atmel недокладывает мяса тиграм. В настоящий момент в области высокой производительности/функционала полностью проигрывают Cortex M3 от STM32 (и по цене и по функционалу), а для мелких приложений — мелким PIC-ам, которые вдвое дешевле. Видимо мой собранный потом и кровью программатор для Atmel скоро останется не у дел… Впрочем, есть еще небольшая ниша для приложений где требуется работа от 5V…

У PIC-а только у PIC10 своя ниша остается, остальные проигрывают младшим армам STM32.

Cortex M0 от NXP должен был быть самым дешевым (с ценой до 0.5$ крупными партиями), но в реальности нам приходится платить 2$.

А вот Cortex M3 от STM32 просто рвет все в клочья: при цене крупными партиями 0.85$, его сейчас можно купить по одному за 0.99$ — определенно так будет не всегда, и это вероятно маркетинговая акция, но мне она нравится (я лично купил 20 впрок ). Также нужно помнить, какие плюшки несет нам Cortex M3 по сравнению с M0: умножение 32x32->64 (у M0 только 32x32->32), аппаратный делитель, операции вида MADD — все это и дает на 38% больше скорости на МГц. По энергопотреблению на MIPS получается примерно то-же. Даже если цена вырастет до 1.5$ — все равно будет вкусно, и дешевле большинства AtMega. Кстати, STM32 скоро Cortex M0 также запускает, посмотрим что из этого получится.

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

Почему цена 8-и и 32-х бит так мало отличается?

Все дело в том, что само 32-х битное ядро не так уж и много места занимает, порядка десятка тысяч транзисторов. А например 256Кб Flash-памяти — это 2 млн транзисторов, что не сравнимо больше. Т.е. основное место все равно занимает память и ввод/вывод, так почему бы не потратить +2% площади кристалла и получить 32-х битное ядро нормальной скорости. Также надо учитывать, что уменьшение площади кристалла даже в 2 раза не уменьшает стоимость вдвое — цена разрезания пластины, тестирования, корпусирования остается той-же — и выигрывает тот, кто имеет большие объемы производства.

Так что нам остается смириться, и использовать ARM даже там, где хватило бы и 4-х битного процессора. Небольшая ниша остается у 6-и ногих крошек PIC10 (и AtTiny10 при снижении цены), и все.

Как жить дальше?

Программатор для ARM-ов собрать несколько сложнее, чем для AVR, но наши китайские товарищи не дремлют, и там можно заказать занедорого отличный программатор JLINK (подходит практически для всех армов всех производителей) — 24$ с доставкой — мне как раз сейчас едет.

Там же есть веселые отладочные платки с сенсорным экраном по 39.

Ну и любители халявы успели поиметь по отладочной платке от известного конкурса — конкурс еще идет, но неизвестно шлют ли еще — мне пока так и не прислали…

Комментарии / вопросы / мнения — в студию!

habr.com


Смотрите также