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

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

[复制链接]
TLLED 发布时间:2018-9-1 22:40
本帖最后由 TLLED 于 2018-9-1 22:40 编辑
' p  w$ a* K& S# U5 i
& Y8 T- q1 Q8 o8 B& E9 z/ S0 S实验4:基于MCSDK5.0 状态的切换。7 A6 \$ g" O5 b
一、实验内容要求如下:
) T$ g" ]$ k  l 5.png
0 z1 u6 {/ \' g( F9 X% T2 [: g 1.png # |5 G- e* H9 `" ?5 C/ U" b3 j2 S7 Y
2.png + h  c7 K+ m+ n, g
3.png 8 A4 P6 |4 T' P  `/ f3 _
4.png
9 N% V, J5 n: u9 K* M4 s  e+ u* v- s' [, `5 d
二、实验代码修改:" X- A9 a" o9 R( S; z: a4 x8 D
修改main.c代码,修改的部分如下(红色字体); k8 ]# L! r- |6 d' W
int main(void)6 K, `7 j0 S* P1 z8 L, F
{' t1 x$ ?  A1 }& t/ C( p8 X
  /* USER CODE BEGIN 1 */
! A$ N# w% q6 p9 V. e  State_t  ste;     //定义变量: y4 Z! R5 X2 I0 j1 ~: `
  /* USER CODE END 1 */( J% B" E* e( n! Y% |) q/ S% i
* b) P: g2 x. j' t1 l8 s4 L/ y
  /* MCU Configuration----------------------------------------------------------*/
9 l1 k" {) v8 L
5 q; Y1 H, \8 ^# i# B: r# K7 ]  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
/ b( I/ z! b: j0 e& h: ~  HAL_Init();1 c) ^7 G$ b, X' h/ k8 d: r' `- L. M

( R% u0 n* b# S# E* K  /* USER CODE BEGIN Init */% V- f8 ^  X$ Z* E

4 [  F9 _8 E8 V# R# I/ [  /* USER CODE END Init */
. [. G- C+ |1 N: `$ O8 q4 w( B2 s7 A+ F* `8 s* Q
  /* Configure the system clock */
# g: `' u  H- J, V1 Z1 S# I+ D  SystemClock_Config();0 g7 ]$ q( _/ r
* N% q9 K; z" v  G) @
  /* USER CODE BEGIN SysInit */# Z' E/ w7 s) e
: k" s5 W6 N( D0 x" O3 [3 W
  /* USER CODE END SysInit */
4 \: A1 C, Z: q0 j; T# {6 W1 Y/ H9 t* [0 f9 B4 `9 v
  /* Initialize all configured peripherals */
. j9 S/ c) E$ j3 ]. e  MX_GPIO_Init();, F; M$ s3 W7 I" Y) r" a! S
  MX_ADC1_Init();  Z! L& f) S6 a$ s$ g; |/ a/ b
  MX_DAC_Init();) k/ p$ G( t% l! k  X$ j
  MX_TIM1_Init();+ m9 u9 ]2 N2 @& v* ~
  MX_USART2_UART_Init();& f; L/ p7 i+ `! W
  MX_MotorControl_Init();' F' {+ q9 c  _' F9 k/ h! I

) ^4 k3 e7 k7 Q5 V  /* Initialize interrupts */
* S' R9 Z! p) W! c! b) V. m  MX_NVIC_Init();
( f8 {' S6 N7 u' _& P$ v- |/ \  /* USER CODE BEGIN 2 */# P/ p7 z3 l- [' P6 t
  MC_StartMotor1();                                                       //启动电机
- q' C9 v" E. q+ C% ^' q- F# o8 ]  HAL_Delay(1000);
% M( F2 C* ?5 s) n" T+ m  MC_ProgramSpeedRampMotor1(3000/6,1000);  //正转3000转2 J1 j% Z! }: ~
  HAL_Delay(10000);                                                      //延时10s( `/ b9 `6 A5 A  h) `7 y% L( B
  MC_ProgramSpeedRampMotor1(-3000/6,1000);    //反转3000转
0 \% v* B3 u& j+ w& h% X: ]  HAL_Delay(2000);; Q; g1 h2 Q1 q% [
" _1 M* n2 x% B
  /* USER CODE END 2 */
, Y: `( W& J) k" x- ^' g
; \6 Q! G% }0 r3 R, H) \, C% Q4 A- T1 f
  /* Infinite loop */
( ~4 r9 n  |5 H" @' ^# z4 J8 v  /* USER CODE BEGIN WHILE */
* ]) G8 j9 t" |! A- @  while (1). X3 l# @3 E- R4 d+ H1 Q
  {
7 G. A! x3 b$ D- q" k, p8 C/ O    ste=MC_GetSTMStateMotor1();             //获取电机任务状态7 y8 `3 ^4 s0 Q9 R
    if(ste==FAULT_OVER)                              //电机报错
7 u3 R2 J" q" m: T( _- S0 s' q    {# o% i" P  x8 `* H# I
      MC_AcknowledgeFaultMotor1();           //清除故障
  v" v- T# X% i/ u2 v      
8 a# w# t+ X9 ]* D    }! a) h1 G. |$ z7 L
    else if(ste == IDLE)                                  //恢复故障后,电机负3000转运行( X6 {1 H8 F8 @; i; m
    {
, j' O6 o; K' R# ]# J7 @5 |      MC_StartMotor1();# c, w( K0 W0 s9 `4 V
      MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000);
' H2 o5 w) Y1 |2 ~  X    }
5 D3 H0 I3 S& Z. S4 u# Z+ n) H, U& S
  /* USER CODE END WHILE */
/ c  F. W; ^, D% W3 k! l) d  B. \  `2 ^, p- Y' c2 [' O
  /* USER CODE BEGIN 3 */
9 ?+ I. M5 w5 g    //State t sts_motor1 = MCI_GetSTMStateMotor1();
% t+ O) Z1 r# {' o8 [! }    //STM_GetFaultState(&STM[M1]);
+ Y8 S3 Z. E6 Z* v1 X* r" ?% L/ P  F

7 {- l1 m9 e6 i0 T! k  }, H9 o( a+ f# l3 F2 K
  /* USER CODE END 3 */1 H/ q2 L; \+ K! E( s) W( j9 J9 \! }

; N) x4 p! o! {# z# w8 P3 t}
2 Z; D/ @/ J7 B5 L  n' H

$ D: Y$ G9 f/ G' x7 w三、执行结果:
1 J; u" j# g* z  C; t$ S 6.png , L' u4 X# h9 N% R, J- h
7.png ; H+ n, w1 `) v# e, J
9 D, L$ D  |0 H' O5 D( `
9 w5 T/ ]* ^2 {$ i* Q' r

/ n; A+ {$ l, o. u! g8 Y. l  ?8 o

& E9 {1 `: \# j
1 m# K: N1 O2 Y; t+ I/ l4 H
" _, A* `% {8 U( ?& X/ k0 K  ?
收藏 评论2 发布时间:2018-9-1 22:40

举报

2个回答
STMCU-管管 回答时间:2018-9-11 14:28:44
谢谢分享
xiaozhou       回答时间:2020-12-30 17:22:30
好尴尬啊,为啥我的出不了故障,只添加了
% B: Q: N, f) z, I
  1.   /* USER CODE BEGIN 2 */
    9 e) X8 F; y2 y5 |( A! [/ N
  2.                         
    2 V% u7 u, h3 r( k' b9 n
  3.   MC_ProgramSpeedRampMotor1(3000/6,1000);  
    & }& `- r4 W. p" i3 P
  4.         MC_StartMotor1();  
    * z5 A' n) d: \! S1 y
  5.   HAL_Delay(5000);                        ! J; P/ ^' m& ^. e  u. _
  6.   MC_ProgramSpeedRampMotor1(-3000/6,1000);
    9 k# V  q1 g6 O2 Q  b
  7.   3 ], s& s& C" a4 W- K
  8.   /* USER CODE END 2 */
复制代码
4 \( [+ X- Z2 j
可以顺利切换,从3000到-3000...

所属标签

相似分享

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