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控制即可
- 建议输入方式

三. 代码
硬件抽象层
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

浙公网安备 33010602011771号