当 AI 遇上电气工程:用 STM32 + TinyML 做一套电机异常监测的最小闭环
这是一篇面向电气、自动化和嵌入式学习者的工程入门文章。目标不是堆砌“AI”概念,而是把采样、特征、模型、部署和保护逻辑串成一个可以逐步实现的小系统。
1. 为什么电气系统需要“边缘 AI”
传统电机保护往往依赖固定阈值,例如电流超过某个数值就报警。这类方法简单、可靠,但在负载变化、启动过程和工况切换时,单一阈值很难同时兼顾灵敏度与误报率。
AI 的价值不是替代过流、过压和过温保护,而是补充一个“状态识别层”:从电流、振动和温度的变化模式中,提前发现与正常工况不同的趋势。
一个比较稳妥的分层结构是:
- 硬保护层:保险丝、断路器、驱动器硬件保护,负责最后防线;
- 实时控制层:MCU 执行限流、停机、降额等确定性策略;
- 智能诊断层:模型输出异常概率或故障类别,辅助告警和维护决策。
关键原则只有一句:AI 可以参与判断,但不能取消确定性的安全保护。
2. 最小系统架构
以三相异步电机或无刷直流电机为例,可以从单路电流开始:
电流传感器/采样电阻
↓
模拟调理与抗混叠滤波
↓
STM32 ADC + DMA 连续采样
↓
分帧、去直流、归一化
↓
时域/频域特征提取
↓
轻量分类器或异常检测模型
↓
告警、记录、通信与降额策略
如果硬件条件允许,可再加入加速度计和温度传感器。多传感器并不意味着一定更好:每增加一个通道,都会增加同步、标定、布线、数据缺失和模型维护成本。第一次实现时,先用一路电流跑通闭环通常更有效。
3. 从原始波形提取什么
直接把数千个 ADC 点送入神经网络并非唯一选择。在资源有限的 STM32 上,先提取少量有物理意义的特征,常常更容易调试。
设一帧采样值为 x[i],长度为 N,可以计算:
- 均方根值(RMS):反映电流有效值;
- 峰值和峰峰值:观察冲击与波动范围;
- 峰值因子:
peak / RMS,对偶发冲击较敏感; - 均值、方差、偏度、峭度:描述分布形态;
- 主频幅值、频带能量:观察转频及其倍频附近的变化;
- 相邻帧变化率:区分稳定异常与瞬态扰动。
例如,RMS 的计算可以写成:
float calc_rms(const float *x, uint32_t n)
{
float sum_sq = 0.0f;
for (uint32_t i = 0; i < n; ++i) {
sum_sq += x[i] * x[i];
}
return sqrtf(sum_sq / (float)n);
}
工程上还要注意三个细节:
- ADC 前端是否饱和;
- 采样率是否足以覆盖关心的频段;
- 训练数据与设备上的预处理是否完全一致。
第三点尤其容易出错。训练脚本使用标准化,而 MCU 忘记使用相同的均值和标准差,模型即使成功运行,输出也可能没有意义。
4. 模型怎么选
4.1 有明确故障标签:做轻量分类
如果有“正常、过载、转子不平衡、轴承异常”等可靠标签,可以从逻辑回归、决策树或小型全连接网络开始。模型越小,越容易解释特征贡献,也越容易部署。
4.2 只有正常数据:做异常检测
真实项目中,故障样本通常稀少,而且人为制造故障存在风险。这时可以只学习正常工况的特征分布,再用距离、孤立森林或小型自编码器给出异常分数。
不过,“异常”不等于“故障”。它也可能来自负载切换、传感器松动或采样链路异常,所以报警逻辑需要时间窗口和状态机,而不是看到一次高分就立即停机。
5. 一个更可靠的决策逻辑
模型输出可以记为 p_anomaly。不要直接写成:
if (p_anomaly > 0.8f) motor_stop();
更实用的方式是加入连续计数、回差与硬阈值兜底:
if (current_rms > HARD_CURRENT_LIMIT) {
emergency_stop(); // 确定性硬保护
} else if (p_anomaly > 0.8f) {
abnormal_count++;
if (abnormal_count >= 5) {
raise_warning(); // 连续多帧异常才告警
}
} else if (p_anomaly < 0.5f) {
abnormal_count = 0; // 设置回差,避免临界抖动
}
进一步还可以把告警分级:
- 提示:记录事件并上传;
- 警告:限制功率或降低转速;
- 严重:进入安全停机流程;
- 硬故障:绕过 AI,立即保护。
6. 从数据到部署的完整闭环
一个可复现的流程可以分成六步:
第一步:定义问题
先明确要识别的是过载、机械不平衡,还是“不同于正常状态”。没有清晰标签定义,后面再复杂的模型也无法补救。
第二步:采集并记录上下文
除传感器数据外,还要记录转速、负载、供电电压、环境温度和设备编号。否则模型可能只是记住某台设备或某个负载,而非真正的异常模式。
第三步:按设备或时间切分数据
不要把同一次连续采样切成小窗后随机分到训练集和测试集,这会造成数据泄漏。更稳妥的办法是按设备、实验批次或时间段切分。
第四步:先做基线
先比较固定阈值、统计距离和简单分类器,再尝试神经网络。只有当复杂模型在独立测试集上稳定胜出,它的计算和维护成本才有意义。
第五步:量化与部署
部署前关注 Flash、RAM、单次推理时间和最坏执行时间。若使用 int8 量化,需要用与真实工况接近的代表性数据做校准,并重新评估精度。
第六步:在线监测模型本身
记录输入范围、异常分数、固件版本和模型版本。当传感器更换、设备老化或工况变化时,数据分布会漂移,模型也需要重新验证。
7. 如何评价系统,而不只看“准确率”
电气故障检测通常更关心:
- 漏报率:真实异常被忽略的比例;
- 误报率:正常运行被错误报警的比例;
- 提前量:能否在传统阈值触发前给出提示;
- 跨工况表现:换负载、换转速后是否仍然有效;
- 推理延迟与资源占用;
- 传感器断线、饱和和噪声下的降级行为。
因此,一个模型在离线数据上达到很高准确率,并不代表它已经具备工程可用性。真正的验收对象应是“采集—推理—决策—执行—记录”整条链路。
8. 一个适合学习者的实现顺序
如果准备亲手做,可以按下面的难度递增:
- 用 STM32 ADC + DMA 稳定采集电流波形;
- 在串口或上位机上验证 RMS、峰值和频谱;
- 用正常数据建立统计阈值;
- 在 PC 上训练一个小型分类器;
- 将同一套预处理和模型移植到 MCU;
- 加入连续帧判定、回差、硬保护和事件日志;
- 最后再扩展振动、温度或云端分析。
这样做的好处是,每一步都有可观测结果。即使 AI 模型暂时没有带来收益,前面的采集、特征和状态机仍然是一套有价值的电气监测系统。
结语
AI 与电气工程结合的关键,不是把大模型塞进控制器,而是让数据驱动方法尊重物理规律、实时约束和安全边界。对 STM32 这类资源受限平台而言,小模型、好特征、清晰的状态机和可靠的保护链路,往往比“更深的网络”更重要。
当我们把 AI 放在正确的层级,它不是替代传统电气保护的黑盒,而是一个能提前发现趋势、帮助定位问题的传感器增强模块。
AI 内容声明: 本文由 AI 辅助生成并经过人工式技术审校,用于演示博客发布流程。文中的代码与架构为教学示例,不包含真实设备测试数据;涉及实际电机与功率系统时,请以硬件保护、标准规范和现场验证为准。
浙公网安备 33010602011771号