2. STM32电机控制专用外设解析

在STM32的电机控制方案中,通用定时器(如TIM2~TIM5)虽然也能产生PWM,但真正决定FOC、BLDC六步换相、三相逆变桥能否安全运行的,是高级控制定时器TIM1和TIM8。它们与通用定时器的本质区别在于:具备互补输出、可编程死区、刹车输入、以及与ADC的硬件级触发联动。本节围绕这四项能力展开,说明它们各自解决什么问题、寄存器层面如何配置、以及实际工程中如何判断配置是否正确。

一、为什么电机控制必须用高级定时器

三相逆变桥由六个功率管组成,同一桥臂的上下管如果同时导通,会形成直通短路,瞬间烧毁器件。因此PWM输出不能是单路,而必须是一对互补信号:上管导通时下管必须关断。但功率管关断存在延迟(关断时间 toff),如果上管刚关断就立刻打开下管,仍可能因拖尾电流造成瞬时直通。解决办法是在互补信号翻转之间插入一段死区时间,让上下管都短暂关断。TIM1/TIM8的CH1/CH1N、CH2/CH2N、CH3/CH3N三对通道正是为此设计。

此外,电机系统需要故障保护:过流、过压、驱动芯片报错时,必须立即封锁PWM。高级定时器的刹车输入(BKIN)可以在硬件层面于数十纳秒内把六路输出强制到安全状态,不依赖软件中断响应,这是通用定时器不具备的。

二、PWM生成:中心对齐模式与计数机制

电机控制通常采用中心对齐(中央对齐)模式,而非边沿对齐。原因在于中心对齐时PWM脉冲关于周期中心对称,三相电流采样点可以落在计数器过零或峰值处,此时开关噪声最小,采样最干净。配置要点:

  • 时基:ARR决定PWM周期,PSC决定计数时钟。例如72MHz时钟、PSC=0、ARR=3599,则PWM频率 = 72MHz/(2×3600) = 10kHz(中心对齐下实际周期为2×ARR)。
  • 计数模式:CMS位设为01(中心对齐模式1),计数器先向上到ARR再向下到0。
  • 输出模式:OCxM设为110(PWM模式1)或111(PWM模式2),配合CCR寄存器决定占空比。
  • 使能:必须置MOE(主输出使能)位,否则即使通道配置正确,输出引脚也不会动作——这是初学者最常见的“PWM不出来”原因。

三、互补输出与死区插入

互补输出通过CCER寄存器的CCxE和CCxNE位分别使能主通道与互补通道。死区时间由BDTR寄存器的DTG[7:0]字段控制,其编码不是线性的,而是分段:

DTG范围死区时间计算适用场景
0~127DTG × tDTS小死区,tDTS=1/72MHz≈13.9ns
128~191(64+DTG[5:0]) × 2tDTS中等死区
192~255(32+DTG[5:0]) × 8tDTS大死区,适合IGBT

举例:若驱动MOSFET需要约500ns死区,取tDTS=13.9ns,则500/13.9≈36,落在第一段,DTG=36即可。若使用IGBT需要2μs,则需用第三段:2μs/(8×13.9ns)≈18,DTG=192+18=210。死区过小会直通,过大会导致输出波形畸变、电流谐波增大,因此必须按功率管数据手册的toff加裕量选取。

四、刹车功能与安全状态

刹车源可来自BKIN引脚(如驱动芯片的FAULT输出),也可来自时钟故障。触发后,硬件立即将输出置为OSSI/OSSR定义的状态:若OSSI=0,输出为高阻;若OSSI=1,输出由OSSR决定是无效电平还是空闲电平。工程上通常配置为刹车后输出低电平(关断所有上管),并置BKE使能刹车、BKP极性选择。刹车事件还会置BIF标志并可产生中断,供软件记录故障。

五、ADC注入通道与定时器触发采样

FOC需要在一个PWM周期内同步采集两相或三相电流。若用软件启动ADC,采样时刻抖动大,电流值失真。正确做法是用TIM1的TRGO或CCx事件触发ADC注入组。注入组(Injected)优先级高于规则组,可独立配置4个通道,且转换结果放在JDRx寄存器,不占用规则组序列。

典型配置:TIM1的CCR4作为触发源(OC4REF),设置ADC外部触发为TIM1_TRGO或TIM1_CC4,注入序列扫描两相电流通道。当计数器到达设定比较值时,硬件自动发出触发,ADC在开关噪声最小的时刻采样。转换完成后JEOC置位,可触发中断读取JDR1/JDR2,直接送入Clarke变换。

TIM1 互补PWM + 死区 + 刹车 + ADC注入触发 信号链 时基单元 PSC / ARR / CMS 中心对齐计数 比较单元 CCR1/2/3 占空比 OCxM PWM模式 死区发生器 BDTR.DTG 上下管错开翻转 六路输出 CH1/1N~CH3/3N MOE 使能 刹车控制 BKIN / BKE / BKP OSSI/OSSR 安全态 封锁输出 触发源选择 TRGO / CC4REF 采样时刻同步 ADC注入组 JDR1/JDR2 JEOC 中断 相电流 → Clarke/Park 变换 Ia/Ib 由 JDR 读取,Ic = -Ia-Ib 互补PWM与死区波形示意 CH1 CH1N 死区 死区

六、配置检查与结果判断

完成上述配置后,如何确认工作正常?可用示波器观察CH1与CH1N:两者应严格互补,翻转沿之间可见明显死区间隙;改变CCR1,占空比应线性变化。触发ADC后,在JEOC中断里读取JDR,若电机静止时两相电流接近零、堵转时电流随负载上升,说明采样链路正确。若PWM无输出,优先检查MOE是否置位、BDTR是否配置、以及刹车引脚是否被误触发。若电流波形毛刺大,应检查ADC触发点是否落在开关沿附近,必要时调整CCR4触发时刻。

死区时间必须大于功率管关断时间与驱动延迟之和,并留20%~50%裕量;过小有直通风险,过大则输出电压畸变、低速转矩脉动增大。
刹车触发后若未清除BIF标志并重新置位MOE,PWM将一直保持封锁状态,表现为“电机突然停转且无法恢复”。

掌握TIM1/TIM8的这四项能力,是后续实现FOC电流环、六步换相和故障保护的基础。下一阶段将结合具体寄存器代码,把上述配置落到工程中。