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

STM32电机TB6612驱动

[复制链接]
STMCU小助手 发布时间:2022-8-21 17:00
一. TB6612驱动9 w* `. n% k: l! Q
下图就是TB6612模块的详细原理图,这里只对如何使用进行讲解,不讲解其内部原理
4 E7 D) B2 U7 q( Q* x9 @
  E  @1 H' n6 H, K6 D 0a685e904e7d4316a72fb58925994d9f.png 3 L' L$ Q) c/ Q' I! S7 j+ J
6 G7 ^2 Q+ b- [1 P3 s
1.可以同时驱动两个电机AB.2.PWMA/PWMB为两个电机提供pwm脉冲。
3 D0 e/ }3 O3 P! |6 Z3.AIN1/AIN2,BIN1/BIN2.控制电机的正反转和停止。% _1 E: E: q+ i1 r+ V
ZT_9J]}TXU2BWW3JD3FXU)R.png + L* ^' R& Q8 B; V  N1 T
# y; B" z8 Q8 B6 F
1 f5 F. u  {& s) B5 J
4.STBY可以理解为一个使能端口,高电平有效。. A1 g. L. ~7 z) Z: F) `
使用方法为 : STBY高电平,提供pwm脉冲,设置A/BIN控制正反转。
3 n0 x) R  \6 X7 J9 `- ~& S2 C; K( o. M" m6 d7 Q
二. stm32代码实现% L$ y9 a* Z( v/ n2 k1 Z0 _
1. 产生pwm脉冲
, F0 G, r* U! `可以通过定时器产生,通过定时器可以产生四路pwm信号,然后通过设置CCR的值来控制占空比以控制速度的大小(和呼吸灯差不多)。7 i4 C7 P% L: h$ v- `0 L
, N% u' z$ d# e( h9 B9 e
  1. GPIO_InitTypeDef        GPIO_initStructure; //输出pwm端口的GPIO初始化3 \1 U6 t& M; l. L
  2. TIM_TimeBaseInitTypeDef        TIM_TimeBase_InitStructure; //设置TIM定时器的相关参数,进行初始化9 U3 `7 Z2 u, q- G% G5 ^& e
  3. TIM_OCInitTypeDef        TIM_OCInitStructure; //但是定时器通道信息
复制代码

& e$ o2 S# H1 M0 {" X* S* i' C! ~2. 初始化其他端口( p: z- T6 r; _& w3 r; n- m
剩下的端口就是普通的GPIO端口了,只需要对其进行初始化就可以了。
* z9 i! @3 D; p) ^然后对TIM->CCR进行赋值就可以控制电机的速度了。
( F7 Y# D& ?- O$ A/ s) U
6 X, W3 D( y$ I( t: v复用,JTAG失能等等这些根据具体的原理图来添加。8 i* X9 ]/ Z9 L/ p, n& g  ?: o

5 J9 ]6 [4 `, n3 ^/ a完整代码
5 h( R9 u4 u5 _6 C8 Z, v7 }% H( D0 s5 @4 U* _4 A) C7 [
  1. void pwm_init(void)% W, z% j6 a* P
  2. {! s- ]' p/ i1 N9 f8 v: h
  3.         GPIO_InitTypeDef        GPIO_initStructure;
    $ B% X  i7 Z7 Q" m% @' J3 y1 ]% d
  4.         TIM_TimeBaseInitTypeDef        TIM_TimeBase_InitStructure;
    ) ?7 r3 v; L5 ]: k. e
  5.         TIM_OCInitTypeDef        TIM_OCInitStructure;
    # ~. ?/ f3 ]2 h6 W# ]
  6.         / I/ a+ @2 s1 N' K- l
  7.         
    5 t3 E5 }: a0 s% o& q2 [
  8.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE);$ J4 y$ v& L( f
  9.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
    ( G% ^+ k/ _1 @+ G, |' u
  10.         * q9 l; }* M* k& f" g
  11.         + e5 D/ d* }3 v# ^% \* D* U1 H- U
  12.         GPIO_initStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
    1 l2 ~* c. }6 w
  13.         GPIO_initStructure.GPIO_Mode = GPIO_Mode_AF_PP;& x, c+ p- {  F
  14.         GPIO_initStructure.GPIO_Speed = GPIO_Speed_50MHz;
    / ~% e9 T* H: V& x, ?) a' t
  15.           n$ t, q6 }1 C& {+ b) _/ \: |3 l
  16.         GPIO_Init(GPIOA,&GPIO_initStructure);
    . d+ C  w1 \1 P
  17.         
    + s- D& Q' I( X; \) R# ~
  18.         
    - }  J6 T; X+ j0 h) h5 g8 v
  19.         TIM_TimeBase_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    + C* J$ R. \4 q
  20.         TIM_TimeBase_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;( J! V9 H# r$ Q
  21.         TIM_TimeBase_InitStructure.TIM_Period = 7200-1;
    $ {" D; S' w# u$ n4 G" {' _, t
  22.         TIM_TimeBase_InitStructure.TIM_Prescaler = 0;  P9 s- Z2 C7 S2 e8 x
  23.         
    9 R6 g5 P: n9 P
  24.         TIM_TimeBaseInit(TIM2,&TIM_TimeBase_InitStructure);
    & U, w% f" I% X, h: t
  25.         
    ) }$ ^6 o4 n1 }) Q$ ^* Q
  26.         
    ; j+ b% s6 Q3 ^- B2 e+ i" a
  27.         TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;  D* O. b2 s( G3 F* e
  28.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
    9 k& V: b( h- j* N9 h/ E: v$ ~* R
  29.         TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;4 e" s6 U6 F/ d
  30.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;9 i4 r% c6 b' F  d' P- w3 O8 b
  31.         TIM_OCInitStructure.TIM_Pulse = 0;
    1 U2 _' b0 P* D1 K  G1 |. Z
  32.         
    $ @5 j; C0 Q1 K2 P+ J
  33.         TIM_OC1Init(TIM2,&TIM_OCInitStructure);, a' Y5 h: h# N- Z% }( O
  34.         TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Enable);: G& S* g" F& |7 H
  35.         
    % F( |  g* C# r* ?! N
  36.         TIM_OC2Init(TIM2,&TIM_OCInitStructure);* F3 ^" L* p4 y( X/ e& b
  37.         TIM_OC2PreloadConfig(TIM2,TIM_OCPreload_Enable);6 A) i. f  z* W3 r( h
  38.         
    $ M$ M" @. k( C. i% [% q2 O
  39.         TIM_ARRPreloadConfig(TIM2,ENABLE);
    9 r9 c/ i1 `2 [( |5 L4 l" e# W
  40.         TIM_Cmd(TIM2,ENABLE);. j& a. A+ m' w0 o+ M, q0 F' E& a. ^
  41.         
    ) A# m% T5 x4 e; l
  42.         
    ( O* d6 Q1 m; s6 A% }6 b$ i! T
  43.         TIM2->CCR1 = 0;+ l; `! c0 W1 N, T6 X5 X  l
  44.         TIM2->CCR2 = 0;
    9 e$ g, J( ]/ W* A+ c2 ~# f) ]( Y: T
  45.         
    ( i* {. W5 q! W9 X1 ]
  46. }/ m' z3 x8 d$ P& [  H) O; G

  47. 8 J- x+ E1 z# w* k4 R2 ?) y- P
  48. + V4 ?5 [1 v; {/ L! d
  49. 8 d  Q: o$ {0 ]$ G1 b* s
  50. void driver_pin_init(void)
    * m5 r2 D% S8 p* u7 O2 X- q
  51. {' t, I8 l7 S# y/ J" {" g  p
  52.         GPIO_InitTypeDef        GPIO_initStructure;
    ) p, G, i8 t4 T% b' _$ k; v1 t
  53.         , U% l4 L% l0 q( M, Y! k
  54.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB,ENABLE);/ p6 u( A; t5 H! v$ h9 j* K
  55.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);$ {+ y7 l" T$ @/ t4 e: x! k
  56.         GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);! g! R8 L1 e& j+ [0 N
  57.         
    - P/ P" P1 ]0 O
  58.         GPIO_initStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    : @# A: f2 t, l! P4 Z
  59.         GPIO_initStructure.GPIO_Speed = GPIO_Speed_50MHz;
    6 v, W3 w0 r. O: l
  60.         GPIO_initStructure.GPIO_Pin = AIN1_pin | AIN2_pin;; d1 {/ c8 \' m2 @0 I
  61.         
    9 b. k+ r2 p4 N4 Q- T2 P
  62.         GPIO_Init(GPIOA,&GPIO_initStructure);
    ! `& ?2 Q9 S+ X5 r% k% w6 ~+ d5 A
  63.         8 R( ?0 G4 D1 R1 ~1 r" C$ U, Y' r
  64.                 5 ^) `% ]: x/ Z$ {% D; X. x
  65.         GPIO_initStructure.GPIO_Mode = GPIO_Mode_Out_PP;4 h+ L% h- [) j4 a. G( D! _
  66.         GPIO_initStructure.GPIO_Speed = GPIO_Speed_50MHz;
    ! c& c8 `7 n: Z: e6 x
  67.         GPIO_initStructure.GPIO_Pin = BIN1_pin | BIN2_pin;
    + i( u+ }9 m3 G0 M$ L4 {
  68.         
    8 f( s) e) G# d+ f% y" _
  69.         GPIO_Init(GPIOB,&GPIO_initStructure);- [" Q/ i9 K4 Y) R3 ~+ P/ i& h1 z# q' D
  70.         $ o- y: }8 ^7 [/ Z& ]# L3 B: t! o
  71.         
    ! [1 {0 b, ?0 v' ~' n/ ~
  72.         GPIO_initStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    ! {2 P: |- _! S: }- k5 F+ F
  73.         GPIO_initStructure.GPIO_Speed = GPIO_Speed_50MHz;( y2 d3 S" u% ?8 F0 M& g! ^
  74.         GPIO_initStructure.GPIO_Pin = STBY_pin;
    ) i) P7 g/ n3 |1 [& v! c& w' K
  75.         4 p2 a; R$ P& x4 n9 X
  76.         GPIO_Init(STBY_port,&GPIO_initStructure);. R1 ^2 W, n" K. ]( x1 H! k9 J* s
  77. ; K- c, k7 C* v0 [3 o% o' q/ x5 \
  78.         
    ( D2 j6 E  _4 @& C# I& U
  79.         STBY_HIGH;! [: Z, F( F. \2 u8 a/ _9 r; G
  80.         
    : o9 @0 y* _; q# [4 c, w6 O) E! L
  81.         AIN1_HIGH;
    8 ^7 }  ^; D% `* E8 w
  82.         AIN2_Low;
    ' W3 T  ~/ ?3 W6 A9 v- V
  83.         
    5 S) W6 y6 a" J$ d4 ?" p2 J$ }
  84.         
    $ W, y/ l, w) T8 k
  85.         BIN1_HIGH;
    # p$ W8 V+ f4 W( x6 c2 w
  86.         BIN2_Low;2 [3 A* ]3 g  R
  87.         
    ; @6 S* p/ }6 T& d! D" A
  88. }- r9 K0 b. g9 U/ k$ d. }
复制代码
9 m; y/ k& U& a# e
$ {9 S, p2 Z; F& g! L

, r4 x; p  _  z9 H$ ?! w0 t" d7 j- ]+ `- V# r
  l' M$ Q9 A5 F2 q3 ^
赞 收藏 评论0 发布时间:2022-8-21 17:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版