stm32使用drv8833驱动电机

DRV8833电机驱动简介

DRV8833 是一款由德州仪器(Texas Instruments)生产的双 H 桥电机驱动芯片,主要用于驱动直流电机和步进电机。它的特点包括:

  1. 双 H 桥结构:能够驱动两个直流电机或者一个双极性步进电机。
  2. 电压范围广:支持2.7V 到 10.8V 的工作电压,非常适合便携式应用。
  3. 电流能力:每个通道能够提供最大 1.5A 的持续输出电流,峰值电流可达 2A(短时间内)。
  4. 保护功能:集成了欠压保护、过流保护、过热保护以及短路保护,确保驱动器在异常情况下能安全工作。
  5. 控制方式:可以通过简单的 PWM 信号进行速度和方向控制。

以下是DRV8833的真值表,如果要控制电机的速度和方向,我们可以使用两个PWM来作为输入

1、关于快速衰减(滑动)、慢速衰减(制动)

它们控制电机在断电后的响应方式,影响电机如何停止。

慢速衰减(制动):也称为制动模式,是在电机断电时迅速停止电机转动的方式。具体原理是,电机线圈会在停止时短路,这使得反电动势(电机旋转产生的电压)迅速被耗散掉,从而导致电机迅速停止。这种模式通常用于需要精确停止的位置或快速响应的应用。

快速衰减(滑动):也称为惯性运行自由运行,是当电机停止供电时,让电机继续自由旋转,直到最终由于摩擦和其他阻力自然停止。这种模式不短路电机线圈,而是让它们处于开路状态,因此电机没有额外的制动作用。

STM32连接DRV8833

VM连接3.3V,GND---->GND,AO1和AO2连接电机的两端,STBY---->3.3V,

AIN1----->PA0,AIN2------>PA1

程序设计

MOtor.c

#include "stm32f10x.h"                  // Device header

/*DRV8833电机驱动*/
#define Motor_Mode    1			//电机驱动模式设置,1为滑动(快速衰减),2为制动(慢速衰减)

void Motor_Init(void)
{
	/*开启时钟*/
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	/*GPIO初始化*/
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;				//将引脚初始化为复用推挽输出
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	/*配置时钟源*/
	TIM_InternalClockConfig(TIM2);
	
	/*时基单元初始化*/
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseInitStructure.TIM_Period = 1000 - 1;		    //ARR 自动重装载值
	TIM_TimeBaseInitStructure.TIM_Prescaler = 72 - 1;			//PSC 预分频器
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
	
	/*输出比较初始化*/ 
	TIM_OCInitTypeDef TIM_OCInitStructure;
	TIM_OCStructInit(&TIM_OCInitStructure);
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;				//PWM模式1,定时器计数小于 TIM_Pulse时,输出有效电平
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
	TIM_OCInitStructure.TIM_Pulse = 0;		//CCR 初始值
	TIM_OC1Init(TIM2, &TIM_OCInitStructure);						//定时器通道1使能
	TIM_OC2Init(TIM2, &TIM_OCInitStructure);						//定时器通道2使能
	
	/*TIM使能*/
	TIM_Cmd(TIM2, ENABLE);
}

void Motor_SetSpeed(int16_t Speed)
{
	if(Motor_Mode == 1)        									//滑动模式下,占空比越大电机越快
	{
		if (Speed >= 0)		
		{
			TIM_SetCompare1(TIM2,Speed);
			TIM_SetCompare2(TIM2,0);
		}
		else if(Speed < 0)	
		{
			TIM_SetCompare1(TIM2,0);
			TIM_SetCompare2(TIM2,-Speed);	
		}
		
	}
	if(Motor_Mode == 2)        									//制动模式下,占空比越小电机越快
	{
		if (Speed >= 0)		
		{
			TIM_SetCompare1(TIM2,1000);
			TIM_SetCompare2(TIM2,1000-Speed);

		}
		else
		{
			TIM_SetCompare1(TIM2,1000+Speed);
			TIM_SetCompare2(TIM2,1000);
		}
		
	}
}

Motor.h

#ifndef __MOTOR_H__
#define __MOTOR_H__

void Motor_Init(void);
void Motor_SetSpeed(int16_t Speed);

#endif

更改arr和psc的时候注意把占空比也改一下,这里我是用PWM100%来模拟逻辑1,0占空比模拟逻辑0

DRV8833电机驱动,制动模式和滑动模式比较

### 回答1: STM32驱动DRV8833芯片可以控制直流电机的转动。DRV8833是一种双H桥驱动器,可以控制两个直流电机或一个步进电机。它可以通过STM32的GPIO口来控制电机的转动方向和速度。需要注意的是,DRV8833的最大输出电流为1.2A,如果需要驱动更大功率的电机,需要选择更大功率的驱动器。 ### 回答2: STM32DRV8833驱动直流电机是一种电机驱动器,可由STM32单片机控制。驱动使用了L298P芯片进行直流电机驱动。小型、高效、可靠、易用的特点方便了电子爱好者快速上手、开发和制造智能小车,机器人等电子产品。 STM32DRV8833驱动直流电机的输入电压范围为6V-15V,可以驱动1个电机,控制方式可以采用PWM和DIR信号。PWM和DIR信号由STM32单片机产生,根据不同的占空比使得电机达到不同的转速,DIR信号使得电机正转或反转。 在STM32DRV8833驱动器中,L298P芯片的作用是将主控STM32单片机的PWM和DIR信号转换成直流电机所需的电压和电流信号。驱动器采用了最前沿的MOSFET技术,使得输入电压和电机负载之间的电压损失降到了最低,同时还有过热和过流保护功能,保证了整个电机驱动系统的安全可靠性。 STM32DRV8833驱动直流电机使用简单,只需将电源正负极接到输入端,电机正负极接到输出端,并接上STM32单片机,便可以开始控制电机运转。驱动器还具有小巧、轻便、结构紧凑、外形美观,方便进行系统集成和组装。 总之,STM32DRV8833驱动直流电机是一种高性能、低功耗、便捷的电机驱动器,能够帮助电子爱好者实现高效简单的电机控制方案,实现想象中的智能小车等电子设备。 ### 回答3: STM32DRV8833是一款驱动直流电机的芯片,它的使用非常简单,只需要几个简单的连接和一些基础的代码,就可以让直流电机正常运转。 首先,我们需要准备好一台STM32开发板和一只直流电机,然后将电机的正极连接到STM32的5V电源引脚,负极连接到DRV8833的OUT1引脚,然后再将OUT2接地。接下来,可以使用STM32的PWM信号控制DRV8833的IN1和IN2引脚,从而控制电机的转速和方向。 在代码方面,我们需要包含STM32的GPIO和TIM库,然后初始化相应的引脚和定时器。例如,在STM32CubeMX中,我们可以选择使用TIM2通道3和4来控制IN1和IN2引脚。 在运行时,我们可以使用HAL库提供的函数来设置PWM信号的频率和占空比,从而实现电机的转速控制。例如,使用HAL_TIM_PWM_Start函数来启动定时器并启用PWM功能,然后使用HAL_TIM_PWM_Init函数来初始化PWM输出通道。 最后,我们可以在主循环中使用HAL库提供的函数来控制电机的方向和转速。例如,使用HAL_GPIO_WritePin函数来切换IN1和IN2引脚的电平状态,从而改变电机的方向。 总的来说,使用STM32DRV8833驱动直流电机非常简单,只需要简单的硬件连接和基础的代码就可以实现。但需要注意的是,由于这是直接控制电机的电压,因此在使用时需注意电机的额定电压和电流,避免电机过载或损坏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值