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

【STM32电机培训】- 基于MC SDK5.0 API速度控制与电机启动停止

[复制链接]
TLLED 发布时间:2018-8-30 21:33
     培训手册里 实验2:基于MC SDK5.0 API速度控制与电机启动停止。1、实验2内容:
1 p& Y: w& n- G8 G  R7 ?4 `( q" b    1.png 6 K2 p6 \" U( M; n! @" Y
2.png . j3 O% z( ~$ Q0 H( r" u0 b: u
9 J4 k- _7 ^: T

, ^* f; R5 Q+ w- q0 I# P2、程序代码,在上篇实现的代码的基础上,修改代码如下:! k% h/ U& C, ?2 t
main.c程序里面添加内容
4 W% {- r, K, z//-----------------------------  U7 N1 i5 D8 {/ n/ j. l
//定义变量
. ]2 b3 U( |# V. m2 W: V, {/* USER CODE BEGIN PV */
3 O0 g+ y7 `3 `; u0 b/* Private variables ---------------------------------------------------------*/
7 G' s, K; R. f) _5 `' {  static uint32_t  delay_cnt=0;                  //延时计数   ) I/ }; Y5 u% R: f6 d3 V$ L
  static uint32_t  delay_cnt1=0;  ?4 b. @1 y" n5 q
  static uint8_t  delay_start_flag=0x30;     //延时启动标志位2 g- K/ O3 r& f/ e2 f( E1 O- A4 @$ j
  static uint8_t  delay_5s_flag=0;              //5s时间到标志位
! b# X' K# u9 s! n! G7 u  static uint8_t  delay_10s_flag=0;            //10s时间到标志位% E* x* N- P* u, W& [! w9 Q
/* USER CODE END PV */
5 r, t) m1 M% _# _4 P
+ ^8 {( D) M! b6 [, s//函数定义
! @+ A1 F" i, Y" V4 r1 q/* USER CODE BEGIN 0 */
5 z( w# `; |% _6 \& D//定时器处理
0 e9 I6 ?& k7 e: C. gvoid Delay_Handler(void)0 B2 P; F2 J  Q) k" f: ]/ `
{  K# W6 S/ F$ S9 i: P; z
  delay_cnt++;
7 w- a8 d* ]. t  if(delay_cnt>2000)          //1s计时
. F. H6 @& Y* H- y* e  Y/ }    {: I/ ?0 Y" J7 U% U
      delay_cnt=0;4 E1 m" e; Q  ~! C5 W
      HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_9);   //定义示波器看时引脚) f& U; F" ?# P0 T9 z  v
      //----------------------------------------: [5 y4 _) r% @+ }8 K* c  }
      if(delay_start_flag==0x30)          //启动10s计时; r; X7 f& K+ G
      {) e8 o3 x) q7 u' R( E3 @) T
        delay_cnt1++;* L6 x5 |; u' A  a1 K2 A
        if(delay_cnt1>9)          //10S; M% l9 t' n2 s  [
        {' D. S$ a! s4 v! e% P
          delay_cnt1=0;
) ]2 U2 ~8 W9 u; _          delay_start_flag=0x20;    % {2 k# E, T) h( x4 y
          delay_10s_flag=1;     //10S时间到标志位! T  _) R6 L' R: f
        } , G! E4 K5 ]* F( g
      }
& M) |3 l5 w/ K      else if(delay_start_flag==0x20)    //启动5s计时
1 |9 c$ K+ _0 L* T      {
0 m) N" o* |" ~3 y        delay_cnt1++;
! H3 o: T3 M; C3 N6 Q1 \- f        if(delay_cnt1>4)           //5S
* q* r5 t& f& y% q        {7 \9 E" o+ [* L: l
          delay_cnt1=0;$ k! r: \! }- E" M
          delay_start_flag=0x30;5 U( t" Q4 ~9 |7 e/ N& f
          delay_5s_flag=1;   //5S时间到标志位
' I/ M* c; |1 B- f        }
9 C  d7 j- Q  N      }  5 r3 F% Y9 r1 I  ^7 C7 }
    }0 B8 I$ j, N/ @( f5 a6 W
}
0 C- E! {: z1 g2 j
4 U8 d0 A% A8 y9 K5 Tint main(void)
. P2 z" w4 e$ B{
# i- {& Q' p$ ]- i) P# ]) Y  /* USER CODE BEGIN 1 */7 t+ f8 l, k: h8 V" F
- ]; ^9 x/ E& D0 ?: f* b/ L
1 }2 d. R% p. d5 i7 N
  /* USER CODE END 1 */
# W3 g) x% I9 a+ I& Q
: ~' K6 O$ ~3 S  N

" c& k7 x1 x1 r) L2 W3 K* ]+ ?  /* MCU Configuration----------------------------------------------------------*/
: r/ \, p- r/ f8 Y
" X+ |; ]$ }$ \5 ^

% |; b/ t8 g/ f7 {& R6 H) q  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */2 Y. b4 H2 |' [! c3 r0 s/ Y
  HAL_Init();
/ l! a! z# g; Y& B2 Z2 R0 E. b: @1 V) K3 R
8 _  a- m+ R8 X3 ?
  /* USER CODE BEGIN Init */% x- C' @2 ~5 u5 ]0 t4 s) u
' `( Y+ O" S% ~5 ?: W# F6 [
+ z; r2 z$ E& l; H7 ]/ J/ q( z: h% J
  /* USER CODE END Init */
2 G: P! F1 `: h4 ~5 L% n
/ }* P; I; B$ [' k. m
6 ?/ l% U0 N0 f
  /* Configure the system clock */
8 K- A" N8 C$ H2 `4 ^+ Q  SystemClock_Config();! Y( I: R+ d/ D
8 X2 ?; a* k+ C. s. E' @: u& m3 W
+ b* ~( J' y, s" @5 L/ r% H
  /* USER CODE BEGIN SysInit */
/ w4 E' V8 r- P& B5 g2 N- r$ S
4 L, P! F) m$ u6 A/ s
, q/ e5 n9 O3 M6 _
  /* USER CODE END SysInit */
* S3 G3 C9 ]1 d1 s- M
) F% H9 W/ u( l7 i

! }! A3 j* ?  z- a  /* Initialize all configured peripherals */4 w# d5 \6 |% t
  MX_GPIO_Init();& |/ Z1 r9 F* Z
  MX_ADC1_Init();$ D$ [4 i( q) ]% ^+ C2 ?/ y
  MX_DAC_Init();/ {6 F/ T5 d4 o
  MX_TIM1_Init();1 l6 H* P' e  [! W8 @
  MX_USART2_UART_Init();- \+ ?) l7 M4 ]+ u& N! d
  MX_MotorControl_Init();
( {3 U: \& q, t4 ?, }7 E- R9 O; l4 f$ U3 F; K
, j" I4 K+ j) J4 E' d
  /* Initialize interrupts */
7 j' l2 X  l/ t1 b! R  MX_NVIC_Init();
) }8 ]" A! }# G( B0 v  /* USER CODE BEGIN 2 */
8 Z9 Q" L5 t, p MC_StartMotor1();      //启动电机" I2 |$ a5 I* @8 \; _: U% j
  MC_ProgramSpeedRampMotor1(3000/6,1000);    //1s内加速到3000RPM& V2 f' f6 m) A  B

" Z2 v- T; g( I" T. z4 W3 R: ~

" {3 w, E! \: |* W. }3 Y- `  /* USER CODE END 2 */6 a9 ]) C) m2 R8 X6 Q* g
! ^& [% S/ X& ]. k

$ K, a3 x) i* p  /* Infinite loop */* e2 d- n( U$ Y$ N7 L
  /* USER CODE BEGIN WHILE */! f( Y. Q; p& w
  while (1)5 R! k& J. Z2 c3 T2 v5 T/ E
  {
0 K3 i. N! h9 N! y* Y7 y/ C( Q1 W6 g, ^; Q9 P8 \0 `4 G
2 i8 T4 D( {% |2 z9 X" t
  /* USER CODE END WHILE */
* S! v0 H: a9 z4 {/ X* L, ^/ K  X& x. s  t! u! m) m

! w# U4 ^* [+ J( @$ X; q  /* USER CODE BEGIN 3 */
' F9 i; e6 T6 S    if(delay_10s_flag==1)     //10S
0 Y% H  K& q$ [) x    {
" p6 @5 W  j* S" S5 x      MC_StopMotor1();         //停止电机运行/ \3 n- E% V/ x* w+ M
      delay_10s_flag=0;
( l8 N6 |7 j. P9 o$ w% u2 j    }1 J$ T% P( i' p/ n
    if(delay_5s_flag==1)     //5S7 T- Z: P6 ]  C. p% f0 R
    {  E6 d4 `" E* ^7 M' X% R
      MC_StartMotor1();
0 g) N5 h% M7 m! y* H  V: O& _      delay_5s_flag=0;
7 \' Q! ^  }, @- j. X' U6 h    }' I/ H  U: c; v: A( X7 a
: g; m% u" N5 w9 n

# b( r/ G/ o3 V9 H/ M- x  }# a0 i+ S, [- A+ W' V: I
  /* USER CODE END 3 */4 ~2 x8 q2 ^0 [/ z
$ |: @/ @4 p. v+ {: q, K

$ \" s6 y! W& |. [}( J2 k: U" l- Z- s
4 A' ?0 I# V% v; f8 S9 R  f
2 F2 x: e7 ]; ]; z# j
/ Z1 ~. Y% c. t2 E, U: z6 d  F
/* USER CODE END 0 */
- {% m3 T* [" C7 J- p  b, J. ?) F( e' |! K' w! V, A7 N4 [' Z8 K; o. e
4 G' [7 j0 D9 U; |  c

8 {% R5 @) F( Q! D0 N9 k! Z) p6 v6 @5 d$ p* [: M/ Q- `
5 i( U3 y$ \) d6 b) e( J
stm32f30x_mc_it.c 程序里面添加内容:( x% X8 z+ n' H; F9 k( T
在滴答定时中断程序里面调用定义的函数
$ g7 Z* J4 I3 t( }* F* Avoid SysTick_Handler(void)
$ A" I/ p8 c" J1 c2 e+ Z* B{5 w, X6 U" S. }  ^' c
#ifdef MC_HAL_IS_USED5 z5 J3 R- D0 E* A" g
static uint8_t SystickDividerCounter = SYSTICK_DIVIDER;
* R# V8 d+ y+ [: O* b  /* USER CODE BEGIN SysTick_IRQn 0 */
2 A0 w6 \& Z& ~' w2 D0 i( y. U& e8 u, c0 i$ M( [
. `- M+ Z7 E/ \0 k" i9 ~
  /* USER CODE END SysTick_IRQn 0 */+ M" b5 G. p' o: V
  if (SystickDividerCounter == SYSTICK_DIVIDER)5 j, F, E( W% J4 X+ i8 K% P
  {
' V! }# X! O8 M    HAL_IncTick();
* z3 `2 X2 o8 c+ F* |" Z    HAL_SYSTICK_IRQHandler();
2 s% f6 h  V7 f( F6 Q/ T    SystickDividerCounter = 0;2 T4 `8 r' Z, o  j1 q0 L+ d
  }
. |5 B8 ]; K& z3 r' |7 h  SystickDividerCounter ++;  
6 r) @2 Z- {- K" l2 Y: r% z#endif /* MC_HAL_IS_USED */, C2 h2 B, _& F. \
" f5 x- l4 g/ r+ y: ^

1 X- Z" t0 E$ D6 @+ v  /* USER CODE BEGIN SysTick_IRQn 1 */
1 I! s* l/ J$ n. ~- l0 n0 g  /* USER CODE END SysTick_IRQn 1 */: \5 d* x$ }( I1 @2 Z
    MC_RunMotorControlTasks();
1 @' Y, _0 v, `  /* USER CODE BEGIN SysTick_IRQn 2 */
! |% Z( r& d3 a" o& Q  c    Delay_Handler();2 X8 @. ^* p! r4 ]6 i7 }0 q% C$ y
  /* USER CODE END SysTick_IRQn 2 */* |9 [5 V' x. k. _/ |+ @  u* R
}* j/ d2 m7 H' E# Z

: y  \5 }3 k7 ]# W% E+ S, H1 E  ?  W: e; H8 g: f7 s$ G
$ U, y0 s& L5 I
3、测试波形:
) M  Y1 F: R8 H) P在程序定义PC9为输出,观察滴答定时器的定时时间,滴答定时器的时间周期为0.5us ,程序处理后变成1s定时周期:
7 j2 T" Q5 o6 @+ o8 F% Y8 } 3.jpg % l- j/ p& i0 [! a7 J* T. L! j

9 U5 @- F- _; s% U: _
% v3 _- l( f' ?1 A
监控电机运行的图片:. u6 h( p/ R6 A( b" Q5 L, [
4.png ! [2 m; Z( k! L5 E1 B
5.png
, m" I$ c7 G5 U) E* u" h' n
; S* Z5 R, N$ H( H# z3 E
" w% I# E; d  E% R' ~! _; B4 b6 L
1 g# N# W' P% T1 \4 O- m/ D) d

# V7 J* W+ m3 u0 _/ H+ f9 f$ y) O4 ?+ p6 L7 J: v( z  J6 @
  }* P" g; M. n4 a- E, s
& V0 k& d% c6 L9 |6 p

4 G/ M$ u5 y% q& [$ Z# N; k) X& Z, c# o7 A
3 ?/ k+ e+ ], U' y5 G
% Q, q$ F# O  L5 t2 o; ^; O+ ^
& Z7 F9 d" [+ r
' M8 }7 O! I5 o8 e! w0 q% s% K
) Y$ @5 r6 N0 P+ t
     
+ u2 ]$ H. w$ D# l& [, ^" Y; v% \, k- m8 K- a) L/ V' \
收藏 1 评论4 发布时间:2018-8-30 21:33

举报

4个回答
子曰好人 回答时间:2018-8-30 22:44:19
延时程序值得参考,不阻塞其他任务进行,不错的想法,点个赞
zhdzhd 回答时间:2018-8-30 23:00:45
向大神学习,思路不错。
TLLED 回答时间:2018-8-31 08:32:30
zhdzhd-174422 发表于 2018-8-30 23:00
! t1 ~0 X" z* ^4 r3 \/ |向大神学习,思路不错。
, z- q! O1 [/ Z0 d8 w7 H! j9 }
共同学习
wolfgang 回答时间:2018-8-31 16:00:08
按照此想法,还有其他方法观察嘀嗒计时器的方法~~

所属标签

相似分享

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