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

Хотелось немного рассказать о разработке такого прибора для небольшого самолета.
Первое, что приходит в голову, когда речь заходит о создании какой-то графической подсистемы - использовать одноплатный ПК и с помощью вычислительных мощностей и видеокарты выводить красивые элементы прибора на дисплей.
Было интересно решить эту инженерную задачу с использованием микроконтроллера семейства esp32-s3, попытать удачу и выжать из него максимум возможного.
На другой случай использовать что-либо мощное с GUI всегда можно позже.
Первоначально был заложен концепт самого прибора с внешний кольцом 80 мм под стандартное отверстие приборной панели.

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


До производства и напайки элементов на печатной плате, отладку выполнял через онлайн симулятор

https://wokwi.com/projects/374228486620365825
Код уже довольно сильно рефакторен и переписан мной под разные платформы, благо он базируется на c-библиотеке TFT_eSPI
Указанная библиотека обладает уникальной возможностью отображать на дисплее графику в виде примитивов - квадраты, круги, треугольники, линии.
Но делает она это в двойном буфере, т.е. холст изображения формируется в буфере микроконтроллера, затем поступает в буфер дисплея.
Благодаря такому фокусу с помощью есп32 с частотой процессора 240 мГц и памятью SDRAM 512 кб, можно отрисовать некоторые элементы графики без мерцания и задержки.
Не смотря на то, что код графической части прибора довольно шустро работает на есп32, некоторые новые приборы были разработаны с использованием ОСРВ freeRTOS.

Сам процесс отрисовки вытекает из концепции библиотеки TFT_eSPI, а именно отрисовка элементов прибора "нанизывается" на пустой холст, чем выше в коде элемент, тем он раньше рисуется.

Таким нехитрым способом отрисованы тени на шкале указателя скорости.

Как пример код ниже
// надпись HDG тень
gdraw.setFreeFont(FF5);
gdraw.setTextDatum(MC_DATUM);
gdraw.setTextColor(TFT_BLACK);
gdraw.drawString(hdgUnit, 135, 11, GFXFF);
// надпись HDG
gdraw.setTextColor(TFT_CYAN);
gdraw.drawString(hdgUnit, 136, 12, GFXFF);

Данный проект легко устанавливался на стм32 и дисплей подключенный по SPI, данные с блока AHRS в этом случае поступали через Wi-Fi по UDP.

Для приборов 80 мм данные передаются по шине CAN, наподобие модуля, описанного здесь.
Про разработку IMU/AHRS модулей позже будет отдельная статья.

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

Испытания показали все в динамике.
P.S. Самая холиварная тема авиаторов - прямая и обратная индикации АГ.
Вступать в полемику этих споров не планирую, скажу лишь, что прибор легко переключается с прямой на обратную на выбор.
Да и как показала практика разработок таких приборов, какая там индикация обратная или прямая - не самое сложное в этом процессе.
Обычно в споры про индикацию АГ вступают те, кто не сильно разбирается в пилотировании и авиаприборах.
Помимо этого важны и качество дисплея, его яркость, углы обзора, температурные режимы.
Быстродействие микроконтроллера и быстрота отклика.
И еще много и много других интересных инженерных задач.
Автор: Engineer747