BDR6120S驱动

这边介绍使用到的信息。完整版请看BDR6120S数据手册,这只是这个项目中的一个驱动代码,后续继续更新项目代码。项目实现功能请先看,智能门锁专栏 / 智能门锁功能实现这篇文章,里面介绍了实现的功能,后续将更新详细项目介绍

一. 简介

  • BDR6120S 是一款直流有刷电机驱动 IC,适用于电子锁、电动牙刷、玩具、消费类产品以及其它低压或者电池供电运动控制产品。
  • BDR6120S 输出 DC 峰值电流达到 2.5A,连续电流 1A;VDD 工作范围是 2.2~ 7.5V。
  • BDR6120S 有一组 PWM(INA-INB)输入,低输出内阻,采用 SOT23-6 封装。内部集成过流保护、欠压保护和内置迟滞热效应过热保护功能。
  • 引脚说明
引脚名称 I/O 描述 引脚编号
INA I 正转输入 4
INB I 反转输入 3
VDD - 电源端 5
OUTB O 反转输出 1
GND - 接地端 2
OUTA O 正转输出 6

二. 关键参数

  • 逻辑真值表

    输入 输出 方式
    INA INB OUTA OUTB
    L L Hi-Z Hi-Z 待命状态
    H L H L 前进
    L H L H 后退
    H H L L 刹车

总结:

​ INA低电平INB低电平:待命状态

​ INA高电平INB低电平:前进状态

​ INA低电平INB高电平:后退状态

​ INA高电平INB高电平:刹车状态

只需使用GPIO控制即可

  • 建议输入方式

image-20250813141416032

三. 代码

硬件抽象层

HAL_gpio.h部分代码

/* BDR6120 的INA和INB引脚 */
#define DRI6120_INA_GPIO                                             GPIO_NUM_4
#define DRI6120_INB_GPIO                                             GPIO_NUM_5

/* 设置 BDR6120 引脚高低电平 */
/* INA */
#define BDR6120_INA_LEVEL_HIGH       gpio_set_level(GPIO_NUM_4, GPIO_LEVEL_HIGH)
#define BDR6120_INA_LEVEL_LOW         gpio_set_level(GPIO_NUM_4, GPIO_LEVEL_LOW)
/* INB */
#define BDR6120_INB_LEVEL_HIGH       gpio_set_level(GPIO_NUM_5, GPIO_LEVEL_HIGH)
#define BDR6120_INB_LEVEL_LOW         gpio_set_level(GPIO_NUM_5, GPIO_LEVEL_LOW)

驱动层

Dri_BDR6120S.c

#include "Dri_BDR6120S.h"

/**
 * @brief 初始化BDR6120S
 *
 * @param 无
 *
 * @return 无
 */
void BDR6120S_Init(void)
{
    /* 待命 */
    BDR6120S_wait();
}

/**
 * @brief 前进
 *
 * @param 无
 *
 * @return 无
 */
void BDR6120S_forward(void)
{
    BDR6120_INA_LEVEL_HIGH;
    BDR6120_INB_LEVEL_LOW;
}

/**
 * @brief 后退
 *
 * @param 无
 *
 * @return 无
 */
void BDR6120S_back_up(void)
{
    BDR6120_INA_LEVEL_LOW;
    BDR6120_INB_LEVEL_HIGH;
}

/**
 * @brief 刹车
 *
 * @param 无
 *
 * @return 无
 */
void BDR6120S_break(void)
{
    BDR6120_INA_LEVEL_HIGH;
    BDR6120_INB_LEVEL_HIGH;
}

/**
 * @brief 待命
 *
 * @param 无
 *
 * @return 无
 */
void BDR6120S_wait(void)
{
    BDR6120_INA_LEVEL_LOW;
    BDR6120_INB_LEVEL_LOW;
}

/**
 * @brief 开锁
 *
 * @param 无
 *
 * @return 无
 */
void BDR6120S_open_lock(void)
{
    /* 前进 */
    BDR6120S_forward();
    vTaskDelay(pdMS_TO_TICKS(1000));
    /* 待命 */
    BDR6120S_wait();
    vTaskDelay(pdMS_TO_TICKS(1000));
    /* 后退 */
    BDR6120S_back_up();
    vTaskDelay(pdMS_TO_TICKS(1000));
    /* 待命 */
    BDR6120S_wait();
    vTaskDelay(pdMS_TO_TICKS(1000));
}

Dri_BDR6120S.h

#ifndef DRI_BDR6120S_H
#define DRI_BDR6120S_H

#include <stdio.h>

#include "freertos/FreeRTOS.h"

#include "HAL_gpio.h"

/**
 * @brief 初始化BDR6120S
 *
 * @param 无
 *
 * @return 无
 */
void BDR6120S_Init(void);

/**
 * @brief 前进
 *
 * @param 无
 *
 * @return 无
 */
void BDR6120S_forward(void);

/**
 * @brief 后退
 *
 * @param 无
 *
 * @return 无
 */
void BDR6120S_back_up(void);

/**
 * @brief 刹车
 *
 * @param 无
 *
 * @return 无
 */
void BDR6120S_break(void);

/**
 * @brief 待命
 *
 * @param 无
 *
 * @return 无
 */
void BDR6120S_wait(void);

/**
 * @brief 开锁
 *
 * @param 无
 *
 * @return 无
 */
void BDR6120S_open_lock(void);

#endif

posted @ 2025-08-13 23:23  2666666  阅读(63)  评论(0)    收藏  举报