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

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

Микроконтроллер теперь можно встретить в школьных проектах, в любительских электронных устройствах и даже в DIY-украшениях. Однако, слово есть, а его содержимое чаще всего остаётся загадкой для многих пользователей. Микроконтроллер — чёрный ящик, который может «оживлять» самодельные устройства с помощью программы. Но что же такое микроконтроллер и как он устроен?

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

pi-top

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

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

микропроцессор amd ryzen

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

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

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

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

А теперь разберёмся подробнее с тем как устроен микроконтроллер.

Цифровая электроника

Микроконтроллер относится к цифровым устройствам. Это значит, что он умеет считывать, обрабатывать и генерировать цифровые сигналы. Но что такое цифровой сигнал?

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

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

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

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

Выводы общего назначения — GPIO

Одна из важнейших подсистем микроконтроллера — это интерфейс GPIO (General Purpose Inputs Outputs). С английского GPIO переводится как: «входы/выходы общего назначения», или как: «выводы общего назначения». Эти выводы могут регистрировать и генерировать цифровые сигналы. А внутренняя логика обработки этих сигналов обеспечивается программой.

Каждый контакт GPIO может работать в двух режимах: в режиме выхода (OUTPUT) и в режиме входа (INPUT).

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

GPIO схема

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

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

Разумеется с помощью GPIO можно программно реализовать и любой цифровой протокол обмена данными: UART, I2C, SPI и т.п., правда, с некоторыми негативными последствиями.

Память

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

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

ОЗУ — оперативное запоминающее устройство или оперативная память. Эта память используется для хранения переменных и стека в ходе выполнения программы. ОЗУ является энергозависимым, значит при выключении питания память полностью очищается.

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

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

Аппаратные интерфейсы

Как уже упоминалось выше с помощью GPIO можно организовать обмен данными с другими устройствами по любому протоколу, будь то I2C, SPI или UART. Но такой подход чреват разными неприятностями:

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

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

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

ШИМ, АЦП и ЦАП

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

ШИМ — широтно импульсная модуляция. Применяется для управления двигателями и другой мощной нагрузкой, например, светодиодами.

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

ЦАП — цифро-аналоговый преобразователь. Может создать на контакте напряжение произвольной величины.

Отладочная плата

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

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

Пожалуй, самая популярная отладочная плата среди любителей — это Arduino UNO. Разработчики этой платы, а также специальной среды разработки для неё — Arduino IDE, сделали настоящий прорыв в области DIY-электроники. Благодаря концепции Arduino программировать микроконтроллеры смогли даже люди, не обладающие глубокими техническими знаниями.

Сегодня имеется множество плат совместимых с Arduino UNO. Например, UNO2 от RobotClass или RedBoard от Sparkfun:

Разумеется, есть отладочные платы и на основе других микроконтроллеров. Вот некоторые из известных:

Blue Pill — плата на основе STM32F103C8T6; кроме Blue Pill существуют и другие варианты с разными МК из серии STM32;

Node MCU — серия отладочных плат на основе SoC ESP, включая ESP8266 и ESP32.

Adafruit Feather — линейка плат компании Adafruit на разных микроконтроллерах, включая Atmega, ESP/ESP32, RP2040;

Графит — отладочные платы на основе ESP/ESP32 и RP2040, разработанные в RobotClass (подробнее про Графит с ESP32).

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

Программа

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

Как и в случае программ для компьютера, разработка программ для МК ведётся в среде разработки (IDE). Среда разработки — это приложение для компьютера, в котором есть редактор исходного кода и различные инструменты для его обработки, компиляции и отладки, включая и загрузку на микроконтроллер.

Ниже список известных IDE для популярных в DIY микроконтроллеров.

Arduino IDE — изначально разработана для отладочных плат Arduino с микроконтроллером Atmega. В дальнейшем её функционал расширен настолько, что она может работать с большим количеством других МК.

STM32CubeIDE — официально поддерживаемая ST Microelectronics среда разработки для МК их производства.

Keil MDK — мощная IDE для микроконтроллеров с архитектурой ARM Cortex-M;

PlatformIO — расширение для Visual Studio Code, которое поддерживает множество платформ и микроконтроллеров, включая Arduino, ESP и другие.

Code Composer Studio — этой IDE пользуются для разработки под микроконтроллеры и процессоры Texas Instruments, включая MSP430 и Sitara.

IAR Embedded Workbench — коммерческая IDE, поддерживающая широкий спектр архитектур микроконтроллеров. Известна своей эффективностью и оптимизацией.

Atmel Studio — Ранее известен как AVR Studio, эта IDE предназначена для разработки под микроконтроллеры Atmel AVR и ARM, теперь принадлежащие Microchip.

Загрузка на микроконтроллер

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

Загрузка через программатор

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

Например, для прошивки STM32 можно использовать программатор ST-Link Mini V2. Для прошивки микроконтроллеров Atmega, который используются в платах Arduino, подойдёт программатор AVR ASP.

Загрузка с помощью загрузчика

Загрузчик — это такая программа, однажды помещённая в память микроконтроллера и позволяющая прошивать его через доступные интерфейсы: UART, USB, SPI, даже через WiFi.

Например, в отладочных платах Arduino имеется загрузчик, который работает с UART. Чтобы им воспользоваться, необходимо подключить плату к USB-порту компьютера через преобразователь интерфейса USB-UART (его ещё называют USB-UART мост). Этот преобразовательно может быть отдельным устройством, либо быть встроенным в саму отладочную плату, как на Arduino UNO.

Когда микроконтроллер подключается таким образом к компьютеру, то в операционной системе последнего автоматически определяется новый последовательный порт. В Windows он называется COM-порт, в Linux — tty. Дальнейшие действия зависят от программных инструментов, с которыми работает разработчик. Например, в Arduino IDE достаточно будет указать в настройках правильный COM-порт и смело прошивать микроконтроллер своей программой.


Изменено:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.