电动机控制模块的开放项目。 软件开发技术


几乎不可能从头开始编写用于现代嵌入式电子产品内部的固件。 他们只是不为此付出时间。 因此,嵌入式系统的软件基于
现成的软件平台-框架。 框架越发达,开发速度就越快。 在这里,我们将讨论我专门为电机控制模块创建的框架,该框架已经成功使用了一段时间。

框架的架构。


该框架旨在在通用电机控制模块DMC v2.0的开放平台上工作。

框架的逻辑架构可以描述为框图,如下所示。 在流程图中,省略了框架所有组件的完整列表,因为这会破坏清晰度,但对于一般概念,我认为粒度就足够了。


(点击放大)

该框架没有版本,正在不断开发中,在这里我只是试图修复其当前状态,该状态已发布在GitHub上。

从软件模块的角度来看,该框架包含以下关键部分:

-一组应用程序级别支持模块
-实时操作系统MQX
-中间件: 文件系统,命令外壳,通信协议栈等。
-低级板支持包(BSP),其中包括对BLEZ66V1模块板和电源模块的外围设备访问
-用于监视,调试和诊断的软件包-FreeMaster
-调试工具,包括RTT ITM工具跟踪,记录器,VT100终端。
- 生成参数文件的模块。
-Matlab中基于算法生成的源代码模块。

为什么选择MQX?


实时操作系统(RTOS)MQX早已众所周知,但
几年前出现在公共领域。 该操作系统是Freescale在NXP收购之前上传的。 RTOS最初仅具有用于飞思卡尔微控制器的许可证,现在该许可证还扩展至NXP产品。 RTOS在爆炸性的流行中幸存下来,经历了多次升级到4.2版,此后,飞思卡尔决定再次将其后续版本商业化。 因此,结果得出了两个版本,一个是开放的并冻结在开发中的MQX Classic(又名MQX v4.2),另一个是封闭的商业MQX 5.0。

在描述的框架中,使用了MQX Classic v4.2分支。 这是一个经过测试的稳定版本。 该许可证允许开发人员修改MQX Classic的源代码并在商业产品中使用它,但是,它不允许以源代码形式发布MQX Classic。 但这应该不是问题,因为可以免费下载MQX Classic。

RTOS的总体结构如下:



为什么需要RTOS?


尤其需要电机控制的复杂应用程序非常复杂,由许多异步任务组成,每个任务都有自己的重复周期以及其激活和停止事件。 如果我们在一个超级周期中执行所有这些任务,那么我们不可避免地会遇到一些问题,这些任务会导致其他任务延迟执行。
使用MQOS之类的RTOS,有可能摆脱时间轴上各个任务的相互依赖性,而无需重写它们甚至不查看其源代码。

例如,我们的记录器任务可以尝试在SD卡上等待消息的时间尽可能长,以等待其响应,USB任务都可以将大量数据传输到计算机,但是与此同时,电机算法的PID任务将严格按指定的时间间隔执行,而速度测量任务旋转不会错过单个编码器信号更改事件。

尽管我必须承认,还有另一种越来越流行的摆脱单芯片复杂性的方法-切换到多处理,但是在这种情况下,RTOS将提供良好的服务。

RTOS MQX的主要优点。

-系统的内核附带了各种各样的中间件,包括文件系统,TCP / IP堆栈,USB堆栈,命令外壳等。 源代码中的所有内容。

-适用于不同电路板的现成BSP套件,无需编写自己的外围工作库。
-pdf文件中的详细文档,易于浏览。
-与其他知名的RTOS-uCOS和FreeRTOS相比,IDE IAR嵌入式工作台的插件的存在,其中包含有关RTOS内部结构的非常详细的信息。
-许多RTOS应用示例和测试用例。

在谈论RTOS时,他们总是强调按时完成任务的能力,但通常不会给出或给出一些单独选择的第三方平台的定量估计。 显然这不足以使用RTOS实施硬实时控制。 而要控制引擎,您需要非常严格的实时性。

MQX在这方面有一个很棒的测试用例,它使您能够获得启动测试的平台上所有服务的执行时间的详细表。

下表是电机控制模块微控制器上服务执行时间的表,编译器中包括代码执行速度的最大优化。

RTOS MQX经典服务执行时间




该表还给出了RTOS支持哪些服务以及可用的内核选项的想法。 IDE IAR中的测试项目已包含在已发布的框架中。

项目目录组成


框架的根目录如下所示:


APP_SRC-包含所有源的目录,除了那些属于MQX发行版的源。
FreeMaster_apps-FreeMaster环境中执行的项目文件。
IAR_proj-用于ARM v7.70.2环境的IAR嵌入式工作台的工作区和项目文件。 在这种环境下,最终的应用程序将被编译和调试。
MQX_SRC是一个目录,其中包含MQX随附的所有MQX源和中间件。 由于许可证不允许从MQX发行版进行开源发布,因此此目录中没有“ .s”和“ .s”文件。 但是,那些同意NXP许可条款的人可能会收到丢失的文件。
ParametersManager-参数管理器程序的目录。 使用此程序,可以创建应用程序参数列表,并生成带有参数声明的“ .s”和“ .h”文件,以嵌入到应用程序中。
TESTS-包含框架测试项目的目录。 这是用于使用MQX时序生成报告的MQX_benchmark项目。

MQX_LIBRARY_O0.aMQX_LIBRARY_O3.a文件是MQX_SRC目录的内容,分别编译为具有最小优化和最大优化的库。

IAR_proj目录的内容



U3HB_full.ewwU3HB_MQXLib.eww文件是IAR工作区文件。
只要MQX目录中没有源,就只能使用U3HB_MQXLib.eww文件。 该工作空间使用已编译的MQX库。 在U3HB_full.eww工作空间中,将编译完整的MQX源。 OUT目录用作IAR放置其工作产品(尤其是地图和十六进制文件)的位置。

设置目录由IAR自动创建。 它专门存储调试器设置。 如果在IAR中调试期间无法配置某些内容,则有时值得删除此目录。

INT_FLASH_MK66FX1M0LVQ18.icf文件是IAR链接器配置文件。 它确定链接器放置代码,数据,中断向量,堆栈等的存储区域的地址。

MQX_SRC目录的内容



工作区文件MQX_LIBRARY.eww用于创建MQX库。 在将“ .s 和“ .s”文件放置在目录中之前,不会编译该项目。
config-带有MQX配置文件的目录。 MQX服务和驱动程序的组成在user_config.h配置文件中指定。
mfs -MQX文件系统,包括FAT32和RAM FS
mqx -MQX核心包括以下子目录:


rtcs -TCP / IP堆栈。 它包括以下子目录:


shell-包含shell文件的目录。
usb-具有USB堆栈文件的目录

制造商已充分记录了每个MQX软件模块的功能。 作为示例,我将提供两个文档的链接:

使用MQX的说明
MQX参考指南。
其余的必须在发行版中找到,该发行版可以在NXP网站上找到

框架本身在此处的存储库中。

在以下文章中可以找到有关使用软件和应用程序示例的进一步说明。

Source: https://habr.com/ru/post/zh-CN403525/


All Articles