4、电机驱动基础:直流电机、步进电机、伺服电机的工作原理,以及常用驱动器(如L298N、A4988、TB6600)的接口与控制方法
在运动控制系统中,电机是最终的执行机构,其类型选择与驱动方式直接决定了轨迹规划的精度、响应速度与负载能力。STM32作为主控芯片,并不直接驱动电机,而是通过GPIO、定时器PWM、编码器接口等外设与电机驱动器交互。因此,理解直流电机、步进电机、伺服电机三类主流电机的工作原理,掌握L298N、A4988、TB6600等常用驱动器的接口时序与控制方法,是后续实现插补算法与闭环控制的基础。本章将从电机本体原理出发,逐步深入到驱动器接口与STM32控制逻辑,并给出选型与调试的实战建议。
4.1 直流电机的工作原理与PWM调速控制
4.1.1 核心原理:从电磁转矩到PWM调速
直流电机(DC Motor)是最基础的电机类型,其工作原理基于通电导体在磁场中受力的安培定律。当电枢绕组通入直流电流时,在定子磁场作用下产生电磁转矩,驱动转子旋转。对于有刷直流电机,电刷与换向器实现电流方向的自动切换,保证转矩方向恒定。转速公式为:n = (U - I·R) / (K·Φ),其中U为电枢电压,I为电枢电流,R为电枢电阻,K为结构常数,Φ为磁通。可见,调节电枢电压U是最常用的调速方式。
STM32通过定时器产生PWM波,经驱动器功率放大后施加到电机两端。PWM占空比D决定了平均电压U_avg = D·Vcc,从而控制转速。例如,12V电机在50%占空比下平均电压为6V,转速约为额定转速的一半。PWM频率通常选择10kHz-20kHz,高于人耳听觉上限,避免啸叫,同时保证电流纹波在可接受范围。
4.1.2 L298N驱动器接口与控制方法
L298N是经典的H桥双路直流电机驱动器,内置两个H桥,可驱动两台直流电机或一台步进电机。其接口逻辑如下:
| 引脚 | 功能 | STM32连接 | 控制逻辑 |
|---|---|---|---|
| ENA/ENB | 使能PWM输入 | TIM_CH(PWM输出) | 高电平使能,PWM占空比调速 |
| IN1/IN2 | 电机A方向控制 | GPIO输出 | IN1=1,IN2=0正转;反之反转 |
| IN3/IN4 | 电机B方向控制 | GPIO输出 | 同上 |
| OUT1-OUT4 | 电机接线端子 | 接电机两端 | — |
| VS | 电机电源(5-35V) | 外部电源 | 需与逻辑电源共地 |
| VSS | 逻辑电源(5V) | STM32 5V或板载稳压 | — |
STM32控制代码中,使用GPIO控制方向,使用定时器PWM控制速度。典型初始化流程为:使能定时器时钟→配置PWM通道→设置占空比→配置GPIO为推挽输出→设置方向引脚电平。需要注意,L298N的饱和压降约2V,在低电压供电时效率较低,且EN引脚必须接PWM才能调速,若直接接高电平则电机全速运转。
4.1.3 实战场景:STM32控制直流电机实现闭环速度
在移动机器人轮式驱动场景中,我们使用L298N驱动两个直流减速电机,并配合霍尔编码器实现速度闭环。系统参数:电机额定电压12V,减速比30:1,编码器线数13线(经倍频后每转156脉冲)。STM32定时器2产生20kHz PWM,定时器3工作在编码器模式读取速度。
// 定时器2 PWM初始化(PA0-CH1)
TIM_TimeBaseInitTypeDef TIM_InitStruct;
TIM_OCInitTypeDef OC_InitStruct;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_InitStruct.TIM_Prescaler = 84-1; // 84MHz/84=1MHz
TIM_InitStruct.TIM_Period = 50-1; // 1MHz/50=20kHz
TIM_TimeBaseInit(TIM2, &TIM_InitStruct);
OC_InitStruct.TIM_OCMode = TIM_OCMode_PWM1;
OC_InitStruct.TIM_Pulse = 25; // 初始50%占空比
OC_InitStruct.TIM_OutputState = TIM_OutputState_Enable;
TIM_OC1Init(TIM2, &OC_InitStruct);
TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);
TIM_Cmd(TIM2, ENABLE);
速度闭环采用增量式PID,采样周期10ms。目标速度通过轨迹规划模块下发,实际速度由编码器计算。调试中发现,当PWM占空比从0突加到50%时,电机启动电流可达稳态电流的5-8倍,容易触发L298N过流保护。解决方案是在PID输出端增加斜坡限幅,将加速度限制在500rpm/s以内。
4.2 步进电机的工作原理与细分驱动
4.2.1 核心原理:脉冲-角度映射与矩频特性
步进电机是一种将电脉冲信号转换为角位移的执行机构。每输入一个脉冲,转子转过一个固定角度(步距角)。以两相混合式步进电机为例,基本步距角为1.8°,即200个脉冲转一圈。通过驱动器细分技术,可将步距角细分为1/2、1/4、1/8、1/16甚至1/32,从而获得更高的定位分辨率。例如1/16细分下,每个脉冲对应0.1125°,转一圈需要3200个脉冲。
步进电机的转矩-频率特性(矩频特性)是选型的关键:随着脉冲频率升高,输出转矩下降。这是因为绕组电感限制了电流上升速率,高频下电流无法达到额定值。在轨迹规划中,必须考虑电机的启动频率(通常100-200Hz)和最高运行频率(通常1-2kHz),采用梯形或S形加减速曲线避免失步。
4.2.2 A4988与TB6600驱动器对比
| 特性 | A4988 | TB6600 |
|---|---|---|
| 驱动电流 | ±2A(峰值) | 4A(峰值) |
| 供电电压 | 8-35V | 9-42V |
| 细分设置 | MS1/MS2/MS3引脚组合,最高1/16 | S1-S3拨码开关,最高1/32 |
| 接口信号 | STEP/DIR/EN(3.3V兼容) | PUL/DIR/ENA(光耦隔离) |
| 适用场景 | 3D打印机、小型CNC | 大型CNC、雕刻机 |
| 散热方式 | 需加散热片 | 内置风扇 |
A4988的STEP引脚每收到一个上升沿,电机走一步;DIR引脚电平决定方向;EN低电平使能输出。其逻辑电源VDD为3.3-5V,可直接由STM32供电。TB6600则采用光耦隔离输入,PUL+接STM32的PWM输出,PUL-接GND,DIR+接方向GPIO,DIR-接GND。注意TB6600的输入信号需要共阳极接法,即公共端接5V,信号端接GPIO。
4.2.3 案例拆解:基于TB6600的两轴步进电机轨迹控制
在桌面型XY绘图仪项目中,X轴和Y轴分别由57步进电机驱动,通过TB6600驱动器设置为1/8细分(每转1600脉冲)。STM32使用定时器4产生脉冲序列,通过改变定时器自动重载值来调节脉冲频率,实现速度控制。
// 定时器4产生脉冲,频率=84MHz/(prescaler*period)
void STEP_SetFreq(uint32_t freq) {
uint32_t period = 84000000 / (freq * 10); // prescaler=10
TIM_SetAutoreload(TIM4, period-1);
}
// 方向控制
void DIR_SetDir(uint8_t dir) {
GPIO_WriteBit(GPIOB, GPIO_Pin_5, dir ? Bit_SET : Bit_RESET);
}
// 使能控制
void EN_SetEnable(uint8_t en) {
GPIO_WriteBit(GPIOB, GPIO_Pin_6, en ? Bit_RESET : Bit_SET); // 低电平使能
}
轨迹规划模块计算每个插补周期的目标位置,运动控制模块根据当前位置与目标位置的差值,通过梯形加减速算法生成脉冲频率序列。实际测试中,当脉冲频率从0突升至2000Hz时,电机出现明显失步(丢步约10°)。分析发现,TB6600的输入信号上升沿要求最小宽度为2μs,而STM32在中断中修改定时器寄存器存在延迟。解决方案是使用DMA或定时器比较通道直接控制STEP引脚,减少软件延迟。
4.3 伺服电机的工作原理与闭环控制
4.3.1 核心原理:三环控制与PWM脉宽映射
伺服电机(Servo Motor)通常指带有编码器反馈的直流无刷电机或交流永磁同步电机,由专用伺服驱动器完成电流环、速度环、位置环的三环闭环控制。在STM32应用中,我们通常使用PWM信号控制伺服电机的目标位置(位置模式)或目标速度(速度模式)。对于航模舵机类伺服,PWM脉宽1.0ms对应-90°,1.5ms对应0°,2.0ms对应+90°,周期为20ms。
对于工业伺服驱动器,通常采用脉冲+方向接口(与步进电机类似)或总线通信(CANopen、EtherCAT)。在脉冲模式下,伺服驱动器内部完成位置闭环,STM32只需发送脉冲序列即可。与步进电机不同,伺服电机不会失步,因为编码器实时检测实际位置并修正。
4.3.2 伺服控制的关键参数与调试方法
伺服驱动器的调试参数包括:位置环增益(Kp)、速度环增益(Kv)、速度环积分时间常数(Ti)、电流环带宽等。在STM32轨迹规划中,我们主要关注伺服驱动器的电子齿轮比设置。例如,设置电子齿轮比为电机每转脉冲数=10000,则STM32发送10000个脉冲,电机转一圈。
调试流程:①先设置伺服为速度模式,手动给定速度指令,确认电机旋转方向与指令一致;②切换至位置模式,发送少量脉冲(如100个),观察电机是否转动对应角度;③逐步增加脉冲频率,观察是否出现跟随误差报警;④调整位置环增益,使系统响应快且无振荡。
4.3.3 实战场景:STM32控制伺服电机实现精准定位
在小型六轴机械臂项目中,每个关节使用400W伺服电机,驱动器设置为位置模式,电子齿轮比1:10000。STM32通过定时器产生脉冲序列,最高频率500kHz。由于机械臂运动学计算需要精确的关节角度,伺服电机的编码器分辨率(17位,131072线)提供了足够的反馈精度。
实际调试中遇到一个问题:当机械臂快速运动时,伺服驱动器偶尔报“跟随误差过大”报警。通过示波器观察脉冲波形,发现STM32在中断中发送脉冲时,由于其他中断(如通信中断)抢占,导致脉冲间隔不均匀。解决方案是使用定时器DMA突发模式,将脉冲数据预先存储在内存中,由DMA自动搬运到定时器寄存器,保证脉冲序列的均匀性。
4.4 电机选型与驱动方案对比
4.4.1 三类电机的选型决策矩阵
| 维度 | 直流电机 | 步进电机 | 伺服电机 |
|---|---|---|---|
| 控制精度 | 低(依赖编码器) | 中(开环,可能失步) | 高(闭环,无失步) |
| 转速范围 | 高(数千rpm) | 低(通常<1000rpm) | 中高(3000-5000rpm) |
| 转矩特性 | 转速升高转矩下降 | 低速大转矩,高速转矩下降 | 恒转矩区宽 |
| 成本 | 低 | 中 | 高 |
| 控制复杂度 | 简单(PWM) | 中等(脉冲+方向) | 复杂(需驱动器调试) |
| 典型应用 | 风机、泵、玩具 | 3D打印、CNC、定位平台 | 机器人关节、高精度设备 |
4.4.2 驱动器接口与STM32资源映射
在STM32工程中,不同驱动器占用的外设资源不同。L298N需要2个GPIO(方向)+1个定时器PWM通道(速度);A4988需要2个GPIO(STEP/DIR)+1个GPIO(EN),STEP可由定时器PWM输出;TB6600需要2个GPIO(PUL/DIR)+1个GPIO(ENA),PUL可由定时器PWM输出;伺服驱动器需要1个定时器PWM通道(位置指令)或脉冲输出+方向GPIO。
规划多轴系统时,需注意STM32定时器资源分配。例如,STM32F103有8个定时器,其中高级定时器TIM1/TIM8可输出互补PWM,通用定时器TIM2-TIM5各有4个通道。对于4轴步进电机控制,可使用TIM2-TIM5分别产生4路脉冲,每路占用1个通道。
4.4.3 常见误区与总结复盘
- 误区一:认为步进电机不需要编码器就无法实现闭环。实际上,通过增加外部编码器,步进电机也可以实现闭环控制,但响应速度不如伺服电机。
- 误区二:忽略驱动器的电流设置。A4988的电流通过Vref引脚调节,Vref=电流×8×感应电阻。设置不当会导致电机发热或转矩不足。
- 误区三:在步进电机高速运行时使用过大的细分。细分越高,脉冲频率要求越高,当频率超过驱动器最大响应频率时,反而会降低转矩。
- 误区四:伺服电机的脉冲接口与步进电机完全相同。实际上,伺服驱动器的脉冲输入需要差分信号(RS422)或光耦隔离,且对脉冲宽度有严格要求。