你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32电机培训】- 实验4:基于MCSDK5.0 状态的切换

[复制链接]
TLLED 发布时间:2018-9-1 22:40
本帖最后由 TLLED 于 2018-9-1 22:40 编辑
( O9 c, y; S  y( P7 c& |0 o
! r7 J' j- K5 C- s实验4:基于MCSDK5.0 状态的切换。' h8 {# i6 t2 X, w8 i8 ~9 W
一、实验内容要求如下:! @/ i1 r" C2 m/ l3 R+ X5 z1 u5 l
5.png
1 m  V5 Q4 @5 { 1.png
% s  |' A; P- Q2 n  Q* B5 E 2.png
. ^1 c  r7 W! Z% u$ e' C 3.png
: f7 [* S- O5 x1 o 4.png
  S1 M1 |- M3 O9 B( G5 D( ^# V& T4 C6 l- q6 I; d( b" Z  u- W6 H9 m- l
二、实验代码修改:/ x+ @0 ~8 |. ]( A
修改main.c代码,修改的部分如下(红色字体)
5 y: s" T2 e- L8 xint main(void)
$ y/ h4 u% j- p: c& F{6 p4 g! T: }# }6 X% \: V
  /* USER CODE BEGIN 1 */" ?; o" }2 U  o0 }
  State_t  ste;     //定义变量
* `( p# M) G: ^3 H) e! O  /* USER CODE END 1 */
( l2 E$ y8 ]7 ^: X% Q" V1 M. Z/ g; ?8 L8 G. w& V8 c3 C) k9 r  e
  /* MCU Configuration----------------------------------------------------------*/
, U6 ^% w4 _- {) q  N* C5 N5 P
3 a( I5 s, s) u% X% ~/ x- q$ q; k  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */7 |; t9 Y: ]+ M9 Z5 @+ c/ G( A' H
  HAL_Init();8 b7 R  Y( x# K, I$ K8 Y' {  l* i

- S6 G! d8 D& D5 P  /* USER CODE BEGIN Init */
$ }+ n# P0 w* C; p) e7 F0 i! v5 P2 p, V; Y" ?2 H" k: e* G
  /* USER CODE END Init */. K, Y  b0 v; W& N

% R) n4 g4 A6 N% h, D  /* Configure the system clock */: z5 g! R0 S, G& a- R
  SystemClock_Config();& U7 l0 F/ m3 E0 g

* A5 r; r: }( `  /* USER CODE BEGIN SysInit */
. h7 j9 V7 ^8 n# o1 p/ P. T& N7 ]) ?! g  y
  /* USER CODE END SysInit */
5 R- b% E1 G& L: F  ]* {( g6 n1 e8 D5 l
  /* Initialize all configured peripherals */( A. |3 I1 _7 G, N0 P, Z: d
  MX_GPIO_Init();
0 P7 X& ^+ F5 |( t5 q8 Y% X/ }  MX_ADC1_Init();
7 @" O2 D: v* G% v  MX_DAC_Init();
# M" U% P$ _2 Z$ h: k% u  MX_TIM1_Init();
4 e# c0 D3 E! U% ^- f  MX_USART2_UART_Init();' Y4 C, r7 h7 X4 C8 s, ]
  MX_MotorControl_Init();" F3 O+ U4 H# R5 X0 g; L5 {  s
" w; A: Z( ]; g2 B; w
  /* Initialize interrupts */
7 h+ B0 C! d) C6 @" _3 _3 D/ v  MX_NVIC_Init();. s* X! \- j7 ]
  /* USER CODE BEGIN 2 */+ i7 u$ K! `% U% a+ ~
  MC_StartMotor1();                                                       //启动电机$ I0 {/ @9 g4 g  K' n% W7 R$ n
  HAL_Delay(1000);
/ U4 k8 l. C/ c, l- E2 f# F  MC_ProgramSpeedRampMotor1(3000/6,1000);  //正转3000转. E' A5 T7 `* U4 {' ^( _+ V
  HAL_Delay(10000);                                                      //延时10s5 v0 U6 N  ~+ A9 W& o& e
  MC_ProgramSpeedRampMotor1(-3000/6,1000);    //反转3000转
( Q( E8 i3 \& L8 c% ?7 d3 w4 i  HAL_Delay(2000);$ y( x% B  o. u6 l

8 [4 [6 g; h/ b. Z  /* USER CODE END 2 */
  [' b: _9 S# G5 N& @
. d$ V- \* ?+ p. V; X
/ _  S# c! K; v1 {% e  /* Infinite loop */& V' ^. z; ]6 P5 L
  /* USER CODE BEGIN WHILE */7 a6 Y' D  K. k
  while (1)/ P+ }3 H; K- P+ c  G+ y: N1 B& i
  {2 P: i% p/ w& E& T
    ste=MC_GetSTMStateMotor1();             //获取电机任务状态
# T8 `$ q4 m3 V* c0 e; h/ E    if(ste==FAULT_OVER)                              //电机报错
6 K8 q, Z$ _6 |' Q6 J    {
  J0 S( J% C6 c3 Y. w      MC_AcknowledgeFaultMotor1();           //清除故障* r3 W; T9 Z. n. K) P9 g
      5 H/ D' G8 y( f- T# ~
    }
% ?9 W. g# C7 O6 n    else if(ste == IDLE)                                  //恢复故障后,电机负3000转运行
- d6 ~5 k0 A* ]! [" c, l. d4 j    {- \' m4 D; t; B# t, e6 V  Q6 E
      MC_StartMotor1();8 A4 U0 `9 r, I& A/ t7 u( v
      MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000);
# E% Y7 v) w6 X; Y    }& V$ K$ u4 }! ]" Z- q
. R) u4 p3 S6 x6 w4 J
  /* USER CODE END WHILE */0 F4 Z  |# q7 U0 E5 T# |- A

/ ]5 {7 T: ~! a9 E# K6 F  /* USER CODE BEGIN 3 */' A+ i! q3 }1 C
    //State t sts_motor1 = MCI_GetSTMStateMotor1();# z5 L7 F5 Q' ?
    //STM_GetFaultState(&STM[M1]);  e3 ^+ Y7 p2 i4 a6 M( w

$ y4 s& B+ M8 K4 Y& ~2 `
( C! c1 z' k. B; ]0 e7 J5 u' p8 T  }3 i1 r' T! E1 D/ l1 `
  /* USER CODE END 3 */
4 v  V# x, H& m; `. G' L
, V$ b2 x- M  o/ ^3 u}
8 Z% M. S. z8 Q: R$ _# C
2 S3 O( }9 d- |4 x! q: Q
三、执行结果:
) [& D2 m- L4 u, {1 D; d- J 6.png
2 Q' v: ^9 c, w 7.png
* k2 E) R* i' r+ a2 q
- M/ P1 j: D) t( z$ N: _& g# A& `& m3 F+ y
, L! j/ u" Z  n4 u- A

: W  _' ^+ k/ S$ ]6 D. g( l2 n! Z+ k& r6 a
9 D& W5 }7 F: W+ X* s1 n# M

; ^! b, W, P. q; c- [
收藏 评论2 发布时间:2018-9-1 22:40

举报

2个回答
STMCU-管管 回答时间:2018-9-11 14:28:44
谢谢分享
xiaozhou       回答时间:2020-12-30 17:22:30
好尴尬啊,为啥我的出不了故障,只添加了$ Z+ @' B5 x2 v
  1.   /* USER CODE BEGIN 2 */+ V& {# m) z) h0 M. v" V
  2.                         
    2 V6 V6 [( y9 n" m
  3.   MC_ProgramSpeedRampMotor1(3000/6,1000);  " g6 z, p9 n9 Z4 ^7 d* q: l, [
  4.         MC_StartMotor1();  
    + l6 X3 `0 |3 Z4 p8 K
  5.   HAL_Delay(5000);                        
    % w) ]( v5 U( t$ B2 q+ A
  6.   MC_ProgramSpeedRampMotor1(-3000/6,1000);
      P  n+ P' O7 T* K1 X! A
  7.   . R/ j, n! V: O! ~' d2 H
  8.   /* USER CODE END 2 */
复制代码
3 h; S! D( N) t0 ^6 X
可以顺利切换,从3000到-3000...

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版