HB-M09 电机驱动模块

基于 STM32F103C8T6 · HAL库开发 · PWM调速控制

5V
工作电压
PWM
控制方式
双向
转动方向
0-100%
调速范围

1. 工作原理与功能

了解HB-M09电机驱动模块的核心原理与功能特性

1.1 工作原理

HB-M09电机驱动模块采用H桥驱动电路结构,通过PWM(脉冲宽度调制)信号控制直流电机的转速和转向。H桥电路由四个功率开关管组成,通过控制不同开关管的导通与关断,可以改变电机两端的电压方向,从而实现正转、反转和制动控制。

PWM调速的基本原理是:通过调节脉冲信号的占空比(高电平时间与周期的比值),来改变电机两端的平均电压,从而实现转速的连续调节。占空比越高,平均电压越大,电机转速越快。

模块采用两路PWM信号控制方式:一路PWM信号控制电机的正转速度,另一路PWM信号控制电机的反转速度。当两路信号均为高电平时,电机两端电压相等,电机停止转动。

1.2 核心功能

⚡

PWM调速

支持0-100%占空比连续调速,转速平滑过渡,适用于各种速度控制场景

🔄

双向控制

支持正转、反转、停止三种状态切换,通过两路PWM信号实现方向控制

🛡️

过流保护

内置过流保护电路,有效防止电机堵转或短路时损坏驱动芯片

🔌

标准5V供电

采用5V标准供电电压,与STM32单片机IO电平兼容,接线简单可靠

1.3 引脚定义

HB-M09 电机驱动模块 PWMA PB0 PWMB PB1 OUT1 电机+ OUT2 电机- VCC GND
引脚名称 类型 功能描述 STM32连接
VCC 电源 模块电源输入,5V 5V
GND 地 电源地 GND
PWMA 输入 PWM控制信号A(正转控制) PB0 (TIM3_CH3)
PWMB 输入 PWM控制信号B(反转控制) PB1 (TIM3_CH4)
OUT1 输出 电机驱动输出端1 电机正极
OUT2 输出 电机驱动输出端2 电机负极

2. 模块外观展示

多角度展示HB-M09电机驱动模块的外观与尺寸

3. 原理图与PCB封装

模块电路原理图与PCB封装设计

原理图
电路原理图
PCB封装
PCB封装图

4. 程序分析

深入分析STM32驱动程序的实现细节

4.1 GPIO 配置

GPIO配置主要用于PWM输出引脚的复用功能设置。PB0和PB1分别配置为TIM3的通道3和通道4的PWM输出引脚,采用推挽复用输出模式,低速输出速率。
tim.c - HAL_TIM_MspPostInit
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};
  if(timHandle->Instance==TIM3)
  {
    /* TIM3 GPIO Configuration
    PB0     ------> TIM3_CH3
    PB1     ------> TIM3_CH4 */
    __HAL_RCC_GPIOB_CLK_ENABLE();

    GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  }
}

4.2 定时器PWM配置

定时器3配置为PWM模式,预分频器值为71,自动重装载值为999。PWM频率计算:72MHz / (71+1) / (999+1) = 1kHz。通道3和通道4均配置为PWM模式1,高电平有效。
tim.c - MX_TIM3_Init
TIM_HandleTypeDef htim3;

void MX_TIM3_Init(void)
{
  TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  TIM_MasterConfigTypeDef sMasterConfig = {0};
  TIM_OC_InitTypeDef sConfigOC = {0};

  htim3.Instance = TIM3;
  htim3.Init.Prescaler = 71;           // 预分频器 72MHz/72 = 1MHz
  htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim3.Init.Period = 999;               // 周期 1MHz/1000 = 1kHz PWM
  htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  HAL_TIM_Base_Init(&htim3);

  sConfigOC.OCMode = TIM_OCMODE_PWM1;       // PWM模式1
  sConfigOC.Pulse = 0;
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; // 高电平有效
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_3);
  HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_4);

  HAL_TIM_MspPostInit(&htim3);
}

4.3 主程序逻辑

主程序使用500ms定时周期,通过period变量控制电机状态切换。演示程序循环展示:反转(30%)→停止→反转(60%)→停止→反转(100%)→停止→正转(30%)→停止→正转(60%)→停止→正转(100%)→停止,共19个阶段循环。

控制逻辑:
• 正转:CH3 = (100-speed)×10, CH4 = 1000(PWMA低占空比,PWMB满占空比)
• 反转:CH3 = 1000, CH4 = (100-speed)×10(PWMA满占空比,PWMB低占空比)
• 停止:CH3 = 1000, CH4 = 1000(两路均满占空比,电机两端电压相等)
main.c - while(1) 主循环
while (1)
{
  if(HAL_GetTick() - Time_Now >= 500)  // 500ms定时
  {
    period++;  // 周期计数器递增

    // 反转 30% 速度
    if(period == 1) {
      speed = 30;
      __HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_3,1000);
      __HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_4,(100-speed)*10);
    }
    // 停止
    if(period == 3) {
      __HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_3,1000);
      __HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_4,1000);
    }
    // ... 更多速度档位 ...
    
    // OLED显示方向和速度
    OLED_Clear();
    if(period < 10)
      OLED_CenterPrintf(12, "反转");
    else
      OLED_CenterPrintf(12, "正转");
    OLED_CenterPrintf(36, "速度:%d%%", speed);
    OLED_Update();

    Time_Now = HAL_GetTick();
  }
}

4.4 控制状态对照表

状态 PWMA (CH3) 比较值 PWMB (CH4) 比较值 占空比关系 电机状态
正转 (speed%) (100-speed) × 10 1000 PWMA < PWMB 正转,速度与speed成正比
反转 (speed%) 1000 (100-speed) × 10 PWMA > PWMB 反转,速度与speed成正比
停止 1000 1000 PWMA = PWMB 电机两端电压相等,停止转动

5. 程序流程图

电机驱动控制程序的执行流程

开始 HAL_Init() 初始化 SystemClock_Config() GPIO / TIM3 初始化 OLED_Init() 启动PWM输出 TIM3_CH3 / TIM3_CH4 while (1) 500ms 定时到? 否 是 period++ 根据period设置 PWM占空比和方向 OLED更新显示 Time_Now = HAL_GetTick() 结束

6. 交互式动画演示

通过交互演示理解电机驱动的工作原理

电机模拟

直流电机
MOTOR Q1 Q2 Q3 Q4 VCC GND
速度调节 50%

OLED 显示 & 数据

==== HB-M09 ====
正转
速度: 50%
STM32F103
50%
PWMA 占空比
100%
PWMB 占空比
0
模拟转速 (RPM)
1000
PWM频率 (Hz)
PWM 波形示意
CH3 CH4

操作说明

正转/反转/停止:点击方向按钮切换电机转动状态,观察H桥开关管状态变化(绿色=导通,红色=截止)。

速度调节:拖动滑块调节PWM占空比,观察电机转速、PWM波形和OLED显示的实时变化。

OLED显示逻辑:与源程序保持一致,OLED始终显示方向(正转/反转)和速度百分比,电机停止时仍保留上一次的方向和速度显示。

开始/停止/重置:控制自动演示流程,演示程序将循环展示不同速度和方向的切换效果,与实物程序逻辑完全一致。