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

共1条 1/1 1 跳转至页

基于边缘AI的电机状态检测流程记录

菜鸟
2026-11-07 14:15:56     打赏

忙活了几天,终于完成了使用AI来实时分析电机状态的项目。记录一下整个过程。


硬件

e98b5828ec31e966f1b4f9a358f61880.jpg

主控板:NUCLEO-H533RE;LIS3DH 加速计传感器,使用无痕胶粘在电机上。ULQ200x 电机控制器/驱动器+步进电机。边上那个串口模块,只是用来通过充电宝给ULQ200x 模块供电,用来驱动电机的电源。

连接:这个步进电机是五线四相步进电机;   a → IN3_Pin (PB0) → ULN IN1;   b → IN4_Pin (PB1) → ULN IN2;   c → IN2_Pin (PA1) → ULN IN3;   d → IN1_Pin (PA0) → ULN IN4。I2C对应管脚PB6、PB7。配置好I2C总线和4个GPIO口,用来驱动电机。

image.png

image.png

项目思路

使用AI来判断电机状态。整理了一下这个项目的思路:项目分两个部分,1 模型训练。使用单片机驱动电机转动,通过三轴传感器收集电机的振动数据。将振动喂给AI,生成振动模型。2 模型使用。使用单片机驱动电机转动,通过三轴传感器收集电机的振动数据,将振动数据丢给AI模型,通过模型判断出当前电机的状态。简化一下项目,这里电机的状态就只给3种状态:停止、慢速旋转、快速旋转。两个部分都有单片机驱动电机旋转、收集三轴传感器数据部分,于是首先实现这部分功能。

项目实现——训练

步进电机旋转还是比较简单,依次改变GPIO的电平即可。控制改变的速度,即可控制电机旋转的速度。

static const uint8_t step_seq[4][4] = {
    {1, 1, 0, 0},
    {0, 1, 1, 0},
    {0, 0, 1, 1},
    {1, 0, 0, 1},
};

static uint8_t step_index = 0;

static void Stepper_SetCoils(uint8_t a, uint8_t b, uint8_t c, uint8_t d)
{
#if STEPPER_INVERT
    a = !a; b = !b; c = !c; d = !d;
#endif
    HAL_GPIO_WritePin(IN3_GPIO_Port, IN3_Pin, a ? GPIO_PIN_SET : GPIO_PIN_RESET);
    HAL_GPIO_WritePin(IN4_GPIO_Port, IN4_Pin, b ? GPIO_PIN_SET : GPIO_PIN_RESET);
    HAL_GPIO_WritePin(IN2_GPIO_Port, IN2_Pin, c ? GPIO_PIN_SET : GPIO_PIN_RESET);
    HAL_GPIO_WritePin(IN1_GPIO_Port, IN1_Pin, d ? GPIO_PIN_SET : GPIO_PIN_RESET);
}

void Stepper_Step(int8_t dir)
{
    if (dir > 0) {
        step_index = (step_index + 1) % 4;
    } else {
        step_index = (step_index + 3) % 4;
    }
    Stepper_SetCoils(step_seq[step_index][0],
                     step_seq[step_index][1],
                     step_seq[step_index][2],
                     step_seq[step_index][3]);
}

void Stepper_PowerOff(void)
{
    Stepper_SetCoils(0, 0, 0, 0);
}

速度控制使用按键来进行三种状态的切换,使用LED灯来做状态展示。电机停止:绿灯灭;电机慢速旋转:绿灯亮;电机快速旋转:绿灯闪烁。

   if (button_latched) {
        button_latched = 0;
        if (HAL_GetTick() - last_button_tick > 300) {
            motor_state = (motor_state + 1) % 3;
            last_button_tick = HAL_GetTick();
            switch (motor_state) {
                case STATE_STOP: printf("STATE: STOPrn"); break;
                case STATE_SLOW: printf("STATE: SLOWrn"); break;
                case STATE_FAST: printf("STATE: FASTrn"); break;
            }
        }
    }

    switch (motor_state) {

        case STATE_STOP:
            Stepper_PowerOff();
            BSP_LED_Off(LED_GREEN);
            break;

        case STATE_SLOW:
            BSP_LED_On(LED_GREEN);
            if (HAL_GetTick() - last_step_tick >= SLOW_STEP_INTERVAL_MS) {
                Stepper_Step(+1);
                last_step_tick = HAL_GetTick();
            }
            break;

        case STATE_FAST:
            BSP_LED_Toggle(LED_GREEN);
            if (HAL_GetTick() - last_step_tick >= FAST_STEP_INTERVAL_MS) {
                Stepper_Step(+1);
                last_step_tick = HAL_GetTick();
            }
            break;
    }

AI训练是使用NanoEdgeAI Studio,使用这个工具的分类训练,数据要求每行为一组数据,每组数据为256个x,y,z三轴的数值。按这个要求,使用串口输出三轴传感器的数据。

   if (HAL_GetTick() - last_serial_tick >= SERIAL_OUTPUT_INTERVAL_MS) {
        last_serial_tick = HAL_GetTick();
        if (sample_idx == 0) {
            first_sample_tick = HAL_GetTick();
            last_label = motor_state;
        }
        if (lis3dh_ok) {
            LIS3DH_Accel_t acc;
            LIS3DH_ReadAccel(&acc);
            sample_buf[sample_idx][0] = acc.x;
            sample_buf[sample_idx][1] = acc.y;
            sample_buf[sample_idx][2] = acc.z;
        } else {
            sample_buf[sample_idx][0] = 0;
            sample_buf[sample_idx][1] = 0;
            sample_buf[sample_idx][2] = 0;
        }
        sample_idx++;
        if (sample_idx >= SAMPLE_BUFFER_SIZE) {
            // printf("%lu,%s",
            //        (unsigned long)first_sample_tick,
            //        motor_state_names[last_label]);
            for (uint16_t i = 0; i < SAMPLE_BUFFER_SIZE; i++) {
                printf("%d,%d,%d,",
                       sample_buf[i][0],
                       sample_buf[i][1],
                       sample_buf[i][2]);
            }
            printf("rn");
            sample_idx = 0;
        }
    }

使用串口工具收集串口输出的数据记录,并保存到文件中。我这里有三个分类,就需要收集3个文件,每个文件至少要有100行以上的数据。这是其中fast.txt的部分数据

62,13,1028,-25,13,1043,-81,9,1055,-67,14,1055,-49,18,1053,-59,18,1053,-18,18,1041,-9,11,1045,22,15,1036,5,23,1041,55,17,1027,40,20,1033,88,20,1016,39,26,1032,102,21,1015,77,27,1018,158,27,996,76,29,1030,168,20,998,121,21,1010,230,21,990,108,36,1024,202,26,998,128,24,1014,254,21,982,123,42,1027,214,26,998,116,26,1021,231,24,1001,128,33,1028,205,26,1000,87,22,1029,173,19,1017,123,29,1027,178,29,1006,20,15,1041,85,9,1027,103,31,1032,130,19,1017,-15,13,1047,6,17,1041,89,38,1038,89,27,1032,-44,20,1051,-40,8,1045,88,22,1036,43,18,1039,-53,7,1043,-65,2,1043,85,23,1028,36,19,1039,-26,11,1043,-47,3,1046,83,25,1036,36,21,1040,25,19,1032,-7,19,1044,89,22,1034,42,17,1044,63,30,1036,22,24,1039,89,23,1036,41,20,1038,96,22,1023,54,22,1032,92,23,1026,66,20,1030,154,33,1010,103,26,1018,125,20,1018,76,16,1025,194,23,998,139,18,1008,144,19,1013,118,14,1014,239,23,991,160,25,1009,189,23,1003,120,20,1026,232,30,1005,125,22,1028,191,21,1003,92,9,1032,179,17,1012,54,8,1033,196,19,1006,83,5,1034,119,14,1027,-19,10,1049,195,18,996,47,14,1042,53,9,1034,-71,6,1062,178,20,997,46,14,1038,13,11,1040,-77,1,1048,183,27,1003,73,15,1035,18,11,1043,-32,7,1042,194,23,1008,136,21,1026,49,17,1038,17,11,1042,210,34,1023,206,26,1004,84,22,1030,76,19,1025,157,27,1028,272,31,990,124,27,1028,137,24,1019,110,25,1036,310,34,975,165,36,1010,199,31,1000,69,17,1023,362,35,961,213,34,1000,260,29,985,31,15,1011,370,40,966,245,34,993,303,27,964,16,4,1019,343,26,982,243,28,1023,311,24,992,14,-4,1037,255,21,1020,171,40,1007,241,23,997,-17,-2,1064,153,5,1050,60,7,1028,98,3,1066,-97,-9,1041,-16,1,1059,-50,8,1032,-3,-1,1070,-145,-3,1065,-92,-3,1064,-142,2,1048,-78,-6,1050,-127,-9,1059,-153,-6,1051,-93,-8,1049,-108,-14,1059,-137,-20,1044,-135,-11,1060,-87,-6,1060,-69,-4,1054,-105,-16,1047,-73,-3,1047,-50,2,1049,8,13,1040,-41,2,1039,1,11,1033,1,14,1047,70,22,1033,0,6,1030,68,10,1025,43,15,1037,126,26,1013,57,10,1015,143,22,1005,102,23,1018,203,32,995,106,17,1010,215,22,991,167,25,1007,274,26,984,162,5,1002,284,13,979,219,15,1000,303,16,976,180,5,1001,263,14,985,185,22,1013,249,29,998,131,20,1020,185,23,1008,110,16,1024,148,19,1014,42,8,1028,79,12,1026,10,6,1042,28,8,1036,-59,0,1046,-39,13,1042,-106,13,1059,-66,13,1047,-121,2,1049,-103,12,1048,-129,4,1055,-91,11,1051,-145,-5,1046,-121,4,1049,-104,-5,1047,-83,-1,1047,-101,-8,1037,-84,3,1044,-64,3,1047,-68,5,1051,-63,-2,1028,-47,12,1041,0,6,1029,-17,12,1041,-15,11,1023,-19,19,1039,68,17,1022,39,21,1039,59,6,1018,23,13,1030,133,15,1006,85,24,1023,63,11,1013,30,20,1027,183,22,999,136,23,1009,68,4,1016,47,17,1025,232,15,987,184,25,1010,39,5,1028,5,18,1044,205,19,1002,169,25,1019,-9,6,1040,-24,23,1052,134,25,1019,68,24,1032,-87,10,1045,-113,3,1059,31,7,1035,-18,11,1051,-151,1,1057,-157,4,1068,-39,8,1048,-100,8,1059,-186,-1,1058,-194,-1,1064,-100,3,1051,-139,0,1058,-159,5,1049,-142,4,1051,-90,5,1044,-136,6,1050,-126,10,1041,-103,3,1042,-62,2,1038,-76,-6,1047,-71,7,1045,-37,3,1035,-20,5,1046
61,9,1028,64,5,1023,108,13,1020,28,1,1029,66,10,1022,25,21,1038,86,15,1017,66,17,1022,129,18,1010,64,29,1030,142,22,1009,90,23,1020,181,24,996,91,31,1031,192,31,1003,126,23,1016,236,25,993,120,33,1028,210,26,995,127,25,1014,254,25,989,131,32,1024,221,19,996,102,24,1024,217,20,1004,133,29,1029,204,28,1008,68,19,1032,134,19,1020,122,25,1027,153,22,1016,14,11,1040,60,13,1031,108,27,1034,102,15,1026,-33,6,1045,-16,8,1037,100,21,1029,68,11,1028,-65,7,1044,-65,10,1044,86,28,1034,48,23,1039,-26,8,1036,-48,5,1042,93,21,1033,34,16,1039,5,8,1036,-30,3,1045,93,13,1030,41,11,1040,41,12,1033,7,12,1043,92,17,1031,47,17,1040,76,14,1026,41,13,1033,95,14,1027,36,18,1034,108,21,1018,70,22,1027,107,18,1018,75,20,1029,166,28,1008,108,21,1017,130,19,1015,91,19,1026,206,27,1000,133,21,1012,155,15,1007,100,13,1024,232,21,997,155,22,1014,182,16,1001,127,15,1023,236,19,1002,122,16,1025,207,19,997,106,14,1028,195,26,1014,76,18,1032,207,20,993,81,14,1030,136,18,1022,3,10,1047,187,20,997,64,5,1039,73,13,1031,-54,3,1052,179,16,993,44,15,1038,28,16,1035,-85,5,1054,183,21,1001,54,16,1037,18,19,1040,-67,3,1046,182,22,1005,98,9,1026,29,13,1040,-16,10,1042,204,29,1018,169,24,1018,65,15,1036,49,12,1033,198,28,1022,229,30,998,96,26,1027,93,19,1021,145,21,1028,296,30,983,147,24,1019,162,17,1016,99,14,1026,335,19,954,186,27,1000,213,27,986,58,15,1035,350,34,978,216,28,998,275,21,975,44,12,1011,400,28,959,258,19,986,317,19,961,33,8,992,333,18,965,249,24,980,305,9,990,1,0,1054,250,5,1028,154,15,1019,205,10,986,-42,-5,1065,124,16,1032,38,19,1034,93,12,1070,-89,-5,1062,-5,-3,1063,-72,12,1018,-12,9,1056,-151,5,1041,-99,7,1053,-160,2,1042,-145,-1,1050,-141,1,1053,-171,12,1066,-107,8,1054,-110,0,1048,-149,-17,1035,-145,-9,1058,-91,0,1054,-58,6,1046,-73,-4,1042,-45,12,1039,-31,15,1045,16,15,1034,-47,5,1039,-1,12,1034,3,17,1043,78,22,1027,17,1,1022,97,11,1012,73,21,1027,155,21,1005,86,13,1008,177,21,987,126,23,1004,223,32,985,116,10,1000,233,20,983,191,25,996,294,23,976,181,4,994,295,11,976,217,17,997,299,19,983,185,8,1008,262,14,989,174,22,1020,232,20,1006,113,9,1025,158,25,1013,83,13,1030,131,14,1020,26,8,1032,52,8,1027,-23,1,1045,9,8,1036,-71,-6,1042,-47,1,1038,-107,-1,1055,-66,4,1043,-121,-5,1046,-108,6,1045,-139,3,1053,-105,7,1046,-141,0,1047,-124,2,1052,-110,-2,1049,-83,0,1046,-110,-7,1033,-97,4,1041,-71,0,1041,-53,9,1047,-61,4,1030,-55,11,1041,-8,17,1036,-21,16,1047,-10,8,1026,-23,17,1039,46,16,1025,19,19,1038,42,8,1017,-2,15,1027,106,11,1008,71,21,1024,54,12,1008,34,22,1022,164,24,997,114,27,1013,64,11,1017,24,11,1027,210,11,989,163,13,1002,63,8,1017,20,8,1034,223,9,995,184,15,1008,32,2,1033,14,21,1043,198,12,1001,124,18,1017,-52,-1,1039,-81,6,1053,94,7,1024,45,4,1033,-128,2,1055,-134,4,1059,7,2,1037,-49,-3,1051,-164,-12,1049,-176,-1,1069,-59,0,1042,-129,2,1054,-174,0,1051,-164,9,1065,-89,5,1044,-139,4,1056,-172,7,1055,-161,3,1051,-99,0,1044,-121,-4,1048,-106,5,1043,-75,6,1041,-50,5,1041
58,14,1028,-57,-2,1032,157,15,1021,95,18,1032,198,21,1007,68,12,1031,133,10,1015,37,12,1038,88,11,1027,-7,7,1046,20,3,1031,-56,2,1055,-12,3,1048,-95,1,1064,-60,0,1052,-125,-10,1064,-88,-1,1055,-143,-9,1066,-112,-4,1056,-150,-3,1066,-109,-3,1056,-131,-7,1061,-112,-6,1058,-119,-8,1059,-98,-4,1058,-88,2,1056,-75,3,1056,-57,3,1050,-56,0,1051,-21,10,1044,-39,7,1047,8,10,1038,-7,9,1049,39,15,1036,15,15,1042,78,20,1031,39,19,1038,108,21,1017,75,26,1026,160,30,1002,107,28,1016,193,27,994,140,30,1007,234,35,984,164,31,1004,245,32,984,184,32,998,279,29,973,198,26,993,289,27,977,212,28,995,312,29,973,220,36,1000,298,25,975,202,25,1003,272,29,988,170,26,1008,245,27,991,138,20,1018,202,18,1003,83,9,1025,134,10,1019,33,9,1040,84,9,1030,1,8,1046,43,-1,1029,-46,-3,1055,-10,3,1043,-88,4,1059,-48,5,1047,-123,0,1063,-97,-2,1059,-158,-4,1070,-129,1,1057,-160,3,1064,-133,3,1057,-156,4,1062,-116,7,1059,-127,10,1060,-109,2,1055,-82,7,1056,-73,8,1053,-41,7,1049,-53,8,1051,-16,11,1043,-19,13,1050,21,21,1038,3,20,1043,61,21,1027,38,26,1036,95,23,1017,59,25,1031,137,30,1012,97,25,1024,177,25,998,125,29,1006,208,25,978,144,21,996,236,30,981,171,25,997,276,34,972,197,27,986,285,18,970,214,20,989,312,26,968,228,24,997,313,22,976,219,26,1004,300,24,983,190,27,1012,248,27,996,141,18,1020,201,17,1002,77,11,1025,127,11,1017,21,7,1042,64,7,1032,-32,12,1054,18,8,1043,-72,3,1061,-26,7,1050,-101,8,1067,-56,8,1054,-140,-3,1069,-112,3,1061,-158,-4,1066,-122,0,1057,-160,-8,1057,-131,-6,1056,-145,-5,1060,-113,-5,1053,-104,-1,1056,-88,1,1051,-67,4,1057,-59,7,1056,-39,5,1045,-41,7,1051,2,5,1041,-10,8,1045,44,10,1032,21,13,1042,65,18,1029,31,20,1038,90,22,1022,57,18,1034,134,17,1010,90,24,1017,174,20,995,122,21,1007,218,23,980,148,22,1000,241,30,978,174,27,991,278,30,973,201,25,990,285,32,972,205,29,994,311,31,970,210,26,998,294,24,977,198,25,1003,283,19,982,169,25,1012,229,21,998,112,19,1025,179,21,1012,77,14,1031,127,10,1018,24,8,1039,62,9,1033,-43,0,1051,-1,5,1043,-89,-11,1058,-48,0,1049,-110,-7,1059,-77,-1,1051,-147,0,1060,-117,-6,1050,-160,-7,1060,-121,-3,1051,-155,-1,1060,-124,3,1059,-115,1,1056,-92,5,1058,-82,2,1059,-75,8,1060,-53,8,1053,-46,9,1055,-20,9,1044,-29,10,1050,13,13,1038,0,17,1046,50,10,1026,28,12,1038,75,21,1019,53,22,1032,118,24,1018,73,13,1023,152,18,1000,97,25,1020,173,26,990,118,30,1005,225,28,984,155,24,1009,238,31,977,182,28,979,276,28,965,208,19,965,301,22,962,213,25,978,334,29,954,239,26,973,315,16,952,207,29,994,278,23,970,137,21,1018,221,30,990,107,15,1032,177,18,1036,66,10,1046,121,15,1033,14,9,1035,49,-2,1052,-50,-6,1037,-4,5,1053,-89,-7,1042,-52,-1,1049,-137,5,1051,-100,0,1059,-151,0,1068,-151,-1,1075,-119,-4,1068,-152,-1,1056,-129,-2,1058,-118,-6,1070,-88,0,1073,-80,0,1059,-75,3,1061,-48,6,1051,-45,6,1052,-13,12,1045,-31,14,1053,16,16,1038,-3,17,1052,45,18,1036,13,9,1041,82,17,1027,52,21,1034,118,19,1014,75,29,1024,157,25,998,106,28,1010,192,29,986,140,30,1002,247,30,976,173,27,995
59,16,1024,288,23,973,252,15,972,-11,7,1022,-64,3,1044,-52,8,1049,-31,15,1047,-60,9,1046,-51,13,1045,-33,13,1052,30,22,1039,-11,7,1035,27,13,1030,17,12,1035,92,17,1017,39,10,1024,107,18,1006,80,19,1023,174,29,999,99,14,1011,184,21,985,154,24,1004,257,22,980,170,-1,998,272,4,972,225,11,986,310,14,968,188,11,1001,282,19,982,224,23,1002,296,24,984,182,10,1014,235,22,999,157,13,1018,206,17,1005,83,11,1024,127,11,1013,40,3,1033,80,2,1026,-5,-3,1038,21,7,1029,-54,8,1053,-24,2,1044,-89,-4,1043,-68,3,1037,-118,-3,1053,-95,6,1055,-145,1,1049,-117,6,1050,-128,-1,1057,-101,-2,1049,-126,-9,1042,-102,2,1046,-83,1,1045,-69,6,1047,-71,7,1032,-54,14,1044,-26,12,1042,-37,15,1049,-17,8,1031,-11,17,1046,50,17,1032,20,12,1040,37,7,1019,14,24,1033,104,16,1015,68,24,1028,66,15,1012,40,25,1020,170,25,994,128,27,1008,70,16,1017,43,20,1023,222,15,988,178,21,1006,63,10,1019,33,18,1031,218,14,998,174,23,1012,-3,3,1036,-26,17,1054,151,12,1011,98,17,1021,-73,6,1043,-78,6,1049,71,9,1023,6,8,1041,-146,-3,1052,-151,3,1058,-32,11,1043,-102,9,1062,-169,7,1052,-185,8,1062,-82,4,1049,-149,6,1063,-159,7,1056,-149,9,1056,-91,2,1045,-146,2,1054,-138,5,1045,-121,0,1039,-72,2,1045,-86,-3,1046,-73,11,1041,-30,8,1036,-8,9,1041,-24,4,1039,-21,22,1037,24,21,1030,19,19,1036,33,16,1031,14,21,1043,63,24,1027,38,25,1033,93,23,1026,45,32,1038,111,17,1015,87,17,1026,158,19,1006,81,33,1033,165,30,1002,108,25,1014,215,25,991,113,33,1030,221,24,994,133,21,1013,251,19,986,125,31,1024,226,24,994,118,19,1019,237,14,997,131,32,1028,222,22,998,85,21,1021,162,25,1009,127,30,1027,175,25,1012,28,15,1037,87,11,1025,116,29,1034,125,19,1022,-10,13,1040,19,10,1035,110,23,1031,95,12,1027,-45,14,1046,-43,5,1038,96,28,1037,50,20,1037,-54,11,1044,-61,7,1040,95,26,1026,38,16,1035,-13,9,1039,-40,4,1036,99,23,1029,39,18,1042,26,17,1037,-7,13,1040,99,24,1029,46,18,1033,68,19,1028,30,14,1040,102,21,1033,31,15,1036,93,17,1027,50,17,1035,98,17,1026,65,22,1028,146,29,1009,87,21,1015,115,21,1016,80,15,1023,195,30,1001,135,24,1014,144,18,1018,104,15,1029,225,24,1001,146,17,1015,165,14,1013,109,13,1032,238,24,1000,151,24,1017,191,21,1006,113,17,1032,206,28,1011,96,20,1029,195,23,1002,92,8,1033,160,14,1023,28,4,1044,187,14,1003,71,6,1035,90,12,1029,-26,12,1054,188,27,992,51,12,1037,29,13,1041,-75,2,1053,179,21,999,49,6,1038,6,7,1037,-79,-1,1044,182,28,1004,78,13,1030,10,11,1035,-41,2,1040,205,29,1010,140,18,1016,43,16,1035,24,13,1036,189,37,1028,210,32,1011,86,26,1035,77,22,1028,165,35,1034,279,40,990,135,39,1021,149,31,1016,107,23,1035,318,32,972,173,34,1011,204,28,1016,59,15,1038,350,34,982,209,35,996,268,33,997,41,15,1042,398,32,979,264,24,1010,320,18,989,37,6,1030,374,24,986,272,36,1009,334,21,989,-1,8,1043,273,17,1002,210,30,1002,248,35,995,-13,12,1005,175,25,997,80,21,1036,136,23,1024,-77,4,1048,42,14,1061,-43,12,1032,1,15,1044,-145,9,1039,-52,6,1046,-123,10,1029,-67,5,1044,-153,-1,1041,-165,-6,1039,-113,-4,1052,-120,-3,1054,-151,-4,1037

收集完数据后,准备开始训练数据。使用NanoEdgeAI Studio新建一个项目,我这里使用分类模型,注意板卡的选择。

image.png

我的分类一共有3重类型:停止、慢速旋转、快速旋转。所以依次建立3个class,并添加数据文件

image.png

接下来可以选择AI的算法,我这里使用默认的选项,直接开始训练模型。步骤很漫长,耐心等待。

b875452238bd68e13d4a68ed04479f0d.png

bcfc6bd2a15436dc8291ff2e0d98ca53.png

漫长的训练过程(群里有老师说可以不必等待训练完成),最终生成多个训练好了的模型。留意一下“Serial Emulator”这列,点击那个播放键可以切换到串口数据验证的界面,选择不同的模型,可以试试效果如何。我这边测试后,发现排在最顶上的效果并不好。

image.png

aa2bfad2e989cf122b44b41cc338cad2.png

4b77974b5ae05077e3393e6743d50535.png

找到效果好的模型,选中它(用皇冠标记),然后生成库文件。可以看一下右侧给的案例,思路还是很简单,就是收集数据,喂给模型,给出分类。

fde1442177c124e14920fe5111600ea4.png

项目实现——使用

将生成的库文件打开,里边有两个需要使用的文件。放入项目中

image.png

image.png

依然按先前的思路,收集数据,然后喂给模型,通过模型判断出当前电机的状态信息。

   if (HAL_GetTick() - last_serial_tick >= SERIAL_OUTPUT_INTERVAL_MS) {
        last_serial_tick = HAL_GetTick();
        if (sample_idx == 0) {
#if DUMP_CSV
            first_sample_tick = HAL_GetTick();
#endif
            last_label = motor_state;
        }
        if (lis3dh_ok) {
            LIS3DH_Accel_t acc;
            LIS3DH_ReadAccel(&acc);
            sample_buf[sample_idx][0] = acc.x;
            sample_buf[sample_idx][1] = acc.y;
            sample_buf[sample_idx][2] = acc.z;
        } else {
            sample_buf[sample_idx][0] = 0;
            sample_buf[sample_idx][1] = 0;
            sample_buf[sample_idx][2] = 0;
        }
        sample_idx++;
        if (sample_idx >= SAMPLE_BUFFER_SIZE) {
            sample_idx = 0;

            for (uint16_t i = 0; i < SAMPLE_BUFFER_SIZE; i++) {
                input_signal[i]                                = (float)sample_buf[i][0];
                input_signal[i + NEAI_INPUT_SIGNAL_LENGTH]     = (float)sample_buf[i][1];
                input_signal[i + 2 * NEAI_INPUT_SIGNAL_LENGTH] = (float)sample_buf[i][2];
            }

            enum neai_state neai_ret = neai_classification(input_signal, probabilities, &id_class);
            if (neai_ret != NEAI_OK) {
                printf("neai_classification failed: %drn", neai_ret);
            } else {
                printf("id_class=%d  p=%d%%/%d%%/%d%%  truth=%srn",
                       id_class,
                       (int)(probabilities[0] * 100.0f),
                       (int)(probabilities[1] * 100.0f),
                       (int)(probabilities[2] * 100.0f),
                       motor_state_names[last_label]);
            }

上电,通过按键控制电机状态,然后就可以看见AI模型分析出的电机状态了。可以看出,AI分析的结果略微滞后一些,这是串口缓冲导致的。

image.png


stm32_moto.zip





共1条 1/1 1 跳转至页

回复

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