Что находится внутри микроконтроллера
Как работает микроконтроллер и из чего он состоит
Микроконтроллер (МК) — представляет собой своего рода микрокомпьютер, на котором можно выполнять различного рода функции. Этот микрокомпьютер или микросхема работает по специальной программе, эту программу пишут программисты на таких языках программирования как C++,Pascal,Assembler и другие, после компиляции загружают исполняемый код в память микроконтроллера.
Это код содержит инструкции, объясняющие МК как и что и в какой последовательности ему делать, откуда что брать с чем складывать куда выводить и т.д.
Каждый МК отличается друг от друга набором модулей или функций которые он может выполнять, к примеру один МК может иметь 1 АЦП а другой сразу несколько на совем борту, от этого будет зависить стоимость МК.
Также в состав МК могут входить таймеры, аналоговые компораторы, USB, CAN, UART. О этих интрефейсах будет сказано потом. А пока давайте разберемся из чего состои микроконтроллер и как он работает.
Основные узлы микроконтроллера
Структурная схема работы микроконтроллера
Арифметико-логическое устройство
Если например микроконтроллера имеет 8-ми разрядное АЛУ, то он может выполнить какую либо операцию только с 8-ми разрядными числами и выдать такой-же результат.
К логическим операциям относятся:
Также и МК есть и другого рода операции такие как сброс в «0» или установка в «1» которые не относятся ни к арифмитическим не к логическим операциям.
Регистр общего назначения (РОН)
Произведенные в АЛУ операции возвращают результат вычисления- тоже число которое нужно где то хранить.
Хранение таких результатов осуществляется в регистрах общего назначения (РОН) — такие регистры выполняют своего рода роль временной памяти. У каждого микронтроллера кол-во таких РОН может быть разным. На примере структурной схемы МК указаны 32 регистра общего назначения.
Но такие регистры имеют очень небольшой объем памяти и предназначены для временного хранения данных в процессе работы АЛУ. Для более длительного времени хранения информации используются ОЗУ, которая имеет больший объем нежели РОН.
Постоянно запоминающее устройство(ПЗУ)
Инструкции или последовательность команд для AЛУ хранятся в постоянной памяти — ПЗУ которая представляет собой Flash-память, именно в нее мы записываем исполняемый код написанной нами программы. Каждой команде в ПЗУ соответствует определенный адрес.
Если мы хотим получить какую либо команду то мы должны обратиться к адресу этой команды, обращение к адресам ПЗУ осуществляет счетчик команд.
После того как мы обратитиль к адресу той или иной командны, данные из ПЗУ поступает в регистр команд. АЛУ мониторит наличие команды в регистре и при ее наличии начинает ее выполнять.
Порты ввода/вывода
Для того чтобы наш МК взамодейтствовать с внешним миром существуют порты ввода вывода, именно на них цепляется внешие устройства будть то это кнопка, светодиот, LSD экран или подключение по USB интрефейсу.
Порты можно настроить на прием данных, так и на передачу. Для настройки портов существуют специальные регистры. Для настройки портов на ввод/вывод в эти регистры записываются определенные значения.
Также очень важным узлом любого микронтроллера является тактовый генератор, который синхронизирует работы всего МК. Он может быть как внешним так и внутренним.
Микроконтроллер: определение, задачи, разновидности, применение
Область применения микроконтроллеров безгранична. Их используют в любых электронных устройствах для осуществления контроля. Кроме того, они находятся во всех бытовых приборах – микроволновках, электрочайниках, утюгах, стиральных машинах — микроконтроллер можно запрограммировать под любую функцию.
История появления
Работы над изобретением микропроцессора велись с начала 1970-х годов. Первой компанией, разработавшей его, была компания Intel. Уже в 1971 году ее был выпущен первый микроконтроллер 4004, который состоял из 2300 полупроводниковых транзисторов, а по размеру был не больше ладони. Это стало возможным, после того как для микросхемы был специально разработан кристалл процессора.
В ближайшие полгода еще несколько компаний заявили о создании аналогичных изделий.
К концу 1973 года Intel выпускает 8-зарядный микропроцессор. Он был настолько удачно разработан, что и сегодня считается классикой.
Через несколько месяцев фирма Motorola выпускает свой 8-битовый микропроцессор 6800. Он стал сильным конкурентом интеловской микросхеме, т. к. имел более значительную систему прерываний и одно напряжение электропитания. В 8080 их было три.
Внутренняя архитектура 6800 тоже отличалась. В ней не было регистров общего назначения, в которых могли сохраняться как адресная информация, так и числовые показатели. Вместо них, в процессоре появился еще один полноценный аккумулятор для обработки данных и 16-разрядные регистры для хранения адресов. Работа с памятью у 6800 выполнялась быстрее и была проще, но 8080 тратил меньше времени на обмен внутренней информацией между регистрами.
Оба эти изделия имели как положительные стороны, так и недоработки. Они стали родоначальниками двух больших семейств микропроцессоров – Интел и Моторола, которые конкурируют между собой до сих пор.
В 1978 году Интел выпустила 16-разрядный микропроцессор, который IBM использовала для разработки персональных компьютеров. Моторола не отстала от своего конкурента и тоже выпустила 16-разрядный микропроцессор, который использовали Atari и Apple.
В России пользуются популярностью микроконтроллеры Renesas Electronics, Freescale, Samsung.
Что такое микроконтроллер
Зачастую микроконтроллер называют микропроцессором. Но это не совсем так. Последний осуществляет только определенные математические и логические операции. А в состав микроконтроллера входит и микропроцессор с другими элементами, являясь лишь частью МК.
Принцип работы микроконтроллера
Несмотря на сложное устройство принцип работы микроконтроллера очень прост. Он основан на аналоговом принципе действия. Система понимает лишь две команды («есть сигнал», «нет сигнала»). Из этих сигналов в его память вписывается код определенной команды. Когда МК считывает команду, он ее выполняет.
В каждом из МК прописаны свои базовые наборы команд. И только их он способен принимать и выполнять. Сочетая отдельные команды между собой, можно написать уникальную программу, по которой будет работать любое электронное устройство именно так, как требуется.
В зависимости от содержащихся в МК набора программ, они делятся на:
CISC – комплекс большого числа базовых команд;
RISC – только необходимые команды.
Большинство контроллеров содержит RISC набор. Объясняется это тем, что такой МК проще изготовить, он дешевле и больше пользуется спросом у разработчиков электронной техники.
Назначение и область применения микроконтроллера
Это не полный перечень областей применения МК.
Основное назначение МК – контролировать все процессы, которые происходят на его платформе. От включения или выключения света по хлопку до поднятия штор при изменении освещенности на улице. По сути, МК осуществляет контроль за состоянием неких переменных и изменение системы в динамических условиях.
Питание микроконтроллера
Для работы микроконтроллеру, как и любому электронному устройству, необходима энергия. Напряжение МК Atmel AVR находится в диапазоне 1.8–5.5 Вольт и зависит от модели и серии. Большинство приборов работает от 5 Вольт. Но встречаются и низкочастотные модели (Attiny 2313), нижняя граница у которых от 1,8 В.
Кроме того, на работу МК влияет и частота поступающего тока. Низкое напряжение требует и низких пределов частот. Чем выше частота, тем быстрее работают определенные модели.
Так, чтобы обеспечить работу контроллеров серии AVR, на все плюсовые входы нужно подавать 5 В, а нулевой заземляют.
Если у модели несколько вводов и выводов питания, то подключать их нужно все.
На аналогово-цифровой преобразователь питание подают через дополнительные фильтры. Это поможет избавиться от помех, которые могут изменять показания напряжения. При этом на плюсовой ввод подается напряжение через фильтрующий дроссель. А нулевые выводы разделяют на цифровые и аналоговые. Причем соединяться они могут только в одной точке.
Кроме того, необходимо установить и конденсаторы, лучше керамические, из расчета 1 на 100 нанофарад.
Подключение
Через микроконтроллер можно подключить к локальной сети любой девайс. В качестве таковой можно рассмотреть Ethernet. Прежде всего, определимся с понятиями.
Ethernet – это набор стандартов IEEE 802.3, которые описывают разнообразные технологии локальных сетей: общий канальный уровень и набор технологий физического уровня, включающий в себя для передачи информации оптоволокно, витую пару, коаксиал с различными скоростями.
Каждый из последующих уровней обслуживается предыдущим или нижележащим. Так образуются вертикальные межуровневые связи. Особенности обслуживания каждого уровня скрыты от остальных.
При взаимодействии двух сетей каждый из уровней одной сети контактирует с аналогичным уровнем другой. Так образуются горизонтальные связи.
Управление микроконтроллером
Развитие современных средств связи позволяет управлять контроллерами как через ПДУ, находясь в непосредственной близости к прибору, так и по интернету из любой точки мира через локальную сеть.
Обеспечивает поддержку cети Wi-Fi МК ESP 8266. В продаже он может быть в виде микросхемы или распаян, как arduino. У него 32-битное ядро, программировать его нужно через последовательный порт UART. Бывают более продвинутые платы с возможностью прошивки по USB – это NodeMCU. Они могут хранить информацию, записанную, например, с датчиков. Такие платы работают с различными интерфейсами, в т. ч. SPI, I2S.
Плата может быть использована как самостоятельное устройство и как модуль для беспроводной связи с Ардуино.
Тактирование микроконтроллеров
Тактовая частота МК – это количество тактов за секунду, выполняемых контроллером. Чем она выше, тем большее количество операций он может выполнить.
Для простейших микроконтроллеров подойдут внутренний или внешний генератор и RC-цепочки. Для проектирования более точных МК потребуются стабильные источники тактирования.
Семейства микроконтроллеров
Все МК объединяются в семейства. Основная характеристика, по которой происходит это деление, — структура ядра.
Под ядром МК подразумевают набор определенных команд, цикличность работы процессора, организацию как памяти программ, так и баз данных, систему прерываний и базовый набор периферийных устройств (ПУ).
Различаются представители одного семейства между собой объемом памяти программ и баз данных, а также разнообразием ПУ.
Объединяют все МК в семейства одинаковость двоичного кода программирования.
Это не все семейства микроконтроллеров. Здесь мы привели только основные.
Типы корпусов микроконтроллеров
Каждый из корпусов имеет свои точки применения. Первые 3 могут использоваться радиолюбителями.
В чем отличие микроконтроллера от микропроцессора?
Весь компьютерный функционал микропроцессора (Micro Processor Unit — MPU) содержится на одном полупроводниковом кристалле. По характеристикам он соответствует центральному процессору компьютера ЦП (Central Processing Unit — CPU). Область его применения – хранение данных, выполнение арифметико-логических операций, управление системами.
МП получает данные с входных периферийных устройств, обрабатывает их и передает выходным периферийным устройствам.
Микроконтроллер совмещает в себе микропроцессор и необходимые опорные устройства, объединенные в одном чипе. Если нужно создать устройство, коммуницирующее с внешней памятью или блоком ЦАП/АЦП, то понадобится только подключить источник питания с постоянным напряжением, цепь сброса и источник тактовой частоты.
Устройства на микроконтроллерах
Каждый из видов контроллеров имеет свои периферические устройства, которые работают автономно, т. е. независимо от центрального ядра. После того как периферийное устройство выполнит свою задачу, оно может сообщить об этом ЦП, а может и не сообщать. Это зависит от того, как оно запрограммировано.
Не все из этих периферийных устройств обязательно есть в каждом МК. Существуют и другие, менее распространенные устройства.
Что нужно для программирования микроконтроллера
Чтобы микроконтроллер мог выполнять необходимые функции и решать определенные задачи, его необходимо запрограммировать.
Радиолюбители иногда обходятся без прописывания алгоритма работы программы на бумаги. Они держат его в голове.
Языки программирования
Среда разработки
На сегодня нельзя найти универсальной среды для программирования МК. Это связано с его внутренней структурой и наличием технического обеспечения записи кода в память контроллера.
Среды бывают платные и бесплатные. Выбирая конкретную среду, нужно исходить из ее функционала, языка программирования, поддерживаемых интерфейсов и портов.
Основы программирования
Прежде чем приступать к программированию МК, нужно выбрать язык. Начинать лучше с Ассемблера. Хотя для понимания он достаточно сложен, но если приложить силы и все-таки понять его логику, то тогда станет ясно, что именно происходит в контроллере.
Если Ассемблер окажется сложен, то можно начинать с Си. Одной из сильных его сторон является то, что он хорошо переносит коды с одного вида МК на другой. Но для этого надо правильно все прописать, разделив рабочие алгоритмы и их реализации в машине по разным частям проекта. Это позволит переносить алгоритм в другой контроллер, переделав всего лишь интерфейсный слой, в котором прописано обращение к «железу», оставив рабочий код без изменений.
После того как прописали программу на языке Си, можно понаблюдать, как и что происходит в МК. Это поможет выстроить аналогию с программированием на Ассемблере.
Советы начинающим программистам микроконтроллеров
Никогда не поздно стать радиолюбителем, будь вам 30 лет или 50. И необязательно иметь профильное высшее образование. Сейчас на просторах интернета много доступной информации, изучая которую можно разобраться в устройстве микроконтроллеров и научиться их программировать.
Разработка электроники. О микроконтроллерах на пальцах
Задумывая технологический стартап, вы совсем не обязаны быть асом в электронике, гораздо больше шансов на хорошую идею имеет узкий специалист со знанием основ маркетинга, но, даже заказывая кому-то разработку, ориентироваться в возможностях современной элементной базы и представлять цену решения необходимо обязательно. Иначе можно потребовать невозможного, либо получить устройство с завышенной себестоимостью на устаревшей элементной базе.
Под катом попытка кратко и просто рассказать о возможностях современных микроконтроллеров людям от них далёким. Для тех, у кого есть идея нового электронного устройства, но отсутствует представление о том, что такое микроконтроллер. Те, кто хочет сделать первый шаг от занимательных экспериментов с платформой ардуино к проектированию собственных устройств, также могут найти в ней простые, но полезные советы. Я старался, не останавливаясь на технических подробностях, для этого и книги не достаточно изложить суть и дать несколько простейших, но полезных советов по схемотехнике, чтобы предостеречь от элементарных ошибок начинающих.
Краткое содержание статьи:
Защита кода, возможность его обновления и многообразие помогли микроконтроллерам завоевать мир
Любой умный прибор требует управления. В большинстве случаев сегодня этим занимаются микроконтроллеры — чипы, которые совмещают в себе микропроцессорное ядро, память и периферийные модули, отвечающие за связь с остальными компонентами устройства и внешним миром.
Микроконтроллеры — мастера на все руки. Один микроконтроллер способен заменить десятки специализированных микросхем, которые были бы необходимы для выполнения требуемых функций в случае, если бы роль вычислителя занимал микропроцессор.
Одно из неоспоримых преимуществ микроконтроллера — программа, под управлением которой он работает, скрыта внутри его корпуса (в секции под названием “память программ”) и очень хорошо защищена от взлома, конечно, в случае, если разработчик микрокода об этом позаботился, активизировав встроенные механизмы защиты. Таким образом, вы получаете защиту интеллектуальной собственности настолько большую, насколько это возможно в наши дни.
Что нельзя взломать — то можно скопировать. Зачем пытаться считать код, встроенной в микроконтроллер программы, с помощью дорогостоящих хитроумных приспособлений, если проще и дешевле найти профессионала, который может написать его заново? Возможно результат будет даже лучше, а функционал богаче чем у прототипа. Да это стоит денег, но содержание 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 потребляет ещё в два раза меньше.
Последний, весьма экзотический режим, напоминает уже кому, из которой нельзя выйти без специального оборудования. В этом случае работает только специальный генератор тем не менее, являющийся частью микроконтроллера на отдельном часовом кварце, который может функционировать от собственного источника питания и иметь буквально несколько байт оперативной памяти, предназначение которой напомнить микроконтроллеру о том, из какого состояния он в эту кому впал. Если остальные части микроконтроллера, при этом, отключить от питания, то энергопотребление может составить уже одну десятитысячную часть от активного режима.
Выбирая режим экономии энергопотребления необходимо помнить о последствиях применения:
Если ваши программист со схемотехником не первый день винят друг друга в криворукости и, вместе, производителя в публикации нереальных цифр в даташитах на микроконтроллер, а ваше устройство сажает батарейки на порядок быстрее, чем вы рассчитывали, это повод, по крайней мере, обратиться к независимым высококвалифицированным экспертам.
Совсем коротко о технологии изготовления и о том, как появляются серии микроконтроллеров
Физически активная часть микроконтроллера, как и подавляющее количество других микросхем, обычно сформирована на пластине монокремния (назовём его, в данном контексте, ЧИП). Чипы занимают очень маленькую площадь, технологически же выгодно производить пластины большого диаметра, поэтому, обычно большое количество чипов, как соты, размещают на одной большой пластине и формируют, в ходе одного технологического процесса. В последствии пластины нарезают на кусочки, получая уже отдельные чипы, которые и помещают в корпуса. Разработка топологии и отладка технологических процессов нового чипа стоит очень дорого, а занимаемое на пластине одним чипом место, как правило, не велико. Производителям выгодно выпускать чипы крупными партиями, но пользователям требуются микроконтроллеры в разных корпусах — кому то важно получить корпус поменьше и подешевле, другому наоборот требуется побольше выводов, чтобы управлять LCD или внешней памятью с параллельным интерфейсом. Производителям выгодно перекрывать все ниши, чтобы клиенты не перебегали к конкурентам, не найдя оптимальной для себя модели.
Очень часто бывает выгодней выпустить крупной партией один универсальный чип и помещать его в разные корпуса, чем запускать десяток различных. У чипов, помещённых в корпуса с малым количеством выводов, часть портов (в данном контексте, под портами будем понимать контактные площадки на поверхности чипа, служащие для общения с внешним миром) просто останутся неподсоединёнными. Часто производители идут дальше — чтобы поднять спрос и цену на микроконтроллеры с большим количеством ножек, они искусственно обрезают функциональность тех, у которых их меньше — отключают некоторые функции, ограничивают объём доступной памяти и т. п.
Так на основе одного чипа формируют серии микроконтроллеров, существенно отличающиеся по объёму памяти и набору периферийных модулей, иной раз и в разы по цене. При этом чипы, в них установленные, могут нарезаться из одних и тех же пластин. Поскольку площадь, на которой размещается один чип, невелика, вклад её в себестоимость конечного изделия также мал и им можно пожертвовать. Становится выгодным отключение дополнительной памяти и других функций, например, на этапе тестирования — либо с помощью однократно программируемых битов конфигурации, либо пережиганием перемычек лазером. Лишь для наиболее массовых изделий имеет смысл для этого создавать слегка изменённый фотошаблон. Причём, совсем не обязательно там будет физически отсутствовать неиспользуемая память, её, опять же, можно просто отключить, удалив перемычки в шаблоне.
Так из одного стандартного дизайна чипа формируется целая серия микросхем.
Периферия простейшего ARM микроконтроллера за пол бакса
Процессорное ядро — это мозг, но, чтобы он не был подобен “сферическому коню в вакууме”, требуются аналоги органов чувств и конечностей.
В микроконтроллере их роль играют выводы на корпусе, к которым внутри корпуса могут подключаются порты(контактные площадки) чипа. В свою очередь, через внутренние коммутаторы, к одному и тому же порту могут подключаться различные периферийные модули.
Для начала рассмотрим периферию одной из простейших серий от ST на основе ядра Cortex-M0 — stm32F03.
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-битных микроконтроллеров. Они управляются через шину, и их быстродействие зависит от частоты тактирования соответствующего узла, которую можно менять программно. Если вы хотите быстрой реакции, позаботьтесь об увеличении этой частоты, если важнее уменьшить энергопотребление, наоборот выберите менее скоростной режим.
Температурный сенсор Микроконтроллер имеет свой собственный температурный сенсор, правда не слишком точный, тем не менее его можно, с определёнными допущениями, использовать для измерения температуры внутри корпуса прибора.
Уникальный серийный номер Каждый микроконтроллер имеет свой уникальный серийный номер, присвоенный ему на производстве. Очень удобная особенность, которую можно использовать при организации серийного производства ваших изделий.
Интерфейсы обмена данными Различные микроконтроллеры данной серии могут иметь по нескольку наиболее распространённых интерфейсов, сильно облегчающих общение с другими чипами и внешним миром:
Аналого-цифровой преобразователь АЦП или ADС на котором придётся остановиться подробнее.
Чрезвычайно полезный модуль, который способен измерять напряжение аналоговых сигналов. Оценивает он их в долях от величины опорного источника сигнала, в нашем случае это напряжения питания аналогового модуля микроконтроллера, которое может быть равным или немного ниже основного напряжения питания чипа. Теоретическая точность работы АЦП зависит от его разрядности. В современных микроконтроллерах чаще всего применяется 12 разрядный АЦП последовательного приближения, реже 10 и как экзотика встречается 16.
При питании 3 вольта 12 разрядный АЦП микроконтроллера будет иметь разрешающую способность 3/4096=0.00073 Вольта — лучше одного милливольта.
Но на практике достичь этого идеала бывает не просто.
На практике всё бывает далеко не так красиво и точность измерений может снижаться по многим причинам. Ниже перечисляю основные, хорошо известные любому опытному электронщику, а также простые но эффективные способы сведения их пагубного влияния до минимума
нестабильность напряжения источника питания АЦП
Выше изображён участок реальной схемы для подачи питания на аналоговую часть микроконтроллера в устройстве с батарейным питанием. В данном случая я использовал АЦП для оцифровки сигнала с аналогового 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 окупится сторицей.
Что можно получить, добавив 30 центов?
Переход на Cortex-M0+. Самый дешёвый способ получить дополнительные функции
А какие дополнительные плюшки предлагает микроконтроллер новейшей серии с ядром чуть посовременнее Cortex-M0+, при стоимости на 20-50 центов дороже аналогов в рассмотренной выше серии по корпусу и количеству выводов?
Таблица отличий между сериями
А что добавит переход на Cortex-M4, кроме возросшей в пару раз цены?
Cortex-M7 — когда хочется большего.
В подавляющем количестве проектов возможностей предоставляемых вышеописанными ядрами достаточно, но случаются и исключения. Лично со мной такое случалось всего пару раз, причём лишь один раз по действительно уважительной причине — требовалась высокая производительность для подготовки данных для ASIC, контроллер Ethernet и шина CAN-FD c повышенной скоростью обмена.
Если на уровне универсальных микроконтроллеров с ядрами Cortex 4 и ниже, на мой субъективный взгляд, по параметру цена/функциональность сейчас лидирует фирма ST, то в области более высокопроизводительных чипов она уступает лидерство ATMEL, вернее, теперь уже недавно поглотившему его MICROCHIP. Поэтому я остановил свой выбор на серии ATSAMV71, стоимостью от 6 долларов.
Помимо вышеописанного (контроллер Ethernet и шина CAN-FD), по большому счёту, мы получаем, существенно увеличивающее производительность ядро с ускорителем операций, работающее на тактовой частоте до 300 МГц, интерфейсы для подключения видеоматрицы и поддержку динамической памяти.
В заключении попрошу имеющих опыт общения с микроконтроллерами попрошу выбрать подходящий ответ на вопрос.