TB6612电机驱动模块 该模块相对于传统的L298N效率上提高很多,体积上也大幅度减少,在额定范围内,芯片基本不发热,当然也就显得更加娇贵,所以我们建议有一定动手能力的朋友使用,接线的时候务必细心细心再细心,注意正负极性。
模块来源 采购链接:https://item.taobao.com/item.htm?spm=a1z10.3-c-s.w4002-19589090137.14.b3db36b42q0dfQ&id=616285586821
规格参数 VM电机电压:<12V VCC芯片电压:2.7~5.5V 输出电流:1A 控制方式:PWM
查看资料 STBY口接单片机的IO口,STBY置0电机全部停止,置1才能工作。STBY置1后通过AIN1、AIN2、BIN1、BIN2 来控制正反转。
其中A端(AIN1与AIN2)只能控制AO1与AO2端。B端(BIN1与BIN2)只能控制BO1与BO2端。因此是双路电机驱动。
移植过程 引脚选择 移植至工程 我们的目标是将例程移植至ESP32-S3开发板上。已经为大家提供了完整的驱动代码,按照以下步骤,即可完成移植。 具体新建文件夹和新建c和h文件在 【DHT11温湿度传感器】章节中的1.4.2小节中有详细的教学,这里就不再多说了。 只不过这里我们将文件名 bsp_dht11.c 和 bsp_dht11.h 换成 bsp_tb6612.c 和 bsp_tb6612.h,文件夹名字改为TB6612。
代码写入 在文件bsp_tb6612.c中,编写如下代码。
c/*
* 立创开发板软硬件资料与相关扩展板软硬件资料官网全部开源
* 开发板官网:www.lckfb.com
* 技术支持常驻论坛,任何技术问题欢迎随时交流学习
* 立创论坛:club.szlcsc.com
* 关注bilibili账号:【立创开发板】,掌握我们的最新动态!
* 不靠卖板赚钱,以培养中国工程师为己任
* Change Logs:
* Date Author Notes
* 2024-01-15 LCKFB-lp first version
*/
#include "bsp_tb6612.h"
/************************************************
函数名称 : TB6612_Init
功 能 : TB6612的配置
参 数 :
返 回 值 : 无
作 者 :
*************************************************/
void TB6612_Init(void)
{
gpio_config_t OUT_config = {
.pin_bit_mask = (1ULL< .mode =GPIO_MODE_OUTPUT, //输出模式 .pull_up_en = GPIO_PULLUP_DISABLE, //不使能上拉 .pull_down_en = GPIO_PULLDOWN_DISABLE, //不使能下拉 .intr_type = GPIO_INTR_DISABLE //不使能引脚中断 }; gpio_config(&OUT_config); // 准备并应用PWM定时器配置 ledc_timer_config_t ledc_timer = { .speed_mode = PWMA_MODE, //低速模式 .timer_num = PWMA_TIMER, //通道的定时器源 定时器0 .duty_resolution = LEDC_DUTY_RES, //将占空比分辨率设置为13位 .freq_hz = LEDC_FREQUENCY, // 设置输出频率为5 kHz .clk_cfg = LEDC_AUTO_CLK //设置LEDPWM的时钟来源 为自动 //LEDC_AUTO_CLK = 启动定时器时,将根据给定的分辨率和占空率参数自动选择源时钟 }; ledc_timer_config(&ledc_timer); // 准备并应用LEDC PWM通道配置 ledc_channel_config_t ledc_channel = { .speed_mode = PWMA_MODE, //低速模式 .channel = PWMA_CHANNEL, //通道0 .timer_sel = PWMA_TIMER, //定时器源 定时器0 .intr_type = LEDC_INTR_DISABLE, //关闭中断 .gpio_num = GPIO_PWMA, //输出引脚 GPIO1 .duty = 0, // 设置占空比为0 .hpoint = 0 }; ledc_channel_config(&ledc_channel); } /****************************************************************** * 函 数 名 称:AO_Control * 函 数 说 明:A端口电机控制 * 函 数 形 参:dir旋转方向 1正转0反转 speed旋转速度,范围(0 ~ per-1) * 函 数 返 回:无 * 作 者:LC * 备 注:无 ******************************************************************/ void AO_Control(uint8_t dir, uint32_t speed) { if( dir == 1 ) { AIN1_OUT(0); AIN2_OUT(1); } else { AIN1_OUT(1); AIN2_OUT(0); } // 设置占空比 ledc_set_duty(PWMA_MODE, PWMA_CHANNEL, speed); ledc_update_duty(PWMA_MODE, PWMA_CHANNEL); }1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980在文件bsp_tb6612.h中,编写如下代码。 c#ifndef _BSP_TB6612_H #define _BSP_TB6612_H #include #include "esp_log.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "driver/uart.h" #include "driver/gpio.h" #include "driver/i2c.h" #include "sdkconfig.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "esp_log.h" #include "freertos/queue.h" #include #include "sdkconfig.h" #include "driver/gpio.h" #include "esp_log.h" #include "rom/ets_sys.h" #include "esp_system.h" #include "driver/gpio.h" #include "driver/spi_master.h" #include "driver/spi_common.h" #include "hal/gpio_types.h" #include "driver/ledc.h" #include "string.h" #define GPIO_AIN1 7 #define GPIO_AIN2 8 #define GPIO_PWMA 1 #define PWMA_TIMER LEDC_TIMER_0 //定时器0 #define PWMA_CHANNEL LEDC_CHANNEL_0 // 使用LEDC的通道0 #define PWMA_MODE LEDC_LOW_SPEED_MODE //低速模式 #define LEDC_DUTY_RES LEDC_TIMER_13_BIT // LEDC分辨率设置为13位 #define LEDC_DUTY (4095) // 设置占空比为50%。 ((2的13次方) - 1) * 50% = 4095 #define LEDC_FREQUENCY (5000) // 频率单位是Hz。设置频率为5000 Hz #define AIN1_OUT(X) gpio_set_level(GPIO_AIN1, X?1:0) #define AIN2_OUT(X) gpio_set_level(GPIO_AIN2, X?1:0) void TB6612_Init(void); void AO_Control(uint8_t dir, uint32_t speed); #endif /* _BSP_TB6612_H */1234567891011121314151617181920212223242526272829303132333435363738394041424344454647移植验证 在自己工程中的main主函数中,编写如下。 c/* * 立创开发板软硬件资料与相关扩展板软硬件资料官网全部开源 * 开发板官网:www.lckfb.com * 技术支持常驻论坛,任何技术问题欢迎随时交流学习 * 立创论坛:club.szlcsc.com * 关注bilibili账号:【立创开发板】,掌握我们的最新动态! * 不靠卖板赚钱,以培养中国工程师为己任 * Change Logs: * Date Author Notes * 2024-01-15 LCKFB-lp first version */ #include #include "bsp_tb6612.h" #include "string.h" #include "esp_private/esp_task_wdt.h" #include "esp_private/esp_task_wdt_impl.h" int app_main(void) { int i = 0; esp_task_wdt_deinit(); TB6612_Init(); printf("WS2812 Start......\r\n"); while(1) { i += 500; if( i > 5000 ) i = 0; AO_Control( 0 , i );//A端电机反转 printf("PWM: %d \r\n",i); vTaskDelay(500 / portTICK_PERIOD_MS); } }12345678910111213141516171819202122232425262728293031323334353637驱动代码: 文件下载 📌 资料下载中心(点击跳转) 📌 在 资料下载中心->模块移植资料下载 里面的该章节压缩包中。