机器人关节无传感器BLDC驱动实战:ST72141K硬件换相与限流七步讲透

通用MCU跑无传感器BLDC,换相靠中断、限流靠ADC,CPU一忙就丢步。ST72141K把BEMF过零比较器、6路PWM、8×8延迟乘法器与限流比较器装进片内,本文用三张表和七步设计讲清怎么用。

2026-10-05
ST72141K机器人关节无传感器BLDCMTC外设BEMF换相硬件限流

机器人关节和云台的无刷电机,如果交给一颗通用 MCU 用软件跑无传感器换相,代价是:BEMF 过零要 ADC 采样加比较,换相点要定时器算,限流要 ADC 中断兜底——CPU 一忙、中断一抖,轻则丢步抖振,重则换相错拍烧管。ST72141K 是 ST 面向电机控制做的一颗 8 位 MCU,它把这条链路硬件化:片内 MTC(Motor Controller)外设集成 BEMF 过零检测比较器(最低可测 200mV,直接接全 BEMF 电压不分压)、6 路 PWM 输出、带 8×8 乘法器的延迟管理器和限流比较器,还有一根异步 Emergency 引脚直接封锁输出。三条可落地的结论:第一,无传感器换相的时序骨架是 Z→C→D 三个硬件事件,不需要软件插值;第二,换相延迟 = WEIGHT × Zn 由片内乘法器实时算出,跟随转速自动缩放;第三,限流与 Emergency 封锁独立于程序,跑飞也拦得住。下面用三张表把参数、时序和状态机讲透,再给七步落地设计。

一、为什么关节驱动值得用一颗专用电机控制 MCU

协作机械臂的腕关节、人形机器人的小关节、云台俯仰轴,很多用三相 BLDC 配谐波或行星减速器。驱动层有三条路:通用 STM32 跑软件 FOC、通用 MCU 跑六步方波、专用电机控制 MCU 跑硬件换相。三者不是谁替代谁,而是算力、成本与实时性的取舍。

对比维度 STM32软件FOC 通用MCU软件六步 ST72141K硬件MTC
换相判定 ADC采样三相电流,Clark/Park变换在软件 ADC采BEMF,软件比较找过零点 片内比较器直接判BEMF过零,硬件置标志
换相延迟 软件定时,受中断抖动影响 软件定时器计数,转速变化需重算 8×8乘法器实时算 WEIGHT×Zn
限流方式 ADC+比较器,周期级延迟 通常靠软件峰值判断 片内电流比较器,硬件逐周期限流
程序跑飞后果 PWM失控,可能直通 PWM失控,可能直通 Emergency引脚异步封锁输出至HiZ
CPU占用 高(环路全在软件) 中(换相+限流在软件) 低(外设自动跑,CPU只做速度环)
适用场景 要低噪声、要转矩平滑的关节 风机、水泵类方波驱动 低成本、要可靠、要力矩限幅的关节与云台

关键判断是换相环的实时性要求。六步方波的换相点误差直接决定转矩脉动,而无传感器换相依赖 BEMF 过零那一瞬间的检测精度。把这件事交给 ns 级响应的硬件比较器,比交给 µs 级抖动的软件中断稳得多。ST72141K 的设计初衷,就是让"检测过零 → 计算延迟 → 换相 → 限流"这一整段由片内外设闭环完成。

二、ST72141K 里的 MTC 到底装了什么

ST72141K 是 ST7 家族里专攻电机控制的一员,8K 程序存储器(ROM/OTP/EPROM)、256 字节 RAM,主频 4 或 8MHz,工作电压 4.0~5.5V,温度范围 −40~+85℃,SO34/SDIP32 封装。它的主角是 MTC 外设,可以拆成四块:BEMF 过零检测器(含比较器与输入多路开关)、延迟管理器(8 位定时器 MTIM + 8×8 乘法器)、PWM 管理器(含采样窗口发生器与电流比较器)、通道管理器(PWM 多路复用与极性编程、Emergency 封锁)。

参数 典型值/范围 对关节驱动的意义
PWM 输出通道 MCO0~MCO5,共 6 路,极性可逐通道编程 直接驱动三相全桥的 6 个栅极,无需外部逻辑
BEMF 过零检测 比较器直接接全 BEMF 电压,不分压;最低可测 200mV 低速小反电势也能检出,低速段不易丢步
采样窗口 在高边开关关断期间开窗采样,反电势落在第三相 避开 PWM 开关噪声,过零判定干净
延迟管理器 8 位定时器 + 8×8 乘法器,DELAY = WEIGHT × Zn 换相延迟跟随转速实时缩放,全速域一致
Zn 最小间隔 333µs 决定可处理的最高转速上限
Cn 最小延迟 10.4µs 换相最小提前量,决定高速段相位精度
电流限幅 片内比较器(MCCFI)配合外部采样 硬件逐周期限流,堵转不烧管
Emergency 封锁 MCES 引脚(低有效),异步强制输出 HiZ 过流/过温信号可直接拉低,绕过软件
供电与功耗 4.0~5.5V;RUN 5~8mA(fOSC=8MHz);HALT 200µA 可做低功耗待机,适合电池供电的移动关节
抗扰与温度 ESD 2000V;−40~+85℃;中断响应 10~22 个 tCPU 工业环境可用,中断延迟确定

一句话记住这颗 IC 的价值:把"过零检测、延迟计算、PWM 换相、逐周期限流、故障封锁"五件事从软件搬到硬件,CPU 只剩速度环这一件事。

三、Z/C/D 三个事件:无传感器换相的时序骨架

MTC 的核心是一套固定顺序的事件链,手册把它写成 Z→C→D:

BEMF过零检测 比较器 + MUX 延迟管理器 8×8乘法器: W×Zn PWM管理器 采样窗 + 限流比较 通道管理器 6路PWM / HiZ Z C PWM D 去磁完成后才允许下一次 Z 检测(防续流误判)
图1:MTC 的 Z→C→D 事件链。过零检测触发延迟计算,延迟到期换相,去磁完成后再放行下一次检测

这里最容易踩的坑是把去磁时间算漏。高速时 Zn 只有几百 µs,去磁占的比例不可忽略;如果忽略 D 事件强行检测,续流期间的电压平台会被误判成过零,表现为"高转速时换相错拍、电流尖峰大、电机发烫"。手册给出的 Zn 最小值 333µs、Cn 最小值 10.4µs,就是这套时序能正常工作的时间边界。

四、六步换相状态表怎么落到寄存器

六步换相的本质是"六个状态循环,每步两个管子导通"。ST72141K 把每一步的高边、低边开关组合编码进 MPHST 寄存器的 OO[5:0] 位,同时指定本步测量哪一相、BEMF 是上升沿还是下降沿。下表直接来自手册的步序配置,是写换相表时的原始依据。

步序 电流方向 高边开关 低边开关 OO[5:0] 测量相 BEMF 沿
1A→BT0T5100001MCIC下降沿
2A→CT0T1000011MCIB上升沿
3B→CT2T1000110MCIA下降沿
4B→AT2T3001100MCIC上升沿
5C→AT4T3011000MCIB下降沿
6C→BT4T5110000MCIA上升沿

把这六个状态写成一张换相表,MCU 侧只需在 C 事件中断里"按表推进一格",其余全部交给硬件。下面是一段可直接套用的示意代码,表项与上表一一对应:

/* ST72141K 六步换相表(对应 MPHST.OO[5:0] 与测量相)
 * 步序 1~6 循环;每步只在 C 事件里推进一步
 */
typedef struct {
    unsigned char oo;      /* MPHST.OO[5:0] 高/低边组合 */
    unsigned char measure; /* 本步测量哪一相: 0=A,1=B,2=C */
    unsigned char edge;    /* 0=下降沿, 1=上升沿 */
} step_t;

static const step_t kStep[6] = {
    { 0x21, 2, 0 },   /* 1: A->B, 测C, 下降沿  0b100001 */
    { 0x03, 1, 1 },   /* 2: A->C, 测B, 上升沿  0b000011 */
    { 0x06, 0, 0 },   /* 3: B->C, 测A, 下降沿  0b000110 */
    { 0x0C, 2, 1 },   /* 4: B->A, 测C, 上升沿  0b001100 */
    { 0x18, 1, 0 },   /* 5: C->A, 测B, 下降沿  0b011000 */
    { 0x30, 0, 1 }    /* 6: C->B, 测A, 上升沿  0b110000 */
};

static unsigned char g_step = 0;   /* 当前步 */

/* C 事件中断:延迟到期,执行换相 */
void MTC_C_Event_ISR(void)
{
    g_step = (g_step + 1) % 6;
    MPHST = kStep[g_step].oo;      /* 切到下一组开关 */
    /* 去磁结束后硬件放行下一次 Z 检测(D 事件) */
    MZPRV = MTIM;                  /* 锁存本次 Zn,供下一周期延迟计算 */
}

/* 软启动:WEIGHT 由小到大,避免起动瞬间过流 */
void mtc_set_commutation_advance(unsigned char weight)
{
    MWGHT = weight;                /* DELAY = WEIGHT x Zn,硬件自动缩放 */
}

注意两个细节:WEIGHT 决定换相提前角,调试时从小到大加,配合示波器看相电流波形;Zn 要锁存,因为延迟管理器用的就是上一个 Z 周期,转速突变时它是唯一的转速信息源。

五、七步落地设计

第 1 步:确认电气与封装边界

4.0~5.5V 供电、−40~+85℃、SO34/SDIP32。关节驱动器通常有 12V 或 24V 母线,ST72141K 只负责控制,功率级单独供电,两者共地要按单点接地处理,避免功率地噪声串进 BEMF 比较器。

第 2 步:把三相端电压引到 MCIx 输入

三相的端电压经限流电阻分压后接 MCIA/MCIB/MCIC。手册强调比较器直接以全 BEMF 电压为参考、不做衰减,因此分压网络要尽量保持三相一致,否则过零点会系统性偏移。

第 3 步:设定采样窗口

PWM 施加在高边开关,过零检测安排在高边关断的窗口内——此时高边绕组被续流二极管拉到 0V,低边导通相也保持 0V,第三相上就是完整的 BEMF,检测最干净。窗口位置写进 MPRSR 寄存器。

第 4 步:写 WEIGHT,定换相提前角

从较小值起步(例如相当于 15° 电角度),逐步加到相电流波形最平滑为止。WEIGHT 写大等于提前换相,写小等于滞后换相,两者都会增加转矩脉动。

第 5 步:配限流比较器

外部采样电阻两端接 MCCFI 相关引脚,比较器阈值对应的电流即限流点。它是逐周期生效的——本周期一超限,输出立即被切断,下个周期再放行,堵转时不会持续过流。

第 6 步:接 Emergency 封锁

MCES 引脚低有效,异步把 6 路输出强制到 HiZ。把过流、过温、母线欠压这些故障信号直接硬连到 MCES,形成独立于程序的最后一道闸。软件侧也可以置位强制 HiZ,用于停机。

第 7 步:速度环仍交给 MCU,但做得很薄

换相、限流、封锁都在硬件,CPU 只剩速度环:读转速(由 Zn 换算)→ PI → 调 PWM 占空比。这段代码短、周期长,主频 4MHz 的 8 位机也够用。

六、六个最容易踩的坑

现象 根因 处理
高速段换相错拍、电流尖峰大 忽略了 D 去磁事件,续流平台被误判为过零 确认去磁寄存器 MDREG 设置,让 D 事件放行后再检测
低速起动丢步、抖动 反电势太小,过零信号被噪声淹没 利用 200mV 高灵敏度比较器,并加大采样窗口滤波
转矩脉动随转速变化 WEIGHT 固定,提前角未跟随 核对 DELAY=WEIGHT×Zn 是否随转速自动缩放
过零点系统性偏移 三相分压网络不对称 三相分压电阻用同批次、同阻值,走线对称
堵转烧管 限流比较器未接或阈值过高 按采样电阻与阈值重算限流点,并接好 MCCFI
MCU 复位时电机失控 复位期间输出状态不确定 MCES 硬连故障信号,复位时保持封锁

七、总结

对"要可靠、要限幅、成本敏感"的机器人关节与云台,ST72141K 的价值在于把无传感器换相的时序和限流保护全部硬件化,CPU 只留速度环。它的时序骨架是 Z→C→D 三个事件,换相延迟由 8×8 乘法器按 DELAY=WEIGHT×Zn 实时缩放,过零比较器最低可测 200mV,Emergency 引脚提供独立于程序的输出封锁。

落地记住三点:去磁事件不能省、三相分压必须对称、MCES 一定硬连故障信号。把这三件事做对,再让 MCU 只负责速度环,关节的低速平稳性和抗堵转能力会明显优于纯软件方案。

还想接着看

本文基于《ST72141K 数据手册(8-bit MCU with Electric-Motor Control, ADC, 16-bit Timers, SPI Interface)》与《ST7MC 系列电机控制 MCU》等技术资料整理优化,并结合机器人关节与云台无刷驱动的工程实践进行了系统化梳理。

需要定制开发?

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

立即微信咨询

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