3. AURIX GTM模块详解:GTM架构与子模块

各位同学,今天我们来啃一块硬骨头——GTM模块。说实话,我第一次接触AURIX的GTM时,也被它复杂的架构搞得头晕。但做运动控制,这玩意儿是绕不开的。GTM全称Generic Timer Module,说白了就是英飞凌专门为电机控制、PWM生成这类实时性要求高的场景设计的定时器矩阵。

为什么不用普通的STM或GPT?我踩过这个坑。普通定时器在生成多路PWM、处理霍尔传感器信号时,CPU中断负载太重。GTM的好处是——它自己就能搞定大部分时序逻辑,CPU只管发指令就行。

3.1 GTM整体架构

GTM内部像个小型处理器集群。它有自己的时钟、自己的RAM、自己的DMA通道。核心模块包括:

  • CMU(时钟管理单元):负责给各个子模块分频
  • TBU(时间基准单元):提供全局时间基准
  • TOM(定时器输出模块):专门生成PWM信号
  • ATOM(高级定时器输出模块):TOM的升级版,支持更灵活的PWM
  • TIM(定时器输入模块):捕获外部信号,比如编码器脉冲

我习惯把GTM想象成一个独立的「硬件定时器操作系统」。你给它配置好任务,它自己调度执行,CPU可以腾出手干别的。

核心要点:GTM的所有子模块都挂在同一个总线上,通过ARU(高级路由单元)互相连接。这意味着TOM的输出可以直接喂给TIM做反馈,不需要CPU干预。

GTM模块架构图 CMU 时钟管理单元 TBU 时间基准单元 ARU 高级路由单元 TOM 定时器输出模块 8/16/24通道 ATOM 高级定时器输出模块 支持死区/互补PWM TIM 定时器输入模块 捕获/测量/滤波 PWM输出 高级PWM输出 信号输入 子模块通过ARU互联,支持数据直通 CPU仅需配置寄存器,运行时无需中断干预

3.2 TOM与ATOM:PWM生成的核心

TOM是GTM里最基础的PWM发生器。每个TOM通道有一个计数器、一个比较寄存器。工作原理很简单:计数器从0开始累加,到比较值翻转电平,到周期值归零。嗯,这就是标准PWM。

但ATOM就不一样了。ATOM内部有一个状态机,支持多种输出模式。我个人最喜欢的是SOMC(单次匹配中心对齐)模式,做电机控制时特别好用。

特性 TOM ATOM
通道数 最多24通道 最多8通道
PWM模式 边沿对齐 边沿对齐 + 中心对齐
死区插入 需外部逻辑 硬件支持
互补输出 不支持 支持
适用场景 通用PWM、LED调光 电机控制、逆变器

我的建议:做直流电机调速用TOM就够了。但如果是三相永磁同步电机(PMSM)控制,必须上ATOM。死区时间、互补PWM这些功能,ATOM硬件直接搞定,省心很多。

3.3 PWM生成与死区时间配置

死区时间是什么?说白了就是防止上下桥臂直通。MOSFET关断需要时间,如果上管还没完全关断,下管就开了,那就短路了。我曾经在调试一个50kW的逆变器时,死区时间设得太短,直接炸了MOSFET——嗯,教训深刻。

ATOM配置死区时间的代码示例:

// ATOM通道0配置为互补PWM,带死区
// 假设GTM时钟频率为100MHz

// 1. 使能ATOM时钟
GTM->CLC.B.DISABLE = 0;

// 2. 配置ATOM0通道0为SOMC模式
ATOM0_CH0->SRC.B.SL = 0;      // 选择信号源
ATOM0_CH0->SRC.B.RDSS = 0;    // 上升沿触发

// 3. 设置死区时间(假设需要1us死区)
// 100MHz时钟下,1us = 100个时钟周期
ATOM0_CH0->DTM.B.DTM = 100;   // 死区时间寄存器

// 4. 配置周期和占空比
ATOM0_CH0->CM0.B.CM0 = 5000;  // 周期值(50kHz)
ATOM0_CH0->CM1.B.CM1 = 2500;  // 占空比50%

// 5. 使能输出
ATOM0_CH0->OUTCTRL.B.PC = 1;  // 使能PWM输出

注意:死区时间不是越大越好。死区太大,波形失真,电机噪音大;死区太小,有直通风险。我一般建议取开关管关断时间的2-3倍。比如IGBT关断时间500ns,死区设1-1.5us比较稳妥。

3.4 PWM频率与分辨率计算

这个问题很多新手会搞混。PWM频率和分辨率是相互制约的。为什么?因为计数器位数是固定的。

GTM的TOM/ATOM计数器是16位的,最大值65535。假设GTM时钟100MHz:

  • 要得到20kHz的PWM,周期值 = 100MHz / 20kHz = 5000
  • 分辨率 = log2(5000) ≈ 12.3位
  • 要得到100kHz的PWM,周期值 = 100MHz / 100kHz = 1000
  • 分辨率 = log2(1000) ≈ 10位

你看,频率越高,分辨率越低。我做过一个伺服驱动器项目,要求PWM频率20kHz,电流环精度要求0.1%。算下来需要10位分辨率,刚好够用。但如果频率提到50kHz,分辨率就掉到9位了,精度不够。

PWM频率 周期值(100MHz时钟) 理论分辨率 实际可用分辨率
1kHz 100000 16.6位 16位(上限)
10kHz 10000 13.3位 13位
20kHz 5000 12.3位 12位
50kHz 2000 11.0位 11位
100kHz 1000 10.0位 10位

核心公式:

周期值 = GTM时钟频率 / PWM频率

分辨率(位)= log2(周期值)

实际占空比步进 = 100% / 周期值

如果分辨率不够怎么办?我一般用两个办法:一是降低PWM频率,二是用GTM的分频器。CMU模块可以给TOM/ATOM提供独立的时钟,比如把100MHz分频到50MHz,这样同样频率下周期值翻倍,分辨率就多1位。

避坑指南:我曾经在项目里把PWM频率设到200kHz,结果分辨率只有8位,电机低速时抖动得厉害。后来降到20kHz,分辨率12位,问题解决。记住——电机控制不是频率越高越好,够用就行。

好了,GTM的核心内容就这些。TOM和ATOM怎么选、死区时间怎么配、频率和分辨率怎么权衡,都是实际项目中天天要面对的问题。下一节我们讲GTM的输入捕获,到时候会结合TIM模块,聊聊怎么用GTM做编码器信号处理。


专注资料整理