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

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

[复制链接]
TLLED 发布时间:2018-8-30 21:33
     培训手册里 实验2:基于MC SDK5.0 API速度控制与电机启动停止。1、实验2内容:
* `) t# p! D3 _7 G    1.png . k, O, }, T0 @' |1 X
2.png 8 h' ]- O6 A$ Q# W+ N
* Q& _5 R; F$ F- Y3 l0 v

/ `4 C3 b( a) d6 K7 t2 C2 K2、程序代码,在上篇实现的代码的基础上,修改代码如下:
8 {! t, u  \1 }3 k7 d8 ~9 _main.c程序里面添加内容2 h; X" d& Q8 o' Z
//-----------------------------
) o1 X0 Y1 q: g7 c) m' q' ?//定义变量
6 f6 P5 T) k$ L: E8 p/* USER CODE BEGIN PV */
# l5 i- E4 J' a/* Private variables ---------------------------------------------------------*/
  o  k5 P% ~% E& e/ E# _  static uint32_t  delay_cnt=0;                  //延时计数   
7 C/ a; e8 h& ?4 M& U  static uint32_t  delay_cnt1=0;6 o4 A- W( ?/ F8 H* c, `0 Q
  static uint8_t  delay_start_flag=0x30;     //延时启动标志位
; t& I0 {4 l1 I  static uint8_t  delay_5s_flag=0;              //5s时间到标志位
) F9 E! a$ a( j$ j* y, F4 t1 R' V# E  static uint8_t  delay_10s_flag=0;            //10s时间到标志位1 X' s$ E. ^7 J* E" H+ [1 ~
/* USER CODE END PV */) ]; x9 P0 x0 m) ]( [
+ z1 S9 x" ~& [: t9 D% T
//函数定义
* W$ D- b" c( \( W$ ~/* USER CODE BEGIN 0 */
4 H& A& c# ^; Z5 y) t$ R//定时器处理
1 E3 F( M/ L' l  X/ mvoid Delay_Handler(void)* u5 p- a2 g+ g% R$ G( K6 P
{7 h9 p" ?; C' E0 Q% n+ I/ |+ U
  delay_cnt++;
4 ?1 L3 G1 r0 _" A% T  if(delay_cnt>2000)          //1s计时2 M" A' u) P$ ?! ?) N" |' i+ {# R
    {
& H3 i4 @2 S4 u/ M: S  Y* {/ [      delay_cnt=0;7 G, [0 ?! @5 }+ O4 U  L
      HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_9);   //定义示波器看时引脚, z6 R( E4 N) }" \8 V
      //----------------------------------------
2 c% q& u8 u* i3 J      if(delay_start_flag==0x30)          //启动10s计时
: L( S$ F+ A+ x- H' \6 T% s      {( E6 m; E) o  C
        delay_cnt1++;# D2 m2 X" _% {8 W9 G# P2 y# R
        if(delay_cnt1>9)          //10S
% F4 k. s) K, v: J% R        {) |! k8 n. ?3 ]6 Z
          delay_cnt1=0;: |2 k. x% _7 S( }( v. `
          delay_start_flag=0x20;    " a( _/ y+ I% B% V$ f
          delay_10s_flag=1;     //10S时间到标志位
: I5 @% L) B, C! V: s        }
8 c& Q( }) X& e+ D0 {6 G! e      }9 q2 B  r: ?; R$ z' l
      else if(delay_start_flag==0x20)    //启动5s计时. F$ l8 F+ Y2 m( P4 G
      {
( m, F* _) H+ T# y& S, M        delay_cnt1++;: e$ E6 y1 R& ^2 @& [
        if(delay_cnt1>4)           //5S% r5 @9 i" R. \
        {
5 m4 L3 C: G1 P( }6 J7 b% V6 ~: d          delay_cnt1=0;
5 u3 b. ]1 p" I: I5 k& X/ H7 l+ u          delay_start_flag=0x30;5 L( G) m* Q7 s' {+ e* v# U' n7 I
          delay_5s_flag=1;   //5S时间到标志位
, O' v$ {" f, u0 G# x. m        }
; }8 R$ x) ^8 d# ~, h) s* h      }  
7 h  I* \$ U4 l% g! v    }! P& G$ o( ^6 Z- p. r# h& o
}
2 g) u- y. K9 E3 B
/ y4 u7 n! Y3 s/ X8 sint main(void)
" r+ q' P# V3 @{
0 P  t- T2 k5 c3 I! f  /* USER CODE BEGIN 1 */
& h# ^6 G3 O) c' s" @
* g6 |- M' ~1 V( g0 t) H' P

7 ]& y0 c6 R$ ^/ o  /* USER CODE END 1 */
! [% d5 p  w3 Q
- k1 H. Q8 b' H+ Z& q

$ V) E9 |" q- }6 V) E  /* MCU Configuration----------------------------------------------------------*/
; N; [. X7 \+ J$ f8 J2 c: M
+ D6 B2 a0 c: e& ^  y4 }

! L7 C4 L) v6 S% q1 e  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */: J" r0 r' i. o4 d  h; [# n6 P  l
  HAL_Init();
" i( U9 a% D2 A  |( J: u0 h% _( l1 N# M" w% L0 \  v2 x
2 j. W8 T5 u" I
  /* USER CODE BEGIN Init */9 @' ?. e, v# M5 v# ^

/ \* D/ E6 A6 ^! l1 J5 b8 J, E
' X' s+ c# D; j( @9 W/ l
  /* USER CODE END Init */2 [7 N# R  z8 V2 K/ l4 y

9 f4 Z2 V7 W: R+ ?" J% x+ e. r8 A6 a
* {8 q; g+ `4 A4 R' i
  /* Configure the system clock */
( [# C! c  z1 S- O1 L" J  SystemClock_Config();
) M6 y/ C6 C  z% A6 @. u" ~7 X& f5 i/ g2 a- e/ n

# I: N2 d+ @' K1 J! D5 B  /* USER CODE BEGIN SysInit */
6 r' b) p9 {" S; p# ?4 Q4 E( I. x& ^( Y  ~( e) y6 V9 r" ~! o3 [  [# J

0 Z+ W3 i$ G/ J8 o1 }  /* USER CODE END SysInit */
4 p3 E9 d$ n2 k  f% }) H  P- @2 P6 @3 `, F( B
* ^6 L5 v" _: H) X! n3 D7 l, _
  /* Initialize all configured peripherals */
+ V* F3 H  h4 }( G  G, v  MX_GPIO_Init();
0 x6 J& z; k" @1 |( q" P  MX_ADC1_Init();0 K+ o% e+ x. j, }: u
  MX_DAC_Init();1 w1 R& ~7 K1 @4 @& @
  MX_TIM1_Init();& {$ }  k1 L+ j
  MX_USART2_UART_Init();9 u: ~+ @: }% k. N6 g- K( }
  MX_MotorControl_Init();  `1 b" C0 v: @/ l

! I9 j$ b: [6 i3 V( t( L
' o) |/ L; E5 f8 d
  /* Initialize interrupts */- i/ M0 e) T! {! O/ _. Z: X+ ^7 F& F
  MX_NVIC_Init();
0 _# L* q( A0 o# N# M" M  /* USER CODE BEGIN 2 */
" q. u: e! S) | MC_StartMotor1();      //启动电机) g: s, {" d! K+ k$ o4 E
  MC_ProgramSpeedRampMotor1(3000/6,1000);    //1s内加速到3000RPM" S4 N5 e1 P& I

; p& k. Z) b0 C4 F7 h: A* m) N8 c

& O: i8 j$ ?' W  /* USER CODE END 2 */
  x4 g+ Z2 i3 T8 A$ `2 v' L; j* o, `, e3 o' A$ ?  \
! ^  \  {- x/ x7 X
  /* Infinite loop */# X- T9 b( c9 K2 [- U
  /* USER CODE BEGIN WHILE */
: Z+ ^# ]0 P9 A2 a7 V  while (1)! u# E: T% U/ P! t9 H
  {/ |2 ?' o+ a7 ^9 O0 K

3 }4 N( Q. Y! P

/ k) Q, H- l4 E% k: k2 \: @/ V  /* USER CODE END WHILE */+ y7 ^& ^5 k5 ^  u
) a! B4 }$ \0 F+ ~: e6 R

0 f9 p7 ~( l8 e0 Q  /* USER CODE BEGIN 3 */
' X! _8 g1 w! ]; _    if(delay_10s_flag==1)     //10S
/ c2 @3 ]' n% J( U! z1 c. N    {
8 J) v! }8 ?+ y; i+ d      MC_StopMotor1();         //停止电机运行2 p  d0 A' ?6 e: X+ D
      delay_10s_flag=0;
* }  z. w7 I8 B7 }    }
- H% k1 l4 Y5 H/ L! j  B7 K    if(delay_5s_flag==1)     //5S
1 G; K+ h3 N  K# t( }% {    {1 [% b* a% z9 O1 O
      MC_StartMotor1();
: u8 B# b  \# l4 _      delay_5s_flag=0;
- U. q# P! W4 |" s; m' r; B    }
" W5 p+ X8 i0 J5 \/ {! U  F5 \- L" W- Z
* j6 W$ f8 m: Z  l" T
  }
3 B3 m* b3 [! M9 b  /* USER CODE END 3 */" q# i: W  M5 S# w

/ ~; H! `: N3 m7 _. `
3 x. T! J3 U) J$ F9 u1 l
}
9 S* v+ j% E. p: S" d3 W
2 \6 W1 t) K* ]0 m
0 ~# ~* h7 [# W* v5 d0 B0 R$ C& B

8 U2 [2 H+ X9 g/ C$ B/* USER CODE END 0 */; x2 p  s; \) S
2 }1 x* A4 }/ y; u! J2 V

( _8 {8 x  }9 y! v* n- w
6 s, g% X! A$ V% T7 c. w

3 T' u- k% ~$ S" f) ^( v+ L% T
/ |5 Q3 v& R8 i  b
stm32f30x_mc_it.c 程序里面添加内容:
8 p- Q  a2 w. ^% ^7 S在滴答定时中断程序里面调用定义的函数
4 U6 L& n& C8 Zvoid SysTick_Handler(void)
/ _+ ~" x+ R; K{
+ ?+ z- B; C% t1 L5 I#ifdef MC_HAL_IS_USED
: v! s, i$ d  c, C4 S$ j* Bstatic uint8_t SystickDividerCounter = SYSTICK_DIVIDER;' ?! a% e$ |* @$ b
  /* USER CODE BEGIN SysTick_IRQn 0 */
+ Q2 M0 O3 e9 e8 ~3 n+ U# |. w8 g0 g0 Q1 p1 T* |4 n2 ]" v
1 T, T( m, {! ?: p) [" D
  /* USER CODE END SysTick_IRQn 0 */" a% \- G7 _# i0 Z5 e/ d# c# z
  if (SystickDividerCounter == SYSTICK_DIVIDER)
. w' q# A8 _' s& L% J! U! ^' {  {
" F! N4 E9 N+ v5 U' z    HAL_IncTick();& O7 V. b7 E) b$ A! a! @: R4 q
    HAL_SYSTICK_IRQHandler();
" O1 c1 ~. z- {: ]    SystickDividerCounter = 0;
( b3 O+ `; p5 J  }0 P6 M  t* [7 i1 ^. _' Z
  SystickDividerCounter ++;  
- X- x+ G, x) Z: b4 s#endif /* MC_HAL_IS_USED */
9 D. C! z1 U" Y) }2 C8 M! m# [* Q3 C
% a1 _% }+ a* Y0 z: L) I
  /* USER CODE BEGIN SysTick_IRQn 1 */+ L) F! p) U% y1 B% a
  /* USER CODE END SysTick_IRQn 1 */
% T0 I# W! y  \# Z! i, T9 U- C    MC_RunMotorControlTasks();
" s0 y6 ~+ K8 }( A5 Z+ K  /* USER CODE BEGIN SysTick_IRQn 2 */* R! x1 k! W- P
    Delay_Handler();
' c! l5 z* W$ j' k& n1 \1 L6 u  /* USER CODE END SysTick_IRQn 2 */
5 g% E! ~. C) g$ Y# C/ A}
8 D( z. L  w9 z$ ]1 j2 K8 X/ z( `, G2 L& Y* g) G" X

8 B9 c+ \7 s+ d" n; e
, ^+ J0 u3 n# Q) t7 o
3、测试波形:/ P  t. Z' F: j/ _" I6 R6 _& U
在程序定义PC9为输出,观察滴答定时器的定时时间,滴答定时器的时间周期为0.5us ,程序处理后变成1s定时周期:
4 e  B# q! ?9 S7 f 3.jpg
1 l# f: J: u: w( f5 \3 Z
; W( K) G) W* n" W
6 q* y3 `9 Q" J) V
监控电机运行的图片:: }6 h, X2 R% E' N! q3 K+ w
4.png
1 a8 f7 m+ V4 m- f' s# w9 z  N 5.png
6 _6 D2 `6 V8 m. @- ?, m; B& v# @! `% [6 b9 m+ }: Z/ N
7 L: D7 q) }8 J

. g" E" r  `& U: i( l0 S# r0 V) t$ A2 N

$ @. W3 `. x& U" F$ N
$ c: o, m% P9 w
$ W( z8 |5 q* b  X: _

! ?+ Q" A- c' L% ^( D) E

; [* f1 o2 k! r2 x4 ~. w8 x$ k; K7 y$ _' d, U4 _0 f2 c: M& b

, \8 k$ Q) d) Y1 }  x3 [# V6 X$ D& i# p$ E: M% l
# r) R0 c( @7 D5 q
% Z3 I: `. M$ o& O/ z
2 N/ m7 e+ K( d7 f9 z9 R' h
     8 t' F4 n& J. V5 v

2 ^7 Y; x; a; Y1 s* c9 w
收藏 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* v8 w0 Y# [/ ~- |7 @' ?$ d( K$ j
向大神学习,思路不错。

( `- Q* U& B: n0 j# t共同学习
wolfgang 回答时间:2018-8-31 16:00:08
按照此想法,还有其他方法观察嘀嗒计时器的方法~~

所属标签

相似分享

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