本帖最后由 freeelectron 于 2018-9-2 18:17 编辑 6 C5 k1 P# N$ D9 R% W% G) z0 v) J
1 M( G/ X% O! I$ D7 S" v
通过任务3:主要学习电机反转指令,调用函数知道当前电机运行状态,清除报错,电机回到IDLE状态 。
# C. q8 _& u2 c$ J1 {
3 {+ Q& Y; a4 P# Y0 L 代码说明:参考了论坛大佬的代码 - /* USER CODE BEGIN 1 *// P }! \9 G! V J6 r
- State_t sts_motor1;. G/ P* S2 b( e' {: Z
- /* USER CODE END 1 */
复制代码- /* USER CODE BEGIN 2 */& D; b" }* E7 B. @ r- ~0 {8 t
- MC_ProgramSpeedRampMotor1(-3000/6,1000);//负转3000RPM; O' q1 ?, w, m; y! y* |- j8 P+ A
- MC_StartMotor1();* c5 ^4 V/ J2 L3 C
- HAL_Delay(10000);
" U5 W) E% V+ M- ` - MC_ProgramSpeedRampMotor1(3000/6,1000);//正转3000RPM1 T$ Q; ]4 g: R$ Z0 X
- /* USER CODE END 2 */
' \" M- v; _4 P
, d+ h0 r' J! `" c! _
复制代码- /* USER CODE BEGIN 3 */6 {4 M' z& m6 p: q" J& J" s
5 ^7 a4 |5 M' c# ?9 a-
) K4 B l, Z5 _' M - sts_motor1 = MC_GetSTMStateMotor1(); //返回 Motor 1 状态机当前的状态
) N/ Q L I5 \0 w% v - if(FAULT_OVER==sts_motor1)
) T; } ^' i: x( d2 _ - {
6 T6 G1 e2 ^: ? R) ?) p7 \3 f: A - MC_AcknowledgeFaultMotor1();. Y1 A/ G0 X" k3 ]% Q
- }
& ?" }) h) `8 a* `: u - else& m. l, h' s( \" d- c* S0 f+ v/ @
- {% g9 S# u9 P8 s- P
- if(IDLE==sts_motor1)( r" G7 l3 r$ Y
- {
# u4 S; d$ |& { D U# ^/ C% C - MC_StartMotor1();: R; }' p5 e8 k+ M5 c
- MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000);//最后一次设定的速度 R* T# ]' M/ a9 b
- }( h& f1 Y( P2 u1 A
- }; O$ |: H2 U$ {$ Y* |( j
- 4 W! f) \4 q" r2 y; ?, N
- }9 k& H6 p3 F* V' V+ R
- /* USER CODE END 3 */
复制代码
% ?" ?) i6 [4 |7 K* |' f% C4 _/ r查看速度波形文件:
% M2 y$ M) }% y7 Y, b0 m% x7 c
1 U* A$ u* }% Q7 y$ h MC_AcknowledgeFaultMotor1(); 函数说明:应答 Motor 1 发生过的故障。用户调用这个函数前,如果电机发生了故障。电机将停留在FAULT_OVER状态,并保留故障代码。在调用了这个函数之后,状态机将清除故障代码的记录,并恢复到 IDLE 状态。9 D! h) C4 c" ]( T: i' b5 @0 [& y
" B4 ^$ w0 i$ s Q5 _
电机常用的几种状态:
, {0 C5 a7 r6 |5 E
$ F' K3 B M3 K: a4 W( K |
嗯嗯,谢谢指正