当前位置: 首页 > news >正文

STM32CubeMx DRV8833驱动

一、DRV8833驱动原理

STBY口接单片机的IO口,STBY置0电机全部停止,置1才能工作。STBY置1后通过AIN1、AIN2、BIN1、BIN2 来控制正反转。

AIN1AIN2电机状态
00停止
1speed反转
speed1正转
11停止

其中A端(AIN1与AIN2)只能控制AO1与AO2端。B端(BIN1与BIN2)只能控制BO1与BO2端。因此是双路电机驱动。speed为PWM控制的占空比,通过占空比控制电机速度。

DRV8833控制电机速度的方式,是通过将IN1与IN2接入PWM,直接通过调整PWM的占空比进行速度控制。因此要求AIN1/AIN2/BIN1/BIN2都要使用PWM功能。
 

二、cubemx配置

选c6t6

打开串口调试

选择外部高速晶振

打开串口一

开启串口一接收中断

配置输出引脚10KHZ

配置时钟

生成代码

三、keil代码


#include "main.h"
#include "tim.h"
#include "usart.h"
#include "gpio.h"


void SystemClock_Config(void);

//set dir1
void Motor_SetDirectionL(uint8_t dir)
{
    if (dir == 1) {
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET); // IN1 = 1(f)
    } else {
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET); // IN1 = 0(b)
    }
}


void Motor_SetSpeedL(uint16_t speed)
{
    if (speed > 100) speed = 100; 
		HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); 
    __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, speed); 
}
//set dir2
void Motor_SetDirectionR(uint8_t dir)
{
    if (dir == 1) {
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET); // IN1 = 1(f)
    } else {
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET); // IN1 = 0(b)
    }
}

void Motor_SetSpeedR(uint16_t speed)
{
    if (speed > 100) speed = 100; 
		HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_3); 
    __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_3, speed); 
}

// ֹͣstop
void Motor_Stop()
{
    Motor_SetSpeedL(0); // PWM = 0
		Motor_SetSpeedR(0); // PWM = 0
}

int main(void)
{

  HAL_Init();

  SystemClock_Config();
  MX_GPIO_Init();
  MX_TIM2_Init();
  MX_USART1_UART_Init();

  while (1)
  {
        Motor_Stop();
        HAL_Delay(1000);
		
        Motor_SetDirectionL(1);
		Motor_Stop();
        Motor_SetSpeedL(90); //慢速衰减 可以跑的很慢(反比关系占比是100-90)
        HAL_Delay(3000);

        Motor_SetDirectionL(0);
        Motor_Stop();
        HAL_Delay(1000);


        Motor_SetDirectionL(0);
		Motor_Stop();
        Motor_SetSpeedL(60); //快速衰减 跑得快(正比)
        HAL_Delay(3000);

        
        Motor_Stop();
        HAL_Delay(1000);

  }

}

用的是上面中间的两组跑,实际使用需要换引脚pwm输出

chem4111 2025-03-03 23.13.27

相关文章:

  • 免费轻巧多功能 PDF 处理工具:转换、压缩、提取一应俱全
  • windows本地化部署Dify+Deepseek
  • C语言多级指针详解 - 通过实例理解一级、二级、三级指针
  • TCP的三握四挥
  • Python进程知多少
  • 【MySQL】在CentOS7环境下----手把手教你安装MySQL详细教程(附带图例详解!!)
  • Hbase伪分布安装教程,详细版
  • DeepSeek + 数据分析:让数据洞察更智能、更高效
  • 学习路程十一 langchain核心组件 Memory
  • Python Scrapy爬虫面试题及参考答案
  • 0x03 http协议和分层架构
  • 【子网掩码计算器:Python + Tkinter 实现】
  • Python中字符串的常用操作
  • Java注释/JDK开发工具生成API/关键字、标识符规范
  • 软件设计师-计算机系统知识:1. 计算机系统基础知识
  • (视频教程)Compass代谢分析详细流程及python版-R语言版下游分析和可视化
  • SpringBoot五:JSR303校验
  • 《几何原本》公理
  • Android15 am命令 APP安装流程
  • Python爬虫
  • 南阳企业网站排名优化/企业网站建设原则是
  • 创建一个自己的公司的英文/网络优化软件
  • 网站建设鼠标点击变色怎么弄/文职培训机构前十名
  • 沈阳专门代做网站的/个人网站设计毕业论文
  • 网站建设的案例教程/seo推广方法集合
  • 南宁做网站 的/南宁百度seo排名