本帖最后由 damiaa 于 2018-9-3 09:44 编辑 J$ F$ C9 d) \ 3 J& w+ D8 @$ J( {$ T2 O; a 【STM32电机培训online】+ P-NUCLEO-IHM002电机正反转 1,在上篇的工程代码中加入函数: void task3(void)// { MCI_Handle_t* pMciHdl = GetMCI(M1); HAL_Delay(5000); MC_ProgramSpeedRampMotor1(3000/6,3000); MC_StartMotor1();//- c% \# I# B( U- s- ~1 a. Q HAL_Delay(5000); MC_ProgramSpeedRampMotor1(-3000/6,3000);$ h0 q6 D* N% m; _- K8 n8 o uint16_t sts_motor1 = MC_GetSTMStateMotor1(); uint16_t oSTM = MC_GetOccurredFaultsMotor1(); //下面是测试的一些函数,暂时留在这里做参考用。& M9 v) n& v" [4 Y3 x3 ]& J //uint16_t MC_GetImposedDirectionMotor1(); & V- s" h$ ]! C# p. l0 B5 | // MC_AcknowledgeFaultMotor1();0 E- Q, |2 }+ u; w5 D& E! Y! a //MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 3000); //MC_ProgramSpeedRampMotor1(-3000/6, 3000);& ^9 P" J# I' L) \4 u+ S3 ^ // MC_StartMotor1(); while(1)& ]9 e5 X1 y( W) m- j { 2 ^# I6 j: F+ Y+ f( n# u, L+ v HAL_Delay(5000); uint32_t F_Type = MC_GetOccurredFaultsMotor1();// //if(F_Type == MC_SPEED_FDBK): v4 L& W8 |9 u- f* z9 b) ~- e" ? {5 f1 F. L/ {0 L8 ?( i8 d MC_AcknowledgeFaultMotor1(); //MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 3000);) F0 K o/ E) w$ K8 H MC_ProgramSpeedRampMotor1(-3000/6, 3000); MC_StartMotor1(); } }8 G+ i7 L8 J/ x. F } 2 p ^9 r: h7 w / u, C7 w# [' a! \7 w, F 2,在main.c中前面加入:4 B, I- c4 i! q extern MCT_Handle_t* GetMCT(uint8_t bMotor);$ _/ J) Z7 K; p2 s5 ^: ^ extern MCI_Handle_t * GetMCI(uint8_t bMotor); extern STM_Handle_t STM[1]; + V5 M: _ t5 q 3,在main.c中调用task3(),编译运行。 4,监测。 可以看到电机正转到3000了停下来,然后反转。' d2 I M0 w7 [6 B2 X1 t 如果没有MC_AcknowledgeFaultMotor1();加入,反转不了。 / y1 n4 x. K! r/ o9 r 具体再实验加入细节。8 B4 `1 P( ]% {5 U ! A0 `. O5 ~# j2 l7 s 7 Y% ]9 r. k2 b S' o! k ! _! y6 g5 |* _3 T4 z. D |
经验分享不错,点个赞
好的,谢谢 提醒