Введение

Микроконтроллер (MC, UC или μC) или микроконтроллерный блок (MCU) — это небольшой компьютер на одной интегральной схеме. Микроконтроллер содержит один или несколько процессоров (процессорных ядер) вместе с памятью и программируемыми периферийными устройствами ввода-вывода. Программная память в виде флэш-памяти NOR, OTP-ROM или ферроэлектрической оперативной памяти также часто интегрирована в чип, наряду с небольшим объемом оперативной памяти. Микроконтроллеры предназначены для встраиваемых приложений, в отличие от микропроцессоров, используемых в персональных компьютерах или других приложениях общего назначения, состоящих из различных дискретных микросхем. В современной терминологии микроконтроллер аналогичен, но менее сложен, чем система на кристалле (SoC). SoC может включать в себя микроконтроллер как один из своих компонентов, но обычно интегрирует его с продвинутыми периферийными устройствами, такими как графический процессор (GPU), модуль Wi-Fi или один или несколько сопроцессоров. Микроконтроллеры используются в автоматически управляемых продуктах и устройствах, таких как системы управления двигателем автомобиля, имплантируемые медицинские устройства, пульты дистанционного управления, офисная техника, бытовая техника, электроинструменты, игрушки и другие встраиваемые системы. За счет уменьшения размера и стоимости по сравнению с конструкцией, использующей отдельный микропроцессор, память и устройства ввода-вывода, микроконтроллеры делают цифровое управление большим количеством устройств и процессов практичным. Микроконтроллеры со смешанными сигналами распространены, интегрируя аналоговые компоненты, необходимые для управления нецифровыми электронными системами. В контексте интернета вещей микроконтроллеры являются экономичным и популярным средством сбора данных, восприятия и управления физическим миром в качестве периферийных устройств. Некоторые микроконтроллеры могут использовать четырехбитные слова и работать на частотах до 4 кГц для низкого энергопотребления (однозначные милливатты или микроватты). Они обычно сохраняют функциональность в ожидании события, такого как нажатие кнопки или другое прерывание; потребление энергии в режиме сна (часы процессора и большинство периферийных устройств выключены) может составлять всего нановатты, что делает многие из них хорошо подходящими для длительной работы от батарей. Другие микроконтроллеры могут выполнять критически важные функции, где им может потребоваться действовать больше как цифровой сигнальный процессор (DSP) с более высокой тактовой частотой и энергопотреблением.

Разработка

В одной книге инженерам TI Гэри Буну и Майклу Кокрану приписывают успешное создание первого микроконтроллера в 1971 году. Результатом их работы стал TMS 1000, который поступил в коммерческую продажу в 1974 году. Он объединил память только для чтения, память для чтения/записи, процессор и тактовый генератор на одном чипе и был предназначен для встраиваемых систем. В начале – середине 1970-х годов японские производители электроники начали выпускать микроконтроллеры для автомобилей, включая 4-битные MCU для автомобильных развлекательных систем, автоматические стеклоочистители, электронные замки и приборные панели, а также 8-битные MCU для управления двигателем. Частично в ответ на появление однокристального TMS 1000, Intel разработала компьютерную систему на чипе, оптимизированную для задач управления, – Intel 8048, первые коммерческие образцы которой начали поставляться в 1977 году. Она позволяла быстро стирать данные электрически без использования дорогостоящей упаковки, необходимой для EPROM, что обеспечивало быструю разработку прототипов и внутрисистемное программирование. (Технология EEPROM существовала и ранее, но ранние EEPROM были дороже и менее надежны, что делало их непригодными для недорогих микроконтроллеров массового производства.) В том же году Atmel представила первый микроконтроллер, использующий флэш-память – особый тип EEPROM. Другие компании быстро последовали этому примеру, используя оба типа памяти. Сегодня микроконтроллеры дешевы и легко доступны для любителей, вокруг определенных процессоров сформировались крупные онлайн-сообщества.

Объем и стоимость

В 2002 году около 55% всех проданных в мире процессоров были 8-битными микроконтроллерами и микропроцессорами. В 1997 году было продано более двух миллиардов 8-битных микроконтроллеров, а в 2006 году, по данным Semico, было продано более четырех миллиардов 8-битных микроконтроллеров. Недавно Semico заявила, что рынок MCU вырос на 36,5% в 2010 году и на 12% в 2011 году. В среднем в доме в развитой стране может быть всего четыре микропроцессора общего назначения, но около трех десятков микроконтроллеров. Типичный автомобиль среднего класса имеет около 30 микроконтроллеров. Их также можно найти во многих электрических устройствах, таких как стиральные машины, микроволновые печи и телефоны. Стоимость производства может быть менее за единицу. Стоимость со временем резко упала, при этом самые дешевые 8-битные микроконтроллеры были доступны менее чем за 0,03 доллара в 2018 году, а некоторые 32-битные микроконтроллеры – около за аналогичные количества. В 2012 году, после глобального кризиса – самого значительного ежегодного падения продаж и последующего восстановления, а средняя цена продажи в годовом исчислении упала на 17% – самое большое снижение с 1980-х годов – средняя цена микроконтроллера составила (за 4/8-битные), (за 16-битные) и (за 32-битные). В 2015 году 8-битные микроконтроллеры можно было купить за (1000 единиц), 16-битные – за (1000 единиц), а 32-битные – за (1000 единиц, но за за 5000 единиц). В 2018 году 8-битные микроконтроллеры можно было купить за , а 32-битные – за (1000 единиц, но за за 5000 единиц). В 2018 году указанные выше недорогие микроконтроллеры 2015 года стоили дороже (с учетом инфляции, рассчитанной между ценами 2018 и 2015 годов для этих конкретных единиц): 8-битный микроконтроллер можно было купить за (1000 единиц), что на 2,6% выше. Устройство в 10 раз меньше, чем ранее заявленный IBM компьютер-рекордсмен, продемонстрированный в марте 2018 года, который "меньше крупинки соли", содержит миллион транзисторов, стоит менее для производства и, в сочетании с технологией блокчейн, предназначен для логистики и "криптоякорей" – приложений цифровых отпечатков.

Встроенный дизайн

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

Перерывы

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

Программы

Обычно программы для микроконтроллеров должны помещаться в доступную память на чипе, поскольку использование внешней, расширяемой памяти было бы дорогостоящим. Компиляторы и ассемблеры используются для преобразования кода на языке высокого уровня и ассемблера в компактный машинный код для хранения в памяти микроконтроллера. В зависимости от устройства, программная память может быть постоянной, памятью только для чтения, которая может быть запрограммирована только на заводе, или же энергонезависимой флэш-памятью или памятью стираемого ПЗУ, которую можно изменять в процессе эксплуатации. Производители часто выпускали специальные версии своих микроконтроллеров, чтобы облегчить разработку аппаратного и программного обеспечения целевой системы. Изначально это были версии EPROM с "окном" в корпусе, через которое память программы можно было стирать ультрафиолетовым светом, подготавливая её к перепрограммированию после цикла программирования ("прожига") и тестирования. С 1998 года версии EPROM стали редкостью и были заменены EEPROM и флэш-памятью, которые проще в использовании (их можно стирать электронным способом) и дешевле в производстве. Существуют и другие версии, в которых к ПЗУ обращаются как к внешнему устройству, а не как к внутренней памяти, однако они становятся все менее распространенными благодаря широкой доступности недорогих программаторов микроконтроллеров. Использование полевых программируемых устройств в микроконтроллере может позволить обновлять прошивку в процессе эксплуатации или вносить изменения на заводе в продукты, которые были собраны, но еще не отгружены. Программируемая память также сокращает время, необходимое для вывода нового продукта на рынок. Если требуется сотни тысяч идентичных устройств, экономически целесообразно использовать детали, запрограммированные во время производства. Эти детали с "масочной программой" имеют программу, записанную таким же образом, как и логика чипа, одновременно с её формированием. Настраиваемый микроконтроллер включает в себя блок цифровой логики, который можно адаптировать для повышения вычислительной мощности, добавления периферийных устройств и интерфейсов, соответствующих требованиям приложения. Примером является AT91CAP от Atmel.

Другие характеристики микроконтроллера

Микроконтроллеры обычно содержат от нескольких до десятков контактов общего назначения ввода/вывода (GPIO). GPIO-пины конфигурируются программно для работы либо как вход, либо как выход. Когда GPIO-пины настроены как вход, они часто используются для считывания данных с датчиков или внешних сигналов. При настройке на выход GPIO-пины могут управлять внешними устройствами, такими как светодиоды или двигатели, часто косвенно, через внешнюю силовой электронику. Многие встраиваемые системы нуждаются в считывании датчиков, генерирующих аналоговые сигналы. Для этого и предназначен аналого-цифровой преобразователь (АЦП). Поскольку процессоры предназначены для интерпретации и обработки цифровых данных, то есть 1 и 0, они не могут работать с аналоговыми сигналами, поступающими от устройств. Поэтому аналого-цифровой преобразователь используется для преобразования входящих данных в формат, который процессор может распознать. Менее распространенной функцией некоторых микроконтроллеров является цифро-аналоговый преобразователь (ЦАП), позволяющий процессору выводить аналоговые сигналы или уровни напряжения. Помимо преобразователей, многие встраиваемые микропроцессоры включают в себя различные таймеры. Одним из наиболее распространенных типов таймеров является программируемый интервальный таймер (ПИТ). ПИТ может отсчитывать либо от определенного значения до нуля, либо до максимального значения регистра счетчика, после чего происходит переполнение до нуля. Достигнув нуля, он отправляет прерывание процессору, сообщая об окончании отсчета. Это полезно для устройств, таких как термостаты, которые периодически измеряют температуру окружающей среды, чтобы определить, нужно ли включить или выключить кондиционер, обогреватель и т. д. Специализированный блок широтно-импульсной модуляции (ШИМ) позволяет процессору управлять преобразователями мощности, резистивными нагрузками, двигателями и т. п., не перегружая процессор узкими циклами таймера. Универсальный асинхронный приемопередатчик (UART) обеспечивает прием и передачу данных по последовательной линии с минимальной нагрузкой на процессор. Специализированное аппаратное обеспечение на чипе также часто включает в себя средства связи с другими устройствами (чипами) в цифровых форматах, таких как межчиповая шина (I²C), последовательный периферийный интерфейс (SPI), универсальная последовательная шина (USB) и Ethernet.

Программные среды

Микроконтроллеры изначально программировались только на языке ассемблера, но различные языки программирования высокого уровня, такие как C, Python и JavaScript, теперь также широко используются для разработки программного обеспечения для микроконтроллеров и встраиваемых систем. Компиляторы для языков общего назначения обычно имеют некоторые ограничения и улучшения, чтобы лучше поддерживать уникальные особенности микроконтроллеров. Некоторые микроконтроллеры предоставляют среды разработки, облегчающие создание определенных типов приложений. Производители микроконтроллеров часто предоставляют инструменты для упрощения освоения их оборудования. Микроконтроллерам со специализированным аппаратным обеспечением могут потребоваться собственные нестандартные диалекты языка C, такие как SDCC для 8051, что препятствует использованию стандартных инструментов (например, библиотек кода или инструментов статического анализа) даже для кода, не связанного с аппаратными функциями. Интерпретаторы также могут содержать нестандартные функции, например, в MicroPython, хотя форк CircuitPython стремится перенести аппаратные зависимости в библиотеки и привести язык к большему соответствию стандарту CPython. Для некоторых микроконтроллеров доступна интерпретаторная прошивка, например, BASIC для раннего микроконтроллера Intel 8052, BASIC и FORTH для Zilog Z8, а также на некоторых современных устройствах. Как правило, эти интерпретаторы поддерживают интерактивное программирование. Для некоторых микроконтроллеров доступны симуляторы, позволяющие разработчику анализировать поведение микроконтроллера и программы, как если бы использовалась реальная аппаратная часть. Симулятор отображает состояние внутреннего процессора и выходов, а также позволяет генерировать входные сигналы. Хотя большинство симуляторов ограничены невозможностью моделирования большого количества внешнего оборудования системы, они позволяют воспроизводить условия, которые сложно воссоздать в физической реализации, и могут быть самым быстрым способом отладки и анализа проблем. Современные микроконтроллеры часто интегрированы с отладочными схемами на чипе, которые при подключении к эмулятору в схеме (ICE) через JTAG позволяют отлаживать прошивку с помощью отладчика. ICE в реальном времени может позволять просматривать и/или изменять внутренние состояния во время работы. Трассировочный ICE может записывать выполненную программу и состояния микроконтроллера до и после точки срабатывания.

Технология памяти

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

Данные

С самых ранних микроконтроллеров и до наших дней, SRAM на шести транзисторах почти всегда используется как оперативная память для чтения и записи, а в регистровом файле используется на несколько транзисторов больше на бит. Помимо SRAM, некоторые микроконтроллеры также оснащены внутренней EEPROM и/или NVRAM для хранения данных; а те, у которых их нет (например, BASIC Stamp), или где внутренней памяти недостаточно, часто подключаются к внешней EEPROM или микросхеме флэш-памяти. Некоторые микроконтроллеры, начиная с 2003 года, имеют флэш-память с возможностью самопрограммирования.

Ферм-устройство

Самые ранние микроконтроллеры использовали маскированные ПЗУ для хранения прошивки. Более поздние микроконтроллеры (такие как ранние версии Freescale 68HC11 и ранние микроконтроллеры PIC) имели память EPROM, которая использовала полупрозрачное окно для стирания ультрафиолетовым светом, в то время как серийные версии не имели такого окна и были однократно программируемыми (OTP). Обновление прошивки было равносильно замене самого микроконтроллера, поэтому многие устройства нельзя было модернизировать. Motorola MC68HC805 стал первым микроконтроллером, использующим EEPROM для хранения прошивки. Микроконтроллеры EEPROM стали более популярными в 1993 году, когда Microchip представил PIC16C84, а Atmel – микроконтроллер с ядром 8051, который впервые использовал память NOR Flash для хранения прошивки. Сегодня практически все микроконтроллеры используют флэш-память, некоторые модели – FRAM, а отдельные сверхдешевые компоненты – OTP или маскированные ПЗУ.