本帖最后由 freeelectron 于 2018-9-2 18:17 编辑
/ [# z1 w1 m+ c- ~! a
! [' X5 Y: Q* i; b" i4 w3 G 通过任务3:主要学习电机反转指令,调用函数知道当前电机运行状态,清除报错,电机回到IDLE状态 。
: i# T Y5 c/ e1 H: l, P
5 s& y) k& e- [ 代码说明:参考了论坛大佬的代码 - /* USER CODE BEGIN 1 */
0 w6 b" p0 ?2 O- ?, w; n; U - State_t sts_motor1;
( W# S z B) `; I6 E: O - /* USER CODE END 1 */
复制代码- /* USER CODE BEGIN 2 */
1 X/ m H/ u- o3 X k - MC_ProgramSpeedRampMotor1(-3000/6,1000);//负转3000RPM" ^4 _0 w3 j9 @: y! u7 ]
- MC_StartMotor1();# n: Q4 f2 k" q* t4 e0 ~ z
- HAL_Delay(10000);$ Q* m& d Q. x L) U$ s/ z
- MC_ProgramSpeedRampMotor1(3000/6,1000);//正转3000RPM
( N- L) s5 ^. G9 ~( o" V' c - /* USER CODE END 2 */3 T0 q. s% F7 R- V
- ' l4 I9 R/ R; |1 ]7 K9 w* _! q
复制代码- /* USER CODE BEGIN 3 */
9 s8 N0 r T% J3 ^& @ - 2 m' L7 ` w" |
-
" A: {% U/ Q8 g% ?8 F) S6 H - sts_motor1 = MC_GetSTMStateMotor1(); //返回 Motor 1 状态机当前的状态) t# i2 W& y* P o( ?
- if(FAULT_OVER==sts_motor1)
z' ]" a& X: u; d" U - { $ K4 @% J. a* i6 _2 [5 T4 S" C0 o8 e
- MC_AcknowledgeFaultMotor1();
8 z# p: F. Q) a# e - }& T6 T$ y, f4 m! k m
- else: j5 @5 |" N* y. j% e( |, k
- {
# U; ?0 }2 V/ V: q& q+ t - if(IDLE==sts_motor1)
, {6 T: i7 c6 G8 O4 [0 m - {
) S1 D3 N+ l6 n' p9 \ - MC_StartMotor1();
, m/ {3 q. w N3 n0 u( s - MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000);//最后一次设定的速度
* M) q/ ]& C3 X8 f% D4 [$ E* l - }( {- {1 D4 N @+ K! F, }+ L
- } X& z; X C/ K
- ) N% G. f1 l& Q' ^2 O
- }& V: m: A l6 V8 { q- Y$ Q
- /* USER CODE END 3 */
复制代码
7 y7 g( h h/ E, S$ P查看速度波形文件:& L' i! \1 H4 }: U5 R% v+ @9 W9 N
5 s$ o6 T& ?$ l4 U, `( D' E$ _4 I
MC_AcknowledgeFaultMotor1(); 函数说明:应答 Motor 1 发生过的故障。用户调用这个函数前,如果电机发生了故障。电机将停留在FAULT_OVER状态,并保留故障代码。在调用了这个函数之后,状态机将清除故障代码的记录,并恢复到 IDLE 状态。$ ?5 r0 ~/ ?' t6 j6 R& C3 d6 F8 I; r
0 I5 r( V \% ~+ B' k4 | s/ c8 ~
电机常用的几种状态:
: |7 G$ m) m. g) U, _- k5 N
: X) |/ Z3 Q1 b. S9 x3 j* c
|
嗯嗯,谢谢指正