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

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

[复制链接]
STMCU小助手 发布时间:2021-7-14 15:01
驱动电机运动1 o1 T2 `* F0 r6 v5 T* A9 x
软件:Keil5& j: |/ n, G0 d5 w! D' u0 E
设备:步进电机(17HS4401)、驱动器、单片机(STM32F103)! j/ t( Q: V0 F1 i6 X! n7 X

9 i. C. F9 z9 g( R# q3 f! y2 v0 h5 p
, o+ Z7 t1 Z4 n8 j5 ?! W( z2 K# D
接线方式:
" d6 d. [6 Z9 C# K* K
& R0 ?: @+ k  x) Y6 W

7 I2 n* t6 O! o# Y$ [% n" N! {电机与驱动器:黑A+,绿A-,红B+,蓝B-
+ a% z4 a) R( j" r驱动器与单片机:MF-PC8,DR-PC9,PU-PB5,COM-3.3V: V3 w3 R) q2 E. i1 o/ B
main.c:(注解部分为此次用不上的程序)
# r: i; l5 J3 I2 S5 v
  1. <font face="微软雅黑" size="3">#include "led.h"4 q% z  g, O8 M" b1 C, f
  2. #include "delay.h"
    8 I1 @# a1 f7 S9 x
  3. #include "key.h"( L: J0 \/ y& }) x
  4. #include "sys.h"
    * X- }- v3 W& D/ U7 P/ i% j
  5. #include "usart.h"
    % e# H" X4 _. N+ w2 g  Q
  6. #include "timer.h"
    & N& v; M* i4 @& r  q" z
  7. #include "foot_definition.h") R: l7 }) ?5 U; B8 l; z) ]
  8. * {/ C  X- F/ x* \9 M. M2 m
  9. int main(void)
    - N6 P) h6 N4 x! Q
  10. {5 g9 U0 X  W# g0 E! H9 ?9 X2 s( D) y4 [
  11.         TIM3_PWM_Init(99,99);
    & @; E# V5 h! V5 H
  12.     PC89_Init();
    ' T  l; ]2 E+ E" }3 {2 g* }
  13.         //uart1_init(115200);//PA9  PA10 , j. E' e3 P" t
  14.         //uart2_init(115200);//PA2  PA3* X' K1 M1 v  g& X, o) f
  15.         //uart3_init(115200);//PB10 PB11
    + p' T+ |$ a4 w, r6 r/ f
  16.         delay_init();' i8 z9 m3 u. c: u. x
  17.     //KEY_Init();         
    & X$ F! l* n9 e! F# {, ]# c
  18.         LED_Init();
    7 A0 r, a( u6 C
  19.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);) M* O+ C0 X/ M
  20. : [: G: |* J. H2 Y5 n
  21.         while (1)( g" D  e- d9 F$ q# _7 O
  22.         {
    + |% `( C& B0 {" f4 W8 X* S
  23.             GPIO_SetBits(GPIOC,GPIO_Pin_9); ) A5 y/ U' \- h( ?$ r6 O
  24.         GPIO_SetBits(GPIOC,GPIO_Pin_8);
    , ]6 v2 }" D1 {+ S' \0 C
  25.             TIM_Cmd(TIM3, ENABLE);                                
    * f  J" l8 {( t+ H/ @
  26.             LED1=!LED1;
    , \  a; [! O+ H$ l2 X% ~
  27.         }
    ( D' `) r  N3 }1 R
  28. }, Z9 f( d2 M$ `
  29. </font>
复制代码
time.c:' d2 m7 o/ p; o# d1 ^
  1. <font face="微软雅黑" size="3">#include "timer.h"
    7 U. b! T$ B$ h3 N+ s" D5 V7 ~5 ]
  2. #include "led.h"
    # D, M, i5 U$ w
  3. #include "usart.h"/ ]  s. Y( T# x
  4. / Q2 {6 R" v8 v% t2 N+ g8 T: ~
  5. void TIM3_PWM_Init(u16 arr,u16 psc)0 }: @1 [1 ~+ y6 _7 G
  6. {  
    4 \' N2 F) b; R6 G4 b% y
  7.         GPIO_InitTypeDef GPIO_InitStructure;9 m! t4 ?1 V5 N/ e2 @
  8.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    % g3 B2 Z" m+ s; i3 R
  9.         TIM_OCInitTypeDef  TIM_OCInitStructure;- g6 T  J* v$ c* E9 W
  10.        
    % k8 t) P5 q. g7 R

  11. 3 U$ K+ @9 E+ [7 A7 s; C$ U
  12.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);* l# Y+ h- u. w" J2 B4 y5 n
  13.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO, ENABLE);  
    , c! s3 H! N  H. ~6 J
  14.         ( Q, r9 D% Z9 r, o
  15.         GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);    . N  c3 R" z& ]* G9 x: i+ U, V7 y
  16. 9 o, ?9 L4 b3 @& E4 z
  17.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
    $ H. @- W; i/ f- w
  18.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  
    3 G  g0 `0 p+ P4 G! K5 |' y* `
  19.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;0 j) Q+ s. N% @4 B* m* |0 z
  20.         GPIO_Init(GPIOB, &GPIO_InitStructure);; V2 p$ \4 t0 `
  21. + M" x9 s* R' t8 P5 y) W
  22.         TIM_TimeBaseStructure.TIM_Period = arr; + g# a  \- C- s  L
  23.         TIM_TimeBaseStructure.TIM_Prescaler =psc; % \  Q" L4 }7 a' ]# m; P& }/ b
  24.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; + q. t* O+ w; b) ^
  25.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;/ B4 E7 U6 r6 R) _  M* i6 u- W
  26.         TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);. W  V: [  k' v1 y
  27.         + E: l0 A( ?9 Q7 T
  28.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; 3 Y- w- i5 w8 ]
  29.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;- O! D9 _$ j/ v- Q! {: `) o
  30.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    , B  p; W+ K7 q4 F: Z( D! ]
  31.         TIM_OCInitStructure.TIM_Pulse=arr;  
    ( Z: Z# K, i/ S9 \
  32.         TIM_OC2Init(TIM3, &TIM_OCInitStructure);
    - F  y3 c( j7 c& J# \! B) f

  33. # k" @# B. H# z+ C) I
  34.         TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
    - ]. ?5 v1 j: W; P6 n9 f

  35. 0 Q9 U. p7 z! z1 n
  36.         TIM_Cmd(TIM3, DISABLE);  / k0 `9 P" A4 P2 y7 W
  37. }</font>
复制代码
time.h:5 G! j4 B/ U" R
  1. <font face="微软雅黑" size="3">#ifndef __TIMER_H; l- w  a3 I* l3 C: B! @
  2. #define __TIMER_H
    7 {1 l. I& }" M
  3. #include "sys.h"
    - r) C4 A9 H0 Y8 k6 y% X& r
  4. 4 R  C4 H* g$ j- f5 Q9 K4 {
  5. void TIM3_PWM_Init(u16 arr,u16 psc);</font>
复制代码
foot_definition.c名字随意取得,用以存放调用串口的程序)
, a4 N9 V0 x2 n( g) R$ W5 C: D
  1. <font face="微软雅黑" size="3">#include "foot_definition.h"
    & ]* u$ W% K9 U0 z
  2. #include "stm32f10x_it.h"
    6 w. a5 K1 P- f4 ]; c9 O! D" |  S- A
  3. #include "delay.h"
    ! G0 r- T2 u  j' {6 q/ V& ]. e

  4. 6 a9 a5 o' _0 |5 S* B6 @2 D+ L
  5. void PC89_Init(void) //
    9 e7 ]/ n: s( G+ C0 \* e- w
  6. {
    ; @! L4 d+ S0 a4 _, Z% w: C1 l; V% Y, x
  7. & ?  l6 f2 D2 P! N2 O7 k2 G2 Z
  8. GPIO_InitTypeDef  GPIO_InitStructure;3 K3 g( o3 h& Q8 v8 r3 Z! B
  9.        
    ; ?8 I9 t4 q9 t
  10.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);         " a7 p( H$ w# Q! S
  11.         ) U4 v1 b6 L  ?/ C" M
  12.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9;                                # y2 I. N; K. g- C
  13.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;& t6 z/ Z3 h( F; A7 e+ R
  14.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;1 z  g  z6 [0 O7 Q( I
  15.         " J5 }/ ?. t2 h" ?1 K, N3 Y
  16.   GPIO_Init(GPIOC, &GPIO_InitStructure);( L2 R  j$ B, \- D# D2 T
  17.         GPIO_ResetBits(GPIOC,GPIO_Pin_8);    //MF
    4 h+ o0 S4 y% O
  18.         GPIO_ResetBits(GPIOC,GPIO_Pin_9);      //DIR9 V; x) ]  v: T; S0 G# C
  19. }</font>
复制代码
foot_definition.h:* w2 D: ]. C3 _+ E# N1 f3 _, U
  1. <font face="微软雅黑" size="3">#ifndef _FOOT_DEFINITION_H
    ! X( O2 B+ w) j+ @+ V! W3 f
  2. #define _FOOT_DEFINITION_H9 _8 f1 }" g+ _- L7 O

  3. - F  y/ N3 `3 I6 `
  4. void PC89_Init(void);</font>
复制代码
可以通过修改 TIM3_PWM_Init(99,99) 括号中的两个参数来改变PWM脉冲发送的频率,以达到控制电机转速的目的。
/ O9 b  s! K% ~/ }/ f7 z. H6 o; B
* D1 x" R, P" x0 ~
收藏 评论0 发布时间:2021-7-14 15:01

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版