第三章 定时器通道模块(TOM):从架构到实战
好,咱们今天来聊聊TOM——定时器通道模块。说实话,这个模块在GTM里算是比较"亲民"的一个。为什么这么说?因为它的结构清晰,功能直接,不像有些模块绕来绕去的。我刚开始接触GTM时,第一个上手的就是TOM,原因很简单:它最像传统MCU里的定时器。
3.1 TOM架构详解
先看整体架构。TOM模块内部由多个独立的定时器通道组成,每个通道都有自己的计数器、比较寄存器和输出控制逻辑。嗯,这里要注意:不同系列的英飞凌芯片,TOM通道数量不一样。比如TC2xx系列通常是8个通道一组,TC3xx系列可以到16个甚至更多。
每个TOM通道的核心部件包括:
- 计数器(CNR):16位的向上计数器,时钟源可选
- 比较寄存器(CMR):存放比较值,决定输出翻转时刻
- 输出控制单元:控制输出信号的极性、使能等
- 状态标志:溢出标志、比较匹配标志等
我个人习惯把TOM通道想象成一个"带闹钟的秒表"。秒表一直在走(计数器),到了预设的时间(比较值),闹钟就响(输出翻转)。简单粗暴,但非常实用。
关键点:TOM的计数器是向上计数的,从0x0000一直跑到0xFFFF,然后溢出回0。这个溢出事件也可以用来触发中断或DMA。
3.2 TOM通道配置
配置TOM通道,说白了就是设置几个寄存器的事。但顺序很重要,我踩过坑。
典型的配置流程:
- 使能通道时钟:先让通道"通电"
- 选择时钟分频:决定计数器的计数速度
- 设置比较值:写入CMR寄存器
- 配置输出模式:决定输出信号的行为
- 启动计数器:开始干活
来看一段实际的配置代码:
// TOM通道0配置示例
TOM0_CH0_CLK_SRC = 0x01; // 选择时钟源,我用的是fTOM/2
TOM0_CH0_CTRL = 0x0001; // 使能通道,启动计数器
TOM0_CH0_CMR = 0x5000; // 设置比较值,产生50%占空比
TOM0_CH0_OUT_CTRL = 0x02; // 输出模式:比较匹配时翻转
我曾经在项目里犯过一个低级错误:先配置了输出模式,再设置比较值。结果输出信号一开始就乱跳,查了半天才发现是配置顺序的问题。正确的做法是:先让所有参数就位,最后再"点火"启动。
避坑指南:我曾经在TC275上调试PWM输出,发现通道死活不工作。最后发现是时钟分频没配置,计数器压根没跑。记住:时钟源必须明确指定,不要依赖默认值!
3.3 TOM与ARU的连接
ARU(高级路由单元)是GTM的"数据高速公路"。TOM和ARU连起来,就能实现一些很酷的功能——比如动态更新比较值。
为什么要动态更新?你想想看,如果PWM的占空比是固定的,那和普通定时器有什么区别?TOM+ARU的组合,允许你在运行时从其他模块(比如ADC、MCS)获取数据,实时调整输出。
连接方式其实很简单:
- ARU的输出端口连接到TOM的输入端口
- TOM通道配置为"ARU更新模式"
- ARU每送来一个数据,TOM就自动更新CMR
我记得有个电机控制项目,需要根据电流采样值实时调整PWM占空比。用TOM+ARU的方案,延迟只有几个时钟周期,比CPU中断响应快了一个数量级。
小技巧:ARU连接TOM时,建议先确认数据格式。ARU传输的是32位数据,但TOM的比较寄存器只有16位。我一般用高16位或低16位,具体看配置。
3.4 TOM输出模式
TOM的输出模式,嗯,这里花样还挺多的。我挑几个最常用的说说:
| 模式名称 | 行为描述 | 典型应用 |
|---|---|---|
| 单次翻转 | 比较匹配时输出翻转一次 | 产生单脉冲 |
| 连续翻转 | 每次比较匹配都翻转 | 生成PWM信号 |
| 置位/复位 | 匹配时输出置高或置低 | 产生特定宽度的脉冲 |
| ARU控制模式 | 输出由ARU数据直接控制 | 动态波形生成 |
我个人最常用的是"连续翻转"模式。说白了就是:计数器从0跑到CMR,输出翻转一次;继续跑到0xFFFF,溢出回0,再跑到CMR,再翻转。这样就能生成对称的PWM波形。
但要注意:连续翻转模式下,占空比的计算公式是:
占空比 = CMR / 65536 × 100%
如果CMR设为0x8000(32768),占空比就是50%。这个很好理解吧?
还有一种"置位/复位"模式,我一般在需要产生特定时序时用。比如某个事件发生后,让输出立即置高,等计数器跑到某个值再复位。这种模式在电源管理、时序控制中很常见。
实战经验:我在做车载LED驱动时,用TOM的"单次翻转"模式产生了一个10微秒的脉冲,用来触发MOSFET的开关。配合ARU动态调整脉冲宽度,实现了LED亮度的线性调节。效果非常稳定,CPU几乎零负担。
最后说一句:TOM的输出模式可以随时切换,但建议在计数器停止时切换。我曾经在计数器运行时切换模式,结果输出信号出现了毛刺,差点把后级电路烧了。嗯,这个教训挺深刻的。
好了,TOM的基础内容就这些。下一章我们会深入TOM的进阶用法,包括多通道同步、死区时间插入等。这些在电机控制、逆变器项目中特别重要,到时候再细聊。