本帖最后由 damiaa 于 2018-9-3 09:44 编辑 + L$ J! [; M: w+ U6 ~6 L / {: p8 \+ E- Q* { I% W6 V' w7 T 【STM32电机培训online】+ P-NUCLEO-IHM002电机正反转 1,在上篇的工程代码中加入函数: void task3(void)//7 q% t2 E) z7 a { MCI_Handle_t* pMciHdl = GetMCI(M1); HAL_Delay(5000);$ y) f5 m7 e& X7 P3 o* V6 L MC_ProgramSpeedRampMotor1(3000/6,3000); MC_StartMotor1();// HAL_Delay(5000);, N' Z X/ _ l3 e4 I MC_ProgramSpeedRampMotor1(-3000/6,3000);0 ]- ], ~5 X8 s7 @2 q% Q E, r6 a1 E uint16_t sts_motor1 = MC_GetSTMStateMotor1();1 s8 _5 c2 p' Q: F- S0 b! |# ^0 W uint16_t oSTM = MC_GetOccurredFaultsMotor1(); //下面是测试的一些函数,暂时留在这里做参考用。 //uint16_t MC_GetImposedDirectionMotor1(); // MC_AcknowledgeFaultMotor1();8 F: d% L# w, L A //MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 3000); //MC_ProgramSpeedRampMotor1(-3000/6, 3000); // MC_StartMotor1(); while(1) { 2 |3 b6 j" r; k3 l, ^9 q HAL_Delay(5000); ; p1 X5 |8 O( f; \ uint32_t F_Type = MC_GetOccurredFaultsMotor1();// //if(F_Type == MC_SPEED_FDBK)8 t# _1 I9 K- G) I0 T+ A4 @ {! H# G: X- w" C5 Y$ E# J; p MC_AcknowledgeFaultMotor1();6 }2 Y7 V& Y2 F- S1 z+ A) l //MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 3000); MC_ProgramSpeedRampMotor1(-3000/6, 3000); MC_StartMotor1();( M& E! M" Q, L" d }1 Y8 q( W3 K+ a) N: H+ n4 i; @ } } % | Q/ G1 r* ^( V! A1 Q / e) ~' t' j- Z( l8 ~! W K2 o% K 2,在main.c中前面加入:- p; w) y8 H$ H, }0 W+ Q extern MCT_Handle_t* GetMCT(uint8_t bMotor); extern MCI_Handle_t * GetMCI(uint8_t bMotor);: J% i" ?$ o1 f! I extern STM_Handle_t STM[1];) ~" j! x: ^4 b+ ] % Z% d5 @3 ^5 L' ] 3,在main.c中调用task3(),编译运行。 4,监测。. r7 R4 r ]( U Q7 n5 [: r8 d1 v 可以看到电机正转到3000了停下来,然后反转。3 `, _; M/ Z0 E 如果没有MC_AcknowledgeFaultMotor1();加入,反转不了。1 W. ~2 W. ~, M6 h: L , A+ ?! ?3 W: B, ~7 _* P 2 x3 ?& `. X7 H) y 具体再实验加入细节。# U+ J) D3 V9 _& K: b7 ?* W! A8 C 6 B2 Q; V" v1 e3 v( }2 a % z4 X1 Y; e5 E- |+ Q2 ?5 R4 D/ m |
经验分享不错,点个赞
好的,谢谢 提醒