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

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

[复制链接]
STMCU小助手 发布时间:2021-7-14 15:01
驱动电机运动% v  n* w3 k) [3 h$ D: [
软件:Keil5. c. w! p* b( W" J
设备:步进电机(17HS4401)、驱动器、单片机(STM32F103)
5 P! w: e! x1 {. z3 G9 i
2 q$ ~; }# ]4 \: ~) p* G# m* g* Q
' ~. m; Y% E* r% ]/ ^
接线方式:
& W! i* v5 \0 ?; p# L( J  e
" R6 h% C" n( F/ ^8 c/ G

2 q" D; B( a+ q0 G* j) V* ]2 e电机与驱动器:黑A+,绿A-,红B+,蓝B-
" G2 L& y: O7 ~* d  J& \驱动器与单片机:MF-PC8,DR-PC9,PU-PB5,COM-3.3V
# g, }6 n$ i3 `2 L4 J4 |main.c:(注解部分为此次用不上的程序)' P) i6 E9 V8 j
  1. <font face="微软雅黑" size="3">#include "led.h"
    3 a# V8 W1 x5 r' {; ?1 W7 h
  2. #include "delay.h"
    . e6 e! U2 s: R8 o0 k! a
  3. #include "key.h"- ?" Y+ D9 H4 X/ p& }6 \; }
  4. #include "sys.h"
    $ B; l( p1 P2 t0 z2 @7 z
  5. #include "usart.h"- d  s4 Y! V# x( ?
  6. #include "timer.h"9 ~& G: V& I0 y- S
  7. #include "foot_definition.h"* w0 K# L) m; \8 T

  8. ( Y# W! p) k6 x% p8 c9 W0 \
  9. int main(void): ~9 O( n5 q' ~6 c' I: K
  10. {6 t* _# C; \7 I# h  r. a! |
  11.         TIM3_PWM_Init(99,99);7 ?" g0 u2 d& k' F9 ^
  12.     PC89_Init();  s; s0 O' V& `1 B" q$ F! I" r
  13.         //uart1_init(115200);//PA9  PA10
    7 a- \, a5 \9 U0 {( v' O: m& b
  14.         //uart2_init(115200);//PA2  PA3
    $ A, G" G- `- L) ]
  15.         //uart3_init(115200);//PB10 PB11$ D( j3 p( t( S: G  l! r. D' Q+ t
  16.         delay_init();
    7 w  Y: U+ O6 [% {$ w" ]
  17.     //KEY_Init();         9 p* R. w+ g) h! }9 r* l' n
  18.         LED_Init();( K+ Q1 ?: r8 C
  19.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    * o+ G4 f3 e( l' N
  20. $ F0 u, d% ^9 l- m, K
  21.         while (1)+ q# ~8 a# Y7 _/ Q4 L
  22.         { $ {& S# l* r1 `. U8 F! m, b0 Z8 n
  23.             GPIO_SetBits(GPIOC,GPIO_Pin_9);
    2 ^/ `) e1 |, l5 J2 r% b. j* Z
  24.         GPIO_SetBits(GPIOC,GPIO_Pin_8);
    ' H% R- I' {) V) ]
  25.             TIM_Cmd(TIM3, ENABLE);                                
    + X; m- R7 r1 H# m$ F; N
  26.             LED1=!LED1;  Z4 d0 b1 C- d
  27.         }
    ) X. T5 n0 p  L$ A1 L
  28. }
    , {3 y  c2 F% ^* i1 I; O# e
  29. </font>
复制代码
time.c:
* C0 E! ]5 J# K( c, p
  1. <font face="微软雅黑" size="3">#include "timer.h"6 R* u: t9 D& P. G1 ]
  2. #include "led.h"
    ! j7 ?- `# \$ K/ T4 v9 D' F
  3. #include "usart.h"
    ; h5 t, V& h1 K& z8 m" P( f+ Z

  4. , Y6 _, j6 E. ?
  5. void TIM3_PWM_Init(u16 arr,u16 psc)
    / N0 t- T5 M  _$ V* }" N4 A; ~
  6. {  ' `& S+ d' f3 V( ~  \) D2 ]4 ?3 J
  7.         GPIO_InitTypeDef GPIO_InitStructure;
    9 S' A+ L  u" l1 _- n% ^! e
  8.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;8 [, n* H0 T! S  k; x# E
  9.         TIM_OCInitTypeDef  TIM_OCInitStructure;8 z5 W, O# A( n2 M2 A& H) w
  10.         7 Y* i2 G9 ]/ h; I& Q
  11. ; M) K% _, H& I8 u
  12.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);( a- k# l) V, w& h% p! D6 I
  13.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO, ENABLE);  5 }0 ?7 q' C- P6 n
  14.         2 c, ~8 L% V3 D/ |/ q9 O5 f
  15.         GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);   
    # m3 H* h0 _  M! \

  16. * h; F8 k' C1 j, D
  17.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; % q+ @* Y: Y' E+ Q2 s
  18.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  / ~3 r( i) ]( U
  19.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;7 P" y9 b3 ~5 [3 U! X9 g
  20.         GPIO_Init(GPIOB, &GPIO_InitStructure);  s4 H& t  ?0 t8 O1 M* S

  21. 0 O8 F/ Q% C/ h' Z& M5 u: F
  22.         TIM_TimeBaseStructure.TIM_Period = arr;
    " H3 w# k: \  @. q- g9 H
  23.         TIM_TimeBaseStructure.TIM_Prescaler =psc;
    8 b& y7 H- U- s# c7 t4 _8 y
  24.         TIM_TimeBaseStructure.TIM_ClockDivision = 0;
    0 _* i: }( {- F9 @3 C1 T
  25.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;. y1 T' E5 I0 k7 ^& K# b- k
  26.         TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);7 K. N3 {  B1 I! i$ j$ X& J7 |7 b
  27.         & |( M8 m. h4 w0 F! d4 I* m6 U
  28.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; , E  a( z% V* b$ Y  }
  29.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;; J* a. S8 f+ ?/ T
  30.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; : N  i4 t# f$ {- m% d/ {
  31.         TIM_OCInitStructure.TIM_Pulse=arr;  
    $ x9 r$ b5 B/ X7 S" k
  32.         TIM_OC2Init(TIM3, &TIM_OCInitStructure);
    5 |9 P5 x2 s- w1 Q
  33. ' ~. |: B& v1 x  C2 i
  34.         TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
    - |( d" o) m* B, n
  35. 0 F& ?. {. x' [; R7 c
  36.         TIM_Cmd(TIM3, DISABLE);  $ a6 Y1 l6 r( l9 B- p: ^
  37. }</font>
复制代码
time.h:
" w, @$ e( Y9 F" s8 J; |' a
  1. <font face="微软雅黑" size="3">#ifndef __TIMER_H
    3 z+ _' q# a" S- u
  2. #define __TIMER_H
    6 p) B( Y9 k" B& {
  3. #include "sys.h"
    3 Z7 x- }8 d+ Q1 d% f
  4. - ]5 d( ^1 j- _
  5. void TIM3_PWM_Init(u16 arr,u16 psc);</font>
复制代码
foot_definition.c名字随意取得,用以存放调用串口的程序). Z+ y8 Y2 ]4 x9 Z  T: _7 @
  1. <font face="微软雅黑" size="3">#include "foot_definition.h"
    7 {* d9 U& p# x2 s* s
  2. #include "stm32f10x_it.h"
    % v" z& J& b# E( J2 Z: d: k- z* V
  3. #include "delay.h"/ q5 k0 o! {- Z# V+ H3 X/ P6 a( a) [0 [, X
  4. ( G3 c# _. @$ T4 b5 b$ K
  5. void PC89_Init(void) //
    % B, X3 m/ q( G  a' n/ f' g4 G/ G
  6. {7 L6 k) N7 \# F4 U; v  h& B' \2 T5 k

  7. ) N" t: W! j9 q% R0 p' P
  8. GPIO_InitTypeDef  GPIO_InitStructure;' [' d1 s, l4 n/ O& V! M: k3 D
  9.        
    % n; F/ _' A# a7 [3 P
  10.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);         ( N6 ~3 h8 g) f+ M
  11.        
    % O. Q$ q8 |; e0 ?5 y% X
  12.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9;                               
    / F2 f; A* i% A. G* S3 s( [
  13.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    : N" h# D  f' `7 B* P6 \
  14.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    $ W6 v' t3 m7 q% Q
  15.         6 ]/ Q! u/ u$ M8 A/ T( E, Z
  16.   GPIO_Init(GPIOC, &GPIO_InitStructure);
    + H6 J, T) _  p' d
  17.         GPIO_ResetBits(GPIOC,GPIO_Pin_8);    //MF
    5 j1 q; N' t% [
  18.         GPIO_ResetBits(GPIOC,GPIO_Pin_9);      //DIR: U0 x: M( E2 q  [% b5 O1 |
  19. }</font>
复制代码
foot_definition.h:
; J- V) k+ M2 y7 B" d. _
  1. <font face="微软雅黑" size="3">#ifndef _FOOT_DEFINITION_H. H0 T$ n/ F5 l( ^
  2. #define _FOOT_DEFINITION_H
    8 J6 i7 o1 a3 P, }$ B& l! w. }

  3. 3 S6 T; c* X: `! u5 C* T
  4. void PC89_Init(void);</font>
复制代码
可以通过修改 TIM3_PWM_Init(99,99) 括号中的两个参数来改变PWM脉冲发送的频率,以达到控制电机转速的目的。3 }5 B( @3 ^4 F. Y1 |

- a$ s3 B: u  n) @+ }1 s
收藏 评论0 发布时间:2021-7-14 15:01

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版