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

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

[复制链接]
TLLED 发布时间:2018-8-30 21:33
     培训手册里 实验2:基于MC SDK5.0 API速度控制与电机启动停止。1、实验2内容:
; W9 [/ a& i& o: B7 _4 H- m0 L    1.png % l% h( H& y/ n# e* e& `
2.png
, t& I" A$ L" L( ?. E/ K
$ D, v! W: @; w, \, G% p/ B+ n6 {

( d- z& R$ @  J2、程序代码,在上篇实现的代码的基础上,修改代码如下:% w( z/ i$ x1 W
main.c程序里面添加内容
) d) Z( u% ]! D//-----------------------------; c0 t) a) v5 b
//定义变量: i' W, K2 J) W0 J! X3 }
/* USER CODE BEGIN PV */" Q) v9 b4 U7 {# t; d
/* Private variables ---------------------------------------------------------*/
8 t  D3 C; M/ j$ O6 A  static uint32_t  delay_cnt=0;                  //延时计数   # S6 R2 K1 B4 q0 P& n. N
  static uint32_t  delay_cnt1=0;& V" u% Y+ A; ?& g# g1 R
  static uint8_t  delay_start_flag=0x30;     //延时启动标志位
/ O0 K9 K* v4 M6 [  static uint8_t  delay_5s_flag=0;              //5s时间到标志位
5 U1 x' \4 l2 b9 ?* |  static uint8_t  delay_10s_flag=0;            //10s时间到标志位
5 U8 y' G* B. N3 T/* USER CODE END PV */
* p' j6 p' E0 d, ?& g% o7 X
! L  g' S: P1 Y6 a4 m' P//函数定义
9 d8 ]/ V5 p& b( I* t5 `3 F/* USER CODE BEGIN 0 */  S+ a4 J: v3 {% H. j
//定时器处理) D( S- ]( T) z6 b6 w4 d4 K  O6 e
void Delay_Handler(void)
, c7 b1 }% d. ^2 r) S& l) {{
) t; q8 Y+ D& [3 u, ]) z) u  delay_cnt++;# e- B# O3 N& B; x; ~
  if(delay_cnt>2000)          //1s计时
% Z; Q$ ~6 I' ]0 J    {
$ [) Y( V; r1 P      delay_cnt=0;1 i# v) G" V) A
      HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_9);   //定义示波器看时引脚
* z0 P# h2 ^- m% n4 j" A9 v      //----------------------------------------
% I# E; @3 e$ c6 H8 J      if(delay_start_flag==0x30)          //启动10s计时7 K% H% ?4 F3 H9 V( i1 U) ^: u) p
      {. h( z8 J0 J- m! h: b
        delay_cnt1++;
$ ?/ e* y: |) Y9 g. U* U% Y        if(delay_cnt1>9)          //10S
, [7 L+ R% ?3 U0 S6 ~        {( q4 k1 \+ S, ~- F
          delay_cnt1=0;; _7 ]# S- h* p- c3 f
          delay_start_flag=0x20;    & H* m6 D6 i" {1 k7 C# `
          delay_10s_flag=1;     //10S时间到标志位
6 @0 K) y& [/ L7 f        } ) v! n; I, _% ]& L. U  u0 T
      }) D( y) }9 o' x+ n
      else if(delay_start_flag==0x20)    //启动5s计时$ U" k- x- M$ J8 B! }3 O
      {
! K! J5 t, z# G) r5 k( L" x        delay_cnt1++;
: w  ]/ t- A. |) e6 `, W5 j        if(delay_cnt1>4)           //5S
& v* j% ^- H( }' d% g        {
: E. f, ^. U+ r% o5 q4 X1 t' q          delay_cnt1=0;7 _/ S  g- c& z- C' |# ^1 {
          delay_start_flag=0x30;/ }9 @5 Z/ K& I$ p" I
          delay_5s_flag=1;   //5S时间到标志位
: Z, U, B& B, v  ]' b        }
$ i1 ~7 ^! K# J, y8 D      }  
; }4 u7 a7 Z. E& s7 a( {/ X% `    }# ^7 B2 s, h- m& [: Y  u2 _
}
! O5 M( M# y& t6 z. l' c3 _0 m6 R# Y8 j" ~% x5 h6 c, k4 T2 ]  l, V8 {8 f
int main(void)+ n. S- O& ?3 p- i% `
{+ x9 c- A$ _8 H3 L7 k" s' c
  /* USER CODE BEGIN 1 */" B+ {- E1 M: z$ I( e; n

0 ~1 ~, z; n7 [. b- x0 j

' y0 h, U( M8 E7 @  /* USER CODE END 1 */6 M+ `# \1 I. |9 t: ?+ I
8 c+ T) R8 k2 i, S/ X/ L0 e

; b# |/ |  {$ s  _& I  /* MCU Configuration----------------------------------------------------------*/4 K6 v+ D& }- M7 t
& \& ]9 q' _8 \8 G- |5 q" Q: {
$ ?; g2 X# ~; g* @+ G6 v: _3 Z
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. *// |7 G9 H1 L1 y% i2 v
  HAL_Init();
, C1 P6 C4 P8 l, U4 F- x  U
) R* X' U3 U- f
+ v5 X  W% z  r" U
  /* USER CODE BEGIN Init */  |  W7 h6 x% [- d; o% }/ t

/ U$ D, r* w; ]* a# v. b

' g; [: h- d8 B& g  /* USER CODE END Init */5 E, }- D( U- s, S9 L1 i6 ~" l

0 q0 K* X  V! r

: J5 e- K3 e' t$ l6 Z. z  /* Configure the system clock */
- ^; v: a( I, q" I  A  SystemClock_Config();
' t# k# ^6 K% e9 ?
- n# H5 f2 X- w2 C
& [) {' d$ W* v# T1 t
  /* USER CODE BEGIN SysInit */! C0 T; l$ J( K& c! E, l

" ]5 Z( g; U! ~! R" s

  |  u$ d) W$ [7 {  /* USER CODE END SysInit */
3 ?3 r1 O: X9 r3 H( Q7 E
: D1 L; I1 W: x1 `+ C
1 {* b) N  f: P/ d
  /* Initialize all configured peripherals */
% G3 \. v/ x, Q6 e  MX_GPIO_Init();
# v& {8 V( j( u6 p- F7 y  MX_ADC1_Init();
& g8 @* X! p$ r; i7 X9 {& @  MX_DAC_Init();
. k& z4 ^& P4 U  MX_TIM1_Init();
7 a" h) @- v1 v  MX_USART2_UART_Init();+ o6 N) N' S1 @
  MX_MotorControl_Init();
( Q' h5 c; h1 X9 L+ U' G- |2 Z1 `

5 b9 Z$ P0 o. e/ b( j  /* Initialize interrupts */* M, v% f0 z3 X- w
  MX_NVIC_Init();
4 y+ a* f& r9 v" L2 D  /* USER CODE BEGIN 2 */
5 w' u2 i: e" C5 N2 B, M MC_StartMotor1();      //启动电机0 o' A  V' u" S( T4 T* ?+ v1 T
  MC_ProgramSpeedRampMotor1(3000/6,1000);    //1s内加速到3000RPM( o3 {- V4 k$ r' f8 C5 z& b
" ]: z, p' J' U9 C

9 K- O$ [. J/ X. i% C  /* USER CODE END 2 */$ F2 @, e$ g5 B- j; p
% H2 n8 V- ~  \2 X0 ~7 q

* l: T1 ]3 _! y7 k% u% z- ~% h  /* Infinite loop */
) Y  D# I  {! O/ z6 W  s. f1 _  /* USER CODE BEGIN WHILE */
0 ^1 B: N0 e  F  while (1)
  [/ @* e* Q( G  {+ L9 j' X# q: {9 A" e
. [  Q5 Y1 n/ v! R% k
  i9 d, B$ i9 p+ e0 u$ {8 _
  /* USER CODE END WHILE */
( I' I! c2 n$ r4 N
. y9 u% e' A: H: n
% h# ?$ l' R7 r% P& F4 P
  /* USER CODE BEGIN 3 */
0 a6 d/ x3 q: J% t! c    if(delay_10s_flag==1)     //10S
7 c4 S7 H1 k( w8 K1 k    {( d2 D5 |) n# Q! j$ z* F
      MC_StopMotor1();         //停止电机运行7 u/ k5 |3 T+ T( F6 M
      delay_10s_flag=0;5 z) b: o; [, N$ j6 I
    }% U: }% o) W% [. {
    if(delay_5s_flag==1)     //5S# B. o8 m6 N8 |  x; k: C6 p& R( G
    {6 k. S: Y" v' k  Y, W
      MC_StartMotor1();
% o$ J& s4 t% r: }& B      delay_5s_flag=0;6 z, n% {9 Q! ]8 b* F; q
    }* x% U  J3 U7 f+ [& \+ C

2 F7 `1 N! I! p( C

$ L  |8 Y. m, W7 z6 P  }
, ^8 R7 t9 U8 a  /* USER CODE END 3 */8 C) t" M0 P/ x4 D0 T

. T( t& l1 p5 s+ d) Q
: q& ^, k% ?" L$ h( v* T
}1 R$ t. F5 M) @" O9 x

+ g% {, T9 _% `( s* e$ ]+ W4 Z5 h" E# |# o) O( l: y

' H" t; D9 N- T8 ~) U( ?: [/* USER CODE END 0 */# z( |8 }7 s) a- N6 \- ^* z
- |$ Q0 h" m# Z# S* X$ ]

$ q, x; D2 _5 [) n; T; q/ L5 a

8 _# }3 E! \& q* I8 ?6 B
$ A! Z# }4 s; n+ M" ]/ b

; x+ d) m! b* H5 S% L5 I" d3 ystm32f30x_mc_it.c 程序里面添加内容:3 p; \8 A# M# J: b% @
在滴答定时中断程序里面调用定义的函数
0 ~0 @$ I2 i* O2 Mvoid SysTick_Handler(void)
9 X2 y+ f4 z% D4 j; B9 g( G{
, }% E( M% A2 P: u/ g#ifdef MC_HAL_IS_USED
/ z; b/ _2 s# Ystatic uint8_t SystickDividerCounter = SYSTICK_DIVIDER;/ p8 n4 w6 c6 e5 k1 h" {
  /* USER CODE BEGIN SysTick_IRQn 0 */
! r+ _& V1 w8 B7 h0 }( b6 q$ [5 _  J! W0 I; t  m

; W- ~9 P# o  y- V/ R! _  /* USER CODE END SysTick_IRQn 0 */5 t2 a% h  K4 x* `- K8 i
  if (SystickDividerCounter == SYSTICK_DIVIDER)- n2 u1 `0 m" @% \5 ~
  {
8 V) p6 Y2 Z# S: p3 b5 V    HAL_IncTick();
1 `* W$ w4 I  k* N0 m' B    HAL_SYSTICK_IRQHandler();
& a5 I4 f' U+ m& d6 t7 w$ M, \$ _& C    SystickDividerCounter = 0;6 i* F% ~1 P1 D
  }9 Y: |- ^5 Q- G6 I2 b0 @
  SystickDividerCounter ++;  
5 A7 l1 W5 ^: [# f& }( r#endif /* MC_HAL_IS_USED */8 j. e3 C! ~  g) S% e5 C2 S

9 g( n, U1 G  d( ?6 \
) M* U, h/ W8 p4 v
  /* USER CODE BEGIN SysTick_IRQn 1 */" j5 l# n7 x8 q/ t/ W" p& x8 X. i7 }
  /* USER CODE END SysTick_IRQn 1 */
  o( R8 ?3 F9 o    MC_RunMotorControlTasks();1 ?! X: x% v7 ~* ?/ e( v: x
  /* USER CODE BEGIN SysTick_IRQn 2 *// C( ~- J" a; C9 J1 o
    Delay_Handler();. e' U6 m7 `, t. v% t. `
  /* USER CODE END SysTick_IRQn 2 */
1 ^- x) N2 c4 R1 s- @% V}
2 C! i( t& J* w1 b. ^( j9 B4 U, J, O0 y7 S) s/ m/ z' R9 }: ?9 J
4 }8 Q1 Z+ i. n" D& O
# W% E5 v; P' n
3、测试波形:; I, S8 t$ F9 ~+ `  x: x: u
在程序定义PC9为输出,观察滴答定时器的定时时间,滴答定时器的时间周期为0.5us ,程序处理后变成1s定时周期:; C& z% B1 V) j
3.jpg
' u2 Q5 s4 a0 z  p9 T  S! Q' _( `+ E, v5 B; `5 l

8 v6 ^( w; N% R* W监控电机运行的图片:0 H. I5 a0 E, Q; G, T5 I
4.png
+ G9 L6 n& ]2 q 5.png & W9 g# `( L9 q: e; ]
! i) n& n# K: m) i
0 Q6 |) Y9 }/ }1 B1 O! r1 y

( E+ N* X" r( q) `

. l( ^3 n; g- \1 a# z3 h) \: b+ K/ t) n/ V0 J7 N+ Z0 G
' L" M1 u% t8 J* w5 C0 k* r4 `
2 d% l  r& Y" J/ R( c" t" C1 y
+ r9 U0 n( Q1 K5 Q2 D* P
4 P+ F3 |  W9 i* u4 o* q
, M. `! z9 H4 ~& p3 m5 u( t
5 I& s, `- u: o, n9 }1 ]/ J# |; H* i" {

% y. \6 }2 ]$ L) j/ X) s7 R1 i* h! Q) q/ z# z& p0 P3 ~+ j/ z
6 k/ D/ t% C7 K! _
     # [7 z# k! B/ I. W& D  U# k# Y

& f7 n; g- s' n+ ]* y
赞 收藏 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
6 R8 P2 b0 I4 c( C* Q向大神学习,思路不错。
, C$ N" P* w3 J
共同学习
wolfgang 回答时间:2018-8-31 16:00:08
按照此想法,还有其他方法观察嘀嗒计时器的方法~~
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版