μBATTERY / WATCHEDGE AI LAB · PROJECT 02
● SIMULATION READY
嵌入式 AI 实训 · 端侧异常检测

在电池失效之前,
先看见异常。

用两块 STM32、真实 CAN 通信链路和端侧 AI,搭建一套可复现、可解释、可降级的锂电池微短路预警系统。这里既是项目说明,也是从信号到模型再到部署的交互课堂。

PACK / CELL VOLTAGELIVE DEMO
3.65V3.35VNORMAL × 15CELL 07 · DRIFT
ΔV CELL 07 −30 mVWINDOW 10 min
01 / SYSTEM OVERVIEW

故障源可模拟,链路必须真实

F407 固件模拟 BMS 数据源,H743 接收真实 CAN 帧并完成预警。验证算法时不需要让真实电池进入危险状态。

BUS SPEED
500 kbps
经典 CAN · 标准帧
TELEMETRY
100 ms
电池数据广播周期
EDGE MODEL
<50 KB
INT8 · 目标模型体积
INFERENCE
<100 ms
H743 端侧推理目标

端到端系统数据流

2-BOARD ARCHITECTURE
F4
F407 · 模拟 BMS / 故障注入每 100 ms 生成电压、电流、温度、SOC
DATA SOURCE
CAN 2.0 · 500 kbps ↓
CAN
物理总线 · 标准帧 0x123–0x126帧过滤 → FIFO0 → 中断接收
REAL LINK
FDCAN IRQ ↓
H7
H743 · 预警器 / 端侧推理解帧 → SOC 归一化 → 窗口特征 → AI → 分级预警
EDGE DEVICE
↓ SAFE FALLBACK
OUT
OLED · 蜂鸣器 · 三色灯状态显示、声光提示、串口日志与阈值配置
ALERT

自定义 CAN 数据协议

BMS_PROTOCOL.H
帧 ID数据定义解码规则
0x123单体电压组(需拆帧)经典 CAN:每帧最多 8 字节;2B/路时最多 4 路
0x124总电流2 字节 × 1 mA
0x125温度2 字节 × 0.1 °C
0x126电量 SOC1 字节,0–100%
协议核对点:16 路单体电压 × 2 字节 = 32 字节,不能放进一帧经典 CAN(最多 8 字节)。需在协议中定义 4 帧分组 / 额外帧 ID,或使用 CAN FD;此处不假设原方案已完成拆帧。
时序示例:25 MHz FDCAN 内核时钟 ÷ Prescaler 5 = 5 MHz TQ;位时间 1 + 7 + 2 = 10 TQ;波特率 500 kbps,采样点 80%。
时钟树不同,Prescaler / Seg 参数须重新计算。
HANDS-ON / HARDWARE TO EDGE AI

桌面实训台:从两块板到端侧预警

用交互模拟串起实物搭建、数据采集、PC 训练和 H743 部署。可按步骤操作,也可直接播放完整流程。

SIMULATED BENCH · 实物链路教学模拟

F407 采集端 → CAN 总线 → H743 预警端 → PC 训练工作站

STM32F407待上电
USB
STSTM32
F407
PA11 · RX
PA12 · TX
GND
5V
3V3
BOOT
数据源 / 故障注入
开发板 ①:按固件周期生成模拟 BMS 数据
CAN 收发器 + 双绞线
CANHCANLGND
●
CANH/CANL 接收发器;总线两端按总线长度与拓扑考虑 120 Ω 终端电阻。
两板共地;不要将 MCU 引脚直接当作 CANH/CANL。
STM32H743待上电
USB
STSTM32
H743
FDCAN RX
FDCAN TX
GND
OLED
BUZZER
LED × 3
接收端 / 模型推理
开发板 ②:接帧、算特征、推理并输出预警
提示:先供电,再接 CAN;实际引脚以开发板原理图为准。
桌面实物清单STM32F407 开发板STM32H743 开发板CAN 收发器模块 × 2双绞线 / 杜邦线USB-CAN(PC 采集,可选)OLED / 蜂鸣器 / LED

采集台 · 记录正常与故障波形

CAN → CSV

先采覆盖不同 SOC 与正常工况的数据来训练;故障注入数据留作评估。采集时同时保存时间戳、原始帧、工况和注入命令。

当前采集窗口已停止
累计样本0
覆盖 SOC 桶0 / 3
数据用途训练 / 正常
先选 SOC 桶,再记录正常样本。每 100 ms 是报文更新周期;模型窗口要包含一段时间的数据。

PC 端数据预处理

LOG → WINDOW → FEATURES
原始 CAN
0x123 · 0x124…
→
解码单位
V · mA · °C · %
→
按时间排序
去重 / 缺帧检查
→
滑动窗口
连续时序片段
→
特征矩阵
训练输入 X
窗口设计要点:100 ms 是报文周期;慢性微短路的特征窗口通常要长于单个采样周期。窗口长度、步长、缺失帧处理和训练/验证切分都应通过实验确定,避免相邻窗口泄漏到两边。
5 维(示例)
SOC 桶 + 数值缩放
正常窗口
独立注入窗口

PC 训练台 · 训练一个“正常模式重建器”

TEACHING SIMULATION

训练数据使用覆盖低、中、高 SOC 的正常窗口。这里用一个可视化的教学训练过程演示“损失逐步下降”,数值不代表真实训练结果。

训练损失(示意)训练轮数 →
训练进度等待开始
当前损失—
验证集尚未评估
SOC 覆盖未检查
数据齐全后开始训练;如果只覆盖一个 SOC 桶,页面会提示补采。

训练前检查清单

AVOID DATA LEAKAGE
正常训练样本覆盖低、中、高 SOC,且训练与验证按采集批次分开。
同一时序的相邻滑动窗口不要随机拆到训练集和验证集两侧。
注入故障样本用于验证阈值与检测性能,不要混进“只学正常”的训练集。
先检查缺帧、字节序、单位和异常值,再谈模型效果。
现在:去“采集数据”页,至少为三个 SOC 桶各补充正常样本。
X_normal → Encoder → latent z → Decoder → X̂_normal
Loss = mean((X_normal − X̂_normal)²)

模型打包与移植 · PC → H743

FLOAT → INT8 → C
PC 模型已训练权重
→
TFLite格式转换
→
INT8代表数据校准
→
C 代码X-CUBE-AI
→
H743板端推理
未比较
未生成
未测量
未部署
先完成 PC 训练,再转换、比较量化结果,然后部署到 H743。

这些步骤分别做了什么?

术语拆解
TFLiteINT8 量化代表性数据代码生成
重要:“模型文件不到 50 KB”“板端推理不到 100 ms”属于项目约束目标。应由生成文件与目标硬件实测确认,而不是由转换过程自动保证。
训练端和 H743 端使用同一套特征顺序、缩放和 SOC 基准。
记录 Flash、RAM、推理耗时和量化前后异常分数变化。
把推理超时、初始化失败纳入规则回退测试。

H743 实时监视器 · 看见一次端侧预警

LOCAL INFERENCE
等待模型部署FDCAN FIFO → 特征窗口 → AI 推理 → 告警
风险分数—
0 正常  60 关注  85 报警
最新 CAN 帧等待接收特征窗口—
部署模型后启动监视。当前所有读数均为交互仿真,不控制真实硬件。

现场排查:先查链路,再查模型

DEBUG ORDER
先从最靠近数据源的环节查起,并保存可复现的 CAN 日志。
02 / DATA & FAULT MODEL

让异常可控、可重复、可对照

故障注入发生在 F407 固件数据层,预警器仍走完整的 CAN 收帧与推理路径。无需真实电池短路即可验证算法。

INJECT 01 / SLOW DRIFT

微短路早期 · 缓慢自放电

单体电压按设定速率缓慢下降。文档示例:2 mV/min,持续 10 min,用于观察长期趋势。

INJECT 02 / OSCILLATION

接触劣化 · 小幅周期波动

单体电压约 ±5 mV 周期波动。帮助比较方差、斜率与样本熵对不同异常形态的响应。

INJECT 03 / STEP

突变故障 · 瞬时掉压

单体瞬间下降 50 mV,作为明显故障对照,检验突变检测与紧急报警通路。

AI PIPELINE / PC → MCU

模型从数据走到芯片,要经过七步

课堂演示重点放在第 2–5 步:数据如何变成特征、正常模型如何学到边界、INT8 如何压缩、以及量化前后如何验证。板端推理必须保留规则式保护回退。

开始交互学习 ↗
01采集正常数据覆盖 SOC / 工况
02提取五维特征滑动窗口统计
03训练自编码器只用正常样本
04INT8 量化代表性校准集
05PC 端验证误差 / 误报 / 漏报
06生成 C 代码X-CUBE-AI
07H743 端运行异常即规则回退
03 / INTERACTIVE AI CLASSROOM

端侧 AI 小白入门课

先看完整的数据旅程,再一步步学会:AI 为什么能预警、它看什么、怎么放进芯片,以及怎样验证它真的有用。

欢迎来到电池预警实验室 · 预计 8 分钟

先认识这条“从电池到提醒”的旅程

想象电池是一排水杯。每只杯子的水位就是单体电压。正常时水位变化很接近;如果一只杯子悄悄漏水,它可能很久以后才明显变低。我们的工作是在它低到危险之前,发现那一点点持续变化。

先记住这一句:AI 不是魔法,也不会直接“看见短路”。它读取传感器数据,找出与正常状态不同的模式,再把结果交给预警逻辑。
🔋电池 / 数据模拟产生电压、电流、温度
📨CAN 总线把数据装进报文送出
🧠H743 预警器整理信号并运行 AI
🚦灯 / 蜂鸣器显示正常、关注或报警
▶ 点击“播放数据旅程”,看一条数据怎样一步步变成预警提示。
步骤 0 / 5
为什么不直接接真电池?固件模拟安全、便宜、可重复;算法仍经过真实 CAN 收发与板端处理。
什么叫端侧 AI?模型放在设备本地运行,不必把每一条电池数据送到云端。
AI 是保护器吗?AI 帮忙发现征兆;最终保护策略仍要依赖经过验证的系统设计。
学习地图:数据 → 信号 → 模型 → 决策 → 芯片
第 1 课 / 数据从哪里来

先把“电池状态”翻译成设备能传的话

电池管理板 F407 像一位记录员,每 100 毫秒把几类数据写进 CAN 报文。预警板 H743 像收件人,按报文 ID 找到数据,再换算回电压、电流和温度。

生活比喻:CAN 帧像贴好地址标签的快递盒。ID 是地址,数据字节是盒子里的内容;两块板必须使用同一本“地址与单位说明书”。

点选一个报文,看看它装了什么

每 100 ms 发送一次
CAN ID0x123数据字节(示意)0B B8 · 0B B6 · …还原成电压组帧经典 CAN 单帧最多 8 字节;16 路 × 2 字节需拆帧或使用 CAN FD。
0x123:16 路单体电压,每个值由 2 字节组成,按协议比例系数换算。字节顺序和分辨率须与发送端一致。
单体帧 ID分辨率SOC
看懂报文后,才有可靠的输入
第 2 课 / 窗口与特征

一帧是一个瞬间;一段时间才是“趋势”

微短路早期很慢,单看某一帧几乎看不出来。我们把连续数据放进一个滑动窗口,再算出摘要特征。就像不只看今天体温,而是看最近一段时间的变化。

生活比喻:特征是“重点摘要”。原始波形很长,模型不一定要直接读每个采样点;先把有意义的变化提炼成少量数字。

拖动时间窗口,观察“缓慢掉压”变明显

示意数据 · 每点代表一段时间
相对电压偏差(mV)过去 ───────────── 时间 ─────────────→ 现在
−12 mV
−1.5 mV/min
稳定
较低
拖动窗口:越靠右代表观察得越晚,缓慢变化累积后更明显。
电压偏差某个单体相对同一 SOC 桶正常值偏离多少。
变化率 / 斜率不是“现在多低”,而是“正在以多快速度变低”。
样本熵衡量时序复杂度;波动更不规律时可能升高,需结合其他特征。
工况也会影响电压,要先公平比较
第 3 课 / 模型怎样学习

先教会 AI“正常”,再观察它哪里看不懂

微短路早期样本难收集,形态也可能没见过。这个方案用自编码器做无监督异常检测:它只学习正常窗口的输入输出关系。遇到陌生模式,如果重建得很差,误差会变大。

生活比喻:让学生反复临摹正常字迹。熟悉的字能写得像;没见过的奇怪笔迹,临摹结果差距更大。差距只是“值得检查”的信号,不能直接说明病因。

选一个窗口,观察输入经过模型后的“重建差距”

示意分数 · 非实测
输入特征 x重建结果 x̂5 维 → 压缩 → 3 维 → 重建 5 维绿色实线:输入 · 浅绿虚线:模型重建 · 两者距离:重构误差
正常数据
输入 vs 重建
0.018
正常窗口接近模型见过的模式,重建误差较小。
无监督学习重构误差窗口
异常分数还要经过决策规则
第 4 课 / 分数与预警

分数不是结论;阈值把分数变成行动

系统会综合单体压差变化、总压下降、SOC 变化和突变信号得到风险评分。教学示例用 60 分作为预警线、85 分作为报警线。真实阈值必须通过正常与注入故障实验校准。

生活比喻:烟雾报警器不是看到一点灰尘就鸣叫。它需要设定灵敏度,并用实际环境测试误报和漏报的平衡。

切换场景,看系统为什么分级提醒

评分逻辑教学演示
24
融合评分 / 100
0 正常60 预警85 报警100
正常范围:继续采集数据,暂不提醒。
AI 分数高:进入预警或报警流程,并记录相关窗口。
AI 初始化失败、超时或输出异常:切换到规则式评分继续工作。
阈值要兼顾:不要频繁误报,也不要错过真正异常。
上芯片前,先压缩、验证、再板测
第 5 课 / 量化与上板

让模型变小、跑得动,还要确认没变笨

PC 上训练出的模型通常使用浮点数。STM32 资源有限,项目计划把模型转成 INT8,再生成 C 代码放进 H743。压缩成功不等于部署成功:必须做数值对比、指标评估和目标板测试。

生活比喻:像把一本厚手册浓缩成口袋版。口袋版更轻便,但要检查关键内容有没有丢失,且确认现场真的能读、能用。

点击播放部署流水线

PC → H743

① 采集覆盖充分的正常窗口

步骤 1 / 5
覆盖高、中、低 SOC 和不同正常工况,为模型和量化校准提供代表性数据。
建议保存原始 CAN 日志与采集条件
INT8 是什么?用 8 位整数表达模型数值,通常能省存储、减计算量,但有量化误差。
校准数据做什么?让转换器看到有代表性的正常输入范围,计算 scale 与 zero point。
板端验什么?模型大小、推理耗时、RAM/Flash、量化前后误报漏报与异常回退。
你已经走完一条完整的端侧 AI 链路
进阶交互实验:SOC 归一化、特征、重构误差和评分器

实验 A · SOC 改变时,电压也会改变

NORMALIZATION
点击 SOC 档位,再切换是否出现单体异常,观察“原始电压阈值”和“同 SOC 桶偏差”的差异。
同 SOC 正常基准当前单体原始固定阈值

读懂结果 · 为什么按 SOC 分桶?

CONTEXT → SIGNAL
50%
3.70 V
3.70 V
0 mV
正常:低 SOC 时绝对电压可以较低。先减去对应 SOC 桶的正常基准,把工况差异从故障信号中拿掉。
训练注意:正常样本也要覆盖并均衡各 SOC 桶,否则模型可能把少见的高/低电量误当异常。

实验 B · 不同故障,留下不同的时间指纹

FEATURE ENGINEERING
单体电压偏差

五维输入向量

WINDOW → FEATURES
0 mV
0.0 mV/m
0.0 mV/m
0.0 %/m
0
低
物理解释:微短路的核心证据是个别单体相对同工况基准持续掉队;接触劣化更可能带来小幅不规则波动;瞬时突变由变化率和突变标志快速抓取。样本熵描述规律性,不等于“故障概率”。

实验 C · 自编码器学会“正常长什么样”

UNSUPERVISED
输入 5 维
→
编码压缩
→
瓶颈 3 维
→
解码还原
→
重构 5 维
MSE = mean((x − x̂)²)  anomaly_score = reconstruction_error
只拿覆盖各 SOC 桶的正常数据训练,模型学会重建正常模式。遇到没学过的异常形态,重构通常变差,误差增大。它输出的是异常分数,不是故障原因的诊断结论。

滑动异常样本,看重构误差

TEACHING SIMULATION
0.018
模型能较好重建该片段接近训练分布,分数低。
NORMAL · 正常分布
x:真实特征窗口 → x̂:模型重构 → e:重构误差
实际边界须由验证集误差分布与代价权衡确定;本交互中的分数为教学示意值,不代表真实设备诊断性能。

实验 D · 调权重,观察融合分数

RULE SCORE · 0—100
预警阈值 报警阈值

实时分数与系统状态

FALLBACK READY
24
正常监测权重融合的规则式基线分数
NORMAL · 继续观察
0 NORMAL60 WARNING85 ALARM100
工程原则:AI 异常、初始化失败或超时时,系统自动回退到可解释的规则评分。规则参数与 AI 阈值都必须通过注入实验和真实工况验证后再固化。

PC 训练,到 STM32 推理

MODEL LIFECYCLE
PC
训练:Keras / TensorFlow正常窗口 · SOC 均衡 · 5→3→5 · MSE
FLOAT32
↓ 代表性正常样本校准
INT8
后训练量化 PTQ统计激活范围,确定 scale / zero point
QUANTIZE
↓ 转换 · PC 对比验证 · X-CUBE-AI 生成 C
MCU
H743:CAN → 特征 → 推理 → 预警记录耗时、内存、误差;异常时规则回退
INT8 / C

上线前要交代清楚的边界

VALIDATION CHECKLIST
<50 KB
<100 ms
误差 / 指标
规则式回退
不要只说“精度损失 <1%”。需明确比较的是重构误差、分数还是分类指标;同时报告正常误报、故障漏报、检测提前量与板端时延。量化后也要覆盖高低 SOC 的代表样本。
模型小、推理快、误报率或“提前 5 分钟”等数值,在没有可复核实验日志前属于项目目标 / 文档记录,不能当作已独立验证的性能承诺。

检查理解 · 先想,再点选

01 / 04
为什么只用正常样本训练自编码器也能用于异常检测?
04 / VALIDATION & DELIVERY

让“有效”有清楚的统计口径

演示系统的价值在于可复现地比较。正式结论必须依赖记录完整的测试集、工况和指标定义。

ΔT = T₁ − T₂预警提前量:电池保护时刻减去早期预警时刻分故障类型、SOC 桶和重复实验报告均值、分布与失败案例。
FP / Normal误报:正常工况中误触发预警的次数或时长占比需定义窗口长度、去重规则、观察时间以及各 SOC 档覆盖。
FN / Fault漏报:注入故障中未在保护前提示的比例需分别统计缓降、波动、突变,不能只给一个合并数字。
PHASE 01协议联调CAN ID / 字节序 / 波特率 / 抓包
PHASE 02注入复现同一波形重复运行,保存原始日志
PHASE 03PC 端评估阈值、误报、漏报、提前量分析
PHASE 04量化与板测模型尺寸、RAM / Flash、推理时延
PHASE 05保护回退断帧、超时、模型失败和掉电场景