Найти в Дзене

Контроллеры — это не сложно!

Оглавление

Введение

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

ужасы
ужасы

Но часто одна из таких чёрных коробочек и является мини-компьютером с памятью, процессором и средствами общения с внешним миром.

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

Готовая к использованию платка с напаянным микроконтроллером серии STM32
Готовая к использованию платка с напаянным микроконтроллером серии STM32

Устройство внутри

Самый обычный микроконтроллер в виде микросхемы состоит, как правило, из нескольких блоков:

  • Постоянная память, где хранится программа и какие-то данные для неё (картинки, тексты, таблицы и т.д.);
  • Оперативная память, где хранятся изменяемые данные, когда программа выполняется;
  • Ядро, которое выполняет инструкции программы, записанные в постоянной памяти. Обычно оно умеет делать не так уж и много различных действий: сложение, вычитание, логические операции, чтение и запись памяти, проверки результатов операций, перемещение в другие места программы и подобное. Но и этого достаточно.
  • Устройства ввода-вывода и спецназначения. Управление ножками и проверка их состояния, приёмопередатчики для связи с другими устройствами, измерители, генераторы сигналов, модули шифрования и много чего ещё. Позже разберёмся получше.

Есть, конечно, и всякие технические тонкости, но опустим.

Устройство снаружи

Условная схема расположения выводов какого-то микроконтроллера
Условная схема расположения выводов какого-то микроконтроллера

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

Устройство имеет целую кучу выводов-ножек (от 6 и до сотен), часть из которых ответственны за просто питание (туда подводится постоянное напряжение), а другие умеют делать что-то полезное:

  • Менять уровень на ножке. Например, переключать его с 0 на сколько-то вольт и обратно. И это немало, ведь через разные электрические схемы это может зажечь или погасить лампочку, открыть или закрыть дверь, включить или остановить двигатель, дать сигнал какому-то другому устройству, что что-то ему надо бы сделать и многое другое. Вся мощь электроники покорится этой ножке!
  • Проверять уровень на ножке, низкий он там или высокий? А это уже позволяет проверять состояние целой кучи датчиков: светло или темно, ходит кто или нет, закрыта дверь или открыта, вращается мотор или нет, влажный грунт или сухой, есть ветер или нет, нажата кнопка или нет и т.д. Всё, любое состояние, которое может быть электрически разделено на низкое или высокое напряжение может быть обработано микроконтроллером!
  • Измерять напряжение на ножке: так можно понимать состояния каких-то явлений: заряд батареи, силу ветра, освещённость, температуру, влажность, всё, что угодно, что с помощью каких-то датчиков и схем можно превратить в напряжение.
  • Задавать напряжение на ножке: можно и датчиком побыть или поуправлять чем-то...
  • Общаться с другими цифровыми устройствами, есть ряд стандартных протоколов общения в пределах электронной платы. Приборы могут быть и сложные, которые не запихнёшь в логику включил-выключил-проверил. Например, экраны. В них надо передавать аж целую картинку! Или модуль GPRS-модема, там же интернет, надо что-то в него посылать и обратно получать. Но и кроме них найдётся с кем пообщаться...

Подытожим: возможностей у микроконтроллеров масса, нужно лишь понять, как их реализовать.

Для начала, впрочем, достаточно и первых двух!

Загрузка программы

Если есть готовый код программы, то его с помощью устройства-программатора можно загрузить в контроллер. Выглядит это так: берём программатор, втыкаем проводочки в разъём на плате, втыкаем его через USB в компьютер, в специальной программке открываем файл с программой и нажимаем кнопку "Загрузить". После чего программа оказывается в микросхеме и, если она правильная, даже тут же начнёт работать.

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

Вот примеры программаторов:

Написание программ

Если не затрагивать детские программируемые конструкторы, где программа может составляться графически из блоков на экране компьютера, то обычно всё же пишут код на одном из языков программирования: С или С++. Бывают и иные варианты, но этот предпочтительнее. Это всегда какой-то бесконечный цикл, основная программа в контроллере не завершается никогда — работает, пока есть питание.

Да, если уж лезть в пасть к дракону, то программированию придётся учиться, как и электронике. Но с малого и по кусочкам съесть можно и слона.

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

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

Шаги

Таким образом, начало изучения будет выглядеть как-то так:

  1. Выбираем контроллер (советую STM32);
  2. Выбираем отладочную платку под неё из того, что доступно в ближайших магазинах электроники или в интернете (например, STM32F0Discovery), и программатор, если он в плату не встроен (в рекомендованной он есть);
  3. Покупаем и получаем, открываем, смотрим, включаем. Там уже есть какая-то программа. В простых платах это обычно моргание светодиодами и обработка нажатий на кнопку.
  4. Скачиваем и устанавливаем драйвера и среду разработки (например, STM32CubeIDE).
  5. Открываем среду разработки, создаём пустой проект, который, впрочем, должен собираться и загружаться в плату. Да, при этом плата перестанет что-либо делать, но так в пустой программе и нет никаких инструкций.
  6. Ищем статьи по началу работы, желательно в этой конкретной среде, и пытаемся повторить самую примитивную программу, какую только возможно. Почти наверняка она будет такой:
инициализация
бесконечный цикл {
зажечь светодиод
подождать полсекунды
погасить светодиод
подождать полсекунды
}

7. Загружаем, проверяем, если работает — вы восхитительны!