UCD31xx数字电源EADC与斜坡模块配置实战:提升控制精度与动态响应

📅 2026/7/24 8:16:22 👁️ 阅读次数 📝 编程学习
UCD31xx数字电源EADC与斜坡模块配置实战:提升控制精度与动态响应

1. 项目概述:深入理解数字电源的“感官”与“执行器”

在数字电源的世界里,如果把数字信号处理器(DSP)比作“大脑”,负责执行复杂的控制算法,那么模数转换器(ADC)就是系统的“眼睛”和“耳朵”,而数字脉宽调制器(DPWM)则是精准的“双手”。大脑决策的质量,极度依赖于感官采集信息的准确性、及时性,以及双手执行命令的精确度。UCD31xx系列数字电源控制器,作为德州仪器(TI)在数字电源领域的经典之作,其核心魅力就在于将高性能的“感官”(增强型模数转换器EADC)与灵活的“双手”(DPWM)通过精密的硬件逻辑紧密耦合,并配备了强大的“辅助神经系统”(斜坡模块),从而实现了传统模拟或简单数字方案难以企及的控制精度、动态响应和系统可靠性。

这次,我们不谈空洞的理论,直接切入工程师最关心的实战核心:如何配置UCD31xx的EADC与斜坡模块。你手头的项目可能是一个高效率的服务器电源、一个高功率密度的车载充电器,或者是一个要求苛刻的工业电机驱动器。无论哪种,你都会面临几个共通的挑战:如何在开关噪声严重的环境中获取干净的电压/电流采样?如何确保采样时刻与功率开关动作严格同步,以避免次谐波振荡或测量误差?如何实现平滑的软启动/软停止,防止电感电流冲击或输出电压过冲?以及,如何在峰值电流模式控制中生成稳定可靠的斜坡补偿?

UCD31xx的EADC、DPWM触发逻辑和斜坡模块,正是为解决这些问题而生的硬件利器。通过本文,我将带你穿越数据手册的寄存器森林,直抵配置精髓。我会详细拆解EADC的触发源选择、采样时序对齐、硬件平均模式,以及斜坡模块在DAC设定点控制和同步整流管软开关中的应用。你会发现,理解了这些模块的联动,你就能让数字电源的“大脑”获得最清晰、最及时的反馈信息,并让“双手”做出最稳定、最柔顺的动作。无论是刚接触数字电源的新手,还是正在优化现有设计的老手,这些内容都将是你工具箱里不可或缺的实战指南。

2. EADC核心机制深度解析与配置实战

UCD31xx的EADC绝非一个简单的ADC外设,它是一个与DPWM深度集成、具备高级预处理功能的模拟前端。它的设计哲学是:在硬件层面完成尽可能多的信号调理和定时任务,减轻DSP内核的负担,并提高系统的确定性和实时性。

2.1 触发逻辑:让采样与功率开关“心跳”同步

EADC的采样不是自由运行的,而是由事件触发的。这种设计是数字电源精度的基石,确保了采样点总是发生在功率开关周期中“正确”的时刻,例如在DPWM脉冲的中点或结束点,此时电感电流已趋于稳定,测量值最具代表性。

2.1.1 主要触发源及其应用场景

  1. DPWM采样触发:这是最常用、最主要的触发方式。每个DPWM模块都可以在其周期内的两个可编程时刻(通过DPWMxSAMPLE寄存器设置)产生采样触发信号。这意味着你可以为一个EADC安排多个采样点。例如,在一个周期内,可以在主开关管关断后、同步整流管关断前各采样一次电流,分别用于电流环控制和过流保护。

    • 配置要点:关键在于理解SAMPTRIGCTRL寄存器。它是一个巨大的交叉开关矩阵,决定了哪个DPWM的触发信号路由到哪个EADC前端。例如,要让DPWM3触发Front End 2,代码很简单:LoopMuxRegs.SAMPTRIGCTRL.bit.FE2_TRIG_DPWM3_EN = 1;。这种灵活性允许你构建复杂的多相交错拓扑,让每个相的DPWM独立触发其对应的电流采样EADC。
  2. 硬件平均模块触发:当使能EADC硬件平均后,在初始的DPWM触发之后,平均模块会内部生成后续的采样触发。这是实现过采样降噪的关键。例如,设置4倍平均,第一个样本由DPWM触发,紧接着平均模块会自动产生3个额外的触发,EADC快速连续采样4次,硬件自动完成求和与平均,然后将一个精度更高的结果送给滤波器。

  3. 逐次逼近模块触发:当EADC工作在SAR模式时,SAR模块内部控制采样序列。这种模式用于高精度测量绝对电压值,例如在启动前检测输入电压或输出电压预偏置状态。

2.1.2 触发分频与滤波路由

  • 触发分频:并非每次DPWM触发都必须引起EADC转换。FeCtrl0Regs.EADCCTRL.bit.SAMP_TRIG_SCALE寄存器允许你对触发信号进行1到16的分频。例如,设置为4,意味着每5个触发信号(注意:0表示分频1,4表示分频5),EADC才真正执行一次转换。这在需要降低采样率以节省功耗或处理带宽时非常有用。
  • 滤波路由:EADC转换完成后的数据要送往哪个数字滤波器进行闭环计算?这由LoopMuxRegs.FILTERMUX寄存器控制。例如,LoopMuxRegs.FILTERMUX.bit.FILTER1_FE_SEL = 2;就将前端2的EADC输出连接到了滤波器1。这构成了控制环路的数据通路。

实操心得:在配置多相交错系统时,我习惯画一张“信号路由表”。横轴是DPWM0-3,纵轴是FE0-2和FILTER0-2。在表中标记清楚SAMPTRIGCTRLFILTERMUX的设置,可以一目了然地看清整个系统的触发与数据流,避免逻辑混乱。特别是在使用硬件平均时,要清楚认识到只有第一个样本的触发时刻是严格由DPWM决定的,后续平均样本的间隔由EADC自身时钟决定,这有助于你评估在动态负载变化时,平均过程是否会引入额外的相位延迟。

2.2 采样时序:消除抖动,锁定相位

EADC的转换并非由触发信号“启动”,这是一个非常重要的概念。它内部有一个自由运行的时序逻辑,以250 MHz高速时钟为基准,持续地进行转换,每64ns或128ns就产生一个新的样本。触发信号的作用是“锁存”当前时刻最新的转换结果。

  • 采样速率设置:通过FeCtrl0Regs.EADCCTRL.bit.SCFE_CLK_DIV_2位选择。置1(默认)为64ns周期(约15.6 MSPS),清零则为128ns周期(约7.8 MSPS)。更高的速率有助于捕捉更快的瞬态,但功耗和噪声可能稍大。对于多数开关频率在几百kHz的电源应用,7.8 MSPS已经绰绰有余。

  • 帧同步:这是解决潜在采样抖动的关键。由于DPWM周期(例如10us)可能不是EADC采样周期(64ns)的整数倍,如果不加控制,DPWM触发锁存的样本在连续周期中可能会在64ns的时间窗内“滑动”,引入微小的、非确定性的时序抖动。对于高精度相位控制,这种抖动是不可接受的。

    • 解决方法:使能帧同步FeCtrl0Regs.EADCCTRL.bit.FRAME_SYNC_EN = 1;。这会使EADC的采样时钟在每个DPWM帧开始时重新同步,确保采样时钟边沿与DPWM帧边界对齐,从而消除采样点抖动。帧同步信号同样来自DPWM,需要通过LoopMuxRegs.FECTRLxMUX寄存器为每个前端选择具体的DPWM源。

避坑指南:务必留意FeCtrl0Regs.EADCCTRL.bit.SCFE_CNT_INIT这个寄存器。数据手册明确警告应保持为0。我曾有一次调试经历,发现EADC行为异常,采样值偶尔跳变,排查良久才发现是误写了此寄存器。非零值会导致内部状态机初始状态错乱,引发不可预知的结果。

2.3 硬件平均:提升信噪比的利器

噪声是精密测量的天敌。EADC内置的硬件平均单元,能在不增加软件开销的前提下,有效提升信噪比。

2.3.1 两种平均模式详解

  1. 连续模式:在收到一个采样触发后,EADC以其固有采样率(8/16 MHz)连续、快速地采集指定数量(2、4、8)的样本,立即进行平均,然后将结果输出给滤波器。

    • 特点:速度快,在一次触发事件内完成所有采样和平均。适用于需要在本开关周期内立即使用平均结果进行计算的场景。但要注意,这会引入固定的处理延迟,延迟时间等于(采样数-1)乘以EADC采样周期。
  2. 空间模式:每收到一个采样触发,EADC采集一个样本并存入缓冲区。当累计收到指定数量的触发后,对这些来自不同开关周期的样本进行平均,然后输出。

    • 特点不引入额外延迟,因为它利用的是多个周期的触发。它能有效滤除周期性的开关噪声,但无法抑制同一个周期内的突发噪声。适用于对延迟极其敏感,且噪声主要呈周期性的场合。

2.3.2 配置步骤与代码示例

配置平均功能涉及几个关键位:

// 1. 切换到平均模式 FeCtrl0Regs.EADCCTRL.bit.EADC_MODE = 1; // 启用平均模式 // 2. 选择平均模式(连续或空间) FeCtrl0Regs.EADCCTRL.bit.AVG_SPATIAL_EN = 1; // 1=空间模式,0=连续模式 // 3. 选择平均倍数 // 00 = 2倍平均 (默认) // 01 = 4倍平均 // 10 = 8倍平均 FeCtrl0Regs.EADCCTRL.bit.AVG_MODE_SEL = 2; // 选择8倍平均 // 4. 读取结果(结果已自动为平均值) eadc_result = FeCtrl0Regs.EADCVALUE.bit.ERROR_VALUE;

2.3.3 加权平均

除了标准算术平均,EADC还支持加权平均(通过AVG_WEIGHTED_EN位使能)。在加权平均下,最近的样本拥有更高的权重。这在某些需要更强调最新数据变化的控制应用中可能更有优势,但会改变滤波器的频率响应特性,需要根据实际控制环路设计谨慎选择。

经验之谈:如何选择平均模式?我的经验法则是:对于电流内环,优先考虑延迟,常用连续2倍平均或干脆不用平均,因为电流环带宽高,延迟是关键。对于电压外环或采样精度要求高的参考电压,可以使用4倍或8倍的空间平均,以有效抑制低频纹波和噪声,此时几个开关周期的延迟对电压环影响不大。务必在环路仿真中评估平均带来的延迟对相位裕度的影响。

2.4 前端使能:最后的启动开关

配置好所有参数后,必须使能EADC和整个前端模块,它们才能开始工作。这里有一个关键且容易遗漏的步骤:

  1. 使能EADC本地模块

    FeCtrl0Regs.EADCCTRL.bit.EADC_ENA = 1; // 使能EADC,默认即为1 FeCtrl0Regs.EADCCTRL.bit.SCFE_ENA = 1; // 使能开关电容前端,默认即为1

    如果不需要使用某个前端,可以将这些位清零以节省功耗。

  2. 全局使能:这是最关键的一步。前端和DPWM模块还有一个全局使能寄存器GLBEN在Loop Mux中。必须在此寄存器中使能对应的前端,它才会开始运行。

    // 错误做法:单独设置,可能导致时序不同步 // LoopMuxRegs.GLBEN.bit.FE_CTRL0_EN = 1; // LoopMuxRegs.GLBEN.bit.DPWM0_EN = 1; // 正确做法:使用临时变量一次性写入,确保同步启动 union GLBEN_REG glben_temp; glben_temp.all = 0; // 清零临时变量 glben_temp.bit.FE_CTRL0_EN = 1; glben_temp.bit.DPWM0_EN = 1; // ... 设置其他需要使能的模块 LoopMuxRegs.GLBEN.all = glben_temp.all; // 原子操作,同时使能

    为什么必须同步启动?想象一个多相Buck控制器。如果DPWM先于前端使能,那么在最初的几个开关周期内,功率管已经开始工作,但电流采样前端还未就绪,无法提供电流反馈,这可能导致严重的过流或失控。同步启动确保了“感官”和“双手”同时就位。

3. 前端DAC与斜坡模块:动态设定的艺术

EADC测量的是误差信号(Vref - Vsense)。这个Vref就是由前端DAC提供的。而斜坡模块,则赋予了DAC设定点动态变化的能力,是实现高级控制功能的“幕后推手”。

3.1 前端DAC:不仅仅是静态参考

DAC是一个10位分辨率,输出范围0-1.6V的模块。其基本设置很简单:

FeCtrl0Regs.EADCDAC.bit.DAC_VALUE = target_voltage_mV / 1.5625; // 每比特1.5625mV

但为了得到更精细的电压分辨率,UCD31xx引入了抖动功能。

3.1.1 理解DAC抖动

DAC_VALUE寄存器实际是14位:高10位是DAC整数值,低4位是抖动值。抖动功能通过一个4位计数器,在两个相邻的DAC整数值之间切换,以时间平均的方式实现分数电压输出。

  • 工作原理:假设你需要输出100.75(对应约157.42mV)。你将DAC_VALUE设置为(int)(100.75 * 16) = 1612(二进制0110 0100 1100)。其中,高10位01100100= 100,低4位1100= 12。
  • 操作:使能抖动后,硬件会在一个16计数的周期内,输出100(对应低4位0-3)4个周期,输出101(对应低4位4-15)12个周期。时间平均电压就是100.75。
  • 配置
    FeCtrl0Regs.EADCDAC.bit.DAC_VALUE = (int)(desired_value * 16); FeCtrl0Regs.EADCDAC.bit.DAC_DITHER_EN = 1; // 使能抖动 // 选择触发抖动的DPWM边沿 LoopMuxRegs.FECTRLxMUX.bit.DPWMx_y_TRIG_EN = 1;

    注意:抖动计数器由指定的DPWM边沿触发递增。如果该DPWM因故障或输出为0而停止,抖动也会停止,DAC输出将保持在一个固定值。

3.1.2 DAC的外部控制

DAC的输入源可以不来自直接的寄存器写入,而来自其他模块,这实现了环路之间的耦合。

LoopMuxRegs.EXTDACCTRL.bit.DAC0_SEL = 5; // 5表示选择Filter 1的输出作为DAC0的源 LoopMuxRegs.EXTDACCTRL.bit.EXT_DAC0_EN = 1; // 使能DAC0的外部控制

这种模式的一个典型应用是平均电流模式控制:电压环滤波器的输出作为电流环的DAC参考值(即电流指令)。这样,电流内环的设定点就能跟随电压外环的输出动态调整。

3.2 斜坡模块:硬件自动化的大师

斜坡模块是UCD31xx的精华之一,它用硬件自动完成DAC设定点的线性变化,解放了DSP内核。

3.2.1 DAC斜坡功能详解

想象一下电源的软启动:你希望输出电压从0V缓慢、线性地上升到目标值(如12V)。如果用软件实现,你需要在一个高优先级的定时中断里不断计算并更新DAC值,这消耗CPU资源且时序精度受中断延迟影响。斜坡模块将此过程硬件化。

  • 核心参数

    • 起点FeCtrl0Regs.EADCDAC.bit.DAC_VALUE(当前值)。
    • 终点FeCtrl0Regs.RAMPDACEND.bit.RAMP_DAC_VALUE
    • 步长FeCtrl0Regs.DACSTEP.bit.DAC_STEP。这是一个8.10格式的定点数:高8位对应DAC整数部分(含抖动位),低10位是小数部分。这允许极其精细的步进控制(最小步进为1/1024 LSB)。
    • 步进间隔FeCtrl0Regs.RAMPCTRL.bit.SW_CYCLES_PER_STEP。定义每多少个DPWM开关周期才进行一次步进更新。范围1-128。
    • 启动延迟FeCtrl0Regs.RAMPCTRL.bit.RAMP_DELAY。在收到启动信号后,延迟多少个高速时钟周期再开始斜坡。范围0-65535,用于协调多个电源轨的启动时序。
  • 斜坡方向:硬件会自动比较起点和终点。如果终点 > 起点,执行递增斜坡(软启动);如果终点 < 起点,执行递减斜坡(软停止)。

  • 启动方式RAMPCTRL寄存器提供了多种灵活的启动方式,可以通过位组合选择:

    • FIRMWARE_START:软件触发。
    • CONTROL_EN:PMBus控制引脚触发。
    • SLAVE_DELAY_EN/SLAVE_COMP_EN:由其他前端模块的斜坡延迟完成或斜坡完成信号触发,用于实现主从顺序启动。

3.2.2 饱和步进模式

这是一个针对软启动过程的增强功能。在软启动初期,输出电压远低于设定值,EADC会处于深度饱和状态(误差信号极大)。如果此时仍按预设的固定步长缓慢增加DAC,输出电压的上升会非常慢。 通过设置FeCtrl0Regs.RAMPCTRL.bit.RAMP_SAT_EN = 1并配置FeCtrl0Regs.DACSATSTEP,当检测到EADC饱和时,硬件会以更大的DACSATSTEP步长快速调整DAC,直到EADC退出饱和,然后再恢复正常的斜坡步长。这可以加速启动初期的电压建立过程

配置陷阱:使用饱和步进时,DACSATSTEP的值需要仔细选择。过小则加速效果不明显;过大可能导致DAC值“过冲”,在退出饱和时产生电压超调。通常建议将其设置为正常斜坡步长的5-10倍,并通过实验验证。

3.2.3 状态监控与中断

RAMPSTAT寄存器提供了斜坡模块的运行状态:

  • RAMP_BUSY:斜坡正在进行中。
  • RAMP_COMP_STATUS:斜坡过程已完成。
  • RAMP_DLY_STATUS:启动延迟已完成。
  • EADC_SAT_HIGH/LOW:EADC饱和状态。

你可以使能RAMPCTRL中对应的中断使能位,让斜坡完成或延迟完成事件触发DSP中断,从而在斜坡结束后无缝切换到正常的闭环控制模式。

3.3 斜坡模块的其他妙用

3.3.1 峰值电流模式控制

在峰值电流模式中,需要将一个斜坡信号(通常由时钟或振荡器产生)与电流采样值相加,以提供斜率补偿,防止次谐波振荡。UCD31xx的斜坡模块可以完美生成这个补偿斜坡。

  1. 配置斜坡模块为向下斜坡(设置终点远小于起点)。
  2. 设置PCM_START_SEL = 1,让斜坡的起始值由某个滤波器的输出动态控制(这代表了电压环的输出,即电流指令)。
  3. 使能差分转单端比较器:FeCtrl0Regs.EADCCTRL.bit.D2S_COMP_EN = 1
  4. 将斜坡模块的输出(即DAC值)与EADC的输入(即电流采样值)在内部比较器进行比较。
  5. 当电流采样值超过斜坡值时,比较器输出翻转,这个信号可以通过故障多路复用器路由到DPWM,作为关断信号,实现峰值电流控制。

3.3.2 同步整流管的软开/关

在同步整流Buck或LLC电路中,为了防止体二极管导通和反向恢复问题,需要精确控制同步整流管的导通时序。斜坡模块可以用于动态调整DPWMB(通常控制同步整流管)的导通时间。

  • 配置SYNC_FET_EN = 1,启用同步整流斜坡模式。
  • 设置SYNC_FET_RAMP_STARTRAMPDACEND.RAMP_DAC_VALUE作为脉宽变化的起点和终点(单位是高速时钟周期,4ns/LSB)。
  • 斜坡模块会线性改变DPWMB的导通时间,实现平滑的开启和关断,避免电压电流尖峰。

重要限制:每个前端只有一个斜坡模块,因此DAC斜坡、峰值电流补偿、同步整流软开关三者不能同时使用同一个前端的斜坡模块。你需要根据系统需求进行分配。例如,在一个峰值电流控制的同步整流Buck中,通常将斜坡模块用于峰值电流补偿,而使用软件或DPWM自身的渐变功能来实现同步整流的软开关。

4. 逐次逼近模式与其他工作模式

4.1 逐次逼近模式:高精度绝对电压测量

当需要测量一个宽范围且精度要求高的绝对电压(如输入电压检测)时,标准模式可能因DAC参考电压不匹配而无法满足要求。SAR模式让EADC和DAC协同工作,像一个逐次逼近型ADC。

  • 非连续SAR模式:每次DPWM采样触发都启动一次完整的SAR转换序列。它从最低增益开始,逐步逼近,最终得到高精度的绝对电压值并存储在EADCVALUE.ABS_VALUE中。优点是功耗低,只在需要时转换。缺点是延迟长,每次转换都需要多个步骤。
  • 连续SAR模式:SAR算法持续在后台运行,不断跟踪输入电压。当DPWM触发到来时,如果误差已在最终窗口内,可直接读取高精度结果,延迟极短。适合需要快速、连续读取绝对值的场合。

配置关键:需要设置SAR窗口范围(SAR_WIN1_RANGE,SAR_WIN2_RANGE,SAR_RANGE)和最终分辨率(FINAL_SAR_RES)。这些参数决定了SAR算法何时增加前端增益。更小的窗口和更高的最终分辨率意味着更精细的测量,但收敛可能更慢。

4.2 EADC的其他工作模式

EADC_MODE位域定义了EADC的7种工作模式:

  • 模式0:标准模式(默认)。
  • 模式1:平均模式。
  • 模式2/3:非连续/连续SAR模式。
  • 模式5:数字峰值电流模式。此模式下,EADC直接与一个数字比较器配合,用于实现数字化的峰值电流保护或控制。
  • 模式6/7:恒定功率/恒定电流控制模式。此模式下,CPCC模块会根据条件在标准模式和SAR模式之间自动切换,用于实现恒功率或恒流输出特性,常见于电池充电器。

5. 寄存器精讲与实战配置流程

5.1 关键寄存器速查表

寄存器名称所属模块核心功能关键位/字段
SAMPTRIGCTRLLoop Mux采样触发路由FEy_TRIG_DPWMx_EN
FILTERMUXLoop MuxEADC输出到滤波器的路由FILTERx_FE_SEL
EADCCTRLFront End CtrlEADC全局控制SCFE_CLK_DIV_2,FRAME_SYNC_EN,EADC_MODE,AVG_SPATIAL_EN,AVG_MODE_SEL,EADC_ENA,SCFE_ENA
EADCDACFront End CtrlDAC值设定与抖动DAC_VALUE,DAC_DITHER_EN
EXTDACCTRLLoop MuxDAC外部源选择DACx_SEL,EXT_DACx_EN
RAMPCTRLFront End Ctrl斜坡控制RAMP_EN,SYNC_FET_EN,FIRMWARE_START,SW_CYCLES_PER_STEP,RAMP_DELAY,RAMP_SAT_EN
RAMPDACENDFront End Ctrl斜坡终点值RAMP_DAC_VALUE
DACSTEPFront End Ctrl斜坡步长DAC_STEP
DACSATSTEPFront End Ctrl饱和步长DAC_SAT_STEP
GLBENLoop Mux全局使能FE_CTRLx_EN,DPWMx_EN

5.2 一个完整的配置示例:电压环软启动

假设我们要配置Front End 0用于输出电压采样,并实现一个软启动过程。

void ConfigureFE0_ForSoftStart(void) { // 1. 配置触发与路由 LoopMuxRegs.SAMPTRIGCTRL.bit.FE0_TRIG_DPWM0_EN = 1; // DPWM0触发FE0 LoopMuxRegs.FILTERMUX.bit.FILTER0_FE_SEL = 0; // FE0输出到FILTER0 // 2. 配置EADC基本参数 FeCtrl0Regs.EADCCTRL.bit.SCFE_CLK_DIV_2 = 0; // 128ns周期 (7.8 MSPS) FeCtrl0Regs.EADCCTRL.bit.FRAME_SYNC_EN = 1; // 使能帧同步 // 配置帧同步源(假设使用DPWM0的帧同步) LoopMuxRegs.FECTRL0MUX.bit.DPWM0_FRAME_SYNC_EN = 1; // 3. 配置DAC初始值(软启动起点) float vout_start_mv = 0.0; float vout_target_mv = 12000.0; // 12V输出,假设分压后为1.2V进入EADC FeCtrl0Regs.EADCDAC.bit.DAC_VALUE = (uint16_t)(vout_start_mv / 1.5625); // 4. 配置斜坡参数 // 假设软启动时间 10ms, DPWM频率 500kHz (周期2us) uint16_t ramp_steps = 10000 / 2; // 总共需要5000个DPWM周期完成软启动 uint16_t dac_target = (uint16_t)(vout_target_mv / 1.5625); uint16_t dac_range = dac_target; // 从0开始 // 计算步长 (8.10格式): 总变化量 / 步数 float step_float = (float)dac_range / (float)ramp_steps; uint16_t dac_step = (uint16_t)(step_float * 1024.0); // 转换为8.10格式 FeCtrl0Regs.DACSTEP.bit.DAC_STEP = dac_step; FeCtrl0Regs.RAMPDACEND.bit.RAMP_DAC_VALUE = dac_target; FeCtrl0Regs.RAMPCTRL.bit.SW_CYCLES_PER_STEP = 0; // 1 cycle per step (最快) FeCtrl0Regs.RAMPCTRL.bit.RAMP_DELAY = 0; // 无额外延迟 // 5. 使能饱和步进以加速初始建立(可选) FeCtrl0Regs.RAMPCTRL.bit.RAMP_SAT_EN = 1; FeCtrl0Regs.DACSATSTEP.bit.DAC_SAT_STEP = dac_step * 8; // 饱和步长为正常步长8倍 // 6. 使能斜坡模块,并准备由软件启动 FeCtrl0Regs.RAMPCTRL.bit.RAMP_EN = 1; // 7. 使能前端模块 FeCtrl0Regs.EADCCTRL.bit.EADC_ENA = 1; FeCtrl0Regs.EADCCTRL.bit.SCFE_ENA = 1; // 8. 全局使能(与DPWM0同步使能) union GLBEN_REG glben_temp = {0}; glben_temp.bit.FE_CTRL0_EN = 1; glben_temp.bit.DPWM0_EN = 1; LoopMuxRegs.GLBEN.all = glben_temp.all; // 9. 等待系统稳定后,通过软件启动斜坡 // ... 其他初始化代码 ... FeCtrl0Regs.RAMPCTRL.bit.FIRMWARE_START = 1; // 写入1启动,硬件会自动清零 // 10. 轮询或中断等待斜坡完成 while(FeCtrl0Regs.RAMPSTAT.bit.RAMP_BUSY == 1) { // 等待斜坡完成 } // 软启动完成,系统进入稳态闭环运行 }

5.3 调试技巧与常见问题排查

  1. EADC无读数或读数固定

    • 检查GLBEN寄存器中对应前端是否使能?EADC_ENASCFE_ENA是否置1?SAMPTRIGCTRL路由是否正确?DPWM是否确实产生了触发信号?
    • 工具:使用CCS的寄存器查看器和图形化工具,监控EADCVALUE寄存器。可以临时将EADC模式改为连续SAR模式,看是否能读到变化的绝对电压,以排除前端模拟通路问题。
  2. 采样时刻抖动大

    • 检查FRAME_SYNC_EN是否使能?选择的帧同步DPWM源是否与触发DPWM同步?DPWM周期是否是EADC采样周期的整数倍?如果不是,即使使能帧同步,采样点在一个周期内也是固定的,但不同周期之间可能有一个时钟的偏差(如果周期比不匹配)。
  3. 斜坡功能不启动

    • 检查RAMP_EN是否置1?SW_CYCLES_PER_STEP是否非零?DACSTEP步长是否太小(导致在有限时间内无法到达终点)或太大(导致跳过终点)?启动条件(FIRMWARE_START,CONTROL_EN等)是否满足?
    • 监控:读取RAMPSTAT寄存器,查看RAMP_BUSY状态。同时监控EADCDAC寄存器的值,看是否在变化。
  4. 使用平均后环路不稳定

    • 分析:这很可能是相位延迟引入的。连续平均模式会引入固定的计算延迟((N-1)*Tsample)。在计算环路补偿时,必须将这个延迟考虑进去。在波特图分析中,这个延迟会带来一个额外的相位滞后:phase_lag = -360 * delay * freq。对于高带宽的电流环,这个滞后可能显著降低相位裕度。
    • 解决:要么降低平均次数,要么在环路补偿设计时预先补偿这个延迟,要么考虑使用空间平均模式。
  5. DAC抖动导致输出电压纹波增大

    • 现象:在轻载或高精度应用中,使能DAC抖动后,可能在输出电压上观察到与抖动频率同步的低频纹波。
    • 解决:尝试调整触发抖动的DPWM频率,使其远离环路带宽和敏感频段。或者,在性能允许的情况下,关闭抖动,使用固定的DAC值。

配置UCD31xx的EADC和斜坡模块,是一个将硬件特性与系统需求精准匹配的过程。没有一成不变的“最佳配置”,只有最适合你当前电源拓扑、控制目标和性能需求的配置。最好的学习方法,就是在理解了上述原理后,动手在评估板上实验,用示波器观察波形,用调试器查看寄存器,反复迭代。当你看到输出电压如你所愿地平滑上升,电流波形干净稳定时,你会真正体会到这些精密硬件模块带来的掌控感与成就感。