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

STM32单片机驱动步进电机—简单篇

[复制链接]
STMCU小助手 发布时间:2021-7-14 15:01
驱动电机运动0 c& t+ |$ l- f
软件:Keil5
1 f7 r' a7 f$ B. w  X# d设备:步进电机(17HS4401)、驱动器、单片机(STM32F103)
, v9 T' X1 z9 ?" ?- S' c4 O
& J2 n+ A- i* _4 r2 I: V
& X& {5 ?6 q9 m  Z
接线方式:
& \% \) m! b* g( C- a9 x3 z
/ U& h4 ?4 v8 z+ u

4 U+ G, H; K* F电机与驱动器:黑A+,绿A-,红B+,蓝B-; E7 y+ S# U. t5 A4 v
驱动器与单片机:MF-PC8,DR-PC9,PU-PB5,COM-3.3V1 i$ q$ p0 H, v/ P
main.c:(注解部分为此次用不上的程序)) R! C6 s, ]1 [* Y+ R7 B, i2 }; V$ C
  1. <font face="微软雅黑" size="3">#include "led.h"3 X/ d/ \, G0 X
  2. #include "delay.h"
    - P& K- i) R" N$ Q
  3. #include "key.h"
    ! i, i' I1 j5 J
  4. #include "sys.h"3 |. L2 o) V0 b4 k6 K
  5. #include "usart.h"! C% A/ [$ M- w. x) |3 |
  6. #include "timer.h". ]$ ^  s! J# ]- C( `6 J
  7. #include "foot_definition.h"( M1 G4 U4 A: X* d# q4 ^* H3 j

  8. , E) z6 V) t$ f- d. N- W# K
  9. int main(void)
    0 @9 e- w/ ?, b5 W, i% a
  10. {
    : T8 B- @9 i6 W, }  d, p* P
  11.         TIM3_PWM_Init(99,99);
    + B0 R% t- P' p) b: L
  12.     PC89_Init();' O; r. K7 w6 Z9 N- ?1 g/ T
  13.         //uart1_init(115200);//PA9  PA10 ( A1 u1 X* e3 a6 h( [
  14.         //uart2_init(115200);//PA2  PA3
    . d6 a8 ~" ?; q: x5 o) c6 a
  15.         //uart3_init(115200);//PB10 PB11
    ! d& g! ^' q, I- w" R
  16.         delay_init();. Y$ F1 Y* v1 q
  17.     //KEY_Init();         1 Z( s7 D, V/ L5 E3 o
  18.         LED_Init();
    7 M* G/ `7 P0 L) |7 e7 @! c
  19.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);4 ~/ `7 _" `, ?8 L

  20. . G- i) a+ y' K. ]+ J2 i
  21.         while (1)9 l5 D! D' [, i3 k( O9 L
  22.         {
    4 w7 x3 o' ^4 d# G
  23.             GPIO_SetBits(GPIOC,GPIO_Pin_9); % W. T  Z+ W3 o& d) t
  24.         GPIO_SetBits(GPIOC,GPIO_Pin_8);
    7 l3 x- _1 N+ F. `6 ?3 E
  25.             TIM_Cmd(TIM3, ENABLE);                                 * n* ]5 p& ]5 `- |5 }
  26.             LED1=!LED1;
    + H( `. T2 x. A1 N
  27.         }
    6 N3 u" W( D+ B) c0 N) c0 z
  28. }
    7 X2 W! b3 P& l. O! u# b) E* Y
  29. </font>
复制代码
time.c:
0 l9 }. ?0 ?0 Q( {
  1. <font face="微软雅黑" size="3">#include "timer.h"' N0 O3 P# c- ?& c/ u" T
  2. #include "led.h") n) b, M9 K! \: l
  3. #include "usart.h"( Y5 P6 F  N9 o
  4.   ]- b/ |' d5 k" }' B: E
  5. void TIM3_PWM_Init(u16 arr,u16 psc)
    " @' u5 A- \& @1 J
  6. {  
    9 y, h! l+ j4 _8 j0 \7 n
  7.         GPIO_InitTypeDef GPIO_InitStructure;
    " [" ^5 |) U; ~  Q) A
  8.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
      _0 U4 ?% C( q2 F' E2 T
  9.         TIM_OCInitTypeDef  TIM_OCInitStructure;
    0 `9 z: e0 R' z' e$ ^' {7 P  h0 @
  10.         3 z& T9 o$ _2 Z& X

  11. : m1 \5 g7 Z& A* c
  12.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);% N% o  d) O. u$ S
  13.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO, ENABLE);  
    * K2 t7 q4 |! @/ d
  14.        
    1 R9 g# D/ v3 L& j& e
  15.         GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);    ' a2 N) t7 J2 M0 V. n6 h* {

  16. * R$ _5 ^; J4 k! I8 t& [
  17.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
    ) i, m+ c  ^. S* a7 i7 b( n" o; I/ E  P
  18.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  
    # y2 P! N$ S5 `$ b1 z/ ]' _0 z
  19.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    : Z$ R" x( E) ~% a: D
  20.         GPIO_Init(GPIOB, &GPIO_InitStructure);
    ) Y4 g, T2 v$ _3 K9 C

  21. % v3 I  d# c' [( E' K2 m
  22.         TIM_TimeBaseStructure.TIM_Period = arr; $ H/ {, v' Y' u9 t% I. ]# u" ~5 }0 V
  23.         TIM_TimeBaseStructure.TIM_Prescaler =psc; , ]: ?- Q  U3 v3 x$ {% H0 E" K
  24.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; " h+ T. X5 k1 H
  25.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    6 d( w- S1 y7 j# `. r$ F( G: v
  26.         TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
    ; u) [& w" b; X  x/ {  k. [
  27.         6 o' H# _/ v' G$ n& H9 S
  28.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
    2 a% V* p+ L& Q+ w9 E
  29.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    - V/ W2 v1 Y) `7 ?6 v
  30.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    9 S' X5 _1 ?% g; q' O
  31.         TIM_OCInitStructure.TIM_Pulse=arr;  
    8 b+ i" {3 Y) U( a, A) O
  32.         TIM_OC2Init(TIM3, &TIM_OCInitStructure);
    : W1 ^8 Q  C& T+ b* j

  33. 1 X# Q4 o( p% @% `$ F4 Y2 E
  34.         TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); # N+ w* \) X$ s9 x. r' i

  35. 9 V4 z( u- K$ a9 }  Y
  36.         TIM_Cmd(TIM3, DISABLE);  
    0 `7 i& s3 x4 ^
  37. }</font>
复制代码
time.h:. `% N$ {/ z9 m* a/ M; s
  1. <font face="微软雅黑" size="3">#ifndef __TIMER_H9 T% p8 Z3 L) C9 i& S
  2. #define __TIMER_H& V& x! o. D4 R" V' d% G" b6 a
  3. #include "sys.h"3 R) I9 k9 E5 o( [+ S
  4. + H: @" T, E/ o0 X& t: ?* p
  5. void TIM3_PWM_Init(u16 arr,u16 psc);</font>
复制代码
foot_definition.c名字随意取得,用以存放调用串口的程序); S# b6 n& i2 t6 N2 ~# ~
  1. <font face="微软雅黑" size="3">#include "foot_definition.h"- D7 c" b6 Q, H2 A! ~2 ^
  2. #include "stm32f10x_it.h"- c8 {- Y9 N; W! Q2 I
  3. #include "delay.h"
      _' K( X6 C; Y' Q2 L* o

  4. * N, [  ?- r! [; X9 j2 B
  5. void PC89_Init(void) //; w2 B( o, G/ s0 f
  6. {
    " W2 Q" {- i* c2 A: I8 H
  7. ! p9 y: |' ?7 Z* C# A2 ]& K+ j/ e
  8. GPIO_InitTypeDef  GPIO_InitStructure;! O8 i, _' a7 I# i6 u
  9.        
    ; U/ X! I& ^6 ]% I
  10.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);         0 N/ x2 z% h! o8 O1 x
  11.         ) R+ J( d6 F+ G' L
  12.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9;                                1 t& [: J+ U' ]; [% P
  13.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;0 C* @1 U& L1 ~8 k! `
  14.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;. ^3 K+ P% u9 R0 ~( H
  15.        
    ! S( l4 r$ M7 S( c7 J8 t
  16.   GPIO_Init(GPIOC, &GPIO_InitStructure);5 d8 r( H$ F- G5 n5 t
  17.         GPIO_ResetBits(GPIOC,GPIO_Pin_8);    //MF
    & Z/ O% `2 Q' t. v
  18.         GPIO_ResetBits(GPIOC,GPIO_Pin_9);      //DIR
    5 A3 f3 `6 u2 T+ T
  19. }</font>
复制代码
foot_definition.h:
$ G0 x) ]2 V) z% _, j  ^9 m$ s
  1. <font face="微软雅黑" size="3">#ifndef _FOOT_DEFINITION_H
    , x: c0 l. Q) D, G- C3 T( D
  2. #define _FOOT_DEFINITION_H2 J, H) w4 M/ J% C9 u

  3. : K. u  E, n' B4 F9 e$ N9 [% G/ Z
  4. void PC89_Init(void);</font>
复制代码
可以通过修改 TIM3_PWM_Init(99,99) 括号中的两个参数来改变PWM脉冲发送的频率,以达到控制电机转速的目的。
- n7 g$ Y* t9 c2 }7 h! l6 X% p4 {
) w% C6 S% k$ E' X9 q
收藏 评论0 发布时间:2021-7-14 15:01

举报

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