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

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

[复制链接]
TLLED 发布时间:2018-9-1 22:40
本帖最后由 TLLED 于 2018-9-1 22:40 编辑 " M+ [8 G& v6 H/ |& Z4 R

. s' y- O: v8 }9 Q; d; X* H实验4:基于MCSDK5.0 状态的切换。0 p. J+ j  J7 R2 V5 P6 F' L! U8 U
一、实验内容要求如下:
  E, f2 R$ N. t4 ^; A( ?' K. ? 5.png / z9 E3 D, L! `1 b/ m
1.png * v, U# K7 L- W: S, U6 T
2.png
% W" }( Z9 q( }6 L5 j 3.png
$ f. a0 p7 b& @) U9 s 4.png
" }. @) i  u1 c" r/ l- i- p
" }. R. a: i0 e- f二、实验代码修改:# g% @. i! A& f
修改main.c代码,修改的部分如下(红色字体)
/ u, @. D) {" ~* F# Q8 b8 T0 u  }int main(void)& U% M7 L2 m9 `5 Y( ]3 J, t# q1 P3 E
{
7 v4 l. n1 x& D" B9 J  g& I  /* USER CODE BEGIN 1 */3 N% `7 c" M0 B7 U- i
  State_t  ste;     //定义变量
) ]# |+ T# W# G$ R# f; m  /* USER CODE END 1 */  I* l2 L2 `4 g2 s- |5 q" `; x
0 N, M! c6 O7 `. J' I! T* f/ ]
  /* MCU Configuration----------------------------------------------------------*/8 q7 G7 M: \3 ~: U+ E9 m5 {+ ]
3 b( |/ J# o$ z. ~3 T
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
) y& a; c' q6 R  u6 ^+ l  HAL_Init();* f2 }. g& h) o5 T! S" K1 L
3 |% s" m8 }2 V7 _5 H
  /* USER CODE BEGIN Init */5 s5 L8 M' R0 T" u$ _* c

+ R, v1 G& v6 V; E) Z: O  /* USER CODE END Init */
" G+ d! e% |. M$ M# {4 Z) e  n' A0 x
) P$ A- ~+ ?, }  l  /* Configure the system clock */
& C2 O+ r  l1 D  SystemClock_Config();
5 R: o% ~2 Z$ E! R
! S! Y# S: O. q/ v' k2 Q/ z  /* USER CODE BEGIN SysInit */2 z6 }* E4 M5 v: v6 Y3 g  T) k2 ?

) w! |: K1 ~- }) P7 A$ x& \  /* USER CODE END SysInit */6 e7 C5 @( X2 f& y# g2 T5 B) o
0 s7 e  ]  f6 G) P* d; G
  /* Initialize all configured peripherals */! o" O. M  |+ I7 L8 J
  MX_GPIO_Init();
6 c9 X  i* {! G( c( H  m+ A9 Z  MX_ADC1_Init();
% N& y5 J# N* ^  s" X; C$ r  MX_DAC_Init();, ^! a. s8 z7 [8 c
  MX_TIM1_Init();, r0 x2 z  j  y- H5 J7 R
  MX_USART2_UART_Init();" |0 Y; ^" @) f, [+ L- j
  MX_MotorControl_Init();
. d! [: I4 r/ g( h6 k9 c1 l
4 F) B: K6 r. O/ J8 Y: h  /* Initialize interrupts */0 Y7 y3 Q7 B% ]/ Q
  MX_NVIC_Init();
: X) A% j" T! P) b  /* USER CODE BEGIN 2 *// j! I8 v. z3 ]  j- w
  MC_StartMotor1();                                                       //启动电机
7 K# M6 {" {1 A* r2 d) l  HAL_Delay(1000);
3 @, o6 ~! K; F4 N  MC_ProgramSpeedRampMotor1(3000/6,1000);  //正转3000转2 {! j  @& K( k" s
  HAL_Delay(10000);                                                      //延时10s+ ^4 X! }. r" ]" g1 [8 b  S
  MC_ProgramSpeedRampMotor1(-3000/6,1000);    //反转3000转6 u- x$ W; H% r* w- R- }
  HAL_Delay(2000);9 u6 L: }: m, \7 X1 K: f) z
/ s0 E! M/ X0 U& O1 s* h3 b) r
  /* USER CODE END 2 */
7 i5 U. X  O' ^9 \1 m2 [# d) ?% W9 N

, s7 Z: N% ^& K: ]/ [  /* Infinite loop */
1 z) x7 Y) i6 z1 Z& H  /* USER CODE BEGIN WHILE *// N- W, x. Y# p! [
  while (1)
9 r( n. _6 T; ]  {: U& l* D% g3 K! [& j
    ste=MC_GetSTMStateMotor1();             //获取电机任务状态
4 {- h) o9 Q* ^6 H' L    if(ste==FAULT_OVER)                              //电机报错
' H0 ]3 _8 g$ k+ G. x    {
% K* Y6 Q" X4 n, d2 B! C      MC_AcknowledgeFaultMotor1();           //清除故障
$ k& f. a; k) [5 ^# b) R: L  ~      
6 l3 Z0 Y0 S+ `0 W' E  j2 j+ \    }
8 c2 _) o. u7 k2 n  I, e1 l. {- M6 j    else if(ste == IDLE)                                  //恢复故障后,电机负3000转运行  Q0 V4 _# c( M2 N% q% g4 R
    {7 S1 {7 s) u( w/ m* ^  E
      MC_StartMotor1();
% p: Q7 x5 g2 n1 @% C9 E; t, W7 I      MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000);
+ S) v! }3 N. ^( [6 R    }
" y8 ?& F. C- Y6 i3 j5 U# g, _1 v- a' B2 y0 V" ?. k
  /* USER CODE END WHILE */
# k% H, D6 e& p% y7 ?+ K: a8 G1 X+ o
; s3 J, b3 E4 c: \) H  /* USER CODE BEGIN 3 */5 [7 ^$ J. y; x7 U
    //State t sts_motor1 = MCI_GetSTMStateMotor1();/ b& N  s1 Q% k0 j; d9 s* g" g6 J
    //STM_GetFaultState(&STM[M1]);
7 z1 w2 F. X8 I6 d: _. _& S$ J" i  R0 g; w- s8 T4 e: i

% ?, |0 B) I: n9 ]  }
2 U( z1 A1 u  X5 U! y  /* USER CODE END 3 */7 |% T4 O) x& z# S+ T* v! ~( R7 i7 ~& n! a
0 N1 \0 y1 J! r% I3 W( l+ h0 k
}
% [6 c& i8 z; R2 s8 F

) }, }, s  _; y+ T6 C9 }) z三、执行结果:
( Z8 w, R2 G* t* N$ S8 O' `% n0 { 6.png # L6 G8 u4 X* @* K$ E& u
7.png
  L) k% O" }; H3 T
* ?$ \9 I5 y2 s! D$ M. K0 _& J0 {/ \" r8 X" Z

7 l4 Z4 l2 l+ |
5 A! }+ r, O, J% g& }7 t& C1 H' M( W% L% X- E4 ^

. c% K3 _, _+ q; C6 d6 R, w9 _# n, E1 @+ c  W+ J. \5 @: n
收藏 评论2 发布时间:2018-9-1 22:40

举报

2个回答
STMCU-管管 回答时间:2018-9-11 14:28:44
谢谢分享
xiaozhou       回答时间:2020-12-30 17:22:30
好尴尬啊,为啥我的出不了故障,只添加了
( y! A: ]1 _" p5 v1 ]8 `
  1.   /* USER CODE BEGIN 2 */
    8 G5 X* D" B. M5 |! D) V* h& n& d0 e
  2.                         ( o$ g( ?) [- n) X+ i& ?
  3.   MC_ProgramSpeedRampMotor1(3000/6,1000);  
    - k& z4 L8 S! G5 u
  4.         MC_StartMotor1();  
    5 e% D: q6 d: x
  5.   HAL_Delay(5000);                        ) v; Q& J$ [5 _8 T
  6.   MC_ProgramSpeedRampMotor1(-3000/6,1000);
    ; Q' Z- T; i% z" j# w2 B6 I+ t
  7.   
    ; W0 c9 J- `6 T+ t- h( n
  8.   /* USER CODE END 2 */
复制代码
6 g1 q6 |' B' E1 g0 D: T1 y
可以顺利切换,从3000到-3000...

所属标签

相似分享

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