移动机器人差速底盘双电机怎么驱动:IRFP064双H桥与LM339混控死区七步讲透

差速底盘的两个轮子不是"各自调速",而是由油门与转向两条指令混控出左右两路目标转速。本文基于双电机双向调速控制器设计资料,讲清五段信号链、LM339 双斜坡 PWM 与回差、IRFP064 双 H 桥约 100ns 死区与同步整流、LM2937ET-5 加 MC34163P 双电源,附 STM32 混控与死区代码及七步落地清单。

2026-10-17
差速驱动移动机器人双H桥IRFP064PWM混控死区

移动机器人、AGV 与履带底盘的经典结构都是"左右两套驱动",转向不靠舵机,而是靠两侧轮子产生转速差。于是控制器的第一件事不是调速,而是混控:把一条油门指令和一条转向指令合成左右两路电机指令——左轮 = 油门 + 转向,右轮 = 油门 − 转向。结论先给三条:第一,混控必须在"后退"时把转向极性取反,否则倒车打方向会越打越偏;第二,两路 PWM 用"双三角斜坡 + 两个比较器"生成,两条斜坡之间的间隙就是中位死区,死区太小电机停不干净、太大则小信号不响应;第三,H 桥必须留约 100ns 死区并配快恢复二极管与栅极齐纳钳位,否则直通电流与电感尖峰几分钟就能烧掉 FET 与驱动 IC。

一、差速底盘为什么必须"混控"

差速驱动的本质是运动学反解:给定底盘的前进速度与自转角速度,算出左右轮的线速度。摇杆或遥控器输出的是"油门 T"与"转向 S"两个量,二者都以中位为零点。嵌入式控制器要做的第一步就是把 T、S 线性组合成左右两个目标值,再做限幅。

运动意图油门 T转向 S左轮 = T + S右轮 = T − S
直行全速+100%0+100%+100%
原地右转0+60%+60%(前)−60%(后)
前进右转弯+80%+30%+110% → 限幅 100%+50%
后退左转(未取反)−80%−30%−110% → 限幅 −100%−50%
后退左转(已取反)−80%+30%−50%−100%

第四、五行是同一个操作意图的两种结果:当油门为负(倒车)时,转向指令必须先取反再相加,否则"左转"会变成右转。这就是很多自制底盘"前进正常、倒车方向反了"的根因,也是混控逻辑里唯一不能省的判断。

二、五段信号链:控制器到底由哪几块组成

这套双向调速控制器可以拆成五段:指令接口、混控、PWM 生成、功率级、电源。每段都有明确的输入输出边界,任何一段出问题,现象都不一样。

段功能关键器件/参数输出
① 指令接口把遥控脉宽转成模拟电压恒流源积分 + 采样保持;1.0 / 1.5 / 2.0 ms,帧率 50~60 Hz1.5~3.5 V,中位 2.5 V
② 混控油门与转向加减、倒车取反运放加减法器 + 模拟传输门切换极性两路 1.5~3.5 V
③ PWM 生成模拟电压转可调占空比NE555 + 恒流源三角波、LM339 ×2、回差 2.2 MΩ/20 kΩ两路逻辑 PWM
④ 功率级双向驱动电机IR2110 半桥驱动、IRFP064 ×8、栅极电阻 30 ΩH 桥,约 70 A 能力
⑤ 电源控制 5 V 与栅压 18 VLM2937ET-5(低压差)、MC34163P(升压)5 V / 18 V
① 指令接口 脉宽 → 电压 ② 混控 T+S / T−S ③ 双斜坡 PWM LM339 + 死区 ④ 双 H 桥 IR2110+IRFP064 左轮电机 右轮电机 ⑤ 电源:LM2937ET-5(5V,低压差)+ MC34163P(18V 栅压,限流 150mA)
图 1 五段信号链:指令接口 → 混控 → 双斜坡 PWM → 双 H 桥 → 双电机,电源独立成段

值得注意的是第①段:遥控接收机给出的是脉宽 1.0~2.0 ms、周期 20 ms 的方波,中位 1.5 ms。要把它变成稳定电压,做法不是简单 RC 滤波,而是恒流源给电容积分、脉宽结束时用采样保持锁存电压,再让电容放电等待下一帧。恒流积分保证"脉宽—电压"线性,采样保持保证帧与帧之间输出不塌陷。中位 1.5 ms 对应 2.5 V,满行程摆到 1.5~3.5 V,后续所有环节都以 2.5 V 为"零"。

三、双斜坡 PWM:中位死区是怎么来的

有了模拟控制电压,下一步把它变成占空比。这里用的是经典的两路三角斜坡 + 两个比较器方案,而不是单斜坡:一路斜坡整体抬高,驱动 H 桥的 A 侧;另一路整体压低,驱动 B 侧。当控制电压落在两条斜坡之间的空隙时,两侧都是"下管导通",电机两端等电位,真正断电;控制电压高于上斜坡,A 侧上管按比例导通,电机正转;低于下斜坡,B 侧上管导通,电机反转。

t V 控制电压 2.5V(中位) 上斜坡底 ≥ 2.5V 下斜坡顶 ≤ 2.5V 中位死区 A 侧上管导通比例增加 → 正转 B 侧上管导通比例增加 → 反转
图 2 两路斜坡错开后,中位附近两条斜坡的间隙即为死区,电机在此区间内两端等电位而停转

斜坡本身也有讲究。直接用 555 的 RC 充放电得到的是指数波,占空比对控制电压的响应是非线性的;换成可切换的恒流源(Widlar 电流镜加开关管)给定时电容充放电,才得到线性三角波,PWM 占空比与控制电压才成正比。比较器用 LM339(开漏输出,需上拉),并加正反馈形成约数毫伏的回差,保证比较翻转时只产生一次干净边沿,不会在门限附近来回抖。

调参取向斜坡幅度死区设置结果
要极限速度略小于 0.5 V(峰峰)上斜坡底部略高于 2.5 V、下斜坡顶部略低于 2.5 V满油门可达电机最高速,但转向在中位附近非线性
要线性手感1.0 V(峰峰)同上方法设置转向响应全行程线性,代价是极速约为一半
死区过小—两条斜坡重叠或贴近摇杆回中后电机仍在微转,"停不下来"
死区过大—两斜坡间隙过宽中位附近操作无响应,"打舵不动"

四、H 桥:死区、直通与同步整流

H 桥只需两个逻辑信号就能驱动一路电机:把 A 侧上管的驱动信号取反后送给 A 侧下管(ALO = !AHI),B 侧同理,这样同一侧上下管永远不会同时导通。前进时开 A 侧上管 + B 侧下管,后退时开 B 侧上管 + A 侧下管。

但"逻辑上不会同时导通"不等于"物理上不会"。大功率 MOSFET 的栅极电容可达 7400 pF,开关需要时间,从一个管子关断到另一个管子开通之间存在两管都导通的窗口,即直通。这套设计用"RC 充电延迟 + 二极管快速泄放"的延时电路,让开通被延迟约 100 ns、关断不延迟,天然形成死区。要特别说明的是:死区并非越大越安全——过长的死区会让体二极管承担更多续流,反而增加损耗。

续流本身也有文章可做。电机是大电感负载,PWM 关断瞬间会产生高压尖峰,利用"关断一侧管子时同步开通另一侧管子"的同步整流可以把这部分能量放掉。但 MOSFET 的体二极管恢复慢,所以实际电路在每个 FET 两端再并联快恢复二极管(如 20ETF02)兜底,并用齐纳管(如 1N4705)保护驱动 IC 输入端不被尖峰打穿。栅极串 30 Ω 电阻抑制振荡,栅极驱动用 IR2110 半桥驱动芯片,一颗内含高边与低边两路,8 颗 FET 用 4 颗驱动即可。

设计项取值/做法作用
死区约 100 ns,开通延迟、关断直通防上下管直通;过大反而增加续流损耗
栅极电阻30 Ω抑制栅极振荡,兼顾开关速度
快恢复二极管每管并联 20ETF02 类补体二极管恢复慢的短板,帮续流
栅极齐纳钳位1N4705 类保护驱动 IC 输入,抗母线尖峰
母线电容4700 µF,紧贴功率管吸收换向冲击,抑制母线塌陷
功率走线12 号粗线,源极引线尽量短降低寄生电感,减少尖峰与误触发
保险丝电池与控制器之间必须串动力电池短路电流极大,无保险等于埋雷

五、双电源与实测教训

控制部分要 5 V,栅极驱动却要将近 18 V——因为大功率 MOSFET 要可靠导通,栅源之间通常需要 10 V 以上,而底盘电池只有 7.2 V。这套设计用 LM2937ET-5 低压差稳压器产出 5 V(输入电压可低至 6 V 以下仍工作,输出能力 500 mA,而控制电路总耗不到 100 mA,输入耐压 26 V),再用 MC34163P 构成小功率升压把 7.2 V 抬到 18 V,输出电流不到 25 mA,短路保护设在 150 mA。若底盘改用 12 V 及以上电池,则可以直接用自举电容从 12 V 取栅压,省掉这一路升压电源。

更值得记录的是原型阶段的实测结论:用小电机(2~3 A)测试一切正常,换上 20~30 A 的大电机后,FET 与驱动 IC 在几分钟内就炸了。三项修正把可靠性救了回来——缩短高低边切换的死区时间、给驱动 IC 加齐纳保护、补加快恢复二极管辅助同步整流。即便如此,手工搭焊的板子在 30 A 工况下仍然不够稳,最终结论是必须做 PCB:功率区按高边一排、低边一排布置,驱动 IC 夹在两排中间让栅极走线最短,信号地与功率地只在电池负极汇合点单点相连,驱动 IC 的 5 V 与栅压输入旁各放 0.1 µF 去耦。

六、改用 MCU 实现时的混控与死区

今天做移动机器人底盘,多数团队会直接用 STM32 定时器生成互补 PWM、由固件完成混控,省掉一半模拟器件。但混控逻辑与死区计算这两件事和模拟方案完全一致,代码必须写对。

/* 差速底盘混控 + 死区计算(可直接移植到 STM32 HAL 工程) */
#include "main.h"

#define PWM_FULL        10000       /* 满占空比计数,对应 100% */
#define T_DEAD_NS       100         /* 死区 100 ns */
#define TMR_TICK_NS     (1000000000UL / (PWM_FREQ_HZ * PWM_FULL))  /* 每个计数值的 ns */

typedef struct {
    int32_t left;      /* 左轮目标 -10000 ~ +10000 */
    int32_t right;     /* 右轮目标 -10000 ~ +10000 */
} drive_cmd_t;

/* throttle / steering 为 -10000 ~ +10000;返回左右轮目标 */
static drive_cmd_t Diff_Drive_Mix(int32_t throttle, int32_t steering)
{
    drive_cmd_t c;
    int32_t s = steering;

    /* 关键:倒车时转向极性取反,否则后退打舵方向相反 */
    if (throttle < 0) {
        s = -s;
    }

    c.left  = throttle + s;
    c.right = throttle - s;

    /* 限幅到 +-10000,避免超过满占空比 */
    if (c.left  >  PWM_FULL) c.left  =  PWM_FULL;
    if (c.left  < -PWM_FULL) c.left  = -PWM_FULL;
    if (c.right >  PWM_FULL) c.right =  PWM_FULL;
    if (c.right < -PWM_FULL) c.right = -PWM_FULL;
    return c;
}

/* 计算死区寄存器值:开通沿延迟、关断沿按硬件规则不延迟 */
static inline uint32_t DeadTime_Reg(void)
{
    uint32_t ticks = T_DEAD_NS / TMR_TICK_NS;
    return (ticks == 0U) ? 1U : ticks;
}

/* 把双向目标映射为"方向 + 占空比"两路 H 桥控制 */
void Drive_Apply(drive_cmd_t c)
{
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0,
        (c.left  >= 0) ? GPIO_PIN_RESET : GPIO_PIN_SET);      /* 左轮方向 */
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1,
        (c.right >= 0) ? GPIO_PIN_RESET : GPIO_PIN_SET);      /* 右轮方向 */

    __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1,
        (uint32_t)((c.left  < 0 ? -c.left  : c.left)  / 2) & 0xFFFF);
    __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2,
        (uint32_t)((c.right < 0 ? -c.right : c.right) / 2) & 0xFFFF);

    TIM1->BDTR = (DeadTime_Reg() & 0xFF) | TIM_BDTR_MOE;      /* 死区 + 主输出使能 */
}

这段代码对应三条硬件约束:一是混控后的目标必须限幅,否则一侧指令超过满占空比会被截断,而另一侧仍在变化,转向手感会突变;二是死区时间由定时器计数器换算得出,100 ns 在不同主频与 PWM 分辨率下换算出的计数值不同,不能照抄;三是双向驱动必须"方向 + 占空比"分离,先定方向再给占空比,避免换向瞬间产生制动电流。

对比项模拟方案(双斜坡 + LM339)MCU 方案(STM32 定时器 + 固件混控)
混控实现运放加减 + 模拟传输门切极性固件一行判断 + 加减法
死区生成RC + 二极管延时,约 100 ns,误差大定时器 BDTR 死区寄存器,精确可调
调参方式8 个 10 圈电位器逐个调改参数重新编译
中位死区由两斜坡间隙决定,需示波器校准固件加偏置即可,可标定
适合场景无固件供给的小批量、纯硬件调速需要里程计、闭环与总线通信的底盘

七、七步落地清单

步骤内容验收判据
1 定功率预算算电机堵转电流与峰值电流,选 FET 与保险丝FET 电流能力 ≥ 峰值 2 倍
2 定电池与栅压方案≥12 V 可用自举取栅压;7.2 V 需升压到 18 V栅源电压 ≥ 10 V 且不超 FET 上限
3 画混控逻辑油门 ± 转向,倒车时转向取反,输出限幅原地转、直行、后退左转三种组合方向正确
4 定 PWM 与死区双斜坡(模拟)或定时器互补输出(MCU),死区约 100 ns示波器确认上下管无重叠导通
5 做续流与钳位每管并快恢复二极管、栅极齐纳、栅极串 30 Ω满载换向无尖峰击穿,驱动 IC 不发热异常
6 布功率板高边/低边分排、驱动居中、母线电容贴管、单点汇地源极引线最短,无地环路
7 做极限验证堵转、换向、长时间满载、电池低压与反接连续 30 分钟满载无失效,低压可正常停机

总结

差速底盘双电机驱动的核心只有三件事:混控(左 = 油门 + 转向、右 = 油门 − 转向,倒车时转向取反)、死区(H 桥上下管之间留约 100 ns,过小会直通烧管、过大反而增加续流损耗)、续流(同步整流 + 快恢复二极管 + 栅极齐纳钳位)。器件层面,IRFP064(约 70 A、9 mΩ)配 IR2110 半桥驱动足以覆盖中小型底盘的功率等级,控制侧用 LM2937ET-5 与升压电源解决 5 V 与 18 V 两路供电,原型阶段"小电机正常、大电机炸管"的经验说明 30 A 以上必须上 PCB 而非手工搭焊。

本文基于《Dual Motor Bidirectional Electronic Speed Control》(Bob Harbour,1999-04-30,含双电机双向调速控制器各段原理图与元件清单)等技术资料整理优化,并结合移动机器人差速底盘的工程实践进行了系统化梳理。

需要定制开发?

沧州艾诺威电子 — 国家高新技术企业,20+项国家专利
嵌入式系统开发 · 物联网方案 · AI智能硬件 · 一站式交付

立即微信咨询

电话:13930711029 | 邮箱:tech@czinv.com | 24小时内响应