本帖最后由 damiaa 于 2018-9-3 09:44 编辑 7 @) e& q) b" Y/ _* p8 p1 t A 【STM32电机培训online】+ P-NUCLEO-IHM002电机正反转" F9 y0 d& r2 b 1,在上篇的工程代码中加入函数:% R2 ~( ]+ ?9 Y- [ void task3(void)//% g! T. h$ J% Z1 m' d { MCI_Handle_t* pMciHdl = GetMCI(M1);& C7 }) E0 A+ W4 b HAL_Delay(5000);, s9 z, u4 R/ s4 J. k0 M MC_ProgramSpeedRampMotor1(3000/6,3000); MC_StartMotor1();// HAL_Delay(5000);1 o Q6 y7 ]. Q/ |5 [ P. \! H MC_ProgramSpeedRampMotor1(-3000/6,3000);2 t, D8 Q. q& O0 @* T. w- A$ L uint16_t sts_motor1 = MC_GetSTMStateMotor1(); uint16_t oSTM = MC_GetOccurredFaultsMotor1(); //下面是测试的一些函数,暂时留在这里做参考用。 //uint16_t MC_GetImposedDirectionMotor1(); 7 r2 \6 w+ i$ _6 B5 _* M5 a. ?4 j // MC_AcknowledgeFaultMotor1();5 `6 H6 X: I9 `4 z //MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 3000); //MC_ProgramSpeedRampMotor1(-3000/6, 3000); // MC_StartMotor1();! X7 w: k6 G) g( l while(1) {9 s0 z: Q) f* Y V HAL_Delay(5000); uint32_t F_Type = MC_GetOccurredFaultsMotor1();//9 a( l3 c- W7 W8 T6 E0 T. \ //if(F_Type == MC_SPEED_FDBK); Y& }% ?: x$ V8 U; P {- _' I3 J8 `3 n. Q' n! K0 m MC_AcknowledgeFaultMotor1();* G7 g2 k1 x1 I* n+ n. S //MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 3000);6 Q' R J( S, B MC_ProgramSpeedRampMotor1(-3000/6, 3000);' c( G6 k% Z: b8 }4 [5 ? MC_StartMotor1(); }( M1 n2 `5 P, s) b0 [6 V+ w$ k } h2 `$ \1 Y! j m4 K6 j } * p4 T q8 r; o+ \ ' \0 K* z+ U0 ? e. l 1 @. X6 S& M/ _0 y( W+ u 2,在main.c中前面加入:% y. u# v; c# p+ ^% `' _ extern MCT_Handle_t* GetMCT(uint8_t bMotor); extern MCI_Handle_t * GetMCI(uint8_t bMotor);$ A: y% p% Z. R9 v/ c extern STM_Handle_t STM[1]; 3,在main.c中调用task3(),编译运行。7 \$ _9 c8 j. M; x5 Q( l; V" E 4,监测。 可以看到电机正转到3000了停下来,然后反转。 如果没有MC_AcknowledgeFaultMotor1();加入,反转不了。 5 U; `7 X1 V9 ]/ \1 u 具体再实验加入细节。, C# p. i8 h4 C+ s& u 0 g M( B; s, T4 f 4 N, n4 Y- Y2 y6 ~" p ( h! }4 a6 ~! K" R$ F- h |
经验分享不错,点个赞
好的,谢谢 提醒