本帖最后由 freeelectron 于 2018-9-2 18:17 编辑 7 F7 v2 n1 R+ D `6 ]! k' ]* B9 D# Q# l
* o' T: L& w0 Q+ n+ _
通过任务3:主要学习电机反转指令,调用函数知道当前电机运行状态,清除报错,电机回到IDLE状态 。0 u4 {, p5 f' Y8 O2 J6 ]) {$ S1 S! W
6 l, {$ Y5 v ~
代码说明:参考了论坛大佬的代码 - /* USER CODE BEGIN 1 */ x( B/ e' P5 }% Y" ^& b: k% s3 I
- State_t sts_motor1;& p" u& j- T- x& J- \
- /* USER CODE END 1 */
复制代码- /* USER CODE BEGIN 2 */7 s, l4 c. g) L
- MC_ProgramSpeedRampMotor1(-3000/6,1000);//负转3000RPM
t8 G2 j* G/ i9 n8 G - MC_StartMotor1();
. V' D/ A7 n9 \ - HAL_Delay(10000);
7 O) Z; C/ ~6 W- j7 E# L' I - MC_ProgramSpeedRampMotor1(3000/6,1000);//正转3000RPM
6 e. m5 c6 x7 f - /* USER CODE END 2 */4 E& Z- v7 c: }3 T- l( y# L
5 w' Y8 N0 @- ?4 L" p8 Q9 Y
复制代码- /* USER CODE BEGIN 3 */4 I/ t/ j* L7 {$ |4 M6 k" V
- 2 g. s$ f1 ?# t6 P
-
0 d) M! Y+ t7 W( r, j1 _4 `# b - sts_motor1 = MC_GetSTMStateMotor1(); //返回 Motor 1 状态机当前的状态* Z( r3 \0 t; `4 g; U; d; y5 X( e
- if(FAULT_OVER==sts_motor1) 5 A$ g" E8 }# Y$ E
- { * A+ y2 w3 [- @6 x% v
- MC_AcknowledgeFaultMotor1();- \# z- H( U. D. |4 V
- }
. U) H w1 y, g( b4 j& [ - else- X6 _& y/ R3 t0 _
- {5 [1 I- E& e9 E; V: A; V1 M
- if(IDLE==sts_motor1)
# b4 W6 o: N v# H - {) c, x, j: \2 C3 I
- MC_StartMotor1();) T( \1 t7 l& q! V: D# F$ C! Z
- MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000);//最后一次设定的速度0 ^+ S: v( L ^; o7 p) U/ {
- }
( B7 m3 `# \7 q0 w8 Z: ?! e - }
- ^6 U# P: B& {6 G4 l8 R - % Q* \3 U) R$ t1 H B: B5 e
- }
' ?: T* N0 i4 {" e - /* USER CODE END 3 */
复制代码
! m. U$ Q( ^- W. t/ m查看速度波形文件:( Z: l" _& l8 W6 n; }7 ~ t; \$ U
; p7 v0 Q/ I% ]& W$ {4 J, F MC_AcknowledgeFaultMotor1(); 函数说明:应答 Motor 1 发生过的故障。用户调用这个函数前,如果电机发生了故障。电机将停留在FAULT_OVER状态,并保留故障代码。在调用了这个函数之后,状态机将清除故障代码的记录,并恢复到 IDLE 状态。# f& H* d7 @/ P$ n7 L0 w. D5 A5 X
7 Z% J0 d) A: [6 F* v
电机常用的几种状态:
* T: Y9 n& z( S* ~3 l& q( l# d
1 Y: g% R* C! j/ V
|
嗯嗯,谢谢指正