本帖最后由 freeelectron 于 2018-9-2 18:17 编辑
3 u9 s1 u$ d$ ?) V. h) Q) ?6 W- R
5 Y" M% |2 G& d6 u. ~0 ] 通过任务3:主要学习电机反转指令,调用函数知道当前电机运行状态,清除报错,电机回到IDLE状态 。
0 T4 a: F" u+ [2 z2 M
; `* B+ P: }$ r1 b) n 代码说明:参考了论坛大佬的代码 - /* USER CODE BEGIN 1 */
) o5 k* E4 d. B' v; U! \5 e# J - State_t sts_motor1;) f7 z& Q) w- l* e4 o
- /* USER CODE END 1 */
复制代码- /* USER CODE BEGIN 2 */
' W' z! X- L; }3 `1 R: [ - MC_ProgramSpeedRampMotor1(-3000/6,1000);//负转3000RPM2 f/ c( ~- N* z3 z5 l
- MC_StartMotor1();
G4 m; e3 A. @, I: G& ~ - HAL_Delay(10000);
* r4 s( D6 q$ O8 d P. U1 A - MC_ProgramSpeedRampMotor1(3000/6,1000);//正转3000RPM- B" x8 T3 W/ f
- /* USER CODE END 2 */9 X+ J- e1 u7 X, e: W
- $ i) T1 Y9 @+ X' F
复制代码- /* USER CODE BEGIN 3 */2 s! H+ I+ P$ d D
- 6 s- y# X6 x* y d+ O9 a/ E
-
% @) ^! ^- p& S - sts_motor1 = MC_GetSTMStateMotor1(); //返回 Motor 1 状态机当前的状态4 K1 ?4 [2 S& q' v( d! I
- if(FAULT_OVER==sts_motor1) + t+ \2 v3 c+ ^# O! v }
- {
6 R6 l- v5 J/ K7 K' ] - MC_AcknowledgeFaultMotor1();& F0 C/ z- @1 K% E! E
- }& O% Q' h W0 ?# W! r) ?4 K
- else
# n& F/ N6 {- O - {
# a; e) |8 O: }1 q - if(IDLE==sts_motor1)
`4 |+ \9 Y2 ^* z1 N4 V - {
( u7 G7 N, `9 _3 {! U1 X - MC_StartMotor1();
4 N# r! U1 w. a' j2 Q+ Z6 @( ~# w - MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000);//最后一次设定的速度
- `2 G2 a, [, @4 p. L - }
) }( p' T9 f: _+ k5 ` - }
- \9 ^8 q1 P, X- f D* I& K" I# u - ) v2 B* e' X/ r) R6 u5 _& s5 Q
- }
& Y1 m- A5 j5 w! S- ]$ C% A/ d - /* USER CODE END 3 */
复制代码
K* g: y8 J1 T3 d1 t1 i% S7 D查看速度波形文件:
( ]" K) {: {# O2 Z9 A+ ^3 k; d& I
' s: v( Q3 q6 `" o
MC_AcknowledgeFaultMotor1(); 函数说明:应答 Motor 1 发生过的故障。用户调用这个函数前,如果电机发生了故障。电机将停留在FAULT_OVER状态,并保留故障代码。在调用了这个函数之后,状态机将清除故障代码的记录,并恢复到 IDLE 状态。
2 x. j9 @! E+ L* p
. l; `* i; V9 G- C: A% W7 E# l电机常用的几种状态:4 B5 x, N. C2 y. u& }+ u9 ~( ?+ _
3 _' u) `; B; y3 ?
|
嗯嗯,谢谢指正