本帖最后由 damiaa 于 2018-9-3 09:44 编辑 【STM32电机培训online】+ P-NUCLEO-IHM002电机正反转 1,在上篇的工程代码中加入函数: void task3(void)//+ u4 h2 e8 p6 _ {; Y- F; r3 O6 m9 i. Q w0 G/ X$ o MCI_Handle_t* pMciHdl = GetMCI(M1); HAL_Delay(5000);* D/ S$ ]2 ~( F% G MC_ProgramSpeedRampMotor1(3000/6,3000);* c+ N1 d$ t% m8 c, z7 M- m MC_StartMotor1();//4 _' m; ]/ H7 d+ F3 W" A7 ^+ r' Q HAL_Delay(5000); MC_ProgramSpeedRampMotor1(-3000/6,3000); uint16_t sts_motor1 = MC_GetSTMStateMotor1(); uint16_t oSTM = MC_GetOccurredFaultsMotor1(); //下面是测试的一些函数,暂时留在这里做参考用。( ^+ B$ l+ x: v/ i5 D$ E //uint16_t MC_GetImposedDirectionMotor1(); $ }4 h1 U O$ s3 t9 X // MC_AcknowledgeFaultMotor1(); //MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 3000);5 [: n; x+ p5 q: x/ t //MC_ProgramSpeedRampMotor1(-3000/6, 3000);8 n0 K0 m7 D+ e8 U6 E( \! _ // MC_StartMotor1(); while(1) {& ~: _' b4 J/ f% ]5 s% B7 [0 j3 } 8 p" k; |$ z( S7 u: x0 S- ? HAL_Delay(5000); ) d! F1 m- K" i0 J7 P8 P# x uint32_t F_Type = MC_GetOccurredFaultsMotor1();//7 v# \, @$ [* d: O+ q& a& X0 A //if(F_Type == MC_SPEED_FDBK) { y4 d3 y0 r9 }6 [# w6 O! u, B MC_AcknowledgeFaultMotor1(); //MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 3000);: I8 `3 m& P4 i MC_ProgramSpeedRampMotor1(-3000/6, 3000);; H: T$ q: a" H N, B MC_StartMotor1(); } d5 A% W. w* Z5 r: n/ c( O2 v }9 G; Q* Y8 h z6 d+ q; f2 e7 i& t; ~ } V7 ~# C9 J9 A7 W; S9 e 8 ?/ C+ R5 J; L * M1 e5 @0 K5 @* K0 t' U. |1 q 2,在main.c中前面加入:3 n6 ^& m% I" w+ a& d$ y5 v extern MCT_Handle_t* GetMCT(uint8_t bMotor);$ w. P) ~6 b0 \+ `# V1 ~ extern MCI_Handle_t * GetMCI(uint8_t bMotor); extern STM_Handle_t STM[1];7 G7 m2 H& _3 h5 {5 j 3,在main.c中调用task3(),编译运行。$ s9 i q+ E+ _, j 4,监测。! }; s. }5 J4 M; g( H- [, E+ i0 [' c 可以看到电机正转到3000了停下来,然后反转。 如果没有MC_AcknowledgeFaultMotor1();加入,反转不了。 9 g. G$ \1 c2 A0 } 具体再实验加入细节。- K* k1 r! _5 D! o / F# B$ Y+ M! V$ V' t ' X9 ]/ T3 s0 b3 p1 g- W |
经验分享不错,点个赞
好的,谢谢 提醒