FreeMASTER 的 ML 通用数据记录器
该软件允许用户通过在 MCU 端自动运行用户实现的场景,在任何支持 FreeMASTER 的 MCU 上执行测试并记录数据。
ML Universal Datalogger 是一款自动化数据记录器应用程序,以 JavaScript 语言实现,作为 FreeMASTER 中的控制页面。其工作原理是,FreeMASTER 应用程序控制用户在 MCU 板上用 C 语言实现的测量场景。测量状态由进度变量报告,该变量由用户通过 C 代码控制。它允许用户通过简单的单页 GUI 和 C 项目中的几行代码自动执行耗时的测量或软件测试。
应用领域
输出文件和支持的变量
基本上,任何可以序列化为字节的数据都支持。您可以下载多个不同长度的变量(单个变量或数组),它们将被自动识别、下载并导出为 CSV 文件。长度较短的变量行将保留为空白。数据将保存到扩展名为 CSV 的文件中,但以 TAB 字符分隔。
电路板:FRDM-MCXN947,定制电路板
类别:AI/ML、工具
外设:UART
工具链:MCUXpresso IDE
目录
1.软件
- 此软件包提供的 FreeMASTER 应用程序 - FreeMASTER 项目(JavaScript 应用程序),用于用户在 MCU 上实现场景的自动化
- 文件夹
freemaster_project
ml_universal_datalogger_pdbdm.pmpx
- FreeMASTER 项目,具有 PD-BDM 就绪连接ml_universal_datalogger_uart.pmpx
- 具有 UART 就绪连接的 FreeMASTER 项目configuration.xml
- 数据记录器的示例配置文件
- 文件夹
- 此软件包提供的 MCU 应用程序 - MCUXpresso 示例项目,带有 UART 和 PD-BDM 就绪 FreeMASTER 通信(均适用于 FRDM-MCXN947)
- 文件夹
frdmmcxn947_mlud_cproject_pdbdm
- 带有 PD-BDM 就绪连接的 MCUXpresso C 项目 - 文件夹
frdmmcxn947_mlud_cproject_uart
- 带有 UART 就绪连接的 MCUXpresso C 项目
- 文件夹
- 用于从头开始实现 MCUXpresso 项目的 C 文件
- 文件夹
c_files_only
- 文件夹
工具链:
- MCUXpresso SDK(版本MCUX_2.14.0)
- MCUXpresso IDE
- FreeMASTER(已使用 3.2.3 版本测试)
2.硬件
必需的:
3. 设置
此设置用于从头开始实现 MCUXpresso 项目(使用文件夹中的文件c_files_only
)并将其与文件夹中的 FreeMASTER 项目连接起来freemaster_project
。
木板
- 从 SDK 安装 FreeMASTER 组件
- 确保已启用与传输模式(UART、PDBDM)相关的所有必要引脚、时钟和外围设备
- 将
ml_universal_datalogger.h
和ml_universal_datalogger.c
包含到您的项目中 - 实施场景时要考虑数据记录器
- 可选择从 SDK 安装 RTCESL(用于支持 MLIB 数据类型,特别是分数数据类型,以节省内存消耗)
- 构建并将项目加载到开发板上(由于通信被阻止,请不要忘记在调试项目时继续运行)
- 可能的问题解决方案
- 你的
BOARD_Init
函数被调用了吗? - 你的
freemaster_cfg.h
文件正确吗?
- 你的
- 可能的问题解决方案
用户场景
1)包含头文件
```
include "mluniversaldatalogger.h"
```
2)初始化数据记录器
使用总进度值初始化数据记录器。如果将数据收集到缓冲区,则可以使用缓冲区大小初始化数据记录器会很方便。
MLUD_Initialize(ML_READ_BUFFER_TOTAL_SIZE);
3)调用采样函数
在需要采样的地方调用数据记录器采样函数,该MLUD_UserScenario
函数随后会在内部被调用。例如在定时器中断中。
```
void LPTMR0IRQHandler(void)
{
// Clear timer interrupt flag
LPTMRClearStatusFlags(LPTMR0, kLPTMR_TimerCompareFlag);
// Handle timer event internally and let user know via callback functions
MLUD_HandleSamplingEvent();
}
```
4)定义清理函数
实现/定义用户清理功能(在数据记录器库中外部声明)以在新测量开始之前重置所有变量。
void MLUD_UserCleanUp(void)
{
// Clear buffer by setting index to zero
ml_bufferIndex = 0;
}
5)定义用户场景功能
实现/定义每次测量时执行的用户场景函数(在数据记录器库中外部声明)。该函数的返回值是测量的实际进度值。当返回值等于或高于初始化的总进度值(在本示例代码中为ML_READ_BUFFER_TOTAL_SIZE
)时,测量将完成并启动数据下载。
```
uint32t MLUDUserScenario(void)
{
// If app is enabled
if (mlmyAppState == MLMYAPPSTATEON)
{
// If buffer is not full
if(mlbufferIndex < MLREADBUFFERTOTALSIZE)
{
// Save data to buffers
mlxBuffer[mlbufferIndex] = mlmyAppSpeed;
mlyBuffer[mlbufferIndex] = MLIBConvScF16ffFAsmi(mlmyAppSpeed, 1000.0F);
// Increment buffer (and update progress)
ml_bufferIndex++;
}
}
// Return current progress value (in this case it is buffer size)
return ml_bufferIndex;
}
```
您可以使用标志变量来指示需要测量的特定情况,例如电机的特定转速、信号峰值等。在本例中,应用程序的状态用作标志(ml_myAppState
)。您还可以保存单个变量,例如状态、时间戳或指向数组中特定样本的索引等。否则,您根本不需要保存数据,而是将数据记录器用作自动化工具,但MLUD_UserScenario
每次都必须将进度作为函数的返回值报告!
6)MCU端场景已准备好
其余所有操作均由数据记录器库通过 FreeMASTER 应用程序处理。您只需构建项目,将其加载到开发板上,并将 AXF/MAP 文件链接到 FreeMASTER(如果您不更改 C 项目和 FreeMASTER 项目的位置,则只需执行一次)。
自由大师
- 打开 FreeMASTER 项目(
ml_universal_datalogger_pdbdm.pmpx
或ml_universal_datalogger_uart.pmpx
)- 这里有适用于 FRDM-MCXN947 开发板的 UART 和 PDBDM 示例 C 项目
- 设置与电路板的通信
- UART 项目与电路板无关,只需更改 AXF/MAP 文件路径
- PDBDM 项目是针对特定电路板的,必须针对每个电路板专门设置通信
- 将 AXF/MAP 文件的路径设置为当前项目
- 连接到开发板并重新加载页面
- 可能的问题解决方案
- 确保您已在 FreeMASTER 项目中链接了正确的 AXF/MAP 文件!
- 使用串行连接时,所有波特率都包含在搜索范围内吗?默认情况下,使用 115200 波特率。
- 使用 PD-BDM 连接,您是否设置了正确的板和地址?
- 可能的问题解决方案
用法
如果您已在开发板上准备好场景,则可以打开 FreeMASTER 项目并从那里继续。建立通信后,需要准备配置文件。
配置文件
配置文件包含导出文件、测量和应用程序的相关信息。您可以使用freemaster_project/configuration.xml
示例项目中的配置文件 ()。
结构概述
| 传奇: | [t]
= 标签 | [a]
= 属性 | [o]
= 可选标签 |
| :------: | :---------------: | :---------------: | :-------------------: |
[t]
?配置?- 主配置标签[t]
?文件?- 有关测量进度的信息(也由数据记录器应用程序更新)[t]
文件夹[a]
?值?- 测量文件的目标文件夹(该文件夹必须存在)
[t]
前缀[a]
value - 不带计数器值的文件名
[t]
抵消[a]
value - 文件计数器的偏移值
[t]
app - MCU 上应用程序的信息[t][o]
stateVariable - 表示应用程序状态的变量[a]
symbol - MCU 上的变量名称[a]
faultValue - 表示应用程序故障的值
[t][o]
controlVariable - 表示应用程序控制值的变量[a]
symbol - MCU 上的变量名称[a]
unit - 变量的单位
[t]
startSequence - 启动应用程序的变量及其值的列表[t][o]
?变量?- 为了启动应用程序而需要更改的变量(您可以添加多个)[a]
?符号?- MCU 或 FreeMASTER 上的变量名称[a]
?值?- 变量的值
[t]
stopSequence - 用于停止应用程序的变量及其值的列表[t][o]
?变量?- 为了停止应用程序而需要更改的变量(您可以添加多个)[a]
?符号?- MCU 或 FreeMASTER 上的变量名称[a]
?值?- 变量的值
[t]
开始延迟毫秒[a]
?值?- 启动序列后测量开始前的延迟(以毫秒为单位)
[t]
?测量?- 有关测量变量的信息[t]
?变量?——要下载和保存的变量列表[t][o]
?变量?- 要下载并保存在 CSV 文件中的变量[a]
symbol - MCU 上的变量名称[a]
name - CSV 文件中变量的标题名称
示例配置文件
```
<!--File export-->
<!--Application control-->
<!--Variable containing the application status-->
<!--Variable containing the actual control value (e.g. speed of motor)-->
<!--Variables and their values to be executed in order to start application-->
<!--Variables and their values to be executed in order to stop application-->
<!--Delay between application start and beginning of measurement-->
<!--Measurement control-->
<!--Variables to be downloaded and their name in CSV file-->
```
4.结果
下方预览展示了一个演示场景,其中应用程序在 MCU 上启动后,记录了 2 秒的信号(2000 个样本,采样率为 1kHz)。数据记录器还会在应用程序启动后等待 2 秒,然后才开始测量(例如,在信号稳定后,电机启动后)。您还可以查看配置预览,检查所有内容是否已正确加载。此外,还预览了紧急停止按钮功能,该功能允许用户在发生意外情况(例如电机卡住)时立即启动停止序列。紧急停止按钮会触发数据记录器的故障状态,导致当前测量的数据无法保存!
5. 常见问题解答
没有总进度值
- 确保在设备连接后重新加载页面!
当 FreeMASTER 应用程序未连接到开发板或通信超时时,会显示以下错误
- 确保您不在 MCUXpresso 项目中的调试会话中。
- 确保启用所有引脚、外围设备和时钟,并通过 BOARD_Init 函数调用它们的初始化。
当您的配置文件中有不正确的变量时,会显示以下错误
- 确保您的变量拼写正确并在您的项目中使用(编译器可以在优化期间删除未使用的变量)。
- 您可以在下面的配置预览中看到哪里出了问题。
6. 支持
请参阅以下资源列表以获得扩展支持:
- FreeMASTER - FreeMASTER 应用程序的官方页面
- MCUXpresso SDK - 完整的 SDK 交付,提供对其他 SDK 示例和组件的访问
项目元数据
来源:恩智浦appcodehub