
1. GTM ATOM 的三层结构PCM、SOMS、HRES 各自解决什么问题第一次看到GTM ATOM的寄存器手册时我怀疑自己看错了章节。一个定时器模块配了将近三十页的位域说明输出模式还分SOMC和PCM两套寄存器里又单独有个SOMS字段再往下还有一个叫HRES的独立子模块挂在时钟管理单元旁边。真正把它配起来跑通、并且用示波器验证过边沿精度之后我才理解这套设计不是堆料而是把“定时器”这件事按输出信号的精度需求拆成了三层谁来产生边沿PCM/SOMC、边沿长什么样SOMS、边沿能精确到什么程度HRES。这三层分清楚后面所有的配置都有了落脚点。这套东西最典型的落地场景是车规级电机控制、多相电源、LED 矩阵调光这类对 PWM 频率和边沿抖动同时有要求的系统。它解决的问题很具体普通定时器在 100MHz 时钟下只能给你 10ns 的边沿粒度占空比调节分辨率只有 7~8 位做 FOC 电流环时占空比抖动会让相电流出现低频纹波而 GTM 的 PCM 加上 HRES能把有效调节分辨率抬高一到两个数量级同时保持硬件自主运行、不占 CPU。如果你正在调电机驱动、做数字电源或者单纯想搞明白为什么别人的 PWM 输出这么干净这篇内容应该能帮你省掉几天的排查时间。文中所有寄存器取值和配置流程都来自实际调试的整理涉及具体位偏移的地方我会标注“以所用器件手册为准”因为这个模块在不同版本之间确实有差异。1.1 从“计数比较”到“信号发生流水线”的思维转变大部分人对定时器的理解停留在“计数器到了就翻转电平”。ATOM 的 PCM 模式确实也是这么干的但它把这件事拆成了一条流水线时钟进来 → 分频 → 计数 → 与两个影子寄存器比较 → 输出控制单元 → 引脚。这条流水线里每一段都能被独立配置也能被 ARU 总线在运行中改写。理解这条链比记住任何单个位域都重要。我在调试初期犯过的最大错误就是把 ATOM 当成“带 PWM 功能的定时器”来用直接往比较寄存器里写值然后惊讶地发现占空比在运行时改动会造成一个周期的毛刺。后来才明白ATOM 的 SR0/SR1 在 PCM 模式下是有更新时机约束的它的设计假设是“你会在周期边界提交新值”而这个边界由硬件负责判定。一旦脱离这个假设去操作硬件不会报错只会默默给你一个宽度异常的脉冲。这类“静默错误”在电机驱动里非常危险一个异常的窄脉冲可能直接触发过流保护。所以我把这条流水线拆成四个必须分别确认的环节时钟源与分频是否落在预期频点、计数模式与周期寄存器是否匹配、比较值与输出模式的对应关系是否正确、更新时机是否与周期同步。四个环节任意一个出问题波形都能出来但都是错的。后面章节的排查表也是按这四个环节组织的。1.2 SOMC 与 PCM两套输出模式的真实分工ATOM 的每个通道都可以在两种输出模式之间二选一这个选择由SOMS字段决定而两种模式的内部结构完全不同。SOMCSignal Output Mode Compare本质上是“比较输出”。计数器 CNT 自由运行或者被 SR0 复位两个比较单元 CM0、CM1 分别在 CNT 等于 SR0、SR1 时产生事件输出单元根据事件翻转或置位。它的优点是灵活你可以只用 CM0 做一个单边沿也可以用两个比较单元做任意相位的脉冲甚至可以把输出配置成“比较匹配时置位、周期溢出时清零”这种非对称波形。缺点是 CPU 必须自己管周期边界容易在更新时出错。PCMPattern Compare Mode则是“模式发生器”。它内部有一个专门的状态机把 SR0 当作周期、SR1 当作占空比或第二边沿位置自动生成周期性的 PWM 波形。你只需要保证 SR0 ≥ SR1剩下的边沿生成、周期复位全部由硬件完成。PCM 的价值在于可预测性波形形状由硬件保证CPU 只负责提交数值不参与边沿时序。这两者的取舍我用一张表说清楚实际选型时对着看就行对比项SOMC 比较模式PCM 模式波形自由度高可做单脉冲、任意相位、非对称波形中主要是周期性 PWM 与固定模式CPU 参与度高周期边界需软件维护低硬件自动复位与生成运行时改占空比需要自己做同步容易出毛刺影子寄存器 周期边界生效天然安全典型用途单次触发、编码器模拟、特殊时序电机 PWM、电源开关、调光多通道相位控制需要手工偏移比较值天然支持各通道独立周期计数我个人的经验是只要是周期性的、要连续跑的波形优先上 PCM只有做“一次性脉冲”或者“非周期特殊时序”时才退回 SOMC。这条经验帮我避免了很多在更新时机上纠结的时间。1.3 SOMS 字段到底在选什么很多人把 SOMS 理解成“输出模式选择”但它选的其实是输出级的行为不是内部的计数模式。SOMS 是一个多位的字段不同取值对应输出被置高、被拉低、跟随比较事件翻转、或者直接把输出交给 ARU 数据流控制。这里有个容易混淆的点SOMS 和 PCM/SOMC 是两层配置。你先用 SOMS 选出通道工作在哪种输出模式下比较模式还是模式发生器再用同一字段的其他位组合决定输出极性和使能方式。我见过有同事把 SOMS 设成“强制高电平”想先让引脚安静结果后面改回 PWM 时忘了更新这一位波形死活出不来查了半天时钟。注意SOMS 的取值编码在不同版本的手册里编码方式不完全一致配置前一定要翻到寄存器位定义那一页逐位核对不要照抄网上博客里的十六进制值。我吃过这个亏同一个数值在旧版上是对的新版上含义变了。2. 时钟链与寄存器地图把精度先算在纸面上配置之前先把时钟算清楚这是我现在的固定习惯。ATOM 的频率精度完全由时钟链决定配置错了后面怎么调波形都不对。GTM 的时钟从模块输入时钟开始经过 CMU时钟管理单元分频成多路全局时钟再由每个通道的 CLK_SRC 字段选中其中一路作为自己的计数时钟。这条链上任何一级算错最终频率就会差一个整数倍而且示波器上看起来“挺正常”因为占空比是对的。我习惯先在纸上把三个数算出来通道计数时钟频率、目标 PWM 频率对应的周期计数值、该计数值下的占空比分辨率。这三个数字一旦确定寄存器配置基本就是填空题。实测下来这一步花五分钟能省掉后面半小时的猜谜。2.1 从 CMU 到通道计数时钟的完整传递GTM 的时钟管理单元提供若干路全局时钟常记为 CLK_0 到 CLK_7每一路都可以独立设置分频系数并且可以被单独使能。ATOM 通道通过 CTRL 寄存器里的时钟源选择字段从这几路里挑一路作为自己的计数时钟。此外通道内部还有一个“慢时钟”位SL它影响的是通道内部状态机的推进速率不是计数时钟本身这一点经常被误解。典型的配置逻辑是这样的模块输入时钟先进入 CMU假设输入为 100MHz。我给 CLK_0 设置分频系数使输出为 100MHz不分频给 CLK_1 设置分频得到 50MHz给 CLK_2 得到 25MHz。这样不同通道可以按需选频而不必为每个通道单独做分频器。这种“集中分频、分散选用”的结构在通道数量多的时候特别省资源。分频系数与输出频率的关系手册上给的是带分子分母的公式实践中我用的是简化形式输出频率等于输入频率除以分频系数具体是 N 还是 N1 取决于配置字段务必核对。我在第一次配置时按 N 算结果实测频率比预期低了 0.4%正是因为公式里有 1 的偏置。这类细节只能靠手册确认或者干脆用示波器反推。实操建议CMU 配置完成后先把每一路全局时钟的使能位全部打开再逐个通道配置。如果时钟没使能就配通道通道会保持静默现象就是“配置全对但引脚不动”排查起来很浪费时间。2.2 关键寄存器清单与位域速查ATOM 的寄存器分三个层次全局控制寄存器、通道控制寄存器、通道数据寄存器。我整理了一份按“配置顺序”排列的清单照这个顺序写基本不会漏层次寄存器关键字段作用全局ATOM 全局控制通道使能、输出使能、全局复位通道总开关必须在通道配置完成后置位全局通道使能控制ENDIS 位组单独启停某个通道的计数全局输出使能控制OUTEN 位组单独启停某个通道的引脚输出通道通道控制 CTRL时钟源选择、SL、SOMS、ARU 输入输出选择决定通道行为模式通道通道状态 STAT计数器方向、比较匹配标志调试时看这里判断计数是否在跑通道周期/占空比寄存器 SR0/SR1周期值、比较值PCM 模式下分别是周期与占空比通道计数器 CNT当前计数值只读调试观察用配置顺序我的习惯是先端口复用再时钟再全局使能最后通道参数。端口复用必须最先做因为如果引脚还挂在 GPIO 模式后面所有配置在示波器上都看不见你会怀疑寄存器没写进去。全局使能放在通道参数之前还是之后取决于具体器件有些版本要求先配参数再使能否则第一个周期会用默认值跑一遍产生一个异常宽的脉冲。我一般选择“参数先写好、最后一次性使能”这样上电瞬间波形就是干净的。2.3 频率、占空比与分辨率的定量估算这部分是很多人跳过但实际最该算的地方。PCM 模式下PWM 频率等于通道计数时钟频率除以周期计数值占空比等于比较值除以周期计数值。这两个式子看起来简单但“分辨率”这个概念才是关键周期计数值决定了你能把占空比分成多少档。举个例子。计数时钟 100MHz目标 PWM 频率 20kHz那么周期计数值是 100M / 20k 5000。占空比可以取 0 到 5000 共 5001 档等效分辨率约 12.3 位。这个精度做电机控制勉强够用但如果目标频率提到 100kHz周期计数值降到 1000分辨率就掉到 10 位不到占空比最小步进变成 0.1%电流环里就能看到明显的量化纹波了。我把这个关系做成了一张常用对照表配的时候直接查计数时钟PWM 频率周期计数值占空比步进等效位数100MHz10kHz100000.01%13.3100MHz20kHz50000.02%12.3100MHz50kHz20000.05%11.0100MHz100kHz10000.10%10.0100MHz200kHz5000.20%9.0从表里能直接看出矛盾频率越高分辨率越差。这就是为什么需要 HRES它不改变计数时钟而是在边沿上做亚周期补偿把有效分辨率重新拉回来。我在一个 200kHz 的电源项目里靠 HRES 把 9 位的有效分辨率补到了接近 12 位的效果输出电压纹波肉眼可见地小了一圈。3. PCM 模式实操从零配出一路可用的 PWM理论讲完进入真正动手的部分。下面这套流程是我在多个项目里反复用过的顺序按它走基本不会翻车。为了让内容可直接复现我用一个具体场景100MHz 计数时钟、20kHz PWM、初始占空比 30%、单通道输出到某个引脚。所有寄存器写操作用结构体指针示意实际工程里换成厂商头文件定义的宏即可。需要说明的是下面代码里的寄存器名和字段名是我为了表达逻辑做的抽象字段的位偏移请以手里那颗器件的寄存器手册为准。逻辑顺序是通用可复用的这才是重点。3.1 上电初始化顺序与保护解锁第一步不是写定时器是解锁。车规 MCU 的很多外设寄存器受写保护控制没解锁之前写入会被静默丢弃读回来还是旧值。我吃过一次亏配置写了一百多行示波器毫无反应最后发现是保护没解。解锁的一般流程是向保护控制寄存器写入特定的序列通常是“读-改-写”配合魔数然后再操作目标外设。部分器件还要求解锁窗口内完成操作超时自动重新上锁。这种机制的好处是防止跑飞的程序误改时钟配置坏处是调试时容易忘。我的初始化顺序固定为五步解锁外设写保护配置引脚复用把目标引脚切到 GTM 输出功能配置 CMU使能所需全局时钟配置 ATOM 通道参数控制寄存器、周期、占空比打开通道使能与输出使能最后重新上锁。第 5 步的“重新上锁”别省。我见过有代码为了调试方便一直不解锁回去量产时留下隐患。上锁之后再改配置就必须重新走一遍解锁流程这反而是一个安全边界。3.2 寄存器级配置代码与逐行解释下面这段是 PCM 模式的核心配置我用注释把每一步的意图写清楚了/* 1. 引脚复用把目标引脚切到 GTM 输出功能 */ PORT_PIN_MUX( PIN_PWM ) MUX_ALT_GTM; /* 选对 ALT 编号别照抄 */ PORT_PIN_OE( PIN_PWM ) 1; /* 输出使能忘了这步波形出不来 */ /* 2. 时钟管理配置全局时钟 0 为不分频 */ CMU_CLK_EN CMU_CLK0_EN; /* 先使能时钟输出 */ CMU_CLK0_DIV 0; /* 分频系数 0 表示不分频具体编码查手册 */ /* 3. 通道控制选时钟源、选 PCM 模式 */ ATOM_CH_CTRL 0; /* 先清零避免残留位干扰 */ ATOM_CH_CTRL | CLK_SRC_CLK0; /* 计数时钟选全局时钟 0 */ ATOM_CH_CTRL | SOMS_PCM; /* 关键选中 PCM 输出模式 */ ATOM_CH_CTRL | SL_SLOW; /* 内部状态机时钟一般选慢速 */ /* 4. 周期与占空比周期 5000占空比 30% 即 1500 */ ATOM_CH_SR0 5000 - 1; /* 周期寄存器注意是否要减 1 */ ATOM_CH_SR1 1500; /* 比较值对应占空比 30% */ /* 5. 使能先开通道计数再开输出 */ ATOM_AGC_ENDIS CH_ENABLE_MASK; ATOM_AGC_OUTEN CH_OUTPUT_MASK;几个必须盯住的点。SR0 是否减 1取决于计数是从 0 到 SR0 还是从 0 到 SR0-1这个细节会直接让你的实际频率偏差 0.02%低频时无所谓高频时会影响占空比的对称性。我的做法是先按“减 1”配然后用示波器测实际频率如果差了一个计数周期就调整过来。SOMS_PCM 的具体取值必须查手册的位定义表不同版本不一样我这里只表达“要选 PCM”这个语义。还有一点容易被忽略SL 位。它控制通道内部状态机的推进速率在 PCM 模式下会影响从“比较匹配”到“输出翻转”的延迟。默认值通常能用但如果你的多通道之间有固定相位差要求这个位不一致就会引入额外的偏移。我一般在同一组通道里把 SL 配成一致避免这种隐性偏差。3.3 双缓冲机制与运行时更新占空比PCM 模式最有价值的设计是影子寄存器。SR0 和 SR1 都不是直接被比较单元使用的硬件在周期边界把影子值搬到工作寄存器这样你可以在任意时刻写新值波形都不会出现半个周期的毛刺。但这里有个坑写入时机仍然影响生效延迟。如果你在计数器刚过零时写入新值要等到下一个周期边界才生效中间隔了将近一整个周期如果你在周期末尾写入可能就是下一个周期立刻生效。做电流环的时候这个延迟的一致性比延迟的大小更重要如果你的代码在中断里写占空比中断响应抖动会让生效时刻抖动闭环带宽就上不去。我的处理办法是把更新动作固定在一个位置在周期匹配中断里写下一周期的值。这样写入时刻与周期边界严格对齐生效延迟恒定闭环建模的时候可以直接当成一个固定延时处理。实测下来电流环的相位裕度明显改善。提示如果不用中断也可以用 ARU 总线让另一个模块比如多通道序列器在指定时刻把新值推送到 SR1完全绕开 CPU。这种方式延迟最稳定代价是配置复杂度上一个台阶建议先把 CPU 直写跑通再上 ARU。3.4 多通道相位控制与组同步多相电源和多相电机都要求通道之间有精确的相位差。PCM 模式下做这件事很直接每个通道有独立的计数器只要让它们的 SR0 相同、初始计数值不同就能产生固定相位差。但“初始计数值不同”这个做法有个问题上电时刻的相位关系依赖写入顺序而且一旦某个通道被单独复位相位关系就乱了。更可靠的做法是用全局复位配置好所有通道的周期值然后一次性触发全局复位让所有计数器同时从 0 开始相位差靠各自的“计数偏移”实现。不过 ATOM 的计数器本身没有偏移寄存器纯 PCM 模式下的相位差通常靠“周期值相同、占空比加上偏移”来实现等效效果或者用通道间的联动。我实际项目里用的是前者把相位差折算成比较值的偏移虽然波形结构上略有不同但对外部负载而言效果是等效的。这里要提醒一句多通道同时改占空比时确保它们在同一个周期边界生效。如果逐通道写通道之间会有一个周期的错位多相系统里这会变成环流。我的做法是先写所有通道的影子寄存器最后统一触发一次更新或者干脆把更新动作放在同一个中断里顺序执行。4. HRES 精密控制把边沿再切细一档HRES 是 GTM 里最容易被神话、也最容易被误用的部分。它的作用不是“让定时器变成 150ps 分辨率”而是在一个粗时钟周期内部对输出边沿做亚周期的微调。理解这个定位才知道什么时候该用它、什么时候用了也没用。我在一个数字电源项目上第一次用 HRES当时的想法很朴素既然分辨率不够上 HRES 就对了。结果配完之后占空比确实变细了但输出电压纹波改善有限。后来才想明白问题不在 HRES在于我的控制算法本身还在按粗分辨率计算微调量被量化掉了。HRES 只是执行机构精度要由整个控制链路一起撑起来。4.1 HRES 的工作原理与适用边界HRES 子模块内部是一条可编程延时链。粗时钟产生一个边沿之后HRES 可以在这个边沿上再叠加一个小于一个粗周期的延时延时的档位由配置值决定。假设粗时钟 100MHz10ns 周期延时链分成 256 档那么每档约 39ps如果分成 64 档每档就是 156ps接近常见的“150ps 级”说法。关键点在于HRES 只能在“一个粗周期之内”做加法。它不能让你把周期计数值本身变细只能在已有的整数边沿上补一个分数。所以它的正确用法是“整数部分 分数部分”的组合目标边沿落在 123.7 个粗周期上粗定时器负责 123HRES 负责 0.7 个周期的延时。这个组合带来一个实际约束微调量必须是 0 到 1 个粗周期之间的值超出就无效。有些工程师想让 HRES 累计多个周期的分数那是不可能的硬件会在每个边沿重新取一次微调量。适用边界也很清楚适合中高频、对边沿抖动敏感、但对绝对相位精度要求不极端的场景。比如 100kHz 到 500kHz 的开关电源、需要精确死区控制的半桥驱动、对占空比量化敏感的调光。不适合的是那种要求“绝对时间精度优于 1ns”的测量类应用因为 HRES 的延时链本身受温度和电压影响需要校准。4.2 微调量的计算与生效时机计算微调量分三步。第一步算出理想周期计数值可能是小数周期计数值 计数时钟 / 目标频率。第二步把小数部分取出来乘以延时链的档位数得到微调量。第三步把整数部分写进 SR0微调量写进 HRES 对应的通道寄存器。举个具体例子。计数时钟 100MHz目标 123.7kHz。周期计数值 100M / 123.7k 808.4。整数部分 808 写进 SR0小数部分 0.4 乘以 256 档得到 102写进 HRES 通道配置。这样每个周期的边沿都会额外延后 0.4 个粗周期长期平均频率就精确落在 123.7kHz。占空比同理。目标占空比 33.3%周期 808理想比较值 269.1。整数 269 写 SR1小数 0.1 乘 256 得 26写 HRES 的另一路配置如果该通道支持双边沿独立微调。注意生效时机。HRES 的微调值通常在下一个边沿生效不是立即生效。如果你的更新频率很高比如每个 PWM 周期都改一次要确认微调值的写入不会和边沿生成撞车否则会出现偶发的抖动。稳妥的做法是把微调值和整数比较值放在同一次更新里提交。还有一个经验性细节HRES 的档位数不一定是 2 的幂。有些实现是 64 档、有些是 128 档具体看手册。我一开始按 256 算实际是 128结果微调量全错了一倍波形看起来“有变化但不对”。这类问题只能靠手册确认别靠猜。4.3 校准与环境漂移的处理延时链是模拟电路它的实际延时随工艺、电压、温度变化。同一份配置在实验室常温下测出来是 39ps 一档装到板子上跑高温可能就变成 43ps。对于要求不高的应用这个漂移可以忽略对于闭环电源它会影响环路增益的标定。我的处理办法分两种。离线校准适用于量产一致性要求高的场景在产线上用一个已知频率的参考信号测出实际边沿位置反算出当前环境下的每档延时把这个系数写进参数区。在线自适应适用于工作环境变化大的场景利用片上比较器或者外部反馈周期性测量实际输出与期望的偏差微调 HRES 系数。两种方式都有成本所以我一般先评估如果占空比分辨率要求只在 11 位左右普通 PCM 就够根本不用上 HRES只有确实需要 13 位以上有效分辨率时才引入这套复杂度。我见过有项目为了“显得高端”硬上 HRES结果校准没做好抖动比不用还大。5. 常见问题与排查实录这一章是我这些年攒下来的排查笔记按现象组织遇到问题直接对表查。需要说明的是很多问题的根因不在 ATOM 本身而在它上游的时钟、引脚复用、或者使能顺序所以排查一定要从上游往下游走不要一上来就怀疑寄存器配错。5.1 波形出不来的四层排查法引脚完全没波形是最常见也最好解决的问题关键在于按层次排查不要乱试。第一层引脚。确认复用功能选对了、输出使能打开了、引脚没有被其他外设占用。我遇到过引脚复用编号差一位切到了相邻通道结果配置全对但波形出现在隔壁引脚上。第二层时钟。确认 CMU 里对应的全局时钟使能了、分频系数没错、通道的时钟源选择指向了正确的那一路。这一层出问题的典型现象是“通道状态寄存器显示计数器不动”。第三层通道使能。确认全局的通道使能位和输出使能位都置位了。这两个是分开的只开一个会出现“计数器在跑但引脚不动”或者“引脚有电平但不变”的情况。第四层模式配置。确认 SOMS 选的是 PCM周期值不为 0比较值小于周期值。如果 SR1 大于 SR0某些实现会输出恒高或恒低看起来就像没配置。按这四层走90% 的“没波形”问题在五分钟内能定位。5.2 频率与占空比偏差速查表波形出来了但对不上这类问题更费时间因为现象“看起来正常”。我整理了一张对照表现象最可能原因验证方法频率恰好是预期的一半分频系数算错或者周期值翻倍检查 CMU 分频与 SR0频率差 0.02% 左右周期值该减 1 没减用高频示波器测周期占空比整体偏大一点比较值加 1 与边沿定义不匹配改成 50% 占空比看是否对称占空比运行中偶发跳变更新时机未与周期边界对齐把更新挪进周期中断多通道相位漂移未做全局复位同步检查初始化顺序高占空比时脉宽异常窄比较值接近周期值时的边界处理限制比较值上限为周期值减一这张表里最值得说的是“差 0.02%”那一行。这个偏差非常小普通示波器看不出来但如果你用频率计测会发现和目标差了零点几个赫兹。根因就是周期值的 ±1 偏置。做电机控制时这个偏差会体现在转速上做电源时体现在输出电压上虽然小但会累积。5.3 几个踩过的坑与独家提醒第一个坑上电第一个周期的异常脉冲。如果先开输出使能再写周期值第一个周期会用复位默认值跑一遍产生一个极宽或极窄的脉冲。在驱动 MOS 管的场合这一个脉冲足以炸管。我的做法永远是“参数写完再开输出”并且在使能前先把比较值写成安全值。第二个坑调试器暂停导致波形卡死。ATOM 是硬件自主运行的CPU 停下来它照跑。但如果你的代码依赖中断更新占空比暂停后中断不响应波形就会停在最后一个值上。这不是故障但会让不熟悉的人误判。调试时我一般先在 Free Run 模式下观察波形再决定要不要单步。第三个坑多通道共用一个时钟源时的相互影响。所有用同一路全局时钟的通道频率被绑死。有一次我想让两个通道跑不同频率结果改了一个另一个也跟着变查了半天才发现它们选的是同一个时钟源。后来我养成习惯多频率场景下先把每个通道的时钟源规划好再动手。最后一个提醒别在中断里做浮点运算来算占空比。电流环里我见过有人每次中断都跑一遍浮点除法中断耗时抖动导致更新时刻抖动最后表现为输出纹波。提前算好定点系数中断里只做乘加这个问题就消失了。6. 落地场景与选型经验配置跑通只是开始真正决定这套方案好不好用的是场景匹配。我按自己经手过的三类应用讲一下取舍逻辑都是踩过坑之后的总结。6.1 电机控制里的 PWM 与同步触发FOC 控制对 PWM 的要求集中在三点频率稳定、占空比分辨率足够、采样时刻与 PWM 同步。PCM 模式天然满足前两点第三点靠比较匹配事件触发 ADC 转换实现。我的典型配置是PWM 频率 20kHz计数时钟 100MHz周期值 5000。把 ADC 触发点设在计数器过零时刻下桥臂导通的中点这样采样的是相电流的真实值避开开关噪声。触发信号通过通道的比较事件输出到内部触发网络不需要额外的定时器。这里有个细节触发点的位置要留裕量。如果设在边沿上开关噪声会污染采样。我一般是设在计数器的 25% 位置附近具体看死区时间和电流上升时间。这个值调不好电流采样会有明显的毛刺闭环就会出现周期性振荡很多人会误以为是 PID 参数问题。6.2 电源与调光场景的分辨率权衡开关电源和 LED 调光的需求正好相反。电源要高频减小磁性元件体积调光要低频避免可见闪烁但要求极细的占空比调节。电源场景100kHz 到 500kHz周期值只有 200 到 1000普通 PCM 分辨率不够必须上 HRES 补精度。这时候要注意的是“有效分辨率”不等于“瞬时分辨率”如果你的控制环路带宽只有几 kHz那么占空比的快速抖动会被环路滤掉真正重要的是长期平均值。这种情况下用抖动在相邻两个整数比较值之间交替配合 HRES效果比单纯追求单周期精度更好。调光场景1kHz 左右周期值上万普通 PCM 的分辨率就足够做到 0.01% 的调光深度。这时候上 HRES 收益很小反而是低频下的边沿抖动更值得关注。我一般在这个场景下关掉 HRES减少配置复杂度。6.3 与 TOM、DTM 的选型取舍GTM 里除了 ATOM 还有 TOM 和 DTM。TOM 没有 ARU 连接能力适合纯 CPU 控制的输出DTM 专做死区生成适合半桥驱动。我的选型逻辑是这样的需求首选理由纯 CPU 控制的 PWMTOM结构简单资源占用少需要 ARU 数据流更新ATOM支持总线推送延迟稳定半桥/全桥互补输出带死区DTM硬件生成死区不占 CPU高分辨率 PWMATOM HRES唯一支持的组合多通道相位严格同步ATOM支持全局复位与统一更新实际项目里往往是混用主功率级用 DTM 做互补输出采样触发用 ATOM 的 PCM 通道辅助功能用 TOM。规划的时候先把每个通道的职责定死再统一配时钟能省掉大量后期调整。我个人在这些项目里最深的体会是GTM ATOM 这套东西的复杂度不是设计者炫技而是把“精度”这件事拆成了可以独立取舍的三个维度。你要 20kHz 的电机 PWMPCM 就够了别碰 HRES你要 300kHz 的电源那就得把 HRES 的校准一起做掉你要多通道严格同步那全局复位和统一更新比任何单通道参数都重要。还有一个建议先把简单的跑通再叠加复杂度。我见过太多人一上来就配 ARU 加 HRES出问题之后根本分不清是哪一层错了。先用最朴素的 CPU 直写把波形跑出来、用示波器确认频率和占空比都对再逐层往上加。每加一层就测一次出问题立刻能定位到刚加的那层。这套方法看起来慢实际上比一次性配完再debug快得多。