本帖最后由 freeelectron 于 2018-9-2 18:17 编辑 . y" `# }1 r6 G0 Y* Y
, @% L1 ^# x7 {. E, V
通过任务3:主要学习电机反转指令,调用函数知道当前电机运行状态,清除报错,电机回到IDLE状态 。7 s- T* u! m; h
- W! d. c1 W+ _8 n$ v9 E( g
代码说明:参考了论坛大佬的代码 - /* USER CODE BEGIN 1 */4 o* A6 P5 Q6 ~' @+ F, p2 H
- State_t sts_motor1;
1 Y; r' P2 Z- G! ~ - /* USER CODE END 1 */
复制代码- /* USER CODE BEGIN 2 */
" r0 x# {! |% Z$ _0 X" L - MC_ProgramSpeedRampMotor1(-3000/6,1000);//负转3000RPM
/ W9 x% g& s2 |: H. b, M - MC_StartMotor1();
' Q I- V% W1 P$ o7 d1 q - HAL_Delay(10000);
+ e3 ]+ |$ J' d# ~( f - MC_ProgramSpeedRampMotor1(3000/6,1000);//正转3000RPM
) K+ y7 D- S; N - /* USER CODE END 2 */
# A/ U3 o" `5 x% [
% k4 Q+ f2 y1 ~0 _
复制代码- /* USER CODE BEGIN 3 */
3 J' Z3 @. l, h
5 @7 b3 }9 r# k" I9 ~0 C- # H( b) i+ a+ c/ [
- sts_motor1 = MC_GetSTMStateMotor1(); //返回 Motor 1 状态机当前的状态
- u% D' E! _- W U0 Q# U - if(FAULT_OVER==sts_motor1) ' {6 e- @7 T7 p1 G3 B
- {
2 H! O+ l+ F/ f. J0 y/ V: { - MC_AcknowledgeFaultMotor1();# _' \4 ?. C' [7 a
- }
% Q/ m* A1 n+ M, @ S) F - else
% y( d8 O t- ^- h9 ^: Y" y- ^ - {
6 j2 G' ^/ E# C- e/ s - if(IDLE==sts_motor1)
4 j9 V- V4 @* z* R, i, v - {% H- a2 ?2 Q' e* q1 n. U3 ^, ^
- MC_StartMotor1();
) }; Y( S& B3 p7 n# K7 q' x( E - MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000);//最后一次设定的速度
' j8 R6 C* _: {: X5 b7 v - }8 M b4 Y3 Q, N8 w% Z- `( x
- }
1 O: ~8 N) r% x -
+ c; l7 q8 X& s. X, Z8 _5 g - }" e3 T1 I# Z% A& D6 e- t% p
- /* USER CODE END 3 */
复制代码 6 h0 P( @$ |0 ^* G- W1 r" b
查看速度波形文件:1 q1 X8 B/ [* D, m) ^* w: Y
! ~- Z/ p9 A9 n9 N3 N MC_AcknowledgeFaultMotor1(); 函数说明:应答 Motor 1 发生过的故障。用户调用这个函数前,如果电机发生了故障。电机将停留在FAULT_OVER状态,并保留故障代码。在调用了这个函数之后,状态机将清除故障代码的记录,并恢复到 IDLE 状态。
3 |- K! N2 W, L
! I5 J# Y% V1 c7 ^' \4 a+ Y电机常用的几种状态:
( {7 s% |# R6 E: }: n" y$ m
% F2 I2 X1 T7 V. O0 S
|
嗯嗯,谢谢指正