ZHDA192 June   2026 MSPM0G5187

 

  1.   1
  2.   摘要
  3.   商标
  4. 1 简介
  5. 2 快速入门指南
  6. 3 技术背景
  7. 4 系统要求
  8. 5 硬件设计
  9. 6 模型开发
  10. 7 固件实现
  11. 8 代码示例
  12. 9 性能基准测试
  13. 10功耗优化
  14. 11测试和验证
  15. 12排查
  16. 13总结
  17. 14参考资料
  18. 15术语
  19. 16常见问题解答

模型开发

本部分为使用 TI 的 Edge AI 工具开发和部署电弧故障检测 ML 模型提供了指南。

开发工作流程概述

 模型开发工作流程图 6-1 模型开发工作流程. 从数据收集到部署的端到端模型开发工作流程

数据搜集

硬件设置

  • 刷写数据捕获固件:examples/ac_arc_fault_data_capture/LP_MSPM0G5187/
  • 通过 BoosterPack 接头将 TIDA-010971 连接到 LP-MSPM0G5187
  • 连接 USB(通过隔离器进行交流测试)
  • 串行连接:5,820,000 波特、二进制帧

数据收集方案

在受控条件下收集每个类别的数据。每种负载类型包含 20000+ 半周期捕获的最小值(在正常配置和电弧配置中大约平均分配三分钟)。

表 6-1 等级 1:正常运行(无跳闸)
负载类型说明捕获
电感交流继电器、压缩机电机、真空、车间工具10000+
LED卤素照明、600W — 1000W、带调光器10000+
SMPS600W AC/DC10000+
混合5A 电阻负载下的上述组合10000+
表 6-2 等级 2:电弧故障屏蔽负载
电弧类型说明捕获
配置 A加载串联的电弧发生器10000+
配置 B使用串联和并联的 5A 电阻负载的电弧发生器负载10000+
配置 C使用电弧发生器将负载与 5A 电阻负载并联10000+
配置 D均使用电弧发生器的负载和 5A 电阻负载10000+

数据标记

捕获的数据标记为两个类。标记工具提供两种可配置的模式,用于从原始波形 CSV 生成 ARC 数据和 NORMAL 训练数据:帧模式和窗口模式。这两种模式都使用基于电弧电压的启发法来确定地端实况标签,并且独立于任何机器学习模型。虽然支持这两种模式以适应不同的数据集和前端架构,但对于大多数应用而言,帧模式是推荐的默认模式,因为它能够更好地保持事件连续性并产生更清晰的类边界。

帧模式(推荐)

用途:帧模式旨在捕获自然的电弧事件持续时间,并产生可变长度的 ARC 和可紧密反映实际电气行为的 NORMAL 段。它特别适用于基于 LOG300 的数据集和保持时间连续性很重要的场景。

工作原理:

  1. 波形分为固定长度帧
  2. 对于每个帧,会根据可配置的阈值评估电弧间隙电压统计数据(例如峰值和 RMS)
  3. 在连续帧中应用时间平滑处理,以抑制隔离的尖峰和开关瞬变。基于状态机的合并将连续的 ARC 或 NORMAL 帧合并成较长的段。将丢弃低于最短持续时间的片段,以避免对短而嘈杂的片段进行训练。将重叠已确认 ARC 区域的帧从 NORMAL 输出中排除,以验证纯正常 样本

输出特征

  1. 可变长度的 ARC 和 NORMAL 分段
  2. 强大的噪声抑制和更低的标签抖动
  3. 保留电弧事件的自然起始/终止边界
  4. 可配置的保存通道(例如 LOG300 包络或电流),而标记逻辑始终使用电压。

使用场合:

  1. LOG300 或基于包络的前端
  2. 需要高标签保真度和事件连续性的应用
  3. 为瞬态噪声或边界伪影敏感的模型创建数据集

窗口模式(推荐)

用途:窗口模式使用滑动窗口方法生成固定长度的训练样本。当需要统一的输入大小或为需要恒定长度特性的架构构建数据集时,这很有用。

工作原理:

  1. 该信号首先被划分为多个帧。
  2. N 个连续帧的窗口在波形中滑动。
  3. 在每个窗口内,会对类似电弧的帧数量(基于电压阈值)进行计数。
  4. 如果计数超过可配置的阈值,则整个窗口被标记为 ARC;如果电压电平足够低且稳定,则标记为 NORMAL;否则,该窗口将被丢弃。
  5. 提取的与标记窗口相对应的波形将保存为固定大小样本。

输出特征:

  1. 固定长度的 ARC 和 NORMAL 窗口
  2. 更轻松的批处理和一致的模型输入尺寸
  3. 可能会丢弃模糊窗口以保持可信度
  4. 标记仍由电压驱动;保存的通道通常为最新通道

使用场合

  1. 需要统一样本长度的流水线。
  2. 严格的批处理简单性超过事件连续性要求的情况。

建议

这两种模式受到完全支持,并共用基于电压的相同接地真值逻辑。但是,建议将帧模式用作默认模式,因为它:- 更好地保持现实世界的电弧事件连续性 — 通过时间平滑减少噪声引起的假标签,并且 — 通过明确排除电弧相邻区域产生更清洁的 NORMAL 样本。当固定大小输入或快速数据集标准化是主要要求时,窗口模式仍然很有用。

有关更多信息,请参阅 Tinyml-modelzoo->examples->ac_arc_fault->readme.md

数据集分析和选择

拟合优度 (GOF) 图解用作早期评估,用于在模型训练之前评估数据集中的特性分离性。这些图帮助比较不同预处理组合中的 ARC 和 NORMAL 样本的分布,包括 FFT、小波变换、缩放、PCA 和 t-SNE。GOF 图中的强分级分离表明,所选的信号链和特性提取方法适用于分级,而类别之间的重叠表明可能需要进一步调优。

对于带通滤波电流数据集,GOF 图显示明显的 ARC/NORMAL 重叠,尤其是基于 FFT 的预处理,表明一些与电弧相关的特征被屏蔽。相比之下,基于 LOG300 的数据集产生了更清晰的类群集,这表明功能可分离性得到改善,并且更适合下游模型训练。有关数据集时基故障良率、特性提取质量、GOF 图和文件级分类摘要的更多详细信息,请参阅高级特性下的 TI Tiny ML Tensorlab 用户指南。

带通滤波电流和 LOG300 数据集的 GOF 比较

模型架构

而第 4.4 节中提到的电弧故障模型是交流电弧故障检测的推荐模型选择。还可使用多种通用时间序列模型进行分类。

TI Edge AI Studio (GUI) 和 TensorLab (CLI) 均提供通用时间序列模型模板,可快速开发和评估嵌入式 ML 应用。这些模板提供即用型 NPU 兼容架构,这些架构可以用非常少的配置工作就进行自定义数据集训练。

其中一种参考架构是 CLS_6K_NPU 模型,这是一种轻量级可分离卷积神经网络。此模型以及一系列其他参考分类架构可以在 TI Edge AI Studio (GUI) 和通过 CLI 工具提供的 Model Zoo 中获取。

import torch
import torch.nn as nn
import torch.nn.functional as F


class CLS_6K_NPU(nn.Module):
def __init__(self, input_features=512, variables=1, num_classes=2):
super(CLS_6K_NPU, self).__init__()

self.bn0 = nn.BatchNorm2d(variables)

self.conv1 = nn.Conv2d(variables, 16, kernel_size=(3, 1), stride=(4, 1), padding=0, bias=False)
self.bn1 = nn.BatchNorm2d(16)

self.pool1 = nn.MaxPool2d(kernel_size=(3, 1), stride=(2, 1))self.dw3 = nn.Conv2d(16, 16, kernel_size=(3, 1), stride=(1, 1), padding=0,
groups=16, bias=False)
self.bn3a = nn.BatchNorm2d(16)

self.pw3 = nn.Conv2d(16, 32, kernel_size=(1, 1), stride=(1, 1), padding=0, bias=False)
self.bn3b = nn.BatchNorm2d(32)

self.pool2 = nn.MaxPool2d(kernel_size=(3, 1), stride=(2, 1))

self.dw5 = nn.Conv2d(32, 32, kernel_size=(3, 1), stride=(1, 1), padding=0,
groups=32, bias=False)
self.bn5a = nn.BatchNorm2d(32)

self.pw5 = nn.Conv2d(32, 48, kernel_size=(1, 1), stride=(1, 1), padding=0, bias=False)
self.bn5b = nn.BatchNorm2d(48)

self.conv6 = nn.Conv2d(48, 16, kernel_size=(5, 1), stride=(1, 1), padding=0, bias=False)
self.bn6 = nn.BatchNorm2d(16)

self.gap = nn.AdaptiveAvgPool2d(output_size=(4, 1))
self.fc = nn.Linear(64, num_classes)

def forward(self, x):

x = self.bn0(x)
x = self.conv1(x)
x = F.relu(self.bn1(x))
x = self.pool1(x)
x = self.dw3(x)
x = F.relu(self.bn3a(x))
x = self.pw3(x)
x = F.relu(self.bn3b(x))

x = self.pool2(x)
x = self.dw5(x)
x = F.relu(self.bn5a(x))
x = self.pw5(x)
x = F.relu(self.bn5b(x))
x = self.conv6(x)
x = F.relu(self.bn6(x))
x = self.gap(x) # (B, 16, 4, 1)
x = x.view(x.size(0), -1) # (B, 64)
x = self.fc(x) # (B, num_classes)
return x
注: 此示例使用支持 PyTorch 框架的 TI Edge AI Studio GUI/CLI 工具

模型训练

表 6-3 ArcFault_model_1400_t 的推荐超参数:
参数值
Batch size50
Learning rate0.04
OptimizerSGD
Weight decay1e-5
Dataset split60% 训练、30% 间隔、10% 测试

训练选项

  • GUI:使用 CCStudio™ Edge AI Studio GUI 进行指导型训练工作流程

  • CLI:使用 tinyml-tensorlab 进行命令行训练

启用定量感知训练 (QAT),以获得最佳的 INT8 精度。Tinyml-tensorlab 和 Edge AI Studio 内置对 8 位 NPU 感知量化的支持。

量化

为什么要进行 INT8 量化?

MSPM0G5187 Cortex-M0+ 没有硬件浮点单元:

  • FP32 操作需要软件仿真(非常慢)
  • INT8 运算在单个周期内执行
  • NPU 仅支持 INT8 运算
  • 模型大小减小 ~4 倍

量化感知训练 (QAT)

QAT 在训练期间模拟量化,以实现出色的精度保持(通常下降 <1%):

import torch.quantization as quant

# Prepare model for QAT
model.qconfig = quant.get_default_qat_qconfig('fbgemm')
quant.prepare_qat(model, inplace=True)

# Train with simulated quantization
for epoch in range(num_epochs):
    train_one_epoch(model, train_loader)

# Convert to fully quantized model
model_int8 = quant.convert(model, inplace=False)

输入标准化

归一化参数特定于模型,并由 TI-NNC 生成:

// From user_input_config.h - [MODEL_SPECIFIC]
#define FE_NORM_BIAS    [MODEL_SPECIFIC]  // Generated by TI-NNC
#define FE_NORM_SCALE   [MODEL_SPECIFIC]  // Generated by TI-NNC
#define FE_NORM_SHIFT   [MODEL_SPECIFIC]  // Generated by TI-NNC
重要: 重要提示:始终使用编译期间生成的模型 user_input_config.h 文件中的值。

使用 TI-NNC 进行模型编译

TI 神经网络编译器 (TI-NNC) 对经过训练的“onnx”INT8 模型进行转换,以便于 MSPM0 NPU 执行。

编译生成:

  • model.a — 编译后的模型库 (~14 KB)
  • tvmgen_default.h — C 接口接头
  • user_input_config.h — 特性提取配置

集成到 CCS 工程:

  • 将生成的文件复制到 project/model/ 目录
  • 将 model.a 添加到链接器输入文件
  • 在源代码中包含标头: #include model/tvmgen_default.h

有关安装、CLI 语法和详细编译说明,请参阅 TI-NNC 用户指南。