智能小车 - DRV8833电机驱动模块

一.硬件

智能小车 - DRV8833电机驱动模块_第1张图片智能小车 - DRV8833电机驱动模块_第2张图片
基本兼容TB6612模块管脚,可驱动1.5A以下的直流电机和4线步进电机。

智能小车 - DRV8833电机驱动模块_第3张图片智能小车 - DRV8833电机驱动模块_第4张图片

芯片中共有两个全H桥。因此最多可以同时驱动两个直流电机或一个步进电机。(如果将4个电机中两个两个正负极相接,一个芯片也可带动4个电机)

管脚说明:
ANI1:AO1的逻辑输入控制端口,电平0-5V。
AIN2:AO2的逻辑输入控制端口,电平0-5V。
BNI1:BO1的逻辑输入控制端口,电平0-5V。
BIN2:BO2的逻辑输入控制端口,电平0-5V。
AO1、AO2为1路H桥输出端口,接一个直流电机的两个脚。
BO1、BO2为2路H桥输出端口,接另一个外直接电机的两个脚。
GND:接地。
VM:芯片和电机供电脚,电压范围2.7 V – 10.8 V。
STBY:接地或悬空芯片不工作,无输出,接5V工作;电平0-5V。
NC:空脚

二.全H桥电路基础知识

智能小车 - DRV8833电机驱动模块_第5张图片

从上图可看出,此电机驱动电路由4个NMOS管构成,形如H型,故名全H桥电路。通过控制4个MOS管的导通与截止达到对中间电机的不同控制效果。NMOS管的栅极为高电平时导通,低电平时截止。
智能小车 - DRV8833电机驱动模块_第6张图片
当Q1、Q4的栅极为高电平,Q2、Q3为低电平时,Q1,Q4导通,如图所示,电机正向旋转。

二.接线

第一种DRV8833驱动模块
智能小车 - DRV8833电机驱动模块_第7张图片

DRV8833的的用法
DRV8833是双驱动,也就是可以驱动两个电机 下面分别是控制两个电机的IO口
STBY口,接单片机的IO,清零电机全部停止,
置1通过AIN1 AIN2, BIN1,BIN2来控制正反转
VM 接12V以内电源
GND接地

第二种DRV8833驱动模块
智能小车 - DRV8833电机驱动模块_第8张图片

ULT低电平为睡眠模式(需要断开模块后面的J2短接焊点)
OUT1,0UT2为1路H桥,相对应控制为IN1,IN2.
OUT3,0UT4为第2路H桥,相对应控制为IN3,IN4.
EEP为保护输出,默认不用。
VCC为电压输入3至10V.
GND接地。

TB6612模块

TB6612模块有单独的PWM接口的

智能小车 - DRV8833电机驱动模块_第9张图片
智能小车 - DRV8833电机驱动模块_第10张图片
STBY 控制小车的启动还是停止
AIN1和AIN2控制电机的正转或反转
智能小车 - DRV8833电机驱动模块_第11张图片

二.代码

/******************************************************************************* 
Copyright: 2022
File name: driver_dc_brush_motor.c
Description: 直流电机驱动文件
Author: 如图所示z
Version: v1.0
Date: 20220707
History: 20220707:v1.0:初版 
*******************************************************************************/
#include "driver_dc_brush_motor.h"

unsigned int n = 0;

/*******************************************************************************
Function: DC_Brush_Motor_Configuration 
Description: 直流电机PWM配置
Input:  无
Output: 无
Return: 无
*******************************************************************************/
void DC_Brush_Motor_Configuration(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
	TIM_OCInitTypeDef TIM_OCInitStructure;
	/*开启端口时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
    /*开启定时器时钟*/
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM4, ENABLE);
	
	//PA1:PWM
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	TIM_TimeBaseStructure.TIM_Period = 19999;  //小车调速范围
	TIM_TimeBaseStructure.TIM_Prescaler = 71;  //71+1= 72分频
	//TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
	
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
	TIM_OC2Init(TIM2, & TIM_OCInitStructure);
	
	//PB6
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
	
	TIM_TimeBaseStructure.TIM_Period = 19999;  
	TIM_TimeBaseStructure.TIM_Prescaler = 71;  //71+1= 72分频
	//TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
	
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
	TIM_OC1Init(TIM4, & TIM_OCInitStructure);	
	
	TIM_SetCompare2(TIM2, 5000); //占空比
	TIM_SetCompare1(TIM4, 5000); //占空比
	TIM_Cmd(TIM2, ENABLE);
	TIM_Cmd(TIM4, ENABLE);
	

	//PA2:AIN1  PA3:AIN2  PA11:STBY
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_11;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	// 另一侧的轮子PB7:BIN1	PB8:BIN2
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8; 
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
}

你可能感兴趣的:(智能小车,单片机,stm32,嵌入式硬件)