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

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

[复制链接]
TLLED 发布时间:2018-9-1 22:40
本帖最后由 TLLED 于 2018-9-1 22:40 编辑
" s: u$ H. ?* }* b. `1 ?& j5 p- _" z9 {3 T, V8 Q8 V. d5 C, F
实验4:基于MCSDK5.0 状态的切换。; s# s: h% @. A: b( \* v
一、实验内容要求如下:" y8 b  k- c) ~2 U' b$ F5 B+ A
5.png : M6 \" \/ R& C* _  ^, V! }6 F
1.png
* C+ L8 A( t$ b' x1 M 2.png # c; L) Z2 {8 F
3.png
- M' y4 `/ F! i# A/ a. r 4.png $ J- \2 S+ ^) H$ c8 s+ Q
$ I+ [6 i/ |6 H1 e+ g9 n
二、实验代码修改:
: C3 A  }; J0 M9 }修改main.c代码,修改的部分如下(红色字体)) y$ ^. Q; u' z' {; |
int main(void)7 Q$ }4 k1 p( r3 t) }1 I
{7 a' p. V: j0 Q2 B- y6 e1 ?( c
  /* USER CODE BEGIN 1 */
8 c6 h7 o! `( Z. _. k# ]! W  State_t  ste;     //定义变量0 ~4 t' {+ J  D2 U: T) X  o5 X  B# U& P: V
  /* USER CODE END 1 */
; A- X0 z9 p2 F$ m5 x; `8 w! n5 `* k# P. r; Q- N& G0 D
  /* MCU Configuration----------------------------------------------------------*/6 j6 i9 m5 }3 o: P4 f2 g

, k9 {% [" w! b  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
% T% S# o$ O6 n  }3 K  a! N  HAL_Init();
7 u+ F% x" F/ _0 s/ r& d) f$ c% C. k, L9 n. }' o8 q5 K  Z
  /* USER CODE BEGIN Init */
) ~) R1 s% c; _" M+ F7 |; m2 a4 c( ^' A' v6 V
  /* USER CODE END Init */! [; L# |- a0 a% I' Z

& Y0 S# G$ f$ E, q6 B' d/ |( L  /* Configure the system clock */! e) Y; h7 {  n+ F1 Q7 b8 x6 F' f( o
  SystemClock_Config();& R3 a5 \5 H, v9 [" }
. J. Q+ C8 G' {/ M/ V
  /* USER CODE BEGIN SysInit */
' n" w) w* x: n3 u- H% W; }* J2 B+ B+ a. [. E# l) N. t4 i
  /* USER CODE END SysInit */
8 d- k4 a2 a6 P1 B  ]- G9 `5 G3 q0 x
8 Y/ f. l& }! C8 i9 j: H  /* Initialize all configured peripherals */3 m2 n7 s8 L, r! z
  MX_GPIO_Init();
( {7 S- ^  |( t  MX_ADC1_Init();
+ T+ P: I* M9 Y) _: L" O  MX_DAC_Init();
% [) Y2 K7 b" z6 q$ _  MX_TIM1_Init();
+ M& t7 g" F4 w# d/ T$ K  MX_USART2_UART_Init();
* x3 S5 a9 q3 ?* J+ h) I3 q  MX_MotorControl_Init();3 \4 i3 P, ^; g8 ]# f4 _0 ?

5 S- X0 }& _1 W, U  /* Initialize interrupts */
4 w: x  \5 W1 u  MX_NVIC_Init();9 z, h$ v/ T, R) Y. B6 v
  /* USER CODE BEGIN 2 */
3 u. c, s2 s9 \  MC_StartMotor1();                                                       //启动电机
0 r3 L. u0 ]$ A7 f' k( t# H  HAL_Delay(1000);
( Z. K! I3 U, F! [3 B2 ]  p1 f  MC_ProgramSpeedRampMotor1(3000/6,1000);  //正转3000转
+ r; K/ d: m( B  HAL_Delay(10000);                                                      //延时10s
. B5 J( d# _8 Q/ c# D& g* T  MC_ProgramSpeedRampMotor1(-3000/6,1000);    //反转3000转7 @" }$ [; y8 c* n
  HAL_Delay(2000);9 {0 c) W2 J# m1 [: L

4 Q* C' k: d" B0 I2 K, N3 V; {  /* USER CODE END 2 */
2 B% h  ~: W: Q/ ^6 n6 F* q" I
- }# U' t$ @# f6 u8 a- Q5 T: P- j* @3 ^$ \9 s" Z8 Y, F5 D
  /* Infinite loop */
) V5 m7 I8 |. I, m& e% ]  /* USER CODE BEGIN WHILE */+ ]  z4 J# m$ x  |' o2 A2 u. b1 r/ I
  while (1)
$ j; y/ w! Z0 j- v* ]; D9 r  {2 \1 C% M& R3 i+ `+ Z% B3 i
    ste=MC_GetSTMStateMotor1();             //获取电机任务状态# [6 Q4 @1 K. u) _. W# a5 @5 B
    if(ste==FAULT_OVER)                              //电机报错# c# l5 ^0 b; X9 P5 s! {) t. V
    {1 G- Q; O/ _' Q
      MC_AcknowledgeFaultMotor1();           //清除故障; S: N# x4 j/ i  _5 ?9 }" T. p
      
6 [0 ?+ C# j- I% u2 R* p1 _( r7 e    }% A8 y+ x1 Q1 W/ S& e
    else if(ste == IDLE)                                  //恢复故障后,电机负3000转运行" i" d# d; W- Y3 {5 d- W
    {
2 V5 T+ s+ }$ ^! [3 p) Z" ?      MC_StartMotor1();
& C9 h1 H* f$ c% P# F# Q      MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000);
' S/ a7 {( O. T: m    }
, k: @: J& U4 o- W; t1 p2 E6 ?8 J
/ S$ i# c8 ^" q3 t4 `$ k  /* USER CODE END WHILE */
& T. v, L2 f- a, P$ |- ?
% Z7 W, }3 t: j4 m3 @, R  f  /* USER CODE BEGIN 3 */9 q+ O6 b  |: O6 a  R! R
    //State t sts_motor1 = MCI_GetSTMStateMotor1();
# W4 N1 ]1 y1 }' v( E% [    //STM_GetFaultState(&STM[M1]);
3 e! x! \! I1 F9 L6 o
+ |& e% X5 R* e; B. b3 r5 H2 y9 r/ u' f; C2 L
  }, S; u7 M% {' N
  /* USER CODE END 3 */
9 @5 p+ k9 g" Y; a) ~; p: D" ]- y0 J0 {6 }+ x
}

. L; l/ \0 w5 \

& ?% H9 L; P" H% `. C7 @' b# Q三、执行结果:. ^( }( s7 s1 R- j6 X
6.png   j4 I% W7 T% A8 b& g6 |
7.png / a, e7 Y9 v. K, K: K  K6 W
( b, ]4 v1 P2 x

. t- B4 H2 }8 U* ^6 u. Q' z( b! T  d3 a
( u0 L+ D$ a' x! T) e4 s8 ^( s
" ^  t- g8 n4 X8 s

$ ^" q3 u( L; o

9 I4 B; |3 n$ S9 g( Z6 _0 R
$ `9 h% x3 ]& G/ f$ {0 C8 S3 m
收藏 评论2 发布时间:2018-9-1 22:40

举报

2个回答
STMCU-管管 回答时间:2018-9-11 14:28:44
谢谢分享
xiaozhou       回答时间:2020-12-30 17:22:30
好尴尬啊,为啥我的出不了故障,只添加了
& D3 k* \' b$ b% \) G: }, Z& k3 I
  1.   /* USER CODE BEGIN 2 */
    5 }/ t, P8 R+ e3 u
  2.                         9 _% G3 Z$ d- |/ [- |& [
  3.   MC_ProgramSpeedRampMotor1(3000/6,1000);  
    $ ^6 C. B5 ^% _! m
  4.         MC_StartMotor1();  1 W3 j1 A0 I' L- H+ M$ ^& a
  5.   HAL_Delay(5000);                        0 L0 e7 t+ G# c8 E$ q
  6.   MC_ProgramSpeedRampMotor1(-3000/6,1000); & B" I8 S1 A3 b8 G# w. T
  7.   : N2 P3 H1 l4 S
  8.   /* USER CODE END 2 */
复制代码

, L% i$ W6 ?; O1 }+ L7 L# o: P可以顺利切换,从3000到-3000...

所属标签

相似分享

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