问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

STM32CubeMX配置TB6612FNG电机驱动器实现直流电机控制

创作时间:
作者:
@小白创作中心

STM32CubeMX配置TB6612FNG电机驱动器实现直流电机控制

引用
CSDN
1.
https://blog.csdn.net/weixin_46286415/article/details/135532141

本文将介绍如何使用STM32CubeMX配置TB6612FNG电机驱动器,实现对直流电机的控制。文章将从硬件连接、软件配置和代码实现三个方面进行详细讲解,帮助读者快速掌握电机控制的基本原理和实现方法。

一、TB6612FNG简介

TB6612是一个支持双电机的驱动模块,支持PWM调速。PWMA、AIN1、AIN2 为一组控制引脚,PWMA 为 PWM 速度控制引脚,AIN1、AIN2 为方向控制引脚;PWMB、BIN1、BIN2 为一组控制引脚,PWMB 为 PWM 速度控制引脚,BIN1、BIN2 为方向控制引脚。

硬件连接如下:

PA4 --> BIN1
PA5 --> BIN2
PA6 --> AIN2
PA7 --> AIN1
TIM2_CH2(PA1) --> PWMA
TIM2_CH3(PA2) --> PWMB  

驱动电机的 PWM 频率一般 10kHz(0.0001ms)左右,72MHZ/72/100=72000000/7200=10000HZ=10KHZ

二、CubeMX配置

  1. SYS配置

  2. RCC配置

  3. 时钟树配置

  4. GPIO配置

  5. 定时器配置

  6. 生成工程

  7. 生成代码

三、Keil代码实现

在Keil中添加PWM电机驱动代码:

/* USER CODE BEGIN 0 */
void motorControlL(uint8_t direction, uint16_t speed) {//左电机驱动
  HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_3);
    /* 根据方向设置 IN1 和 IN2 引脚 */
    HAL_GPIO_WritePin(GPIOA, BIN1_Pin, (direction & 0x01));
    HAL_GPIO_WritePin(GPIOA, BIN2_Pin, ((direction & 0x01) ^ 0x01));
    /* 设置 PWM 引脚以控制速度 */
    __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_3, speed);
}
void motorControlR(uint8_t direction, uint16_t speed) {//右电机驱动
         HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2);
    /* 根据方向设置 AIN1 和 IN2 引脚 */
    HAL_GPIO_WritePin(GPIOA, AIN2_Pin, (direction & 0x01));
    HAL_GPIO_WritePin(GPIOA, AIN1_Pin, ((direction & 0x01) ^ 0x01));
    /* 设置 PWM 引脚以控制速度 */
    __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_2, speed);
}
/* USER CODE END 0 */  

在while循环中添加红外光电逻辑判断:

/* USER CODE BEGIN WHILE */
  while (1)
  {		
        if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_8)== 1 && HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_9)== 1 ){ 
            motorControlL(1, 300); //第一个参数 0反向转  1正向转  第二个参数控制小车速度
            motorControlR(1, 300);
        }
        if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_8)==0 && HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_9)==0){
            motorControlL(0, 0); 
            motorControlR(0, 0);
        }
        if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_8)==0 && HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_9)==1){
            motorControlL(1, 180); 
            motorControlR(1, 300);
        }
        if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_8)==1 && HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_9)==0){
            motorControlL(1, 300); 
            motorControlR(1, 180);
        }
    /* USER CODE END WHILE */  

四、效果展示

由于文章中没有提供具体的视频或图片效果展示,读者可以通过上述代码实现自己的电机控制程序,并根据实际硬件连接进行调试。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号