Существуют ли российские микроконтроллеры для дронов и роботов?

Существуют ли российские микроконтроллеры для дронов и роботов?

Post image

Российские микроконтроллеры, такие как Baikal-U (BE-U1000) от “Байкал Электроникс”, К1921ВК01Т от НИИЭТ и 1892ВГ1Я компании НПЦ “ЭЛВИС”, разрабатываются для импортозамещения аналогов STM32 и применяются в АСУ ТП, IoT и управлении двигателями. В статье рассматривается их применимость в полётных контроллерах для дронов и роботов.

Современные полётные контроллеры функционируют под управлением ОС, таких как PX4, Betaflight или ArduPilot, которые требуют определённой производительности от микроконтроллера.

Полетные контроллеры для PX4 (на базе NuttX RTOS), Betaflight и ArduPilot требуют 32-битных ARM Cortex-M процессоров (M4/M7), минимум 168–480 МГц, 256 КБ+ RAM и 1–2 МБ Flash для алгоритмов стабилизации, навигации и логирования.

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

  • сенсоры ориентации IMU (гироскопы MPU6000/ICM42688);
  • определение высоты датчиком атмосферного давления;
  • PWM для управления двигателями (4–16 двигателей);
  • интерфейсы UART/SPI/I2C/CAN.

Математические вычисления с плавающей точкой с использованием FPU/DSP-инструкций для PID-регуляторов и фильтров требуют от контроллера соответствия требованиям по тактовой частоте и объёму оперативной памяти. Вот минимальные требования ОС к процессорным ядрам микроконтроллеров:

Параметр PX4 Betaflight ArduPilot
Архитектура ARM Cortex-M4/M7 ARM Cortex-M4/M7/M33 ARM Cortex-M4/M7/M33
Минимальная частота ядра 168 МГц 100–170 МГц 168 МГц
Типовая частота ядра 180–240 МГц 170–480 МГц 168–480 МГц
Минимальный SRAM 64 KB 128 KB 80 KB
Рекомендуемый SRAM 192–256 KB 256–512 KB+ 256–1000+ KB
Минимальная Flash память 1 MB 512 KB 1 MB
Рекомендуемая Flash 2 MB 1–2 MB 2 MB
Плавающая точка (FPU) Требуется Рекомендуется Рекомендуется
Частота ПИД-регулятора 250–500 Hz 2–8 kHz 200–500 Hz
DMA контроллер Требуется Требуется Опционально
SPI интерфейсы 2–3 2–3 1–2

🧠 Что предлагают российские микроконтроллеры?

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

В таблице ниже представлены некоторые характеристики наших микроконтроллеров:

Характеристика Baikal-U (BE-U1000) НИИЭТ К1921ВК01Т НПЦ “ЭЛВИС” 1892ВГ1Я
Архитектура/Ядро RISC-V (2x 200 МГц + 100 МГц) ARM Cortex-M4F (~125 МГц) 2x ARM Cortex-M33 (до 160 МГц, FPU/DSP)
ОЗУ (SRAM/RAM) 192 КБ 192 КБ Кэш 16 КБ/ядро (SRAM не указано)
Flash-память 256 КБ + 16 МБ XIP 1 МБ + 64 КБ Внешняя до 64 МБ (QSPI/SMC)
Интерфейсы 2x CAN, I2S, MicroPython CAN, USB, Ethernet UART, 2x I2C, I2S, 3x SPI, QSPI

ОС PX4, Betaflight и ArduPilot на наших микроконтроллерах

Для функционирования ОС полётного контроллера наши процессоры должны соответствовать требованиям по частоте процессора, размеру SRAM и внутренней Flash-памяти. Ниже представлена таблица соответствия характеристик наших микропроцессоров требованиям ОС:

Baikal-U (BE-U1000) НИИЭТ К1921ВК01Т НПЦ “ЭЛВИС” 1892ВГ1Я
Характеристики 200 МГц
SRAM 192 КБ
Flash 16 MB
125 МГц
SRAM 192 КБ
Flash 1 MB
160 МГц
SRAM 16 КБ
Flash внешняя 64 MB
PX4
180 МГц
SRAM 64 КБ
Flash 1 MB
🤘
при уменьшении размера ОС сокращением функций
😥
мало МГц
😥
мало МГц и SRAM
Betaflight
170 МГц
SRAM 128 КБ
Flash 512 KB
🤘
при уменьшении размера ОС сокращением функций
😥
мало МГц
😥
мало МГц и SRAM
ArduPilot
168 МГц
SRAM 256 КБ
Flash 1 MB
🤘
при уменьшении размера ОС сокращением функций
😥
мало МГц и SRAM
😥
мало МГц и SRAM

💡 Наиболее подходящим для полётных контроллеров является наш 🤘 Baikal-U (BE-U1000).

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


⚙️ Портирование PX4, Betaflight и ArduPilot на наши микроконтроллеры

Портирование операционной системы реального времени (RTOS), вроде PX4, Betaflight или ArduPilot, на новые микроконтроллерные платформы — это сложная инженерная задача, требующая понимания как архитектурных особенностей целевого процессора, так и внутреннего устройства ядра ОС. При портировании ОС на российские микроконтроллеры (Baikal-U на RISC-V, К1921ВК01Т и 1892ВГ1Я на ARM Cortex-M) разработчики должны уделить внимание следующим критическим областям.

1. Архитектурные отличия и совместимость с ядром ОС

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

RISC-V архитектура (Baikal-U BE-U1000):

Baikal-U использует открытую архитектуру RISC-V с двумя ядрами (200 МГц + 100 МГц), что значительно отличается от стандартных ARM Cortex-M, используемых в других полётных контроллерах.

NuttX имеет поддержку RISC-V и активно развивается в этом направлении (особенно благодаря проекту PX4). Однако портирование NuttX на Baikal-U потребует создания специального Board Support Package (BSP), так как это не стандартная платформа.

Требуется реализовать правильную работу прерываний через RISC-V CLIC (Core Local Interrupt Controller) вместо стандартного CLINT, так как это критически влияет на время отклика на события (важно для стабилизации дрона).

ARM Cortex-M архитектура (К1921ВК01Т и 1892ВГ1Я):

Оба контроллера используют ARM Cortex-M (M4F и M33), что хорошо поддерживается NuttX и другими RTOS.

Однако К1921ВК01Т работает на более низкой частоте (~125 МГц против рекомендуемых 168+ МГц), что может быть узким местом для вычисления PID-регуляторов в режиме реального времени.

1892ВГ1Я обладает современной архитектурой M33 с встроенной FPU и DSP, но имеет ограниченное встроенное ОЗУ, что требует тщательной оптимизации размера ядра ОС.

2. Board Support Package (BSP) и конфигурация оборудования

BSP — это слой программного обеспечения, содержащий аппаратно-специфичные процедуры, драйверы периферии и конфигурацию железа, необходимые для функционирования RTOS на конкретной плате.

Ключевые компоненты BSP для полётных контроллеров:

Boot-последовательность и инициализация памяти: загрузчик должен правильно инициализировать ОЗУ, настроить сегменты памяти, загрузить RTOS из Flash и передать управление ядру ОС. Для каждой российской платформы требуется своя реализация, так как разметка памяти отличается.

Конфигурация системных часов (clock setup): это критически важно для обеспечения корректной частоты процессора и периферийных устройств. Для Baikal-U нужно правильно настроить синхронизацию между двумя ядрами и установить необходимые делители частоты. Для ARM-контроллеров требуется конфигурация PLL и распределение часов между периферией (UART, SPI, таймеры для PWM).

Таймеры и системное время (system tick): RTOS требует высокоточного таймера для планирования задач. Для полётных контроллеров критично использовать таймер с разрешением не менее 1 кГц. Разработчик должен выбрать физический таймер и правильно настроить его прерывание для работы с планировщиком RTOS.

3. Обработка прерываний и переключение контекста

Эффективность обработки прерываний критична для полётных контроллеров: задержка на несколько миллисекунд при стабилизации дрона приводит к потере управления.

Что нужно учесть:

Векторизация прерываний: ARM Cortex-M имеет встроенный NVIC (Nested Vectored Interrupt Controller) с автоматическим сохранением контекста. RISC-V требует либо CLIC, либо эмуляции подобного поведения в программном коде. Требуется убедиться, что RTOS правильно использует доступные механизмы.

Приоритизация прерываний: полётный контроллер должен обрабатывать прерывания от датчиков IMU и давления с наивысшим приоритетом, чтобы не пропустить критичные данные. Разработчик должен правильно настроить NVIC/CLIC-приоритеты и убедиться, что конфигурация RTOS совпадает.

Задержка включения контекста: время от момента прерывания до начала выполнения обработчика должно быть минимальным и предсказуемым. Для Cortex-M это нативно поддерживается аппаратно (~13 циклов), а для RISC-V нужна специальная настройка CLIC с расширением fastirq (при наличии).

Конфликты прерываний (priority inversion): если низкоприоритетная задача захватывает ресурс, необходимый высокоприоритетной задаче, возникает инверсия приоритетов. RTOS должна поддерживать механизмы вроде Priority Inheritance для предотвращения этого, особенно важно при использовании мьютексов между датчиками и PID-регулятором.

4. Драйверы периферийных устройств

Полётный контроллер требует работоспособных драйверов для:

  • UART — для связи с наземной станцией и передачи телеметрии;
  • SPI/I2C — для опроса датчиков IMU, барометра и т.д.;
  • PWM — для управления электромоторами (8–16 двигателей);
  • CAN (опционально) — для подключения к другим компонентам (ESC — электронным регуляторам скорости);
  • таймеров и счётчиков — для точного измерения времени и управления моторами.

Важные аспекты:

Hardware Abstraction Layer (HAL): разработчик должен создать унифицированный интерфейс для драйверов, чтобы приложение (PX4, Betaflight) не привязывалось к конкретному микроконтроллеру. STM32 предоставляет готовый HAL, но для Baikal-U и других российских контроллеров требуется самостоятельно разработать или адаптировать HAL.

DMA-контроллер (Direct Memory Access): для высокоскоростной передачи данных (особенно через SPI при опросе датчиков) требуется настройка DMA, чтобы не блокировать CPU. PX4 требует наличия DMA для работы на требуемых частотах.

Протокол и временные характеристики: датчики IMU (вроде MPU6000) требуют опроса с частотой 1 кГц, а барометры — с частотой 100 Гц. Разработчик должен убедиться, что драйверы SPI/I2C могут обеспечить такие скорости без потери данных.

5. Управление памятью (SRAM, Flash и внешняя память)

Российские микроконтроллеры имеют ограниченный объём встроенной памяти:

Baikal-U: 192 КБ SRAM + 256 КБ Flash (+ 16 МБ XIP Flash) — достаточно для облегчённой версии NuttX + PX4.

К1921ВК01Т: 192 КБ SRAM + 1 МБ Flash — близко к минимуму для PX4.

1892ВГ1Я: кэш 16 КБ/ядро (размер SRAM не указан) + внешняя Flash до 64 МБ — нужна работа с внешней памятью.

Что требуется учесть:

Компоновка памяти (linker script): для каждого контроллера должен быть правильный скрипт компоновщика, определяющий расположение кода, данных, стека и heap в памяти. Неправильная компоновка приводит к перезагрузкам и сбоям.

Размер RTOS: NuttX имеет огромное количество опциональных компонентов. Для работы на ограниченной памяти К1921ВК01Т потребуется отключить невостребованные функции (например, VFS, USB, сетевой стек), оставив только минимум: планировщик, таймер, драйверы датчиков и PWM.

Стек задач: каждая задача в RTOS требует собственный стек. Неправильное распределение стека приводит к stack overflow и повреждению памяти. Требуется тщательное планирование и тестирование на предмет переполнения.

Внешняя память: 1892ВГ1Я может использовать внешнюю Flash (QSPI, SMC), что позволяет хранить алгоритмы и данные вне чипа. Но это добавляет сложность синхронизации и задержек доступа, требуя особой осторожности при работе с real-time кодом.

6. Поддержка арифметики с плавающей точкой (FPU)

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

Baikal-U (RISC-V): поддерживает FP32 (одинарная точность). FP64 (двойная точность) может быть эмулирована, но с огромным штрафом производительности (~8–20x медленнее).

К1921ВК01Т (Cortex-M4F): имеет аппаратную FPU для FP32, но не для FP64. PX4 основан на EKF2, который использует double для некоторых навигационных расчётов — на этом контроллере потребуется либо оптимизировать фильтр, либо смириться с деградацией производительности.

1892ВГ1Я (Cortex-M33): современная архитектура с поддержкой FP32/FP64 и DSP-расширениями, что оптимально для точных вычислений.

Требуется:

  • убедиться, что RTOS и компилятор (обычно arm-none-eabi-gcc) правильно используют FPU;
  • включить флаги компиляции -mfpu=fpv4-sp-d16 (для M4F) или -mfpu=fpv5-sp-d16 (для M7/M33);
  • протестировать точность вычислений PID и фильтров, особенно на контроллерах без аппаратной поддержки FP64.

7. Тестирование и валидация

Критический шаг, часто недооцениваемый:

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

Тестирование real-time свойств: измерить задержку отклика (latency) при разных нагрузках. Для полётных контроллеров критично, чтобы стабилизирующие контроллеры выполнялись с частотой минимум 200 Гц и без пропусков.

Стресс-тестирование: запустить систему на полную мощность (все датчики, все моторы, логирование) и убедиться, что нет переполнения памяти, потери данных или неконтролируемых перезагрузок.

Тестирование отказоустойчивости: проверить поведение при потере связи, отказе датчика или сбое в электропитании. PX4 должен безопасно перейти в режим удержания высоты или вернуться на базу.


📦 Наши полётные контроллеры

💡 Существуют ли полётные контроллеры на базе Baikal-U, К1921ВК01Т, 1892ВГ1Я?

Да, они существуют и демонстрируются на профильных мероприятиях! Дело за малым — рассказать о них всё, что можно, и обязательно провести НИОКР по их применению в ваших проектах!


🛸 P.S. Спасибо, что дочитали, поделитесь статьёй с хэштегом #DeepHeads! и подпишитесь на наш канал t.me/deepheads.

You May Also Like