当前位置:   article > 正文

STM32用TB6612驱动电机(智能家居系列二)_tb6612怎么接线

tb6612怎么接线

        本篇文章主要讲解主控板为STM32,利用TB6612驱动来驱动电机的整个流程,看完点个赞吧!

        一、TB6612接线

PWMA---连接代码中的PB0口                                   VM------接10V以内电压

AIN2-----接代码中的PB3口                                       VCC-----接5V

AIN1-----接代码中的P7口                                         GND-----接地

STBY----连接5V                                                        A01-----连接电机1

BIN1---  接单片机I/O                                                 A02-----连接电机1

BIN2---- 接单片机I/O                                                B2------连接电机2

PWMB---接单片机PWM口                                       B1------连接电机2

GND-----接地                                                            GND----接地
 

        代码我们先放后面来讲吧,我们这里先讲如何接线的,我使用的是STM32C8T6,原理图具体看这个专栏的上一篇博客 《智能家居系列一》,这里不再附图啦。

          首先呢整个驱动需要接的口(对我使用的而言)是:PWMA ,AIN1,AIN2,STBY,VM ,VCC,A01, A02,三个GND(要与单片机共地!)

        我只使用了一个电机,所以咱们的PWA口直接接到单片机的随便一个PWM口就行,我接的是PB0口,也就是TIM3,CH3 定时器3通道3。然后AIN1,AIN2,这两个口是控制正反转的,随便接单片机的I/O口,然后进行初始化就行了,STBY口直接接5V口(STBY是使能,高电平电机才能转,低电平电机是不会转的,所以直接接电压即可),最后A01和A02接电机的两根正负线即可,接电机的正负无所谓,别把单片机接错就行啦!(如果要使用第二个电机,PWMB接PWM口,其他的照抄,只是序号变了)

        这是我使用的驱动

        然后我们看一下真值表,方便大家控制正反转

        二、STM32代码部分

MOTOR.C

  1. #include "stm32f10x.h"
  2. #include "MOTOR.h"
  3. #include "sys.h"
  4. #include "delay.h"
  5. void Motor_AIN(void)
  6. {
  7. GPIO_InitTypeDef GPIO_InitStructure;
  8. RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);
  9. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_7;
  10. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  11. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  12. GPIO_Init(GPIOB, &GPIO_InitStructure);
  13. GPIO_ResetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_7);
  14. }
  15. void Motor_ZHENG(void) //风扇正转
  16. {
  17. GPIO_SetBits(GPIOB,GPIO_Pin_7);
  18. GPIO_ResetBits(GPIOB,GPIO_Pin_3);
  19. }
  20. void Motor_OFF(void) //风扇停止
  21. {
  22. GPIO_ResetBits(GPIOB,GPIO_Pin_3);
  23. GPIO_ResetBits(GPIOB,GPIO_Pin_7);
  24. }

MOTOR.h

  1. #ifndef __MOTOR_H
  2. #define __MOTOR_H
  3. #include "sys.h"
  4. void Motor_AIN(void);
  5. void Motor_ZHENG(void);
  6. void Motor_OFF(void);
  7. #endif

time.c

  1. #include "stm32f10x.h"
  2. #include "stdlib.h"
  3. #include "stm32f10x_tim.h"
  4. #include "led.h"
  5. #include "myiic.h"
  6. #include "key.h"
  7. #include "delay.h"
  8. #include "usart.h"
  9. #include "time.h"
  10. int pwm_L,pwm_R,change_pwm,eco_counter;
  11. float get_ang,now_ang;
  12. u8 place_flag,choose_num1=0,choose_num2=0,cargo_num,stop_flag,go_where,Return_stopflag;
  13. u8 MOD1=0,MOD2=0,MOD3=0,MOD4=0;
  14. void TIM3_PWM_Init(u16 arr,u16 psc)///pwm
  15. {
  16. GPIO_InitTypeDef GPIO_InitStrue;
  17. TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  18. TIM_OCInitTypeDef TIM_OCInitStructure;
  19. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
  20. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
  21. GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP;
  22. GPIO_InitStrue.GPIO_Pin=GPIO_Pin_0;//PB0->CH3
  23. GPIO_InitStrue.GPIO_Speed=GPIO_Speed_50MHz;
  24. GPIO_Init(GPIOB,&GPIO_InitStrue);
  25. TIM_TimeBaseStructure.TIM_Period = arr;
  26. TIM_TimeBaseStructure.TIM_Prescaler =psc;
  27. TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  28. TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  29. TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
  30. TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;
  31. TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low ;
  32. TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
  33. TIM_OC3Init(TIM3,&TIM_OCInitStructure);
  34. TIM_OC4Init(TIM3,&TIM_OCInitStructure);
  35. TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);
  36. TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);
  37. TIM_Cmd(TIM3,ENABLE);
  38. }

time.h

  1. #ifndef __TIME_H
  2. #define __TIME_H
  3. #include "sys.h"
  4. extern int pwm_L,pwm_R,change_pwm;
  5. extern float get_ang,now_ang;
  6. extern u8 place_flag,choose_num1,choose_num2,cargo_num,MOD1,MOD2,MOD3,MOD4,stop_flag,go_where,Return_stopflag,go_where;
  7. void Encoder_Init_TIM3(void);
  8. int ReadLeft_Encoder(void);
  9. int ReadRight_Encoder(void);
  10. void TIM1_PWM_Init(u16 arr,u16 psc);
  11. void TIM4_PWM_Init(u16 arr,u16 psc);
  12. void TIM3_PWM_Init(u16 arr,u16 psc);
  13. #endif

mian.c

  1. #include "led.h"
  2. #include "delay.h"
  3. #include "key.h"
  4. #include "sys.h"
  5. #include "usart.h"
  6. #include "time.h"
  7. #include "myiic.h"
  8. #include "oled.h"
  9. #include "beep.h"
  10. #include "SR602.h"
  11. #include "dht11.h"
  12. #include "MOTOR.h"
  13. int i=0;
  14. u8 string[30] = {0},string1[30] = {0};
  15. int main(void)
  16. {
  17. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先
  18. delay_init();//延时函数初始化
  19. TIM3_PWM_Init(999,71);//定时器3初始化
  20. Motor_AIN();//风扇I/O初始化
  21. while(1)
  22. {
  23. Motor_ZHENG();
  24. TIM_SetCompare3(TIM3,1000);//设置占空比
  25. }
  26. }

把这些代码加到工程里面去,电机就能转动啦,有问题欢迎大家评论区提问,谢谢大家的阅读。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/426663
推荐阅读
相关标签
  

闽ICP备14008679号