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;电机高速容易丢脉冲;电机抖动会频繁误触发。
仅低速场景临时用,底盘电机不要用此方案。
读取转速、位置逻辑
- 读取定时器 CNT 计数值,获得脉冲总数;
- 固定时间间隔采样两次计数值,差值得到脉冲变化量;
- 根据电机线数、减速比换算:角度、位移、转速 (rpm)。
注意:CNT 寄存器会溢出,需要做溢出补偿处理。
绝对值编码器
上电直接读出绝对角度位置,不需要记累计脉冲。
- SPI 接口 / I2C / SSI 串口,MCU 使用 SPI/I2C 外设读取角度。 机器人底盘较少,机械臂关节常用。
霍尔单通道编码器(只有 A 相,无 B 相)
只能计数脉冲,不能识别旋转方向,机器人基本不用。
编码器接线注意点
- 编码器 VCC/GND 必须供电,与 MCU 共地;
- 编码器输出电平 3.3V/5V 匹配 MCU IO;5V 编码器输出接到 3.3V MCU 需要分压,防止烧毁 IO。
三、工程闭环控制完整链路(机器人小车)
plaintext
MCU定时器PWM输出 →电机驱动芯片 →直流电机旋转 ↓ 电机同轴霍尔编码器输出A/B相 ↓ 接入STM32定时器编码器硬件接口,硬件自动计数 ↓ MCU定时读取脉冲计数值,换算真实转速 ↓ PID算法对比【目标转速】和【实际转速】,更新PWM占空比输出四、资源选型小结
- 电机控制输出:主要消耗:GPIO、定时器 PWM;大功率电机依赖外部驱动芯片。
- 编码器输入反馈:优先使用定时器硬件 Encoder 正交解码,尽量避免外部中断软件解码。
一台双轮差分小车:2 路电机 PWM 输出 + 2 路定时器编码器接口。