本帖最后由 freeelectron 于 2018-9-2 18:17 编辑 6 k$ Y2 m5 b: |6 P+ I& ]
" g4 B2 ?% f3 F- Y4 q
通过任务3:主要学习电机反转指令,调用函数知道当前电机运行状态,清除报错,电机回到IDLE状态 。
: b8 f+ P( U0 }5 l; m7 J2 o3 m3 P
' B M" m, p* @' b0 v
代码说明:参考了论坛大佬的代码 - /* USER CODE BEGIN 1 */
. l. y% }: y, _4 Y; N: m2 n7 o+ @ - State_t sts_motor1;
" C+ c, T, I$ F0 t6 v3 N - /* USER CODE END 1 */
复制代码- /* USER CODE BEGIN 2 */1 r/ p6 O: X0 X: k) h7 m# P
- MC_ProgramSpeedRampMotor1(-3000/6,1000);//负转3000RPM' F- `- e2 V2 j, g" F
- MC_StartMotor1();$ T [& _4 @6 L( C7 b
- HAL_Delay(10000);
% F# I9 @7 h2 G1 t - MC_ProgramSpeedRampMotor1(3000/6,1000);//正转3000RPM% |5 ?/ q0 `1 E% B2 {) c) f
- /* USER CODE END 2 */
' I' c9 H, Q; _3 O4 a
1 [3 l y8 B" x1 G4 V1 p
复制代码- /* USER CODE BEGIN 3 */
5 D! H4 {; u( a8 P - ! `! u8 ?2 N' B: L+ m2 {1 o
- ; {: x/ `: }% X. _# l2 y
- sts_motor1 = MC_GetSTMStateMotor1(); //返回 Motor 1 状态机当前的状态
# P8 r2 e3 h4 p& y V& G9 J S; [ - if(FAULT_OVER==sts_motor1)
; _1 d) E, o6 N8 c9 R8 Y; V4 c# ^ - {
/ N+ v/ s" t2 \0 \6 @ - MC_AcknowledgeFaultMotor1();
: [, h% y" L ~ B- B - }7 i3 ]" ^7 |6 Q9 @
- else
* T+ m) b* A$ @! v! s7 l+ W - {0 T9 s8 E' K8 S6 b( {
- if(IDLE==sts_motor1)* u" X8 R; y; I- Y# w
- {
* u; c# C7 y3 Y/ _5 S* ^ - MC_StartMotor1();
2 t& N4 G- v, f; Y3 x; ` - MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000);//最后一次设定的速度
! n: w4 e) X; h- |3 B - }
' I; t; k% b( K+ A) `6 @ - }
! t- i* d5 i4 G0 f- U3 Z) V( V% S9 ` -
0 D5 S& [+ x( q! F - }5 @- Y& U! P# [0 ]
- /* USER CODE END 3 */
复制代码
: ], s! V& J8 o7 K# R. n! n查看速度波形文件:9 J$ Z7 \! ~+ I& z; n
' W& t& X' \/ B. b" e& @# k MC_AcknowledgeFaultMotor1(); 函数说明:应答 Motor 1 发生过的故障。用户调用这个函数前,如果电机发生了故障。电机将停留在FAULT_OVER状态,并保留故障代码。在调用了这个函数之后,状态机将清除故障代码的记录,并恢复到 IDLE 状态。& `6 j2 E3 @" _ }: G
. a- T$ L9 u2 p" x1 }电机常用的几种状态:# e2 ^# u/ C/ U/ _# ^& j
7 T* }7 j- K f0 `7 `% Z% p
|
嗯嗯,谢谢指正