Понятие «микроконтроллер» (МК), как собственно он сам, устойчиво вошло в обиход. Уже практически каждое электронное устройство — от домашних кофеварок до промышленных роботов — базируется на этих миниатюрных, но мощных комплектующих. По сути, на полноценных компьютерах со всем присущим им оборудованием (вычислительным ядром, оперативной и долговременной памяти, интерфейсами ввода/вывода), но в виде единой крошечной микросхемы.
Это помогло упростить и ускорить разработку электронных микроконтроллерных устройств, оставляя разработчикам микросхем «аппаратные» заботы, при этом возлагая на плечи инженера-электроника встраиваемой системы только «программную» ношу. Статья познакомит читателя с особенностями микроконтроллеров, которые находят применение как в любительских DIY-устройствах, так и в сложной промышленной аппаратуре.
Время чтения: 19 минут
Микроконтроллеры? Это очень просто!
Раньше сложные электронные устройства собирались по близкой к компьютерам концепции:
- на плате располагался отдельный распространённый микропроцессор (как правило, Zilog Z80, Motorola 68000, Intel 8086 или любой другой);
- стояла одна или несколько микросхем оперативной и постоянной памяти, содержащие исполняемый код;
- стояли микросхемы для взаимодействия этой «могучей кучки» с «внешним миром».
Из-за множества разнообразных микросхем (и других компонентов, поддерживающих их работоспособность) естественным образом увеличивается стоимость и время разработки, повышаются требования к квалификации инженеров-электроников.
Но ведь по сути только программный код, выполняемый процессором, будет определять функционал конечного устройства, а аппаратная «начинка» типовая. Так почему же не сделать микропроцессор, память и порты ввода/вывода в виде единого узла, который будет прост, дёшев, удобен в программировании?
Такую задачу перед собой поставили производители, выпустив на рынок десятки тысяч (по информации на 2025 год) разнообразных моделей МК: от чрезвычайно простых (к примеру, PIC10F), используемых в игрушках, до ультрапроизводительных, созданных для управления космическими летательными аппаратами. Даже в горячо любимой всеми программно-аппаратной платформе Arduino, в зависимости от модификации, применяются до десяти разных микроконтроллеров, а не только единственный «великий и ужасный» ATmega328P.
Так «вырисовывается» другая проблема перед разработчиком электроники: как из многообразия выпускаемых моделей выбрать микроконтроллер? Проблема впрямь непростая, требующая основательного подхода.
На плате хорошо видны несколько крупных микросхем: немецкая лицензионная копия «легендарного» Zilog Z80 с тактовой частотой 2 мегагерца, ПЗУ с ультрафиолетовым стиранием, ОЗУ объёмом 16 килобит и множество микросхем, реализующих взаимодействие с внешними устройствами. Всё это «нагромождение» мог заменить Arduino ATmega328P, причём с десятикратным запасом по производительности и практически бесплатно (стоимость нового оригинального микроконтроллера в розницу не превышает 3$).
Что такое микроконтроллер?
Совсем недавно цифровая логическая часть электроники строилась на отдельных микросхемах мелкой логики: логических элементов, триггеров, шифраторов и дешифраторов, счётчиков и т. п. Такой подход порождал громоздкие сложные устройства, но между тем это было прорывом в сравнении, к примеру, с гораздо примитивной релейной логикой, базирующейся на электромагнитных реле и различных коммутаторах типа концевых выключателей, шаговых искателей и т. д. Позже стали использоваться микропроцессоры, заменившие «зоопарк» микросхем мелкой логики всего несколькими микросхемами. Такими, как микропроцессор, ПЗУ, ОЗУ и интерфейс связи со «внешним миром». Логика работы уже реализовывалась не аппаратным, а программным способом.
По мере развития микроэлектронных приборов появились микроконтроллеры (в отечественной практике было распространено синонимичное понятие «однокристальные микро-ЭВМ»), в которых вычислительное ядро, ОЗУ, ПЗУ, порты ввода/вывода со множеством дополнительных средств расширения возможностей были выполнены на едином кремниевом кристалле. Такой подход снижал себестоимость, материалоёмкость, время разработки. Благодаря включению в структурную схему только функций, специфичных для конкретной задачи, стоимость их сравнительно невысока.
Типичный МК имеет инструкции манипуляции с битами данных, простой и прямой доступ к портам ввода/вывода, а также обширные возможности работы с таймерами и аппаратную обработку прерываний. Таким образом, это высокоинтегрированное устройство, которое включает в себя на одном кристалле все или большую часть компонентов, необходимых для функций логического управления каким-либо устройством или процессом.
МК отличаются разрядностью, тактовой частотой работы, объёмом ОЗУ, ПЗУ, количеством портов ввода/вывода, наличием или отсутствием и количеством АЦП, ЦАП, интерфейсов связи (UART, I2C, USB, CAN и т. д.), количеством аппаратных таймеров, входов прерывания, ШИМ-контроллеров и пр. Кратко рассмотрим базовые аппаратные микроконтроллерные узлы, влияющие на их возможности и в итоге, стоимость.
Структурная схема аппаратного обеспечения микроконтроллеров
Постоянное запоминающее устройство
Обычно (ПЗУ, ROM — Read Only Memory) используется для хранения программных инструкций, другими словами кода, программы.
Некоторые микроконтроллеры не имеют ПЗУ, а считывает инструкции с внешнего источника.
FLASH-память
Это современная электрически стираемая и программируемая память. Она применяется вместо ПЗУ для хранения программных инструкций и информации
Оперативное запоминающее устройство
При выполнении программы оперативно полученные данные, такие как результаты вычисления, требуется сохранить, чтобы потом использовать. Они обычно хранятся в ОЗУ (RAM — Random Access Memory). Объём ОЗУ у МК сравнительно невелик — от нескольких сотен байт до нескольких мегабайт.
Электрически стираемое программируемое постоянное запоминающее устройство
Есть ещё один способ хранения информации: ЭСППЗУ (EEPROM — Electrically Erasable Programmable Read-Only Memory) используется для её сохранения после выключения питания. Примером служат настройки или результаты вычисления, необходимые при включении.
«Знаменитый» ATmega328P использует FLASH-память для хранения кода программы (32 килобайт) и ЭСППЗУ для долговременного хранения данных (2 килобайт). Таким образом, перепрограммирование кода программы не затрагивает записи в ЭСППЗУ.
Стираемое программируемое постоянное запоминающее устройство
Этот вид памяти считается устаревшим, но продолжает эксплуатироваться во многих приборах. Микросхемы СППЗУ (EPROM — Erasable Programmable Read-Only Memory) поддерживают электрическое однократное программирование, но лишены функции электрического стирания записанных данных.
Стирание выполняется за счёт ультрафиолетового излучения, направляемого в стеклянное окно микросхемы.
Центральный процессор
Это «мозг» системы, который делает вычисления и передаёт данные по системной шине. К примеру, чтобы выполнить программу, ЦП (CPU — Central Processing Unit) считывает первую инструкцию из программной памяти. Эта инструкция декодируется ЦП, затем выполняется.
Эта процедура повторяется до тех пор, пока не будет достигнут конец программы (или не возникнет бесконечный цикл). ЦП характеризуется его разрядностью (максимальный объём данных, с которым ЦП производит операцию за один такт, бывает 4, 8, 16, 32 и 64 бит) и тактовой частотой (количество тактов в секунду).
Таймер (Timer)
Таймеры предназначены для привязки каких-либо событий ко времени. Привязка на аппаратном уровне позволяет управлять отсчётом времени, планировать действия, генерировать и измерять параметры сигналов вне зависимости от хода выполнения программных инструкций. Если кратко, то таймер — это электрическая схема внутри МК, вырабатывающая сигнал в чётко определённый момент времени. Сигнал будет сгенерирован независимо от состояния центрального процессора, что позволяет с высокой точностью отмерять временны́е интервалы для чёткого выполнения действий, завязанных на времени: синхронной передачи данных, работы АЦП и ЦАП, перезагрузки ЦП при зависании (называется сторожевой таймер), а также множества других применений. «Мощь» конкретной модели микроконтроллера явно определяется количеством и возможностями аппаратных таймеров.
Порты ввода/вывода (Input/Output ports)
Большинство микроконтроллеров имеют несколько цифровых портов ввода/вывода, которые используются для ввода (к примеру, сигналов нажатых кнопок) и вывода (включения индикаторных светодиодов) информации. Обычно разрядность портов определяется разрядностью системной шины МК: например, ATmega328P имеет 4 восьмиразрядных цифровых порта.
Последовательный интерфейс (Serial Interface)
Последовательный интерфейс используется для обмена данными с внешним миром. Многие микроконтроллеры имеют встроенные как асинхронные, так и синхронные коммуникационные периферийные устройства. Обычно МК имеет асинхронный интерфейс UART (Universal Asynchronous Receiver-Transmitter) и синхронный SPI (Serial Peripheral Interface).
SPI включает в себя отдельную физическую линию для тактового сигнала, что упрощает передатчик и приёмник. Но передаваемый сигнал более подвержен помехам при передаче его на большие расстояния. В UART тактовые сигналы передатчика с приёмником независимы, а повторная синхронизация выполняется для каждого байта с помощью стартового бита.
Аналого-цифровой преобразователь
АЦП (Analog-to-digital converter, ADC) преобразует внешний аналоговый сигнал (обычно напряжение) в цифровую форму, пригодную для дальнейшей обработки. Примером послужит угол поворота потенциометра, напряжение на терморезисторе или датчике освещённости и т. д.
Таким образом, точность оцифровки 10-битным АЦП составляет около 5 мВ. Более «продвинутые» МК имеют разрядность 12, 14, 16 и более бит.
Сторожевой таймер (Watchdog timer)
Он обеспечивает надёжную перезагрузку процессора после какого-либо сбоя. Например, когда возник бесконечный цикл программы (зависание) или аппаратная проблема (к примеру, снижение напряжения питания ниже минимума), препятствующая корректной работе программы.
Процессор в нормальном режиме должен самостоятельно через равные интервалы сбрасывать счётчик сторожевого таймера. Если же он этого не выполняет (из-за сбоя), то таймер генерирует сигнал общего сброса вне зависимости от «желания» ЦП.
Контроллер широтно-импульсной модуляции
Контроллер ШИМ (Pulse-Width Modulation, PWM) предназначен для генерации серии импульсов с широтно-импульсной модуляцией. Они применимы для управления яркостью светодиодов, скоростью вращения двигателей, а также для несложной реализации цифро-аналогового преобразования.
ШИМ-сигнал, прошедший через интегрирующую цепочку (фильтр нижних частот, ФНЧ), становится постоянным напряжением с величиной, пропорциональной коэффициенту заполнения исходного сигнала.
Накопитель импульсов (Pulse Accumulator)
Это счётчик каких-либо событий. Каждый импульс увеличивает значение регистра накопителя импульсов, регистрируя количество повторений события. Работа счётчика также независима от работы ЦП.
Захват входного сигнала (Input Capture)
Предназначен для измерения частоты внешнего входного сигнала или его временны́х параметров, опираясь на тактовую частоту работы микроконтроллера.
Захват выходного сигнала (Output Compare)
Захват (сравнение) выходного сигнала используется для аппаратной синхронизации события генерации выходного сигнала с каким-то другим, независимо от работы ЦП.
Цифровой сигнальный процессор
Микроконтроллеры реагируют на события и управляют ими, в то время как ЦСП (Digital Signal Processor, DSP) выполняют однотипные повторяющиеся операции с большим объёмом математических вычислений при очень высокой, недоступной для ЦП, скорости. Сегодня многим встраиваемым системам требуются оба типа процессоров. Производители отреагировали на это, выпустив микроконтроллеры со встроенными СП и наоборот.
Простейшая операция — это умножение и накопление входных данных. Количество бит данных, которое ЦСП умножит и накопит, определяет динамический диапазон (и, следовательно, область применения). Применяют ЦСП, как правило, в тех областях, где требуется однотипная обработка потоковых данных: цифровой звуковой и видеосигнал, коммуникационный, с массива датчиков и т. д.
Аналоговые и цифровые сигналы
Мы живём в аналоговом мире, где информация, которую мы видим, слышим, обрабатываем, обмениваемся друг с другом, а также с нашими механическими или электронными системами, всегда выступает аналоговой величиной. Давление, температура, напряжение, ток — по определению имеют аналоговую (непрерывную) сущность. Их легко оцифровать (дискретизировать) для более эффективной обработки, хранения, передачи.
Таким образом, суть аналого-цифрового преобразования заключается в считывании со входа непрерывно изменяющегося сигнала, преобразовании его в цифровую форму, обработки с последующим преобразованием «цифры» в «аналог» на выходе.
Таким образом, более жёсткие требования к качеству преобразования требуют применения специализированных высокопроизводительных микроконтроллеров, особенно там, где имеется прямой риск порчи здоровья или потери жизни человека: автомобильные системы, системы программного управления обрабатывающих станков, аэрокосмическое оборудование, многие другие сферы.
Компаратор (Comparator)
Помимо АЦП, микроконтроллер оборудуется одним или несколькими компараторами, предназначенными для сравнения уровня напряжения входного аналогового сигнала с некоторой опорной величиной и выработки цифрового сигнала в зависимости от результата этого сравнения. Компаратор является простейшим однобитным АЦП.
Захват выходного сигнала (Output Compare)
ЦАП (Digital-to-analog converter, DAC) преобразует цифровой сигнал в аналоговую форму (обычно напряжение). Как АЦП, характеризуется разрядностью. К примеру, 12-битный ЦАП с максимальным выходным напряжением 5 вольт способен выдать аналоговый сигнал с шагом в 1.2 мВ (5 / 212 = 5 / 4096).
Протоколы обмена данными
CAN
Controller Area Network — это мультиплексный цифровой протокол обмена данными между устройствами, разработанный совместно компаниями BOSCH с Intel специально для автомобильной промышленности.
J1850
Это мультиплексный цифровой протокол обмена, разработанный Американским обществом инженеров автомобильной промышленности SAE (Society of Automotive Engineers), который сейчас используется в Северной Америке.
I2C
Inter-Integrated Circuit Bus — это простой двухпроводной последовательный интерфейс, разработанный компанией Philips. Протокол разработан для 8-битных устройств, широко используется в бытовой, автомобильной, промышленной электронике. Помимо МК, шину I2C поддерживает другая периферия. I2C поддерживает несколько ведущих и ведомых устройств, «умеет» обнаруживать коллизии.
В сети допускается до 127 единиц, расположенных на расстоянии до 10 метров. Каждый узел (микроконтроллер или периферийное устройство) может инициировать сообщение, а затем передавать или принимать данные. Одна из двух физических линий предназначена для передачи, а другая — для сигнала синхронизации. Каждый узел в сети имеет уникальный адрес, которым маркируется передаваемое им сообщение.
Сегодня подавляющее большинство МК имеют аппаратную поддержку как минимум одной шины I2C, а зачастую — двух или трёх. Многие периферийные устройства имеют поддержку шины I2C. Например, микросхемы памяти ПЗУ, дисплеи, индикаторы, датчики, АЦП, ЦАП. Кроме этого, этот протокол — наиболее удобный для передачи информации между двумя или более объектами.
UART
Universal Asynchronous Receiver Transmitter — универсальный асинхронный приёмопередатчик. Применяется для связи микроконтроллера с персональным компьютером. Аппаратно поддерживается большинством МК.
USART
Universal Synchronous/Asynchronous Receiver Transmitter даёт большую пропускную способность, нежели UART. Применяется для высокоскоростного обмена, к примеру, при необходимости передачи больших массивов информации на персональный компьютер в режиме реального времени.
Помимо описанных протоколов, микроконтроллеры также оборудуются аппаратной поддержкой других проводных или беспроводных гражданских и промышленных протоколов передачи данных.
Прерывания
Простейшая реализация прерывания — опрос (polling). Опрос необходим, если ваш микроконтроллер не поддерживает аппаратные прерывания или если выполняемая задача не критична по времени. Это программный метод, при котором он постоянно опрашивает периферию о необходимости обслуживания.
Периферийное устройство устанавливает флаг, когда данные готовы к передаче микроконтроллеру, что МК распознаёт при первом после установке флага опросе. Возможен последовательный опрос нескольких устройств.
Аппаратное прерывание (interrupt) работает несколько иначе. Вместо того чтобы микроконтроллеру постоянно опрашивать периферию (таймеры, интерфейсы передачи данных, преобразователи и другие) о наличии запроса на трансляцию (и обнаруживать, что обычно её нет), более эффективный метод заключается в том, чтобы устройства сами сообщали микроконтроллеру о готовности передавать информацию.
Микроконтроллер выполняет свои базовые функции, пока не поступит сигнал аппаратного прерывания. При получении прерывания ЦП микроконтроллера приостанавливает текущую работу, определяет периферийное устройство, инициировавшее прерывание, затем переходит к соответствующей процедуре обработки прерывания.
Преимущество прерываний по сравнению с опросом заключается в скорости реакции на внешние события и снижении программных затрат (на постоянный опрос периферии о наличии готовых данных). Большинство МК имеют поддержку как минимум одного внешнего прерывания (и несколько внутренних, к примеру, от таймеров), которое выбирается по фронту сигнала (по переднему или заднему) или по уровню. Оба подхода со своими преимуществами. Фронт нечувствителен ко времени, но подвержен сбоям (завалу). Уровень же требуется поддерживать высоким (или низким) в течение определённого времени (что бывает проблематично при необходимости высокой скорости реакции на прерывание).
Микроконтроллеры — практически обязательная часть нынешней электронной техники, организующая интеллектуальное управление процессами в самых разных областях — от бытовых приборов или систем «умного дома» до сложнейших промышленных комплексов и аэрокосмических установок. Благодаря высокой степени интеграции, гибкости, сравнительно дешевизны они помогли заметно сократить время создания устройств, повысить их надёжность вместе с функциональностью. Возможность совмещения вычислительных, управляющих и коммуникационных функций в одном кристалле делает микроконтроллеры универсальными там, где нужны автоматизация и управление.
Развитие микроконтроллерных технологий продолжается с нарастающей скоростью: растёт производительность, увеличиваются объёмы встроенной памяти, расширяется набор периферийных модулей с интерфейсами. Всё это открывает перед разработчиками новые горизонты, делая создание электронных систем доступным не только профессионалам, но и энтузиастам. Можно с уверенностью сказать, что именно микроконтроллеры стали сердцем современной электроники, а их эволюция определяет направление развития всей индустрии в ближайшие десятилетия.