2. 直流电机基础

在机器人运动控制系统中,直流电机是最常见的执行元件。无论是两轮差速小车、四轮全向底盘,还是机械臂关节,其底层运动都依赖于直流电机的精确调速与换向。本章将深入剖析直流电机的工作原理、有刷与无刷电机的本质差异,并重点讲解H桥驱动电路以及L298N、TB6612两款主流驱动芯片的工程应用。理解这些基础,是后续实现PWM调速和PID闭环控制的前提。

直流电机驱动与反馈链路架构 电源 7.2V / 11.1V STM32 MCU TIM PWM + GPIO 驱动芯片 L298N / TB6612 直流电机 有刷 / 无刷 编码器 AB相 / 霍尔 VCC PWM/IN1/IN2 OUT1/OUT2 同轴 TIM Encoder Mode GND 共地 闭环控制回路

2.1 直流电机工作原理:从安培力到电磁转矩

直流电机(Brushed DC Motor)的核心物理基础是安培力定律:通电导体在磁场中会受到力的作用。电机内部包含定子(永磁体或电磁铁)和转子(电枢绕组)。当直流电流通过电枢绕组时,载流导体在定子磁场中受到电磁力,产生电磁转矩,驱动转子旋转。转子旋转后,换向器(Commutator)与电刷(Brush)配合,自动切换绕组中的电流方向,保证转矩方向始终一致。

对于机器人应用,我们更关注电机的机械特性方程:n = (U - I·R) / (Ke·Φ),其中n为转速,U为电枢电压,I为电枢电流,R为电枢电阻,Ke为电动势常数,Φ为磁通。该公式揭示了调速的本质:改变电枢电压U是最直接、最高效的调速方式,这正是后续PWM调速的理论依据。

关键参数理解:额定电压、空载转速、堵转转矩、额定转矩。选型时需确保电机在机器人实际负载下工作于额定转矩附近,避免长期堵转导致过热烧毁。

2.2 有刷与无刷电机的工程对比

有刷电机(Brushed Motor)依靠电刷与换向器进行机械换向,结构简单、成本低、控制容易(只需两根电源线),但存在电刷磨损、换向火花、噪声大、寿命短等缺点。无刷电机(Brushless Motor,BLDC)采用电子换向器(通过MOSFET功率管),转子为永磁体,定子为绕组,需要控制器根据转子位置信号(霍尔传感器或反电动势检测)依次导通各相绕组。

对比维度有刷电机无刷电机
换向方式机械换向(电刷+换向器)电子换向(MOSFET+控制器)
控制复杂度低(PWM+方向即可)高(需换向逻辑+三相驱动)
寿命与维护电刷磨损,需定期更换无磨损,寿命长
效率与噪声较低,有火花噪声较高,安静
成本低高(电机+驱动板)
机器人适用场景小型轮式底盘、舵机、玩具无人机、高性能机器人关节、云台

在STM32机器人课程中,我们优先选择带霍尔编码器的有刷电机作为学习对象,原因在于:控制接口简单(PWM+方向),编码器反馈直接,便于理解PID闭环逻辑。无刷电机更适合对效率、噪音和寿命有更高要求的场景,但其换向逻辑和驱动电路复杂度较高,适合进阶学习。

2.3 电机驱动方式:H桥原理与PWM调速

直流电机需要双向转动,而STM32的GPIO只能输出低电平(0V)或高电平(3.3V),无法直接驱动电机。H桥电路(H-Bridge)是解决这一问题的经典方案。H桥由4个开关管(MOSFET或三极管)组成,形似字母"H"。通过控制4个开关管的通断组合,可以改变电机两端的电压极性,从而实现正转、反转、制动和滑行四种状态。

  • 正转:Q1和Q4导通,Q2和Q3关断,电流从OUT1流向OUT2。
  • 反转:Q2和Q3导通,Q1和Q4关断,电流从OUT2流向OUT1。
  • 制动:Q1和Q3导通(或Q2和Q4导通),电机两端短路,产生反向电动势制动。
  • 滑行:4个开关管全部关断,电机自由转动。

实际调速时,我们使用PWM(脉冲宽度调制)技术:保持H桥开关状态不变,以高频(通常10kHz-20kHz)切换导通与关断,通过改变占空比(Duty Cycle)来调节电机两端的平均电压。例如,占空比50%时,平均电压为电源电压的一半,电机转速约为空载转速的一半。PWM频率需高于人耳听觉范围(>20kHz)以避免噪音,同时需考虑驱动芯片的开关损耗。

重要提醒:H桥电路必须避免直通(Shoot-through),即同一桥臂的上下两个开关管同时导通,导致电源短路烧毁器件。因此,控制信号中必须加入死区时间(Dead Time),确保一个开关管完全关断后再导通另一个。

2.4 驱动芯片实战:L298N与TB6612对比选型

分立元件搭建H桥电路繁琐且可靠性低,实际工程中通常使用集成驱动芯片。L298N和TB6612是两款最常用的直流电机驱动芯片,也是本课程实验平台的核心器件。

参数L298NTB6612FNG
驱动方式双H桥双H桥
逻辑电压5V2.7V-5.5V(兼容3.3V)
电机电压5V-35V2.5V-13.5V
峰值电流2A/通道1.2A/通道
导通压降约2V(饱和压降大)约0.5V(低导通电阻)
PWM频率最高约40kHz最高约100kHz
封装与体积大(MultiWatt15)小(SSOP24)
发热情况严重,需加散热片较低
典型应用大功率电机、机器人底盘小型电机、智能车

L298N的优势在于电压范围宽、电流大,适合驱动大功率电机(如12V直流减速电机),但缺点是导通压降大(约2V),导致效率低、发热严重,且逻辑电平为5V,与STM32的3.3V GPIO连接时需注意电平转换或使用模块上的稳压电路。典型接线为:STM32的PA0(PWM)接ENA,PA1接IN1,PA2接IN2,电源12V接VS,GND共地。

TB6612FNG是更现代的选择,其内部采用MOSFET H桥,导通压降仅约0.5V,效率高、发热小,且逻辑电平兼容3.3V,可直接与STM32连接。虽然峰值电流较小(1.2A),但对于常见的N20电机、GA12-N20减速电机(额定电流约200-500mA)完全足够。接线方式为:VM接电机电源(2.5V-13.5V),VCC接3.3V逻辑电源,PWMA接STM32定时器PWM输出,AIN1/AIN2接GPIO控制方向,AO1/AO2接电机。

2.5 案例拆解:基于TB6612的STM32电机驱动与调速实现

下面通过一个完整的实验案例,演示如何用STM32F103C8T6和TB6612驱动一个带霍尔编码器的直流减速电机,并实现开环PWM调速。该案例是后续PID闭环控制的基础。

硬件连接:

STM32F103C8T6    TB6612FNG    直流电机(带编码器)
PA0 (TIM2_CH1)  → PWMA        电机红线 → AO1
PA1             → AIN1        电机黑线 → AO2
PA2             → AIN2        
PB4             → STBY (接3.3V使能)
3.3V            → VCC
12V             → VM (电机电源)
GND             → GND
PA6 (TIM3_CH1)  → 编码器A相
PA7 (TIM3_CH2)  → 编码器B相

软件实现步骤:

  1. 初始化GPIO:配置PA0为复用推挽输出(TIM2_CH1),PA1、PA2为推挽输出,PA6、PA7为浮空输入(编码器模式)。
  2. 配置定时器PWM:TIM2预分频72-1,自动重载1000-1,输出比较模式为PWM1,占空比初始为0。
  3. 配置编码器接口:TIM3设为编码器模式(TI1+TI2),计数范围0-65535,用于读取电机转速。
  4. 编写调速函数:设置占空比(0-1000对应0%-100%),通过改变CCR1寄存器值实现。
// PWM初始化(简化版)
void PWM_Init(void) {
    RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
    RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
    GPIOA->CRL = (GPIOA->CRL & ~0xFFF) | 0xBBB; // PA0复用推挽,PA1/PA2推挽
    TIM2->PSC = 72 - 1;   // 1MHz计数频率
    TIM2->ARR = 1000 - 1; // PWM频率1kHz
    TIM2->CCMR1 = TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2; // PWM1模式
    TIM2->CCER = TIM_CCER_CC1E;
    TIM2->CR1 = TIM_CR1_CEN;
}

// 设置电机转速和方向
void Motor_SetSpeed(int speed) { // speed: -1000 ~ +1000
    if (speed > 0) {
        GPIOA->BSRR = GPIO_BSRR_BR1;   // AIN1=0
        GPIOA->BSRR = GPIO_BSRR_BS2;   // AIN2=1
        TIM2->CCR1 = speed;
    } else if (speed < 0) {
        GPIOA->BSRR = GPIO_BSRR_BS1;   // AIN1=1
        GPIOA->BSRR = GPIO_BSRR_BR2;   // AIN2=0
        TIM2->CCR1 = -speed;
    } else {
        GPIOA->BSRR = GPIO_BSRR_BR1 | GPIO_BSRR_BR2; // 制动
        TIM2->CCR1 = 0;
    }
}

测试结果与分析:将占空比从0逐步增加到80%,电机转速从0稳步上升,编码器反馈的脉冲频率与设定值呈线性关系。当占空比超过90%时,转速增长趋缓,这是因为电机反电动势接近电源电压,电流减小导致转矩下降。该实验验证了PWM调速的线性特性,也暴露了开环控制的不足:当负载变化(如车轮碰到障碍物)时,转速会明显下降,这正是后续需要引入PID闭环的原因。

工程经验:在电机驱动电路中,务必在电机两端并联一个续流二极管(或使用芯片内部集成的二极管),以吸收关断瞬间的反向电动势,防止击穿MOSFET。TB6612内部已集成,但L298N模块通常需要外接。

2.6 常见误区与总结复盘

在电机驱动调试中,初学者常犯以下错误:

  • 共地问题:STM32的GND与驱动芯片的GND、电源的GND必须可靠连接,否则逻辑电平无法形成回路,电机不转或乱转。
  • PWM频率选择不当:频率过低(如100Hz)会导致电机啸叫和转速波动;频率过高(如100kHz以上)会增加开关损耗。推荐使用10kHz-20kHz。
  • 忽略使能引脚:TB6612的STBY引脚必须接高电平,否则芯片处于待机状态,电机无法驱动。
  • 编码器接线错误:A/B相接反会导致计数方向相反,在闭环控制中会引起正反馈振荡。

本章总结:直流电机通过安培力产生转矩,调速的本质是调节电枢电压。有刷电机结构简单、控制方便,适合教学和轻载场景;无刷电机效率高、寿命长,但控制复杂。H桥电路实现了电机的双向驱动,PWM技术实现了高效调速。L298N适合大功率应用,TB6612更适合与STM32配合的精密控制。掌握这些基础后,下一阶段我们将深入编码器数据读取与PID闭环控制算法,实现机器人的精确速度控制。