Микроконтроллер, МК (Microcontroller Unit, MCU, MC, UC, μC) - программируемая цифровая микросхема, состоящая из процессора и широкого набора периферийных блоков. Если проводить аналогию с компьютером, то процессор - это просто процессор, а микроконтроллер - это весь компьютер целиком. Точнее, его системный блок. В одной микросхеме могут умещаться в различных сочетаниях и количествах:
- Процессор со всеми своими блоками
- Постоянная память (ROM, Flash)
- Оперативная память (RAM, SRAM, DRAM)
- Энергонезависимая память (EEPROM)
- Тактовый генератор
- Сторожевой таймер (Watchdog timer)
- ШИМ контроллер (PWM)
- Многоцелевой таймер
- Часы реального времени
- Аналогово-цифровой преобразователь (АЦП, ADC)
- Цифро-аналоговый преобразователь (ЦАП, DAC)
- Компаратор
- Источник опорного напряжения
- Универсальные цифровые порты ввода-вывода (GPIO)
- Интерфейсы ввода-вывода (UART, I²C, SPI, CAN, USB...)
- Контроллеры сенсорных кнопок
- Контроллеры бесколлекторных и шаговых двигателей
- Контроллеры дисплеев, камер и клавиатур
Процессору для работы нужна дополнительная периферия (память, устройства ввода-вывода, и т.д.), микроконтроллер же работает самостоятельно - у него всё это есть внутри, включая процессор
Существует огромное разнообразие производителей и моделей МК, от простых и дешёвых до навороченных и дорогих. По-хорошему, микроконтроллер подбирается под задачу, так как если это серийное производство - важен каждый цент, а за каждую "фичу" и байт памяти приходится платить.
Блок-схема ESP32 - одного из самых навороченных МК (SoC) с WiFi и Bluetooth
Благодаря такому разнообразию встроенного оборудования и возможности программироваться, один МК может заменить собой огромную и очень сложную электронную схему. Более того, практически любые доработки, изменения и исправления ошибок производятся в программе очень быстро и просто по сравнению с изменением классической электронной схемы. В то же время МК по сути умеет выполнять по заданной программе всего 3 элементарных действия:
- Производить вычисления
- Измерять напряжение на выводах
- Выдавать напряжение на выводах
Но этого достаточно для того, чтобы подключать к нему любые другие микросхемы, электронные компоненты и прочие железки. МК может быть мозгом и сердцем электронных устройств разной степени сложности, от светодиодной мигалки до шагающего робота с камерой и распознаванием лиц нейросетью.
Устройства на основе МК окружают нас повсюду: это компоненты умного дома, стиральные машины, микроволновки, станки с ЧПУ, принтеры, компьютерные клавиатуры и мыши, электронные игрушки... Такие устройства попадают под понятие встраиваемых систем (embedded system) - система на основе МК или другого микропроцессора, которая работает непосредственно в устройстве, т.е. "встроена" в него. Также все вот эти поделки на Arduino - это embedded.
SoC #
Система на кристалле (System-on-a-Chip, SoC) - это набор аппаратных блоков, расположенных на одном кристале внутри одной микросхемы. Между понятиями МК и SoC довольно широкая граница, по сути SoC - это сильно навороченный МК, внутри которого может быть несколько процессоров и гораздо более сложная периферия, например несколько МБ памяти, специальные ядра для обработки информации, блоки шифрования, цифровые сигнальные процессоры (DSP), регуляторы и стабилизаторы напряжения, радиопередатчики и приёмники с антенной, SoC может работать на операционной системе, например Linux. Если МК используется в не очень производительных устройствах, то SoC может стоять в смартфоне или WiFi роутере.
Программирование МК #
Большинство МК программируются на C/C++ с использованием соответствующего компилятора под конкретную архитектуру. Есть бесплатные компиляторы, есть платные, есть как с открытым исходным кодом, так и с закрытым. Одного компилятора будет мало - код сначала нужно где-то написать, то есть нужен текстовый редактор кода. А затем загрузить в МК - процесс и способ загрузки отличается у разных семейств и архитектур и часто требует внешнего устройства - программатора, который позволяет компьютеру подключиться к МК для загрузки скомпилированной программы - бинарника. На стороне компьютера нужна специальная утилита для загрузки. Модели МК с WiFi или другим радио на борту могут прошиваться без проводов "по воздуху" (Over The Air, OTA).
Бинарник также называют прошивкой (firmware). В то же время "прошивка", как глагол - процесс загрузки бинарника в память МК. Прошивка прошивки, вот такие дела
Загрузчик #
Есть два способа загрузки прошивки в МК - напрямую через программатор и через загрузчик (bootloader). Программатор позволяет писать данные с компьютера сразу в память МК, а также читать содержимое его памяти. Загрузчик же - отдельная специальная прошивка, расположенная в своей отдельной области памяти МК. Он позволяет загружать основную прошивку различными способами, например по USB, по интерфейсу UART или даже с подключенной SD карты памяти. К некоторым МК можно написать свой загрузчик под свои цели и задачи.
IDE #
Таким образом для работы с МК нам понадобится как минимум:
- Сам МК
- Программатор
- Редактор кода
- Компилятор
- Утилита для загрузки
По сути можно писать код хоть в блокноте, затем компилировать его и загружать при помощи внешней утилиты, но в современном мире всё это объединяется в IDE - интегрированной среде разработки (Integrated Development Environment). Это специальная программа, в которой есть и удобный редактор, и компилятор со всеми утилитами уже туда встроен. Почти у каждого производителя МК есть своя IDE под его продукцию (CUBE IDE, Microchip Studio, ESP-IDF), но также существуют и универсальные IDE, которые поддерживают МК от разных производителей и с разными архитектурами (Arduino IDE, VS Code, Eclipse IDE).
В данном разделе уроков мы рассматриваем только общие понятия, в других разделах по разным семействам МК есть более подробная информация по работе с конкретными IDE
Отладочная плата #
Популярные модели МК можно встретить в виде отладочной платы (development board, dev board) - это печатная плата, на которой распаян МК со всей необходимой обвязкой для питания и стабильной работы, могут присутствовать кнопки и светодиоды для отладки, дисплеи, камеры и другие устройства. Ножки микросхемы МК выведены на пины по краям платы для удобного подключения и сборки макетов, а также на плате может находиться USB порт и программатор для загрузки прошивки. Именно в таком виде удобнее всего собирать прототипы или просто изучать работу с МК.
Основные тезисы урока #
- Микроконтроллер - это процессор с набором дополнительной периферии, который может работать сам по себе
- МК может заменить собой большую электронную схему
- В общем случае МК может программироваться, читать и выдавать напряжение на своих выводах
- SoC - ещё более мощный и навороченный микроконтроллер
- Программатор позволяет писать данные напрямую в память МК
- Загрузчик - вспомогательная прошивка в памяти, нужен для загрузки основной прошивки разными способами без использования программатора
- Для программирования МК нужен редактор кода, компилятор, утилита для загрузки и программатор, либо IDE + программатор
- Отладочная плата - удобная плата с МК и всем необходимым для его работы и загрузки прошивки