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

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

[复制链接]
TLLED 发布时间:2018-9-1 22:40
本帖最后由 TLLED 于 2018-9-1 22:40 编辑 + h' N. L) l/ K/ J7 o
+ b+ V- ]# x6 F2 R8 x/ [# P
实验4:基于MCSDK5.0 状态的切换。
5 l: `+ ?$ N' X/ Z) ?/ t' y一、实验内容要求如下:+ c* B+ \9 w8 ^$ i0 P' F& J6 f
5.png 4 {  l7 ^! @8 ^9 E; v, D
1.png ( }5 J2 A. d% w6 W, u& u
2.png 8 _4 c2 h; \7 C$ G. K
3.png
4 u( \, X; g: x, U! f6 G3 I 4.png 7 t5 q! A+ e# H( s6 A: a7 K" ^
# F" _! o' |" F/ Q" O, z* l# l
二、实验代码修改:
2 p4 }  Y+ U+ A9 R& A- [修改main.c代码,修改的部分如下(红色字体)8 x- ?) G7 e3 v4 _
int main(void)
( W8 F( R. V, i# E2 k' \{* o: T' s2 L4 ~7 {0 G) S: X
  /* USER CODE BEGIN 1 */: t6 c# x2 {! H# D0 H" N& B" \
  State_t  ste;     //定义变量
( d6 p" p# q9 W7 T0 F$ g  /* USER CODE END 1 */. v2 M; a* @' `

( s) I& \4 N6 k0 j$ f# `; }  /* MCU Configuration----------------------------------------------------------*/6 x4 I0 j* P5 w3 ]) J0 Y, H

3 y; v( \7 z' o4 \  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */, W& r. D3 U: e# k" j, E' L$ P
  HAL_Init();! M  `: d& G+ E4 G

8 F% q2 z% b. G9 O  /* USER CODE BEGIN Init */
' t# b. Z3 m, l$ e- U" `. w" t$ s- J# X8 P2 h
  /* USER CODE END Init */
. i! }& f' u4 T. t2 s% Z9 ~' T0 s0 e6 |+ Q
  /* Configure the system clock */* ?8 t+ T! O6 U) o7 A
  SystemClock_Config();
# j$ f2 m1 G7 B4 C0 I$ P
4 W# k/ k0 j# E  z# e8 s  /* USER CODE BEGIN SysInit */
7 k( `+ r: K- T* B- M6 }% @' p" `% z6 U: p' U! X- l7 X; [
  /* USER CODE END SysInit */* G0 D! e- U) B6 B' d& A: w
6 i) a, q) O9 L& b: k' X  J% a
  /* Initialize all configured peripherals */8 E) i$ N) n' U8 H
  MX_GPIO_Init();7 H  ]' d+ [' ?2 Y% m+ ~
  MX_ADC1_Init();3 C, }/ C# d7 f% S
  MX_DAC_Init();
" Y+ I/ b  A( P5 m. i1 d) r: _  MX_TIM1_Init();! e9 [. D6 l' Y& n  o& W9 E" N4 k+ w3 M
  MX_USART2_UART_Init();
7 L) d( Z$ ~! n+ r7 u4 t% X  MX_MotorControl_Init();+ J+ I: w; @! V; p# r. L* P  H
$ y+ {: ]/ Q: ]9 ]0 \
  /* Initialize interrupts */0 H0 {& Q: w. K1 [+ S
  MX_NVIC_Init();
9 ?- s% D+ Y* E! ^5 p+ c6 C* ]' k3 v  /* USER CODE BEGIN 2 */
8 _8 q( f! Z6 C8 j* z: c$ x6 V  MC_StartMotor1();                                                       //启动电机  R, _- R- z& N& b8 S7 y5 _0 ]! V
  HAL_Delay(1000);
9 c1 S& R/ s# k  L% }* Y  MC_ProgramSpeedRampMotor1(3000/6,1000);  //正转3000转
2 f. _' ?+ e( V6 B5 R0 W  HAL_Delay(10000);                                                      //延时10s
  x2 E# g' ]* k" Y8 f3 d# S  MC_ProgramSpeedRampMotor1(-3000/6,1000);    //反转3000转
" r1 h8 j) |% |3 w# p% a7 Q  HAL_Delay(2000);: i+ y) v8 R* A. i1 J8 P. s
  k8 H; c' F3 d7 _1 ]
  /* USER CODE END 2 */
0 l, ?. F* ?4 {/ x
7 b3 z4 I9 O8 z! G% Z: I5 T% [! I& W" O
  /* Infinite loop */1 f* f* H6 J7 b  }
  /* USER CODE BEGIN WHILE */
& A8 @! v9 C- ^. c$ b  while (1)2 ?! k- e2 v  P7 B# e# V9 B
  {
; i3 y: b# h* a9 S9 r7 S8 h2 T    ste=MC_GetSTMStateMotor1();             //获取电机任务状态9 u% [7 c. N  H
    if(ste==FAULT_OVER)                              //电机报错
% R! D4 Y" x1 S) l  v, \+ O    {
) x. C- _5 y+ Z; N$ j. S  q5 c, J5 a      MC_AcknowledgeFaultMotor1();           //清除故障- ^. e1 O# S9 {. X8 n
      9 L0 f4 n) B( Y# o# E% Z# x
    }
8 _) m) H; [1 H3 @1 w    else if(ste == IDLE)                                  //恢复故障后,电机负3000转运行
/ V2 C4 `0 _( \$ x    {
& Z& L: s6 x) p      MC_StartMotor1();
. ]$ S* I" u6 _! I' |( d      MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000);/ Z* Q: D8 L9 F1 L
    }1 W) C. r, N+ }

, [; s9 W1 Y7 @3 p  /* USER CODE END WHILE */2 a- p1 s. `/ P7 [' L6 p2 j% [

5 O  K  W4 t8 T$ h$ q! c8 W' M  /* USER CODE BEGIN 3 */
  B, ?# N, B9 p    //State t sts_motor1 = MCI_GetSTMStateMotor1();! E( K6 ^# E# A, ^
    //STM_GetFaultState(&STM[M1]);) n* M% s' o+ y/ Y) Q3 O

8 f5 t9 M0 r! x& P; t+ d; `0 q2 E) q/ ~
  }' y- z- M) e0 n  H2 R
  /* USER CODE END 3 */
8 T' M- W2 H; H( n5 ^5 \; x: e: t& H" t1 S9 M
}

2 ^0 C& E3 ?3 J! [0 b, D

4 L: a4 n# {2 T+ i三、执行结果:
( T; ~7 [% p0 f7 n 6.png & I- X& t6 [3 @' ]2 z- {: U
7.png
9 C  j! _' x) `/ w+ R+ Q
0 K/ x0 [4 J; P1 J5 ~; J; x0 v& I
, |/ ]0 ~3 U5 p& l1 Y
! O) s; U( A( K- v" @
! r, l3 ?3 B. K! `$ m9 u2 A. w

1 I1 F2 k2 c) f4 M$ h
, d) |+ m8 c/ {' ^# M; \1 |2 w
9 Z' p' q1 V' R# F% o
收藏 评论2 发布时间:2018-9-1 22:40

举报

2个回答
STMCU-管管 回答时间:2018-9-11 14:28:44
谢谢分享
xiaozhou       回答时间:2020-12-30 17:22:30
好尴尬啊,为啥我的出不了故障,只添加了! c! K) B$ }' S( C$ J
  1.   /* USER CODE BEGIN 2 *// p4 T1 i2 i, I3 y' ^& k
  2.                         
    3 l  D, G8 Q8 e0 F: R
  3.   MC_ProgramSpeedRampMotor1(3000/6,1000);  
    2 d" z2 o; y/ g1 d2 z: a  M
  4.         MC_StartMotor1();  
    % o) R/ t9 r! d$ P3 c/ Z
  5.   HAL_Delay(5000);                        % ^0 l- \9 V' ~/ |# O) k
  6.   MC_ProgramSpeedRampMotor1(-3000/6,1000);
    * P9 b% e: {' u& O; G# q) I
  7.   . U+ O: e4 @  T' \
  8.   /* USER CODE END 2 */
复制代码
; z0 d, s( R% d7 Z8 w
可以顺利切换,从3000到-3000...

所属标签

相似分享

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