Открытый проект модуля управления электрическими моторами. Технология разработки ПО

f61dfd0b289e32b873cb88a6ce541cc5.png
Прошивку для внутренностей современной встраиваемой электроники написать с нуля практически нереально. На это просто не дают времени. Поэтому ПО для встраиваемых систем создается на базе
готовых программных платформ — фреймворков. Чем более развит фреймворк, тем быстрее идет разработка. Здесь пойдет речь о фреймворке созданном мной специально для модулей управления моторами и успешно применяемом уже в течении некоторого времени.

Архитектура фреймворка.


Фреймворк предназначен для работы на открытой платформе универсального модуля управления мотором DMC v2.0
Логическую архитектуру фреймворка можно изобразить в виде блок-схемы, показанной ниже. В блок-схеме опущено полное перечисление всех составляющих фреймворка, поскольку это повредило бы наглядности, но для общего представления, я думаю, детализации достаточно.
b684a6a74fe172cfde9fc7b6dcdd4aec.png
(Кликнуть для увеличения)

У фреймворка нет версий, он находится в постоянном развитии, и тут я только попытался зафиксировать его текущее состояние, которое выложено на GitHub.

С точки зрения программных модулей фреймворк содержит следующие ключевые части:
— Набор модулей поддержки прикладного уровня
— Операционная система реального времени MQX.
— ПО промежуточного уровня: файловая система, командная оболочка, стеки коммуникационных протоколов и т.д.
— Пакет низкоуровневой поддержки платы (board support package или BSP), включающий функции доступа к периферии плат модуля BLEZ66V1 и силового модуля.
— Пакет ПО для мониторинга, отладки и диагностики — FreeMaster.
— Отладочные средства включающие RTT, инструментальную трассировку ITM, логгеры, VT100 терминал.
— Модуль генерации файлов параметров.
— Модули сгенерированных исходных текстов на основе алгоритмов в Matlab.

Почему выбрана MQX?


Операционная система реального времени (real time operating system, RTOS) MQX известна давно, но
появилась в свободном доступе пару лет назад. Эту операционную систему выложила фирма Freescаle до того, как их купила NXP. RTOS поначалу имела лицензию только для использования в микроконтроллерах Freescale, теперь лицензия распространяется и на продукцию NXP. RTOS пережила взрывную популярность, прошла несколько апгрейдов до версии 4.2 после чего Freescale решила ее последующие версии снова сделать коммерческими. Так получилось две версии, одна открытая и замороженная в развитии под названием MQX Classic (она же MQX v4.2) и закрытая коммерческая MQX 5.0.
В описываемом фреймворке используется ветка MQX Classic v4.2. Это стабильная, хорошо протестированная версия. Лицензия позволяет разработчику модификацию исходников MQX Classic и использование ее в коммерческих продуктах, однако не позволяет публиковать MQX Classic в виде исходных текстов. Но это не должно быть проблемой, поскольку MQX Classic доступна для свободного скачивания.

Структура RTOS в общем плане выглядит так:
d89752c84e3a24d03198b581116e4f47.png

Зачем вообще нужна RTOS?


Комплексное приложение где требуется в частности управления мотором достаточно сложное и состоит из множества асинхронных задач, каждая со своим циклом повторения и событиями ее активизирующими и останавливающими. Если мы все эти задачи выполняем в одном суперцикле, то неизбежно сталкиваемся с проблемой задержки выполнения одних задач другими задачами.
С помощью RTOS, такой как MQX удается избавится от взаимозависимости отдельных задач на оси времени, не переписывая их и даже не глядя в их исходные коды.
Например, наша задача логгера может как угодно долго пытаться записать сообщение на SD карту ожидая ее отклика, задача USB может вся уйти в передачу большого массива данных на компьютер, но при этом задача PID алгоритма мотора будет выполняться строго с заданным интервалом, а задача измерения скорости вращения не пропустит ни одного события изменения сигналов энкодера.
Хотя надо признать, есть другой все более популярный способ избавится от комплексности на одном чипе — переход на мультипроцессорность, но и в этом деле RTOS окажет хорошую услугу.

Главные достоинства RTOS MQX.

 — Ядро системы поставляется с широким набором промежуточного программного обеспечения включающего файловую систему, TCP/IP стек, USB стек, командную оболочку и т.д. Все в исходных текстах.
— Готовые наборы BSP для разных плат, избавляющие от написания собственных библиотек работы с периферией.
— Подробная документация в pdf фалах с удобной навигацией.
— Наличие плагина к IDE IAR embedded workbench c весьма детализированной информацией о внутренних структурах RTOS, гораздо детальнее чем для других известных RTOS — uCOS и FreeRTOS.
— Множество примеров применения RTOS и тестовых примеров.

Когда говорят о RTOS, то всегда подчеркивают их способность выполнять задачи вовремя, но количественные оценки чаще всего не приводятся или приводятся для каких-то отдельно выбранных сторонних платформ. Этого явно недостаточно чтобы реализовать управление в жестком реальном времени используя RTOS. А для управления двигателями нужно именно жесткое реальное время.
У MQX есть на этот счет замечательный тестовый пример, который позволяет получить подробнейшую таблицу времени исполнения всех сервисов на той платформе, на которой вы запустили тест.

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

Тайминги исполнения сервисов RTOS MQX Classic

3f479a2e65fd274ca81b27321ae31978.png
51df9132da3b6d09656d6ee7b2021ebc.png

Таблица также дает представление о том какие сервисы поддерживаются RTOS и какие опции ядра доступны. Проект теста в среде IDE IAR включен в публикуемый фреймворк.

Состав директорий проекта


Корневой каталог фреймворка выглядит так:
04efde4a059a9ba99ba39c7d6c275a8e.png
APP_SRC — директория, содержащая все исходники за исключением тех, что относятся к дистрибутиву MQX.
FreeMaster_apps — файлы проектов для выполнения в среде FreeMaster .
IAR_proj — файлы рабочего пространства и проекта для среды IAR embedded workbench for ARM v7.70.2. В данной среде компилируется и отлаживается конечное приложение.
MQX_SRC — директория, содержащая все исходники MQX и промежуточного ПО поставляемого с MQX. Поскольку лицензия не разрешает открытую публикацию исходников из дистрибутива MQX, то в данной директории отсутствуют '.с' и '.s' файлы. Но тем, кто согласился с лицензионными условиями NXP, могут быть высланы недостающие файлы.
ParametersManager — директория программы менеджера параметров. С помощью этой программы создаются списки параметров приложения и генерируются '.с' и '.h' файлы с объявлениями параметров для встраивания в приложение.
TESTS — директория с проектами тестов фреймворка. Здесь находится проект MQX_benchmark для генерации отчета с таймингами MQX.

Файлы MQX_LIBRARY_O0.a и MQX_LIBRARY_O3.a — это скомпилированное в библиотеки содержимое директории MQX_SRC с минимальной оптимизацией и максимальной оптимизацией соответственно.

Содержимое директории IAR_proj

ea2d23744775a8daec5cbddff606db11.png
Файлы U3HB_full.eww и U3HB_MQXLib.eww — это файла рабочих пространств среды IAR.
Покуда в директории MQX нет исходников, то работать будет только файл U3HB_MQXLib.eww. В этом рабочем пространстве используются скомпилированные библиотеки MQX.
В рабочем пространстве U3HB_full.eww компилируются полные исходники MQX.
Директория OUT служит местом, куда среда IAR помещает продукты своей работы, в частности map и hex файлы.
Директория settings создается средой IAR автоматически. В ней в частности хранятся настройки отладчика. Если что-то не удается настроить при отладке в IAR, то иногда стоит стереть эту директорию.
Файл INT_FLASH_MK66FX1M0LVQ18.icf является настроечным файлом линкера IAR. Он определяет адреса регионов памяти куда помещаются линкером области кода, данных, векторов прерываний, стеки и т.д.

Содержимое директории MQX_SRC

a90137f8413885b24fa795dff7397501.png
Файлы рабочего пространства MQX_LIBRARY.eww служит для создания библиотек MQX. Пока не размещены '.с' и '.s' файлы в директориях этот проект компилироваться не будет.
config — директория с файлами конфигурации MQX. Состав сервисов и драйверов MQX задается в файле конфигурации user_config.h.
mfs — файловая система MQX, включает FAT32 и RAM FS
mqx — ядро MQX включает такие поддиректории:
640df25474118976fe26e5f2b609924d.png

rtcs — TCP/IP стек. Включает следующие поддиректории:
3d4164e187a5d013aab6cf24e159d8d2.png

shell — директория с файлами командной оболочки.
usb — директория с файлами стека USB

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

Сам фреймворк находится в репозитории здесь — https://github.com/Indemsys/Universal3PHalfBridgeController/tree/master/K66_Firmware

Дальнейшее описание работы с ПО и примеры применения — в следующих статьях.

© Geektimes