
本帖最后由 damiaa 于 2018-9-3 09:44 编辑 【STM32电机培训online】+ P-NUCLEO-IHM002电机正反转 E3 X* T7 f9 ]. U# B: M2 o 1,在上篇的工程代码中加入函数: void task3(void)// { MCI_Handle_t* pMciHdl = GetMCI(M1); HAL_Delay(5000); MC_ProgramSpeedRampMotor1(3000/6,3000); ^; ]" o5 u4 \( R! t- O6 w4 S# o MC_StartMotor1();//7 E5 k2 Y% w: `7 l1 K HAL_Delay(5000);2 Q1 L( Z! K8 z) K2 [/ C+ ~ MC_ProgramSpeedRampMotor1(-3000/6,3000); uint16_t sts_motor1 = MC_GetSTMStateMotor1(); uint16_t oSTM = MC_GetOccurredFaultsMotor1(); //下面是测试的一些函数,暂时留在这里做参考用。( P# Q3 U2 _. Z" D. | //uint16_t MC_GetImposedDirectionMotor1(); / ], P5 o {! b/ V0 Q% m( y4 G // MC_AcknowledgeFaultMotor1(); //MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 3000);: L/ c0 {; v% A //MC_ProgramSpeedRampMotor1(-3000/6, 3000); // MC_StartMotor1(); while(1)0 W, K7 `3 B4 A3 s+ {0 { {& |! S3 V' }7 I6 o4 p6 b1 J( [ HAL_Delay(5000); uint32_t F_Type = MC_GetOccurredFaultsMotor1();//# ^ v2 u5 ~( ~" t- M //if(F_Type == MC_SPEED_FDBK) { MC_AcknowledgeFaultMotor1();! J4 \, L: \, K; t% c6 K2 n //MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 3000);, T- x2 ]5 h5 T0 W* v4 D MC_ProgramSpeedRampMotor1(-3000/6, 3000);# }8 X" k7 g" \$ } MC_StartMotor1();9 I6 S" L! k# D2 I }' _0 [& H( k5 n! K) i } } ( _ p( i2 o) D- J7 B/ ] - f7 Y# j9 ]5 c: T5 a2 ] 2,在main.c中前面加入:" B: Q& H- H' ?& u& M4 s extern MCT_Handle_t* GetMCT(uint8_t bMotor); extern MCI_Handle_t * GetMCI(uint8_t bMotor); extern STM_Handle_t STM[1]; 4 p+ V, T# q* S6 J6 M 3,在main.c中调用task3(),编译运行。7 J2 W; r1 f* p9 c Y 4,监测。2 B* C3 K0 N( j+ q2 E" Q' Y' e 可以看到电机正转到3000了停下来,然后反转。, |$ V$ X4 k, e" O7 h0 S# y* ? 如果没有MC_AcknowledgeFaultMotor1();加入,反转不了。 0 u2 l, ` i9 N0 h; y8 ]! W ![]() ![]() 具体再实验加入细节。, c& }3 L. j2 r0 V4 M ! e6 @9 n& S, C5 T) e |
经验分享不错,点个赞
好的,谢谢 提醒