公司动态

[具身智能-793]:MCU 控制电机的运动的手段和方法?MCU 检测电机编码器反馈的手段与方法。

📅 2026/8/6 15:45:05
[具身智能-793]:MCU 控制电机的运动的手段和方法?MCU 检测电机编码器反馈的手段与方法。
MCU 控制电机运动手段 编码器反馈检测手段面向 STM32 等单片机机器人小车场景直流减速电机、步进电机、舵机区分输出控制MCU→电机、输入采集编码器→MCU两大部分。一、MCU 控制电机运动的手段和方法1. 直流有刷减速电机GB37‑520 这类小车电机目标控制转速、正反转、启停MCU 不能直接驱动电机大电流必须外接驱动芯片L298N、DRV8833、TB6612。1方向控制普通 GPIO 输出高低电平IN1、IN2 两个逻辑脚给到电机驱动芯片组合高低电平决定正转 / 反转 / 刹车 / 滑行。 例IN11,IN20 →正转IN10,IN21→反转IN1IN2 同电平→刹车。2速度控制PWM 脉冲宽度调制定时器输出 PWMPWM 占空比越大等效平均电压越高电机转速越快。频率常用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 MG996R1标准模拟舵机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 IO5V 编码器输出接到 3.3V MCU 需要分压防止烧毁 IO。三、工程闭环控制完整链路机器人小车plaintextMCU定时器PWM输出 →电机驱动芯片 →直流电机旋转 ↓ 电机同轴霍尔编码器输出A/B相 ↓ 接入STM32定时器编码器硬件接口硬件自动计数 ↓ MCU定时读取脉冲计数值换算真实转速 ↓ PID算法对比【目标转速】和【实际转速】更新PWM占空比输出四、资源选型小结电机控制输出主要消耗GPIO、定时器 PWM大功率电机依赖外部驱动芯片。编码器输入反馈优先使用定时器硬件 Encoder 正交解码尽量避免外部中断软件解码。一台双轮差分小车2 路电机 PWM 输出 2 路定时器编码器接口。