Bilim.techО проекте

Программа для микроконтроллера

Как маленькая плата включает вентилятор охлаждения масла по датчику температуры? Пиши программу для виртуальной платы: мигай светодиодом, читай кнопку и АЦП, управляй ШИМ и собери термостат с гистерезисом.

01 Что это такое

Микроконтроллер это маленький компьютер в одной микросхеме: процессор, память и выводы, к которым подключают кнопки, датчики, светодиоды и реле.

Компьютер общается с человеком через экран и клавиатуру, а микроконтроллер с машиной через выводы. На цифровом выводе программа может включить 5 вольт или 0, то есть зажечь светодиод или включить реле, а может прочитать, нажата ли кнопка. Аналоговый вход с АЦП измеряет напряжение от датчика и превращает его в число от 0 до 1023. ШИМ быстро щелкает выводом, и среднее напряжение получается любым от 0 до 5 вольт: так плавно меняют яркость и обороты. Программа состоит из двух частей: настройка выполняется один раз при включении, а цикл повторяется, пока есть питание.

2~34~5~678~910111213Dцифровые выводы: 5 В или 0, вход или выход; со значком ~ умеют ШИМA0A1A25VGNDаналоговые входы через АЦП: 0–5 В → 0–1023процессор16 МГц, выполняет командыпо однойпамять программыFlash 32 КБпамять данныхпеременные, 2 КБАЦП, 10 битнапряжение в числотаймеры и ШИМD3, D5, D6, D9
Так устроена учебная плата в духе Arduino Uno. Выводы со значком ~ умеют ШИМ. Ток одного вывода не больше 20–40 мА: светодиод через резистор можно, мотор нельзя, только через реле или транзистор.
D13
Цифровой вывод. Выход дает 5 В (1) или 0 В (0). Вход читает, есть ли на нем напряжение выше половины питания.
АЦП
Аналого-цифровой преобразователь. Делит 5 В на 1024 ступеньки по 4,9 мВ и сообщает номер ступеньки: 0…1023.
ШИМ
Широтно-импульсная модуляция. Вывод включается и выключается около 490 раз в секунду. Доля времени «включено» задает среднее напряжение.
02 Опыт
Выбери схему. Запусти программу. Крути датчики. ПЛАТА РАБОТАЕТ
МИКРОКОНТРОЛЛЕР

Виртуальная плата с датчиками и реле

Рис. 12.7
ГОТОВЫЕ ПРОГРАММЫ
Время платы
Ток светодиода
Проверка задания
03 Код по строкам

Как программа видит датчик и управляет светодиодом

Две части программы, перевод числа АЦП в вольты и ШИМ. Числа ниже берутся с работающей платы.

Что выполняется и когда?

функция настройка():
функция цикл():

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

вывод_режим
назначает вывод входом или выходом
ждать(мс)
пауза в миллисекундах, 1000 мс = 1 с
время()
сколько миллисекунд прошло с включения

Сколько вольт на входе?

U = N · 5 / 1023

АЦП сравнивает напряжение с 5 В и выдает номер ступеньки. Чтобы вернуться к вольтам, число умножают на 5 и делят на 1023. По напряжению на делителе программа находит сопротивление терморезистора, а по нему температуру.

N
значение аналог(0), от 0 до 1023
5
опорное напряжение АЦП, В
U
напряжение на входе, В
R
сопротивление NTC: R = 10 000 · N / (1023 − N), Ом

Как сделать половину яркости?

Uср = 5 · s,  s = D / 255

ШИМ не умеет давать 2,5 В. Он включает 5 В на половину каждого периода и выключает на вторую половину. Глаз и мотор не успевают за щелчками и чувствуют среднее.

D
число в шим(9, D), от 0 до 255
s
скважность (заполнение): доля времени «включено», 0…1
Uср
среднее напряжение на выводе, В

Та же программа на настоящем Arduino и на MicroPython

Arduino программируют на C++: настройка() там называется setup(), цикл() это loop(), записать это digitalWrite, аналог это analogRead, шим это analogWrite, ждать это delay. У каждой переменной пишут тип: int для целых, float для дробных, а строки кончаются точкой с запятой.

MicroPython это Python для микроконтроллеров (ESP32, Raspberry Pi Pico). Выводы там объекты: Pin(13, Pin.OUT), АЦП дает 16 бит, поэтому число сдвигают до 10 бит. Ниже перевод сделан автоматически из кода опыта; номера выводов у настоящих плат свои, их берут из схемы платы.

Перевод делается из кода в опыте. Поменяй код, и перевод поменяется.
04 Где и зачем это применяют

Микроконтроллеры стоят в каждой современной машине

Допущения модели+

Плата учебная, в духе Arduino Uno: питание 5 В, АЦП 10 бит, ШИМ около 490 Гц на D3, D5, D6, D9. Каждая выполненная строка занимает 0,02 мс времени платы, ждать(мс) добавляет паузу; ход времени можно замедлить. Электрическая часть считается ядром конструктора схем: выход платы это источник 5 В с сопротивлением 25 Ом, красный светодиод открывается при 2 В и сгорает при токе больше 30 мА, кнопка подтянута к земле резистором 10 кОм, NTC 10 кОм при 25 °C с B = 3950 стоит в делителе с резистором 10 кОм, вентилятор 24 В включается реле, катушку которого вывод D8 включает через транзисторный ключ. Температура масла стремится к заданной с постоянной времени 6 с, вентилятор снижает цель на 18 °C. Это не точная модель гидросистемы, а наглядная.

Еще в направлении «Инженерия»

Все темы направления «Инженерия» →