MCU 控制电机运动手段 + 编码器反馈检测手段

面向 STM32 等单片机,机器人小车场景:直流减速电机、步进电机、舵机;

区分输出控制(MCU→电机)输入采集(编码器→MCU)两大部分。

一、MCU 控制电机运动的手段和方法

1. 直流有刷减速电机(GB37‑520 这类小车电机)

目标:控制转速、正反转、启停;MCU 不能直接驱动电机大电流,必须外接驱动芯片(L298N、DRV8833、TB6612)。

1)方向控制:普通 GPIO 输出高低电平

  • IN1、IN2 两个逻辑脚给到电机驱动芯片,组合高低电平决定正转 / 反转 / 刹车 / 滑行。 例:IN1=1,IN2=0 →正转;IN1=0,IN2=1→反转;IN1=IN2 同电平→刹车。

2)速度控制:PWM 脉冲宽度调制(定时器输出 PWM)

  • PWM 占空比越大,等效平均电压越高,电机转速越快
  • 频率常用:10kHz‑20kHz(避开人耳听觉,减少电机啸叫)
  • MCU 片上定时器生成 PWM 输出到驱动芯片的 PWMA/PWMB 引脚。

MCU 输出逻辑信号,电机驱动芯片做功率放大。MCU 本身不流过电机大电流。

2. 步进电机

目标:控制转动角度、步数、转速 1)脉冲 + 方向模式(最常用)

  • STEP 脉冲:每来 1 个脉冲,电机走 1 步;定时器输出脉冲。
  • DIR 方向:GPIO 高低电平控制旋转方向。
  • 外接步进驱动:A4988、DRV8825,支持细分。 2)相位直接输出模式(全桥驱动,少用) MCU 直接输出 A、B、A‑、B‑四相时序,CPU 负担重,不推荐。

细分:驱动器内部处理,MCU 只需要发脉冲,不需要管细分。

3. 舵机(SG90 MG996R)

1)标准模拟舵机:PWM 角度控制(50Hz 周期) 周期 20ms,高电平 0.5ms~2.5ms 对应 0‑180° 角度。 定时器输出硬件 PWM;不是占空比,是高电平绝对时间决定角度

2)总线/数字舵机(串口舵机) UART 串口发送指令数据包,设定角度、转速;一条总线挂载多个舵机。

4. BLDC 无刷电机

  • FOC 矢量控制:MCU 定时器输出三相互补 PWM,配合电流采样,复杂;无人机、移动底盘使用。


二、MCU 检测电机编码器反馈的手段与方法

编码器作用:

测量电机实际转速、转过的脉冲数、位置

增量编码器(A/B 相正交编码器)、霍尔编码器、绝对值编码器

小车直流电机绝大多数是AB 相正交增量霍尔编码器

增量正交编码器 A/B 相(最常见,机器人小车)

输出 A 相、B 相两路方波。

  • 正转:A 相位超前 B 相 90°;反转:B 相位超前 A 相 90°。
  • 脉冲数:电机转一圈输出 N 个脉冲。
方案 1:定时器硬件正交解码(Encoder Mode,强烈推荐⭐)

STM32 高级 / 通用定时器自带编码器接口模式

  • 将 A、B 直接接入定时器 CH1、CH2 通道。
  • 硬件内部自动计数、自动判断正反转,不需要 CPU 干预
  • CNT 寄存器自动累加 / 递减脉冲。CPU 只需要定时读取 CNT 计数值。

优点:不占用 CPU,不会丢脉冲,高速旋转也可靠。

缺点:必须占用定时器的两个通道,不是所有定时器支持编码器模式

方案 2:外部中断 EXTI(软件解码,不推荐高速)

A、B 接到 GPIO,配置下降沿 / 上升沿外部中断。中断回调函数中读取 A、B 电平,判断方向,软件计数。

缺点: 电机转速很高时,中断频繁爆发,挤占 CPU;电机高速容易丢脉冲;电机抖动会频繁误触发。

仅低速场景临时用,底盘电机不要用此方案。

读取转速、位置逻辑

  1. 读取定时器 CNT 计数值,获得脉冲总数;
  2. 固定时间间隔采样两次计数值,差值得到脉冲变化量;
  3. 根据电机线数、减速比换算:角度、位移、转速 (rpm)。

注意:CNT 寄存器会溢出,需要做溢出补偿处理。

绝对值编码器

上电直接读出绝对角度位置不需要记累计脉冲。

  • SPI 接口 / I2C / SSI 串口,MCU 使用 SPI/I2C 外设读取角度。 机器人底盘较少,机械臂关节常用。

霍尔通道编码器(只有 A 相,无 B 相)

只能计数脉冲,不能识别旋转方向,机器人基本不用。

编码器接线注意点

  1. 编码器 VCC/GND 必须供电,与 MCU 共地;
  2. 编码器输出电平 3.3V/5V 匹配 MCU IO;5V 编码器输出接到 3.3V MCU 需要分压,防止烧毁 IO。

三、工程闭环控制完整链路(机器人小车)

plaintext

MCU定时器PWM输出 →电机驱动芯片 →直流电机旋转
        ↓
电机同轴霍尔编码器输出A/B相
        ↓
接入STM32定时器编码器硬件接口,硬件自动计数
        ↓
MCU定时读取脉冲计数值,换算真实转速
        ↓
PID算法对比【目标转速】和【实际转速】,更新PWM占空比输出

四、资源选型小结

  1. 电机控制输出:主要消耗:GPIO、定时器 PWM;大功率电机依赖外部驱动芯片。
  2. 编码器输入反馈:优先使用定时器硬件 Encoder 正交解码,尽量避免外部中断软件解码。

一台双轮差分小车:2 路电机 PWM 输出 + 2 路定时器编码器接口。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐