这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 最终成果基于边缘AI的电机状态检测

共1条 1/1 1 跳转至页

最终成果基于边缘AI的电机状态检测

高工
2026-11-10 00:33:14     打赏

通过前面的内容已经可以正常的进行电机状态检测了,大佬们都是检测四种状态,小弟就精简一下,完成电机转动和电机停止就好了。

主要就是采集满256个样本进行一次判断,然后推理输出neai_label。

LIS3DH FIFO
   │  每次 ai_samples_poll() 读出一批原始样本
   ▼
NeaiApp_PushSample(x, y, z)   ← 每来 1 个样本调用 1 次
   │  攒满 256 个时间点(768 个 float)
   ▼
neai_classification()
   │
   ▼
"AI: id=1 run stop=0% run=100%"  → 串口


void NeaiApp_PushSample(int16_t x, int16_t y, int16_t z)
{
float    probabilities[NEAI_NUMBER_OF_CLASSES];
char     msg[160];
size_t   n;
int      id_class = 0;
int      k;
uint16_t idx;

if (s_ready == 0U)
{
return;
}

idx = (uint16_t)(s_count * NEAI_INPUT_AXIS_NUMBER);
s_signal[idx + 0U] = (float)x;
s_signal[idx + 1U] = (float)y;
s_signal[idx + 2U] = (float)z;
s_count++;

if (s_count < NEAI_INPUT_SIGNAL_LENGTH)
{
return;
}

s_count = 0U;

if (neai_classification(s_signal, probabilities, &id_class) != NEAI_OK)
{
neai_print("NEAI: classification error\r\n");
return;
}

n = (size_t)snprintf(msg, sizeof(msg), "AI: id=%d %s", id_class,
neai_label(id_class));
for (k = 0; k < NEAI_NUMBER_OF_CLASSES; k++)
{
n += (size_t)snprintf(&msg[n], sizeof(msg) - n, " %s=%d%%",
neai_label(k),
(int)((probabilities[k] * 100.0f) + 0.5f));
}
(void)snprintf(&msg[n], sizeof(msg) - n, "\r\n");

neai_print(msg);
}

最终演示如下:



共1条 1/1 1 跳转至页

回复

匿名不能发帖!请先 [ 登陆 注册 ]