
本帖最后由 damiaa 于 2018-9-3 09:44 编辑 0 @2 E+ L, q6 G$ n 【STM32电机培训online】+ P-NUCLEO-IHM002电机正反转7 K6 e9 i7 }2 L 1,在上篇的工程代码中加入函数:5 C j' O' x* R void task3(void)//; Q: E; E$ ]# U* z# \' j: H; N { MCI_Handle_t* pMciHdl = GetMCI(M1);$ B/ a& \6 R& }3 u8 q HAL_Delay(5000);9 {. W1 _ }: n2 j" ^& g0 m MC_ProgramSpeedRampMotor1(3000/6,3000);0 K$ p: h- Y2 V& c" _ MC_StartMotor1();// HAL_Delay(5000); MC_ProgramSpeedRampMotor1(-3000/6,3000); uint16_t sts_motor1 = MC_GetSTMStateMotor1(); uint16_t oSTM = MC_GetOccurredFaultsMotor1(); //下面是测试的一些函数,暂时留在这里做参考用。1 c/ l. ]3 k+ u //uint16_t MC_GetImposedDirectionMotor1(); // MC_AcknowledgeFaultMotor1(); //MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 3000); //MC_ProgramSpeedRampMotor1(-3000/6, 3000);( W& l: g q( D // MC_StartMotor1(); while(1)0 h$ p1 f( L& ~ {$ j W5 E+ D* l HAL_Delay(5000); ; y% |. P& h6 g9 h. l uint32_t F_Type = MC_GetOccurredFaultsMotor1();//2 h9 |4 o7 K) p; ]4 k, h# s; P //if(F_Type == MC_SPEED_FDBK)6 \" ~+ z- |! U9 @+ D8 O% e {) N9 I+ v+ ?* p" B, l- B MC_AcknowledgeFaultMotor1();. u& x& m4 m7 ]4 g$ ]3 [ //MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 3000);3 _: C6 l: f8 I( h6 ]! k% \8 D! c1 @9 ` MC_ProgramSpeedRampMotor1(-3000/6, 3000);* y0 A, a7 j" r4 }# q/ Y1 t/ s% e MC_StartMotor1();! e3 Z1 Q, H2 E9 d) ^- D. K; { }: V1 X* |* t5 E3 N( n/ D) R } } ! R9 \* v( f- R* s+ n1 ^ $ m/ _, ~. b) X% l; N 0 k; C+ F0 B$ N6 q: U 2,在main.c中前面加入:7 c+ w j+ {, a. e- G extern MCT_Handle_t* GetMCT(uint8_t bMotor);7 W9 A E, z' B4 [* e& i extern MCI_Handle_t * GetMCI(uint8_t bMotor);: r- G1 K$ R% A6 B% b% h1 ` extern STM_Handle_t STM[1]; 9 M2 X! w, B3 K 3,在main.c中调用task3(),编译运行。4 ~* S" q& x8 d$ B) _ 4,监测。" B& |: @& {4 L8 B1 `" S$ C5 _+ P 可以看到电机正转到3000了停下来,然后反转。 如果没有MC_AcknowledgeFaultMotor1();加入,反转不了。 8 l5 a' s2 J- l+ p# r$ `4 ^ " c* P( Y2 l4 M' i7 e ![]() ![]() 具体再实验加入细节。 . O: F7 R+ ~( b5 d |
经验分享不错,点个赞
好的,谢谢 提醒