请选择 进入手机版 | 继续访问电脑版

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

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

[复制链接]
TLLED 发布时间:2018-9-1 22:40
本帖最后由 TLLED 于 2018-9-1 22:40 编辑
* G! G) }' y  U" r- k2 I2 V# {$ H. b# d
实验4:基于MCSDK5.0 状态的切换。
9 T$ Y9 v' _) ~. k5 W一、实验内容要求如下:0 V: ~/ r. s# D% e
5.png - o% t% ^: J" W5 |: A7 {$ \1 N
1.png . }5 m" y+ N! [# o7 w
2.png
' o6 \3 W# g6 F, r 3.png
& H9 d: I  L- K; b) y 4.png
2 {) v! O" [, q# }) y; l0 }& ^  H, t: M2 C
二、实验代码修改:
! q: V4 P" I* ]修改main.c代码,修改的部分如下(红色字体)
; L- X0 N7 o6 Y( m2 m/ x. e( n  u4 wint main(void)1 w6 F: ?$ o, q% E  K5 R" E8 e
{# V2 g5 A) L  t6 O8 l* a$ R) n8 E
  /* USER CODE BEGIN 1 */. C: I$ o$ u+ `! k# `
  State_t  ste;     //定义变量
8 u1 T: P  l$ m4 A2 u  /* USER CODE END 1 */
# ^8 t3 z0 ^& E& h! V/ R& [
0 m/ r+ r  q( Q3 V8 z  /* MCU Configuration----------------------------------------------------------*/
$ Q9 Q* y1 r$ \4 r' j' o! D, g  n6 `6 q  e0 l6 l4 O
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */( [! s7 Y" i" g* h# ]7 `8 N
  HAL_Init();
. e  n( {$ x2 d! Z6 p' e
+ U0 q, S8 W9 P: O9 _# g  /* USER CODE BEGIN Init */
0 Z2 j+ D/ L3 H# h5 f  M$ |
/ w$ X1 q0 J2 k, u$ W' n  /* USER CODE END Init */) [2 Y2 w& i) @0 [/ b

( ^7 J' d4 t  m6 A  /* Configure the system clock */
3 q5 ^& \" H$ E  SystemClock_Config();; i3 s4 X& _3 p4 \8 O1 P% p, a

0 T# H% q! O' d; |! F1 C8 e  /* USER CODE BEGIN SysInit */# }: c' |: P! o! c' U3 ^- U: t8 b7 w

" W/ ^; P2 F" C) {  /* USER CODE END SysInit */- |# o8 F, [4 n9 ~
& {; z+ e; F) Q: Y% S; a
  /* Initialize all configured peripherals */
- b2 h- n$ d' W* Y2 @$ R5 k) G  MX_GPIO_Init();8 ]6 h( x7 p/ ~5 A
  MX_ADC1_Init();
& k, P( v+ U* l+ T  f1 U  MX_DAC_Init();8 @0 q* ~5 x% B
  MX_TIM1_Init();
9 a' j8 Z5 r3 s2 M; J: f* y  N0 E  MX_USART2_UART_Init();
3 V6 N  Z- T0 g; R  MX_MotorControl_Init();( c+ d" O, k% `# p& ]1 u
# L" `1 q! B4 o) p% v4 {
  /* Initialize interrupts */
0 R' G1 q5 ~, n9 O6 d. E3 ~  MX_NVIC_Init();
& \: N  X( M7 A0 i* \+ v  /* USER CODE BEGIN 2 */
" o/ }7 ~. Q. `! z  MC_StartMotor1();                                                       //启动电机
8 D/ A0 @) b2 u' ^1 l( _  HAL_Delay(1000);% x+ B3 S& y# l: O0 Y# @
  MC_ProgramSpeedRampMotor1(3000/6,1000);  //正转3000转" Q  A* F) h* ~: U6 Z. }  O
  HAL_Delay(10000);                                                      //延时10s
/ E' N9 c& i. N, Y  MC_ProgramSpeedRampMotor1(-3000/6,1000);    //反转3000转
( ~. a( h- C$ ^" r4 e  HAL_Delay(2000);, x- j% N, |3 C2 {* Y8 S

, D9 A" y5 l9 h) X6 x/ }; }  /* USER CODE END 2 */6 a% V* i( B, i+ y" h, J8 u
' u! p# _1 v% L. O1 ]) S; O

6 {% h% X) ~6 k, `5 L7 t  /* Infinite loop */7 g5 F, k5 A' x9 B- g' E& R
  /* USER CODE BEGIN WHILE */0 K. K# Z7 L! X. e8 X' U- V) i
  while (1)1 ]" @5 D. C% {+ |3 U7 q% S8 M+ @
  {
/ g% v9 V, t; H7 I    ste=MC_GetSTMStateMotor1();             //获取电机任务状态) |3 @+ s9 C. t" a2 [3 j
    if(ste==FAULT_OVER)                              //电机报错0 L! E9 f0 v/ _3 v% @; u( T# a
    {4 P" W  j: M2 ^! v: F  |, }% n
      MC_AcknowledgeFaultMotor1();           //清除故障" i# G4 D5 a; f: F
      - x+ G8 K& m$ t. N
    }& N8 s  W7 b9 t: n4 [8 Z, T
    else if(ste == IDLE)                                  //恢复故障后,电机负3000转运行
1 G+ d: A) z, \$ M4 H    {4 e2 B7 q: _. c/ u1 O0 l
      MC_StartMotor1();
6 O0 m1 ?( \. _      MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000);
! _4 k* ]& H5 P% p+ x* D. K    }
7 w. m6 j9 G2 v3 `* c+ `* s" w- P
  f- y1 {6 ?) |& x, I  /* USER CODE END WHILE */
6 p" K& o+ I' Q
7 T: e& H$ X" t- {+ A" F" e  /* USER CODE BEGIN 3 */
( b" f2 b$ ^; Q5 X6 M5 q    //State t sts_motor1 = MCI_GetSTMStateMotor1();* j: c! @. f2 x  b) C9 f3 Z
    //STM_GetFaultState(&STM[M1]);" u2 c1 T: u8 k) G
  f9 U: b  L! c4 ~2 _
2 y0 P( W8 z2 `, W! O
  }
5 M! q0 U5 D' G4 j0 \  /* USER CODE END 3 */3 V/ }2 C$ R5 v6 `) M* }, f

( n7 e0 j+ Y3 }9 R) ^0 g}
0 E+ ?( @4 y9 r9 X/ c  a
' {5 x5 T& n; y* O1 {
三、执行结果:
* n% G: A2 o, n, O2 u# F2 m 6.png
+ R  l* L( R" V' L9 { 7.png
6 X! p% H1 R: f! Q4 O! E
1 f1 `' R9 V- ^' i& h8 V; O) r  h5 N  K0 D

. `, X: N) w+ e/ d( c, Z  [- ~+ [  P7 v! U5 m( x" n! d

; s! T/ a. S  M3 `8 e

" N% J9 a2 l, V( k" t5 W: Q  N4 t& G2 r/ n* G; t, ?# }
收藏 评论2 发布时间:2018-9-1 22:40

举报

2个回答
STMCU-管管 回答时间:2018-9-11 14:28:44
谢谢分享
xiaozhou       回答时间:2020-12-30 17:22:30
好尴尬啊,为啥我的出不了故障,只添加了
: {; M0 B0 x4 l8 Y
  1.   /* USER CODE BEGIN 2 */; O% t! H, B8 _! ^; Y& G& f  u( d
  2.                         
    # E- I+ A9 r! I3 C! O1 i
  3.   MC_ProgramSpeedRampMotor1(3000/6,1000);  0 X/ i; S& e4 E+ J. c6 B
  4.         MC_StartMotor1();  0 I: ]; i9 |) K8 x1 i0 X/ e
  5.   HAL_Delay(5000);                        7 ~7 ^4 n8 w) k  ^5 v& K
  6.   MC_ProgramSpeedRampMotor1(-3000/6,1000); ; f4 B8 K4 @6 r! g4 m' L8 u5 ?
  7.   . o% y4 }# W# ~6 l5 m9 B
  8.   /* USER CODE END 2 */
复制代码

# k3 V2 J, ?8 s# C3 h4 b可以顺利切换,从3000到-3000...

所属标签

相似分享

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