【零基础实战】STM32控制DRV8833电机驱动详解

news/2025/2/21 8:12:38

系列文章目录

1.元件基础
2.电路设计
3.PCB设计
4.元件焊接
5.板子调试
6.程序设计
7.算法学习
8.编写exe
9.检测标准
10.项目举例
11.职业规划


文章目录

    • 一、DRV8833模块简介
    • 二、STM32选型建议
    • 三、硬件连接详解
      • 1. 接线示意图
      • 2. 电源注意事项
    • 四、核心控制原理
      • 1. PWM调速原理
      • 2. H桥工作原理
    • 五、软件编程实战
      • 1. GPIO初始化(CubeMX配置)
      • 2. PWM配置(以TIM2为例)
      • 3. 电机控制函数
    • 六、常见问题Q&A
      • Q1:电机不转怎么办?
      • Q2:如何避免芯片烧毁?
    • 七、实验效果展示

一、DRV8833模块简介

DRV8833 是一款双H桥电机驱动芯片,可同时驱动2个直流电机或1个步进电机。核心参数:

  • 工作电压:2.7V-10.8V
  • 单通道最大电流:1.5A(持续)/2A(峰值)
  • 支持PWM调速

二、STM32选型建议

推荐使用 STM32F103C8T6(Blue Pill开发板):

  • 72MHz主频,性能充足
  • 提供多路PWM输出
  • 丰富GPIO资源
  • 社区资料丰富

三、硬件连接详解

1. 接线示意图

| DRV8833引脚 | STM32连接 | 作用 |
|–|
| AIN1/AIN2 | PA0/PA1 | 电机A控制信号 |
| BIN1/BIN2 | PA2/PA3 | 电机B控制信号 |
| VM | 7-12V电源正极 | 电机电源 |
| GND | 共地 | 电源地 |

2. 电源注意事项

  • 逻辑电源:3.3V由STM32提供
  • 电机电源:需独立7-12V供电
  • 共地处理:必须连接STM32与DRV8833的GND

四、核心控制原理

1. PWM调速原理

通过调节 占空比(高电平时间占比)控制电机电压平均值:

  • 占空比0% → 电机停转
  • 占空比50% → 半速运行
  • 占空比100% → 全速运行

2. H桥工作原理

四个MOSFET组成H桥,通过不同导通组合实现:

输入组合电机动作
AIN1=1, AIN2=0正转
AIN1=0, AIN2=1反转
AIN1=0, AIN2=0刹车

五、软件编程实战

1. GPIO初始化(CubeMX配置)

// 配置PA0-PA3为推挽输出
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

2. PWM配置(以TIM2为例)

// 定时器初始化
TIM_HandleTypeDef htim2;
htim2.Instance = TIM2;
htim2.Init.Prescaler = 71;          // 72MHz/72=1MHz
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init.Period = 999;            // 1MHz/1000=1kHz PWM
HAL_TIM_PWM_Init(&htim2);

// PWM通道配置
TIM_OC_InitTypeDef sConfigOC;
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 500;              // 初始占空比50%
HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1);

3. 电机控制函数

void MotorA_SetSpeed(int speed) {
  // 限制PWM值在0-999之间
  speed = (speed > 999) ? 999 : (speed < 0) ? 0 : speed;
  
  // 设置方向
  if(speed >= 0) {
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
  } else {
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
    speed = -speed;
  }
  
  // 更新PWM值
  __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, speed);
}

六、常见问题Q&A

Q1:电机不转怎么办?

  1. 检查电源是否正常
  2. 确认共地连接
  3. 用万用表测量PWM输出
  4. 尝试提高占空比

Q2:如何避免芯片烧毁?

  1. 确保散热良好
  2. 电机电流不超过1.5A
  3. 先上电逻辑电源再接通电机电源

七、实验效果展示

通过串口发送速度指令(-1000~1000),可观察到:

  • 正负值对应正反转
  • 绝对值大小决定转速
  • 0值实现急停刹车

http://www.niftyadmin.cn/n/5860519.html

相关文章

kafka-保姆级配置说明(producer)

配置说明的最后一部分&#xff1b; ##指定kafka集群的列表&#xff0c;以“,”分割&#xff0c;格式&#xff1a;“host:port,host:port” ##此列表用于producer&#xff08;consumer&#xff09;初始化连接使用&#xff0c;server列表可以为kafka集群的子集 ##通过此servers列…

《动手学机器人学》笔记

目录 0.介绍1.概述&#xff5c;空间位置、姿态的描述&#xff08;33&#xff09;&#xff5c;《动手学机器人学》2.&#xff08;2&#xff09;-Robotics Toolbox①&#xff08;V10.4&#xff09;3.齐次坐标与变换矩阵4.一般形式的旋转变换矩阵5.&#xff08;轴角法&#xff09;…

Maven 构建中的安全性与合规性检查

在现代软件开发中&#xff0c;确保应用程序的安全性和合规性至关重要。随着开源软件和第三方依赖的广泛使用&#xff0c;构建过程中对依赖的安全性和合规性检查变得尤为重要。通过 Maven 构建工具&#xff0c;我们可以集成多种安全性和合规性检查机制&#xff0c;帮助开发者检测…

【嵌入式Linux应用开发基础】进程间通信(2):消息队列

目录 一、消息队列概述 二、Linux 消息队列相关系统调用 2.1. msgget 2.2. msgsnd 2.3. msgrcv 2.4. msgctl 三、消息队列使用示例 3.1. 发送进程示例代码 3.2. 接收进程示例代码 四、消息队列的优缺点 4.1. 优点 4.2. 缺点 五、关键注意事项 六、常见问题 5.1.…

如何修改Windows系统Ollama模型存储位置

默认情况下&#xff0c;Ollama 模型会存储在 C 盘用户目录下的 .ollama/models 文件夹中&#xff0c;这会占用大量 C 盘空间&#xff0c;增加C盘“爆红”的几率。所以&#xff0c;我们就需要修改Ollama的模型存储位置 Ollama提供了一个环境变量参数可以修改Ollama的默认存在位…

交互编程工具之——Jupyter

Jupyter 是什么&#xff1f; Jupyter 是一个开源的交互式编程和数据分析工具&#xff0c;广泛应用于数据科学、机器学习、教育和研究领域。其核心是 Jupyter Notebook&#xff08;现升级为 JupyterLab&#xff09;&#xff0c;允许用户在一个基于浏览器的界面中编写代码、运行…

svg绘图知多少

前言 带着几个疑问我们来了解这篇文章&#xff1a; SVG是什么&#xff1f;有什么优点&#xff1f; SVG可以为我们开发提供什么便利&#xff1f; 我们用SVG做了什么&#xff1f; SVG还有哪些厉害的实现&#xff1f; 1. SVG &#xff08;Scalable Vector Graphics&#xff…

QT基于Gstreamer采集的简单示例

我们在终端敲指令可以使用gstreamer方式去采集&#xff0c;如下所示&#xff0c;按1920*1080分辨率&#xff0c;60帧方式采集video0的视频。 gst-launch-1.0 v4l2src device/dev/video0 ! video/x-raw, width1920, height1080, framerate60/1 ! videoconvert ! autovideosink …