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

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

[复制链接]
TLLED 发布时间:2018-9-1 22:40
本帖最后由 TLLED 于 2018-9-1 22:40 编辑 % G# T0 k1 [) D& l# g4 a
) D# C! r) d6 k1 \: n4 Q; \: G
实验4:基于MCSDK5.0 状态的切换。) W8 P5 q1 e/ T8 U" N/ }! w
一、实验内容要求如下:
- j5 B& F0 D, [ 5.png
- y' j. a! m5 T* J1 `9 A. B 1.png ! B3 _- ?* k) n6 h0 [' ~7 p- v
2.png
4 V" g! C8 P+ F. G4 `5 a 3.png
, L8 i% s' H- q9 V1 v7 S3 c! m 4.png 0 }' r) a( t" v4 o$ l
( k% u" @0 J& Y7 c# F- P
二、实验代码修改:' n$ T! \& z3 `1 z
修改main.c代码,修改的部分如下(红色字体)
5 W  Z& D% ]( D& P/ k9 zint main(void)
9 m' z$ l9 g' U/ |{4 V4 t3 E. v; o- w) l
  /* USER CODE BEGIN 1 */* s: x0 n+ n8 q
  State_t  ste;     //定义变量
* L- J( K# Z/ v% U- J  /* USER CODE END 1 */
, H! a4 E, u" f+ B- r, n3 x$ l2 k! Y0 Y5 a- I- _9 n
  /* MCU Configuration----------------------------------------------------------*/$ E- M; s/ e7 G

8 l: ^) \- U7 |& I1 v4 c/ Z7 Z" r/ {: h  /* Reset of all peripherals, Initializes the Flash interface and the Systick. *// R5 ]8 f( D( _3 h( g# P0 ?
  HAL_Init();* O- r- K. T# a, |
0 c* c# v+ E/ V* @
  /* USER CODE BEGIN Init */
6 f9 M' q6 F4 ^/ E3 U6 V. A9 d) Y" U  Z' k- Z% L
  /* USER CODE END Init */
8 r( E" g9 G- T" R
) h( w4 \% n( j! V6 j$ q* j9 c  /* Configure the system clock */$ ]5 H" j8 b  M& C; v
  SystemClock_Config();) h$ Z) K- e6 n. g. K8 ]( b

: H0 b0 W9 r; j! t6 |  /* USER CODE BEGIN SysInit */
. O# b% x3 E, P% u1 l0 N2 w' X0 b1 V
5 C. w3 f( {. f8 P- `5 ?  /* USER CODE END SysInit */' [2 y  ?' {% n6 q0 h# v

! E% \, e; e0 L$ h. ^0 A, X+ V( q$ j: O  /* Initialize all configured peripherals */+ p# s  L$ N0 q
  MX_GPIO_Init();7 u! i$ e! v6 _" w  K* F5 t6 {- T
  MX_ADC1_Init();1 j. Q# `- y  |- ~0 I/ l9 \
  MX_DAC_Init();
0 v6 B$ _" y/ g8 T+ R  MX_TIM1_Init();
+ W* T, |1 v1 M: r  MX_USART2_UART_Init();
8 q  c" V" P, U$ p0 V8 b7 t  MX_MotorControl_Init();+ r  C1 W& a& C

% z# G$ m" t3 P% o# ^8 D( M  /* Initialize interrupts */, P7 c% [4 M9 h9 L! [; U* [
  MX_NVIC_Init();
+ N# D2 m% Q6 q9 _6 C# G/ O  /* USER CODE BEGIN 2 */
- U* ~( V# M% ~" t7 I  MC_StartMotor1();                                                       //启动电机0 Z" g( ~. ]3 o
  HAL_Delay(1000);6 d6 I9 j' i1 \( i* N- j$ f
  MC_ProgramSpeedRampMotor1(3000/6,1000);  //正转3000转5 V4 t! x0 b, w4 t% x  K
  HAL_Delay(10000);                                                      //延时10s5 R5 v8 z, n' C6 L8 h. D$ m
  MC_ProgramSpeedRampMotor1(-3000/6,1000);    //反转3000转- T. U( P) B% f3 _) T
  HAL_Delay(2000);& x7 E& |5 z$ Y
: n, a9 q( n* ]: V
  /* USER CODE END 2 */, K/ M6 \5 T6 n/ C: `+ Q

; b1 l7 t% [0 B- ~: Q9 D6 a# T) a
4 u- X! W- P. P4 O8 j' s  /* Infinite loop */; [8 E  R( V9 ~8 J
  /* USER CODE BEGIN WHILE *// k: q: n3 H' J1 P$ p9 ~4 Q
  while (1)9 r, ]- K5 h- `" |& ?9 Y4 G0 C
  {; J) x  g+ H2 m) b8 F
    ste=MC_GetSTMStateMotor1();             //获取电机任务状态
4 _# h: ]6 F7 n3 a, @& m    if(ste==FAULT_OVER)                              //电机报错. A! e/ a' Q2 ~- j4 Y5 w/ m9 h9 J
    {
  @: e: f: q6 O6 Q2 i$ D: k      MC_AcknowledgeFaultMotor1();           //清除故障
5 O3 z2 L* e$ L4 m4 g" l      ; u8 S+ a: P3 m* K5 V" u
    }* J; |7 X1 I! g+ c6 R: _3 C
    else if(ste == IDLE)                                  //恢复故障后,电机负3000转运行- `) c8 P9 C' C  T7 D- l
    {
7 n$ m+ t  T- a6 G; q7 ^      MC_StartMotor1();
& @& e, }3 ^7 ~' i: _      MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000);
3 \4 U" c( ]8 V  t3 i: v: e$ e    }
! S# c/ U* f% a; L6 S/ Y6 x! o2 R/ M
  /* USER CODE END WHILE */6 @; o$ z+ q; c9 q& S  H! r

% Z1 ^, ^( A  {: O+ E4 W$ X  /* USER CODE BEGIN 3 */) P  r/ d9 V7 {  Z
    //State t sts_motor1 = MCI_GetSTMStateMotor1();4 a) Y# h6 R& Y# T& l/ Y" K
    //STM_GetFaultState(&STM[M1]);
+ K% G2 {! r" F. `$ v. M3 w; `; i2 a8 g$ J! S

+ u% ^6 x) I4 u2 s" x+ [  }
& b" U* _$ U2 Z1 E1 ]& u  /* USER CODE END 3 */
3 M% f% r! d# g1 o
' O! i6 {+ s$ q( @8 ]: R) p* ^* ]: _}

. g  O8 {. o6 r$ q
1 R/ T7 O4 |- W" _# y
三、执行结果:
# J. `) Z- e( Z8 k 6.png 5 C. X5 G6 C" k0 l3 N. {1 k$ h" b
7.png 6 h( l# P$ X/ \1 v
# L5 b) ?' I8 s5 t2 L

- y: M! b/ a* e' V7 R% S4 \

" D9 J9 Q! H* ~  t9 a. h
4 ~2 o+ R: P: ~: q1 X+ S; q
6 t* z4 ^( K& ~9 \+ i9 t! F

6 j% Q& r' ]9 K0 s3 v9 @/ [$ P& E9 v8 ?; K' W
收藏 评论2 发布时间:2018-9-1 22:40

举报

2个回答
STMCU-管管 回答时间:2018-9-11 14:28:44
谢谢分享
xiaozhou       回答时间:2020-12-30 17:22:30
好尴尬啊,为啥我的出不了故障,只添加了, s( v( U  e9 o1 \
  1.   /* USER CODE BEGIN 2 */1 M1 B0 @2 C6 H, ?) J6 A
  2.                         
      J& U3 g2 N8 Y! {" u% t
  3.   MC_ProgramSpeedRampMotor1(3000/6,1000);  
    0 S- a. Z% ^: r
  4.         MC_StartMotor1();    w# b! v' @8 T9 Q
  5.   HAL_Delay(5000);                        
    5 E0 L" D4 _0 {* g. ]3 |
  6.   MC_ProgramSpeedRampMotor1(-3000/6,1000); " ^* Q6 p" S  t# R  ^% Q
  7.   
    & p, V0 \. z2 X" e! y
  8.   /* USER CODE END 2 */
复制代码

: H$ I/ T+ W8 e0 K可以顺利切换,从3000到-3000...

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版