CMPSS硬件比较器子系统:实时控制MCU的纳秒级保护与峰值电流模式实现
1. 项目概述为什么我们需要CMPSS在搞电机驱动、数字电源或者任何需要快速响应模拟信号变化的嵌入式系统时我们经常会遇到一个经典难题如何让微控制器MCU的“数字大脑”实时感知并响应外部的“模拟世界”变化比如电机的相电流是否瞬间超过了安全阈值开关电源的输出电压是否异常传统的做法是依赖ADC模数转换器采样然后软件判断。但这里有个致命的时间差ADC采样需要时间软件处理也需要时间等到CPU反应过来可能故障已经发生了。这就好比用温度计去测爆炸的火焰——等你看清读数房子都烧没了。这时候硬件比较器子系统Comparator Subsystem CMPSS的价值就凸显出来了。它本质上是一个“硬件看门狗”独立于CPU核心工作。你可以把它想象成一个高速、专一的哨兵它持续不断地将外部输入的模拟电压比如电流采样电阻上的压降与一个你预先设定好的参考电压由内部DAC生成进行比较。一旦输入电压超过或低于这个阈值它能在几十纳秒内直接输出一个数字跳变信号。这个信号可以直接连接到ePWM增强型脉宽调制器模块瞬间关断驱动桥臂实现纳秒级的硬件保护CPU甚至都来不及介入。这就是CMPSS在TMS320F280013x这类实时控制MCU中不可替代的核心作用。你提供的资料聚焦于TI的TMS320F280013x系列其中提到了CMPSS和其精简版CMPSS_LITE。简单来说CMPSS是“完全体”包含了两个模拟比较器、两个12位参考DAC、两个数字滤波器以及一个递减斜坡发生器Ramp Generator。而CMPSS_LITE可以看作是“青春版”它保留了核心的比较器和DAC功能但移除了斜坡发生器并且DAC的有效分辨率可能略有降低资料提到是9.5位有效。对于大多数过压、过流保护场景CMPSS_LITE已经足够但如果你要实现峰值电流模式控制这种需要动态调整参考电压的复杂拓扑那么带有斜坡发生器的完整CMPSS就是必选项。接下来我将结合你提供的技术手册片段和实际工程经验为你深入拆解CMPSS的工作原理、配置要点、实战中的坑以及如何让它与系统其他部分特别是ADC和ePWM协同工作。无论你是正在评估F280013x的选型还是已经上手调试却遇到了奇怪的问题相信这篇从寄存器级到系统级的解析都能给你带来实实在在的帮助。2. CMPSS架构深度拆解不只是两个比较器那么简单只看框图可能会觉得CMPSS结构清晰但真正用起来每个信号路径、每个配置位都藏着细节。我们结合你提供的图12-1模块框图把整个数据流和关键控制点掰开揉碎了讲。2.1 核心信号通路与关键控制位一个CMPSS模块包含高H和低L两个独立的比较器通道。我们以高比较器COMPH通路为例梳理信号从输入到输出的完整旅程输入选择MUX比较器的正输入端CMPx_HP和负输入端CMPx_HN信号来源需要配置。正输入端通常来自外部引脚通过模拟子系统的多路复用器选择。这里第一个坑不同CMPSS实例如CMPSS1 CMPSSLITE2对应的引脚可能不同必须查具体芯片的数据手册引脚复用表而不是想当然。负输入端的选择由COMPCTL[COMPHSOURCE]位控制0 来自外部引脚CMPx_HN1 来自内部高DACDACH的输出。在大多数保护应用中我们选择内部DAC作为阈值源。比较器核心与迟滞比较器本身就是一个开环运放输出高低电平。COMPCTL[COMPHINV]位可以控制是否对输出取反。另一个重要功能是输入迟滞可以通过相关寄存器位使能。迟滞能有效防止在阈值附近因噪声引起的输出抖动相当于给比较器的判决门限增加了一个“回差”。比如设定阈值为1V开启10mV迟滞那么电压从低到高超过1V时输出跳变但跳变后电压必须回落到0.99V以下输出才会再次跳变回来。这在噪声环境中至关重要。数字滤波器Digital Filter这是抗干扰的第一道防线。比较器的原始输出COMPHSTS可能包含毛刺。数字滤波器的工作原理是建立一个采样窗口SAMPWIN持续监测窗口内信号的电平。只有当窗口内高电平或低电平的样本数达到你设定的阈值THRESH时滤波器的输出才会改变。手册里用FIFO和C代码描述得非常清楚。关键点在于THRESH必须大于SAMPWIN/2且小于等于SAMPWIN。例如设置SAMPWIN6实际内部窗口为7个样本那么THRESH可以设为4、5、6或7内部对应5、6、7、8。CLKPRESCALE则决定了采样时钟分频用于适应不同频率的噪声。同步器与锁存器Synchronizer Latch滤波后的信号可以选择进入一个同步器由COMPCTL[ASYNCHEN]控制其作用是让异步的比较器输出与系统时钟SYSCLK同步避免亚稳态。之后信号可以通过一个锁存器Latch。锁存器一旦被置位将保持状态直到被明确清除。这个功能非常有用可以“抓住”瞬间的故障事件即使故障信号很快消失锁存器的输出依然有效确保CPU或者ePWM能够捕获到这次故障。清除锁存器可以通过软件写COMPSTSCLR[HLATCHCLR]或者通过ePWM的同步周期信号EPWMSYNCPER自动清除需使能HSYNCCLREN。输出路由处理后的最终信号分为两路CTRIPH送往ePWM X-BAR。这是实现硬件级联保护的关键。你可以通过X-BAR配置将CTRIPH连接到任意一个ePWM模块的Trip Zone输入从而直接控制PWM输出强制为高、低或高阻态。CTRIPOUTH送往输出X-BAROutput X-BAR。这路信号可以映射到某个GPIO引脚输出方便你用示波器观察比较器的状态或者触发其他外部电路。2.2 参考DAC设定你的保护阈值每个比较器通道配有一个12位DAC用于生成精确的参考电压。这是设定保护阈值的核心。DAC的输出电压计算公式手册已经给出DACOUT (1 DACVALA / 4096) * DACREF其中DACREF通常是VDDA模拟电源电压。DACVALA是当前有效的DAC值寄存器。这里有三个极其重要的实操要点手册里用Note标出了但很容易被忽略DAC扰动DAC Output Disturbance当高、低两个比较器中的一个发生跳变时会瞬间轻微干扰另一个DAC的输出电压扰动幅度和时间在数据手册中有明确规格。这意味着如果你的高、低保护阈值设置得非常接近一个比较器的动作可能导致另一个比较器产生误触发。设计准则确保高、低阈值之间的电压差大于数据手册规定的“DAC输出扰动”值并且在“DAC扰动时间”内输入信号不会跨越另一个阈值。DACH必须高于DACL这是一个硬件约束。如果你只使用高比较器COMPH和DACH那么必须将DACLVALS寄存器设置为0。反之如果只使用低比较器则需将DACHVALS设置为最大值0xFFF。如果不遵守未使用的比较器可能会因为DAC值不合规而产生不可预知的跳变进而通过上述的“DAC扰动”影响你在使用的通道。影子寄存器与加载时机DACxVALS是影子寄存器DACxVALA是有效寄存器。更新阈值时我们写DACxVALS。DACxVALA何时从DACxVALS加载由COMPDACHCTL[SWLOADSEL]控制0 立即加载1 在一个EPWMSYNCPER事件同步加载。在开关电源控制中为了与PWM周期同步避免在开关周期中间改变阈值引入次谐波强烈建议使用同步加载模式SWLOADSEL1。2.3 斜坡发生器Ramp Generator峰值电流模式的灵魂这是完整版CMPSS独有的高级功能也是实现峰值电流模式控制Peak Current Mode Control的核心。它的作用不是产生一个固定阈值而是产生一个在每个PWM周期内线性下降的斜坡电压作为高比较器COMPH的参考电压。工作原理斜坡发生器本质上是一个16位的递减计数器RAMPSTS。它的高12位RAMPSTS[15:4]被用作DACH的输入值DACHVALA。低4位RAMPSTS[3:0]则作为一个分频器控制斜坡下降的“步调”。使能设置COMPDACHCTL[DACSOURCE] 1让DACH的输入源从DACHVALS切换到RAMPSTS的高12位。初始化与触发当DACSOURCE信号变高或接收到选定的EPWMSYNCPER_H信号时RAMPSTS会从影子寄存器RAMPHREFS重新加载初始值。斜坡生成在EPWMSYNCPER_H事件之后且延迟计数器RAMPDLYA减到0后RAMPSTS在每个SYSCLK周期减去RAMPHSTEPVALA的值。RAMPHSTEPVALA决定了斜坡的斜率下降速度。停止条件当高比较器输出COMPHSTS变高检测到电流达到斜坡阈值时根据COMPDACHCTL[RAMPLOADSEL]的设置RAMPSTS要么停止递减要么重新加载RAMPHREFA并停止。这实现了“峰值检测周期复位”的经典峰值电流控制逻辑。关键配置与避坑指南RAMPHREFS设置斜坡的起始值对应DACH的起始电压。RAMPHSTEPVALA设置每个SYSCLK周期递减的步长。步长越大斜坡下降越快斜率越陡。RAMPHDLYA延迟计数器。在EPWMSYNCPER_H事件后等待RAMPHDLYA个SYSCLK周期后再开始递减。这可以用来补偿功率电路中的传播延迟。手册中关于边沿竞争的警告图12-6和案例1-4详细分析了EPWMSYNCPER_H和COMPHSTS两个信号边沿几乎同时发生时RAMPSTS的行为。在峰值电流控制中如果电流上升非常快可能在EPWMSYNCPER_H之后极短时间内就触发比较器这时需要理解这些边界情况避免斜坡控制逻辑出现混乱。通常确保你的电流采样和比较器响应速度与PWM周期相比有足够余量。3. CMPSS与系统联动ePWM同步与故障处理CMPSS不是孤立的模块它的威力在于与ePWM模块的无缝硬件联动。你提供的资料中提到了EPWMSYNCPER和EPWMBLANK这两个关键信号它们是实现精准时序控制的核心。3.1 EPWMSYNCPER系统同步的节拍器EPWMSYNCPER信号来源于ePWM模块的时基子模块。通常它在一个ePWM周期开始时计数器TBCTR0时产生一个脉冲。这个信号对于CMPSS有三大作用DAC值同步加载当COMPDACCTL[SWLOADSEL]1时DACxVALS影子寄存器的值会在EPWMSYNCPER事件时加载到DACxVALA。这保证了DAC阈值在每一个PWM周期开始时同步更新对于需要周期性地改变阈值的应用如逐周期限流至关重要。斜坡发生器复位与启动对于斜坡发生器EPWMSYNCPER_H经过选择后的同步信号是触发RAMPSTS从RAMPHREFS重新加载并开始递减的“发令枪”。锁存器自动清除使能COMPSTSCLR[HSYNCCLREN]后EPWMSYNCPER信号可以自动清除高比较器的输出锁存器。这意味着每个PWM周期开始时会自动复位上一次的故障锁存状态为新的周期做准备。这对于周期性的峰值电流检测是标准配置。一个重要的坑手册Note明确指出如果ePWM的TBCTR和TBPRD都设置为0EPWMSYNCPER会保持为高电平。这会导致DACxVALA被立即加载无视SWLOADSEL的设置。因此务必先正确配置好ePWM的时基设置好TBPRD然后再将CMPSS的SWLOADSEL设置为1。否则你可能发现DAC值更新行为异常。3.2 EPWMBLANK扩展保护盲区EPWMBLANK信号来源于ePWM模块的数字比较子模块通常用于在PWM开关动作后创建一个“消隐区”Blanketing Window。在消隐区内比较器或ADC的采样可能因开关噪声而不可靠。CMPSS可以利用这个信号。通过设置COMPDACHCTL[BLANKEN]1EPWMBLANK信号可以用于扩展LATCHCLR信号的有效时间。具体来说当LATCHCLR由软件或EPWMSYNCPER产生变高后如果EPWMBLANK信号也为高则LATCHCLR的效果会持续保持。这相当于在PWM开关后的噪声敏感期内强制保持数字滤波器和锁存器处于复位状态避免噪声毛刺误触发保护。这在有SiC/GaN等高速开关器件的电路中非常实用。3.3 输出至ePWM X-BAR实现纳秒级保护配置CTRIPH或CTRIPL输出到ePWM X-BAR是硬件保护链的最后一环。在ePWM模块的Trip-Zone子模块中你可以配置当特定的Trip输入有效时ePWM输出引脚EPWMxA/B采取什么动作强制为高驱动上管导通危险、强制为低安全状态、或高阻态。并且可以配置是单次触发One-Shot还是周期触发Cycle-By-Cycle。典型过流保护配置电流采样信号接入CMPSS正输入端。CMPSS内部DAC设置为过流阈值电压。CMPSS输出CTRIPH配置为连接到ePWM1的TZ1输入。在ePWM1配置中设置TZ1动作Cycle-By-Cycle模式触发时强制EPWM1A和1B输出为低电平或高阻取决于你的驱动逻辑。一旦电流超限CMPSS输出跳变ePWM输出在几十纳秒内被硬件强制拉低关闭功率管。整个过程无需CPU干预实现了最高级别的安全性。4. CMPSS配置与校准实战指南了解了原理我们来看如何动手配置和调试一个CMPSS通道。这里以配置一个简单的过压保护功能为例使用高比较器COMPH负端接内部DAC正端接外部采样电压。4.1 初始化配置步骤以下是基于TI DriverLib库函数你提供的表11-103是很好的参考的典型初始化流程我会穿插解释每个步骤的意图和注意事项。// 假设使用 CMPSS1 的高比较器通道 void CMPSS1_OverVoltageProtection_Init(void) { // 步骤1配置比较器控制寄存器 (COMPCTL) // 选择负端输入源为内部DAC正端为外部引脚需通过Analog Subsystem MUX配置 // 使能输出锁存以便捕获故障事件 // 根据需求选择是否取反输出、是否使能迟滞 // 注意ASYNCHEN位决定是否使用同步器。对于需要极速响应的保护可以 bypass 同步器ASYNCHEN0但需评估亚稳态风险。 uint32_t compctlConfig CMPSS_COMPCTL_COMPHSOURCE_DAC | // 负端来自DAC CMPSS_COMPCTL_CTRIPHSEL_ASYNC | // CTRIPH选择异步路径最快 CMPSS_COMPCTL_CTRIPOUTHSEL_ASYNC | // CTRIPOUTH选择异步路径 CMPSS_COMPCTL_COMPHINV_NORMAL; // 输出不取反 CMPSS_configComparatorHigh(CMPSS1_BASE, compctlConfig); // 步骤2配置高DAC控制寄存器 (COMPDACHCTL) // 设置DAC值同步加载模式与EPWM同步选择DAC源为固定值非斜坡 // 如果不使用斜坡确保DACSOURCE0 uint32_t dacCtrlConfig CMPSS_COMPDACCTL_SWLOADSEL_SYNC; // 同步加载模式 CMPSS_configDACHigh(CMPSS1_BASE, dacCtrlConfig); // 步骤3设置DAC参考电压和阈值 // 假设VDDA3.3V我们要设置过压阈值为2.5V。 // 根据公式DACOUT (1 DACVALA/4096) * DACREF。通常DACREF接VDDA。 // 2.5 (1 DACVALA/4096) * 3.3 // DACVALA (2.5/3.3 - 1) * 4096 ≈ -1018显然不对。公式可能描述有歧义。 // 更常见的理解是DACOUT (DACVALA / 4096) * DACREF。我们以此计算。 // 2.5 (DACVALA / 4096) * 3.3 // DACVALA (2.5 / 3.3) * 4096 ≈ 3103 (0xC1F) uint16_t dacThresholdValue 3103; CMPSS_setDACValueHigh(CMPSS1_BASE, dacThresholdValue); // 写入DACVALS影子寄存器 // 步骤4配置数字滤波器如果需要 // 如果信号比较干净可以 bypass 滤波器所有参数设为0。 // 如果存在噪声则需配置。例如采样窗口7个样本阈值5个样本预分频系统时钟/16。 // 注意DriverLib函数参数是实际值手册中的SAMPWIN等是寄存器值实际值-1。 CMPSS_configFilterHigh(CMPSS1_BASE, 7, 5, 15); // SAMPWIN7, THRESH5, CLKPRESCALE15 // 步骤5初始化滤波器FIFO // 在配置完滤波器参数后需要初始化FIFO内容避免上电后FIFO内是随机值导致误触发。 // FILINITVAL通常设为0假设初始输入低于阈值。 CMPSS_initFilterHigh(CMPSS1_BASE, 0); // 步骤6配置锁存器清除源 // 我们希望每个PWM周期开始时自动清除上一次的故障锁存所以使能同步清除。 CMPSS_clearLatchHigh(CMPSS1_BASE); // 先软件清除一次 CMPSS_enableLatchClearHigh(CMPSS1_BASE, CMPSS_LATCH_CLR_SYNC); // 使能同步清除 // 步骤7使能模块 // 注意根据手册可以在配置DAC值之前使能CMPSS。 CMPSS_enableModule(CMPSS1_BASE); // 步骤8关键配置输出路由到ePWM X-BAR和GPIO // 这部分依赖于具体的SysConfig或直接写XBAR寄存器代码略。 // 例如将CTRIPH连接到ePWM1的TZ1。 // 将CTRIPOUTH连接到某个GPIO如GPIO4以便观察。 }4.2 CMPSS的校准消除误差提升精度你提供的12.6.3节详细描述了校准流程这是保证保护阈值精确度的关键一步。无论是比较器本身的输入失调电压Input referred offset还是内部DAC的静态误差Static offset都会导致实际的跳变点与你软件设定的DAC值对应的理论电压有偏差。校准的核心思想给比较器正输入端施加一个已知的、稳定的直流电压Vtarget然后通过软件扫描DAC值或外部电压找到使比较器输出状态发生变化的临界DAC码值DAC_CODE_trip。这个临界码值与理论码值DAC_CODE_ideal的差值就是系统的总偏移误差。我们可以将这个误差值写入偏移校准寄存器ADCOFFTRIM虽然名字是ADC的但可能相关具体寄存器需查勘误表或用户指南更常见的做法是在软件中保存这个偏移量并在设定阈值时进行补偿。校准流程细化与实操建议准备工作禁用迟滞HYSTCTL避免回差影响校准精度。配置数字滤波器。如果信号非常干净可以暂时旁路滤波器以获得最快响应。如果环境有噪声则需设置合适的滤波参数并务必在每次改变DAC值后等待足够的时间让滤波器输出稳定并清除和读取锁存器状态而不是直接读COMPHSTS。确保正输入端CMPx_HP连接的是你用于校准的、稳定的直流电压源。这个电压最好由高精度的基准源或已校准的DAC产生。执行下行扫描Sweep Down将DAC值设置为最大值0xFFF此时DAC输出电压最高比较器输出应为0假设正端电压Vtarget固定且低于此值。以步长1递减DAC值。每次递减后等待至少几个微秒让DAC稳定查阅数据手册中的DAC建立时间。清除输出锁存器CMPSS_clearLatchHigh。等待一小段时间例如几个滤波器采样周期然后读取锁存器状态CMPSS_getLatchStatusHigh。一旦锁存器被置位status 1记录当前的DAC值作为DAC_CODE_trip_high电压从低于阈值到高于阈值的跳变点。验证与回扫可选但推荐将DAC值在DAC_CODE_trip_high的基础上增加1或2。清除锁存器并等待。此时锁存器应被清除status 0因为电压又回到了阈值以下。这可以验证跳变点的重复性并排除因噪声导致的误触发。计算与应用偏移量理论DAC码值DAC_CODE_ideal (Vtarget / VDDA) * 4096。偏移误差LSBOffset DAC_CODE_trip_high - DAC_CODE_ideal。软件补偿此后当你需要设置保护阈值电压Vprotect时计算DAC码值应使用DAC_CODE_set (Vprotect / VDDA) * 4096 - Offset。硬件补偿如果芯片提供专门的CMPSS偏移校准寄存器需要查证F280013x的具体手册可以将计算出的Offset值写入。注意事项校准应在接近实际工作的温度和电源电压下进行。如果系统中有多个CMPSS模块每个都需要单独校准因为偏移误差是每个模块独立的。对于高精度应用可能需要在多个电压点进行校准并建立查找表或拟合曲线。5. CMPSS_LITE与完整CMPSS的选型考量你提供的资料和表12-1清晰地列出了两者的区别。在做项目选型时该如何决策选择CMPSS_LITE当你的应用只需要简单的电压/电流保护功能过压、欠压、过流不需要峰值电流模式控制。你的保护阈值是固定值或者只需要在软件中相对缓慢地更新例如根据运行模式切换几档阈值。你的PCB空间或成本极其敏感而CMPSS_LITE可能对应着更少的外部引脚或更小的封装选项需查具体型号数据手册。DAC的绝对精度要求不是极端苛刻可以接受9.5位有效分辨率带来的轻微精度损失。选择完整CMPSS当你需要实现峰值电流模式控制Peak-Current-Mode Control, PCM。这是开关电源中用于改善动态响应、提供逐周期限流、简化补偿设计的关键技术斜坡发生器是它的硬件基石。你需要动态的、与PWM周期同步变化的保护阈值。例如在电机启动阶段采用较高的限流值在正常运行阶段采用较低的限流值并且希望这个切换能与PWM边沿精确同步以减少电流冲击。你需要利用DAC输出到引脚的功能将CMPSS的内部DAC作为一个额外的、简单的模拟电压输出使用注意此功能会禁用该CMPSS模块的其他所有功能。你对比较器和DAC的性能指标如响应速度、失调电压有最高要求数据手册中完整CMPSS的参数通常更优。一个常见的误区认为CMPSS_LITE是“功能残缺”的劣化版。实际上对于大量的保护类应用CMPSS_LITE提供了最核心、最经济的解决方案。在资源允许的情况下当然优先选择完整CMPSS以获得最大灵活性但在成本受限的项目中正确使用CMPSS_LITE能省下宝贵的硬件资源。6. 常见问题排查与调试技巧在实际调试中CMPSS不出意外地会遇到一些“意外”。下面是我踩过的一些坑和解决方法。6.1 问题比较器无输出或输出常高/常低检查电源和使能确认模拟电源VDDA和VSSA已正确供电并且CMPSS模块的时钟已使能通过PSC模块。使用CMPSS_enableModule()函数。检查输入信号路径确认正负输入引脚已通过GPIO多路复用器正确配置为模拟输入模式。对于负输入选择内部DAC的情况检查COMPCTL[COMPxSOURCE]位。验证DAC配置与电压确认DACVALS影子寄存器已写入正确的值。确认COMPDACCTL[SWLOADSEL]设置符合预期。如果选择了同步加载1但对应的ePWM模块未产生EPWMSYNCPER信号则DACVALA永远不会更新DAC输出可能为0或默认值。用示波器测量DAC输出引脚如果可用是最直接的验证方法。回忆“DACH必须高于DACL”的规则。如果只用一个通道确保另一个通道的DAC值被正确设置为0或最大值。检查锁存器和滤波器状态如果使能了锁存器故障可能已被锁存但需要清除后才能响应新的变化。尝试调用CMPSS_clearLatchHigh()。如果使能了数字滤波器并且THRESH设置得过高可能导致输出变化极其缓慢或根本不变化。尝试暂时旁路滤波器将所有滤波器参数设为0看是否恢复正常。6.2 问题保护触发不精确或误触发DAC扰动问题如果高、低两个比较器都在使用且阈值设置得较近一个通道的跳变可能会扰动另一个通道的DAC输出导致误触发。确保两个阈值的电压差大于数据手册中“CMPSS DAC output disturbance”的指标通常有几十个mV。噪声与滤波这是误触发最常见的原因。采样电路如电流采样电阻的走线可能引入开关噪声。硬件上确保采样回路面积小采用差分走线在采样点就近添加RC低通滤波但需注意相位延迟。软件上合理配置数字滤波器。SAMPWIN和CLKPRESCALE共同决定了滤波窗口的时间长度。窗口时间 (SAMPWIN 1) * (CLKPRESCALE 1) *SYSCLK周期。这个时间必须大于噪声脉冲的宽度但又必须小于你需要保护的最快故障响应时间。这是一个需要权衡的参数。延迟考量从输入电压越过阈值到CTRIP信号有效存在固有延迟比较器传播延迟同步器延迟滤波器延迟。在计算保护裕量时必须将这个延迟时间考虑进去。例如过流保护中电流上升率di/dt乘以CMPSS总延迟就是额外的电流尖峰你的阈值需要为此留出余量。6.3 问题斜坡发生器工作不正常斜坡不下降检查COMPDACHCTL[DACSOURCE]是否已设置为1选择斜坡源。检查RAMPHSTEPVALA是否大于0。检查EPWMSYNCPER_H信号是否正常产生并连接到CMPSS。使用示波器观察CTRIPH或CTRIPOUTH引脚结合PWM波形看斜坡是否在每个周期开始后启动。斜坡斜率不对斜坡斜率 (RAMPHSTEPVALA/ 16) * (DAC LSB电压) / SYSCLK周期。注意RAMPSTS是16位寄存器其高12位给DAC因此DAC值每一步的变化是RAMPHSTEPVALA 4。确保你计算的斜率与预期一致。峰值电流模式不稳定这是闭环控制问题可能超出CMPSS本身。但需检查斜坡的起始值RAMPHREFS和斜率是否与你的电流采样增益、功率电感匹配。RAMPHDLYA是否设置了合适的值来补偿从PWM开通到电流被采样到的电路延迟这个延迟设置不当是导致次谐波振荡的常见原因。6.4 调试利器CTRIPOUT 信号不要忽视CTRIPOUT功能。将其配置到一个空闲的GPIO引脚上用示波器观察。你可以看到比较器原始输出如果选择异步、无滤波器、无锁存路径这是一个非常干净的数字信号直接反映了比较器瞬间的状态。用于验证比较器本身是否工作。滤波后/锁存后的输出可以看到经过数字处理后的最终跳变信号用于验证滤波器和锁存逻辑。 将CTRIPOUT、PWM输出、以及模拟输入信号放在同一个示波器视图中是分析时序、验证保护逻辑、测量延迟的最直观方法。CMPSS是一个强大的硬件加速器将关键的模拟信号判断任务从软件中卸载出来实现了真正的实时响应。吃透它的架构、善用它的联动功能、并细致地进行校准和调试你就能在电机驱动、电源转换等高可靠性系统中构建起一道坚固的硬件安全防线。