本帖最后由 stm1024 于 2018-9-7 08:12 编辑
这次测试相当于是培训中的试验4“基于MC SDK5.0 状态的切换 ”
让电机正反转,常规的做法是:
- MC_ProgramSpeedRampMotor1(3000 / 6, 1000);
- MC_StartMotor1();
- HAL_Delay(10000);
- MC_StopMotor1();
- HAL_Delay(5000);
-
- MC_ProgramSpeedRampMotor1(-3000 / 6, 1000);
- MC_StartMotor1();
- HAL_Delay(10000);
- MC_StopMotor1();
- HAL_Delay(5000);
复制代码 这段代码可以保证电机正转10秒后停5秒,然后反转10秒后停5秒,如此反复,而且不会出现故障。
不过试验中的要求是,速度反转3000后立即切换为正转3000,通过前面的介绍可以知道,在速度接近0的时候,会产生speed feedback的故障报警。
这也简单:
- MC_StartMotor1();
- MC_ProgramSpeedRampMotor1(3000 / 6, 1000);
- HAL_Delay(10000);
- MC_ProgramSpeedRampMotor1(-3000 / 6, 1000);
- HAL_Delay(10000);
复制代码 运行的效果是:
可见在运转过程中是会出现speed feedback错误的。 接下来是如何消除错误。 - MC_StartMotor1();
-
- MC_ProgramSpeedRampMotor1(3000 / 6, 1000);
- MC_AcknowledgeFaultMotor1();
- MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000);
- HAL_Delay(10000);
-
- MC_ProgramSpeedRampMotor1(-3000 / 6, 1000);
- MC_AcknowledgeFaultMotor1();
- MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000);
- HAL_Delay(10000);
复制代码 这样就可以消除错误,电机也会正反转,不过没有最开始的代码处理的快,毕竟stop motor直接让motor回到了idle状态。测试过程中还发现,如果延时时间太短,例如把两个10000都改为5000,则电机也会一直朝着一个方向转动,估计是留给错误恢复的时间不够?或者是我对SDK的理解不够深入吧
|