简介:本资源是一套面向电力电子工程师与嵌入式开发者、专为TMS320F28335 DSP平台设计的全桥LLC谐振变换器数字控制软启动程序,解决高频开关电源启动过程中电流冲击大、器件应力高、系统易震荡等工程痛点。压缩包共151个文件,含9个核心C源码、32个头文件(.h)、18个工程配置文件(.prefs)、17个XML描述文件及多个汇编(.asm)、链接命令(.cmd)、库文件(.lib)和构建脚本(.mk),总大小370KB,完整覆盖从初始化、频率斜坡控制、ADC采样校准到EPWM时序调度的软启动全流程逻辑。已有1639人学习下载,资源内含DSP2833x系列标准外设驱动(如SysCtrl、EPwm、PieVect、CpuTimers等)及底层启动代码,可直接集成进CCS开发环境,支持开关频率从300kHz平滑扫频至谐振点,实现无过冲、低应力的安全启动,是LLC数字电源研发、教学实验与故障调试的重要参考实现。
1. 项目概述:数字控制全桥LLC谐振变换器的软启动实现
最近在调试一个基于TI DSP28335的数字电源项目,核心是一个10kW级别的全桥LLC谐振变换器。项目里最让我头疼,也最考验功力的部分,就是这个“软启动程序”。标题里的“LLC软启动程序18.1.16.zip”这个文件,一看就是某个工程师在某个深夜调试出来的版本存档,里面封装了用DSP28335实现LLC数字软启动的所有核心代码和逻辑。这玩意儿可不是简单的上电延时,它关乎整个变换器能否平稳、可靠地从零状态进入稳态工作,直接决定了你的电源模块是“一次点亮”还是“一缕青烟”。
LLC谐振变换器因其高效率、高功率密度,在服务器电源、通信电源、新能源车载充电机等领域应用极广。但它的软启动,尤其是数字控制的软启动,是个技术活。为什么?因为LLC在启动瞬间,谐振腔里的电流和电容电压都是零,而主控芯片(比如这里的DSP28335)需要精准地控制开关管的驱动频率和占空比,让谐振电流和输出电压“温和地”建立起来,避免出现巨大的浪涌电流冲击开关管和磁性元件,或者因为环路不稳定直接进入保护状态。这个“温和建立”的过程,就是软启动程序要干的事。它涉及到对LLC增益曲线的理解、对DSP事件管理器(EPWM)的精细操控、对ADC采样时序的把握,以及一套可靠的故障保护逻辑。如果你正在用DSP28335做数字电源,尤其是LLC、移相全桥这类拓扑,那这个软启动的实现思路和代码细节,绝对值得你花时间深挖。
2. LLC谐振变换器软启动的核心挑战与设计思路
2.1 为什么LLC的软启动如此关键?
很多人觉得软启动就是让频率从高往低扫,这没错,但只对了一半。LLC的增益曲线(也就是输出电压与输入电压的比值随开关频率变化的曲线)是其灵魂。在稳态时,我们通常让LLC工作在谐振点(Fr)附近或以上,此时增益接近1,且可以实现原边开关管的零电压开通(ZVS),效率最高。但在启动时,情况完全不同。
启动瞬间,输出电压Vout为零,这意味着负载相当于短路。如果此时直接施加一个接近谐振频率的驱动信号,根据LLC的增益特性,变换器会试图输出一个极高的增益(因为需要从零建立起电压),这会导致谐振电流急剧增大,远超正常值。这个巨大的电流应力足以损坏MOSFET、谐振电感或谐振电容。因此,软启动的核心目标,就是在输出电压建立的过程中,始终将谐振电流和开关管应力控制在安全范围内。
数字控制(如DSP28335)相比模拟控制,在这里有天然优势。我们可以编程实现非常复杂的频率和脉宽调制策略,实时监测电流电压并进行闭环调整。但难点也随之而来:如何设计这个频率变化轨迹?如何与电压闭环配合?如何确保在各种负载条件下都能平稳启动?
2.2 数字软启动的典型策略:频率扫描与电压闭环的结合
基于DSP28335的实现,主流且可靠的软启动策略是“分段式频率扫描结合电压闭环”。
第一阶段:高压高频启动。这是最关键也是最危险的一步。程序初始化后,不会立即开启PWM。首先,DSP会将PWM输出频率设置在一个远高于谐振频率Fh的固定值(例如2倍Fr)。在这个频率下,LLC变换器的增益非常低(通常在增益曲线的最左侧,增益远小于1)。然后,以非常小的占空比(或采用脉冲群方式)发出几个或几十个PWM脉冲。目的是用极低的能量对输出电容进行预充电,同时监测原边峰值电流。如果电流超过安全阈值,立即停止并进入故障处理。这个阶段,电压环是开环的,完全由固定的高频和小占空比来控制能量注入。
第二阶段:频率斜坡下降与电压环介入。当输出电压被预充电到一个较低的阈值(比如额定电压的10%-20%)后,软启动进入第二阶段。此时,DSP开始以一定的斜率,将开关频率从初始的高频Fh向目标稳态频率Fs(通常在Fr附近)降低。同时,电压闭环控制器(通常是PID)开始工作。但这里有个技巧:电压环的输出不是直接控制占空比(对于LLC,通常是控制频率),而是作为一个“目标频率”的修正量。程序会设定一个频率下降的基准斜坡,电压环的输出对这个基准斜坡进行微调。如果输出电压上升太快,电压环会输出一个信号,让实际频率下降得慢一点(或暂时升高一点),以减小增益,抑制电压上升速度,从而间接限制电流。
第三阶段:平滑过渡到稳态。当频率下降到接近目标稳态频率Fs,且输出电压也进入额定值的误差带(如95%)时,软启动程序可以认为完成。此时,控制权完全交给稳态的电压-频率闭环PID控制器。为了更平滑,可以在最后阶段用一个更慢的斜率完成频率的最终定位,并逐步放开电压环的积分限幅,避免切换时的抖动。
注意:整个过程中,对原边峰值电流(或谐振电流)的实时监测是必须的,并且这个保护环的优先级最高。DSP28335的ADC模块配合PWM模块的TripZone功能,可以实现逐周期限流(Cycle-by-Cycle Current Limiting),这是软启动安全的核心保障。
3. 基于DSP28335的软启动程序核心模块解析
打开“LLC软启动程序18.1.16.zip”这类工程文件,我们通常会看到围绕DSP28335的以下几个核心模块被精心组织和修改。下面我结合代码片段(以C语言为例)来拆解。
3.1 PWM模块(EPWM)的配置与动态调整
软启动的本质是动态改变PWM的频率和脉宽。DSP28335的EPWM模块非常强大,我们需要用它来生成四路互补带死区的驱动信号,并能在运行中实时改变周期值(即改变频率)。
// 示例:EPWM1周期寄存器(TBPRD)的动态更新,以实现频率扫描 void SoftStart_FrequencyRamp(void) { static Uint32 ramp_counter = 0; Uint32 target_period; Uint32 current_period; if (soft_start_phase == PHASE_RAMP_DOWN) { ramp_counter++; // 计算当前目标周期值。假设从高频周期值PERIOD_HI向低频周期值PERIOD_LO线性下降 // ramp_slope为斜率,由软启动总时间和频率变化范围决定 target_period = PERIOD_HI - (ramp_counter * ramp_slope); // 确保不低于最低周期(最高频率) if (target_period < PERIOD_LO) { target_period = PERIOD_LO; } current_period = EPwm1Regs.TBPRD; // 为了避免突变,可以采用渐变更新,每次只改变一定步长 if (target_period > current_period) { current_period += 1; // 逐步增加周期(降低频率) EPwm1Regs.TBPRD = current_period; EPwm2Regs.TBPRD = current_period; // 同步更新另一桥臂的EPWM } else if (target_period < current_period) { // 在软启动下降阶段,通常不会进入这个分支 } // 判断是否达到目标频率附近 if (current_period >= (PERIOD_LO - DEADBAND)) { soft_start_phase = PHASE_STEADY_TRANSITION; } } }关键点:直接更新TBPRD会立即生效,可能引起相位不连续。更稳健的做法是在计数器为零(CTR=0)或周期匹配(CTR=PRD)的瞬间更新,这需要结合中断服务程序(ISR)来实现。许多工程师会选择在EPWM的周期中断(TBCTR=0)中更新下一个周期的PRD值,这样变化最平滑。
3.2 ADC采样与保护逻辑的实现
软启动期间,必须严密监控母线电压、谐振电流(或原边电流)和输出电压。DSP28335的ADC模块可以配置为与PWM同步触发,实现精准采样。
// 在EPWM周期中断中触发ADC采样序列 __interrupt void EPWM1_TZ_ISR(void) { // ... 清除中断标志 ... // 启动ADC采样序列(假设已配置好SOC0, SOC1...) AdcRegs.ADCSOCFRC1.bit.SOC0 = 1; // 触发采样原边电流 AdcRegs.ADCSOCFRC1.bit.SOC1 = 1; // 触发采样输出电压 // 等待采样完成(或放在ADC中断中处理) while(AdcRegs.ADCINTFLG.bit.ADCINT1 == 0) { } // 等待序列1完成 // 读取ADC结果 primary_current_raw = AdcResult.ADCRESULT0; output_voltage_raw = AdcResult.ADCRESULT1; // 关键:逐周期电流保护 primary_current_actual = (primary_current_raw * 3.3 / 4096.0) / current_sense_gain; // 换算为实际电流值 if (primary_current_actual > PRIMARY_CURRENT_LIMIT_SOFTSTART) { // 立即触发PWM关断(TripZone) EPwm1Regs.TZFRC.bit.OST = 1; // 强制触发一次关断 soft_start_fault = FAULT_OC_SOFTSTART; // 记录故障信息,进入故障处理状态机 EnterFaultState(); } // 电压环计算(在软启动第二阶段后启用) if (soft_start_phase >= PHASE_RAMP_DOWN) { VoltageLoop_Control(); } // ... 其他处理 ... }实操心得:ADC采样的延迟和滤波处理至关重要。谐振电流是高频交流信号,直接采样瞬时值可能不准。通常有两种方法:1) 使用硬件比较器进行峰值检测,ADC采样直流电平;2) 在DSP中,通过精确的PWM触发时刻,采样电流的特定点(例如开关管关断前的时刻),并配合软件滤波。软启动阶段,过流保护阈值PRIMARY_CURRENT_LIMIT_SOFTSTART可以比稳态限流值稍大,但必须绝对在开关管和磁性元件的安全工作区(SOA)之内。
3.3 电压闭环控制器的软启动融入
稳态时,电压环PID输出直接控制开关频率。但在软启动时,需要对其进行“管理”。
typedef struct { float Ref; // 参考值 float Fbk; // 反馈值 float Out; // 输出 float Kp, Ki, Kd; // PID参数 float UpOut, UiOut, UdOut; // 各分量输出 float UiMax, UiMin; // 积分限幅 float OutMax, OutMin; // 总输出限幅 } VOLTAGE_PID; VOLTAGE_PID vpid; void VoltageLoop_Control(void) { float error; static float error_prev = 0; if (soft_start_phase == PHASE_RAMP_DOWN) { // 第二阶段:电压环起作用,但输出用于微调频率斜坡 error = vpid.Ref - vpid.Fbk; vpid.UpOut = vpid.Kp * error; // 积分器使能,但限幅很窄,防止积分饱和导致启动过冲 vpid.UiOut += vpid.Ki * error; if (vpid.UiOut > 50.0) vpid.UiOut = 50.0; // 很窄的积分限幅 if (vpid.UiOut < -50.0) vpid.UiOut = -50.0; vpid.UdOut = vpid.Kd * (error - error_prev); error_prev = error; vpid.Out = vpid.UpOut + vpid.UiOut + vpid.UdOut; // 将PID输出作为一个偏移量,加到预设的频率斜坡值上 current_frequency_offset = vpid.Out * FREQ_SCALE_FACTOR; } else if (soft_start_phase == PHASE_STEADY) { // 第三阶段及稳态:完全由电压环控制频率 // ... 完整的PID运算,积分限幅也放开到正常范围 ... // vpid.Out 直接对应到EPWM的TBPRD值 EPwm1Regs.TBPRD = (Uint32)(SYSCLK / (vpid.Out * 2)); // 假设频率与PRD的关系 } } void SoftStart_Manager(void) { switch(soft_start_phase) { case PHASE_INIT: // 初始化所有外设,PWM输出禁止 vpid.Ref = 0; // 电压环参考为0 vpid.UiOut = 0; // 清零积分器 break; case PHASE_PRE_CHARGE: // 高频小占空比预充电 EPwm1Regs.TBPRD = PERIOD_HI; EPwm1Regs.CMPA = PRE_CHARGE_CMP; // 很小的比较值,对应小占空比 Enable_PWM_Output(); // 使能PWM输出 break; case PHASE_RAMP_DOWN: // 开始频率斜坡,并逐步抬高电压环参考值 vpid.Ref += VREF_RAMP_STEP; // 参考值从0缓慢斜坡上升至目标值 if (vpid.Ref > VOUT_TARGET) vpid.Ref = VOUT_TARGET; // FrequencyRamp函数会负责更新TBPRD break; case PHASE_STEADY: // 软启动完成,切换至稳态控制模式 vpid.UiMax = UI_MAX_STEADY; // 放开积分限幅 vpid.UiMin = UI_MIN_STEADY; break; } }避坑指南:电压环积分器的初始状态是软启动是否平滑的关键。在启动前,必须将积分项清零(UiOut=0)。在预充电和频率斜坡初期,积分器限幅要设置得非常小,或者干脆不启用积分(Ki=0),仅用比例控制。否则,启动前由于误差长期存在可能导致的积分饱和(Windup),会在启动瞬间引发严重的过冲。
4. 软启动程序的具体实现步骤与调试记录
4.1 步骤一:硬件与软件初始化
- 系统时钟与看门狗:配置DSP28335的系统时钟(PLL),初始化看门狗并禁用(调试阶段)或妥善喂狗。
- GPIO与复用配置:将需要用作EPWM输出、ADC输入、故障输入的GPIO引脚配置到正确的功能。
- EPWM模块初始化:
- 配置时基模块(TB):设置时钟预分频、计数模式(通常为上-下计数模式,用于对称PWM)。
- 配置计数比较子模块(CC):设置CMPA/CMPB的初始值,这决定了占空比。软启动初期,CMPA的值要设得非常小,以产生极窄的脉冲。
- 配置动作限定子模块(AQ):设置当TBCTR等于CMPA/CMPB时,输出如何动作(置高、拉低、翻转)。对于全桥,需要配置两路EPWM输出互补信号。
- 配置死区子模块(DB):插入死区时间,防止上下管直通。软启动时,死区时间要保持不变。
- 配置TripZone子模块(TZ):将ADC过流比较信号或GPIO故障信号映射到TZ,配置为一次关断(OST)或周期限流(CBC)。
- 关键点:初始化完成后,不要立即使能PWM输出(
EPwmXRegs.AQCSFRC.bit.OSHT = 0且EPwmXRegs.TBCTL.bit.SWFSYNC = 0)。
- ADC模块初始化:配置采样窗口、触发源(例如由EPWM的周期事件触发)、中断。为母线电压、原边电流、输出电压分配好采样通道(SOC)。
4.2 步骤二:构建软启动状态机
这是程序的核心逻辑。建议用一个明确的enum状态机来管理整个启动流程。
typedef enum { SS_IDLE = 0, SS_PRE_CHARGE, // 高频预充电 SS_RAMP_DOWN, // 频率斜坡下降 SS_STEADY_TRANS, // 向稳态过渡 SS_STEADY, // 稳态运行 SS_FAULT // 故障状态 } SoftStartState_t; SoftStartState_t gSoftStartState = SS_IDLE; Uint32 gPreChargePulses = 0; float gVoltageRef = 0.0; void SoftStart_StateMachine(void) { switch(gSoftStartState) { case SS_IDLE: if (start_command == TRUE) { Sys_ClearFaults(); // 清除所有故障标志 ADC_Calibrate(); // 如果需要,进行ADC校准 gVoltageRef = 0.0; vpid.Out = 0.0; vpid.UiOut = 0.0; // 重置PID积分器 gPreChargePulses = 0; EPwm_SetFrequency(FREQ_HIGH_START); // 设置到最高频率 EPwm_SetDutyCycle(DUTY_MIN_PRE); // 设置最小占空比 gSoftStartState = SS_PRE_CHARGE; } break; case SS_PRE_CHARGE: EPwm_EnableOutput(); // 使能PWM输出 gPreChargePulses++; // 每发出N个脉冲,检测一次输出电压和电流 if (gPreChargePulses % CHECK_INTERVAL == 0) { if (Read_OutputVoltage() > VOUT_PRE_THRESHOLD) { // 输出电压已达到预充电阈值,进入下一阶段 gSoftStartState = SS_RAMP_DOWN; gVoltageRef = Read_OutputVoltage(); // 从当前值开始斜坡 } if (Read_PrimaryCurrent() > I_PEAK_LIMIT_PRE) { // 电流超限,立即停止并报错 EPwm_DisableOutput(); gSoftStartState = SS_FAULT; fault_code = FAULT_PRE_CHARGE_OC; } } // 预充电时间保护,防止因负载过重无法建立电压而卡死 if (gPreChargePulses > MAX_PRE_PULSES) { EPwm_DisableOutput(); gSoftStartState = SS_FAULT; fault_code = FAULT_PRE_CHARGE_TIMEOUT; } break; case SS_RAMP_DOWN: // 1. 缓慢增加电压参考值 gVoltageRef += VREF_STEP; if (gVoltageRef > VOUT_TARGET) gVoltageRef = VOUT_TARGET; vpid.Ref = gVoltageRef; // 2. 计算基于当前参考值的频率指令(开环频率斜坡) target_freq = Calculate_FreqFromRamp(gVoltageRef); // 3. 叠加电压环输出的微调偏移 target_freq += current_frequency_offset; // 4. 限制频率范围 if (target_freq > FREQ_HIGH_START) target_freq = FREQ_HIGH_START; if (target_freq < FREQ_NOMINAL) target_freq = FREQ_NOMINAL; // 5. 更新PWM频率 EPwm_SetFrequency(target_freq); // 检查是否达到稳态条件 if ( (fabs(Read_OutputVoltage() - VOUT_TARGET) < VOUT_TOLERANCE) && (fabs(target_freq - FREQ_NOMINAL) < FREQ_TOLERANCE) ) { gSoftStartState = SS_STEADY_TRANS; transition_counter = 0; } break; case SS_STEADY_TRANS: // 短暂过渡阶段,可能用于放开PID限幅或进行最后微调 transition_counter++; vpid.UiMax += 1.0; // 逐步放开积分限幅 if (transition_counter > TRANSITION_TIME) { gSoftStartState = SS_STEADY; // 切换到完全由电压环控制的稳态模式 } break; case SS_STEADY: // 正常运行,由主循环的电压环和电流环控制 // 此处可监控运行参数,处理故障等 break; case SS_FAULT: // 故障处理:关闭PWM,记录日志,等待复位 EPwm_DisableOutput(); // ... 故障指示灯、通信上报等 ... break; } }4.3 步骤三:关键参数的计算与整定
软启动的性能很大程度上取决于几个关键参数,这些参数需要根据你的具体硬件(谐振参数、变压器变比、功率等级)来计算和调试。
初始频率
FREQ_HIGH_START:必须足够高,确保在空载或轻载启动时,增益足够低。通常取谐振频率Fr的1.5到2.5倍。可以通过LLC的增益公式或仿真来验证,在最高频率、最小占空比时,理论增益是否远小于1。预充电占空比
DUTY_MIN_PRE:这个值决定了初始能量注入的强度。它必须非常小,通常对应CMPA寄存器一个很小的值(比如TBPRD的5%甚至更低)。需要在实际硬件上观察,确保第一个脉冲的原边峰值电流在安全范围内。频率斜坡斜率:斜率决定了软启动的速度。斜率太快,电流应力大;斜率太慢,启动时间长。斜率可以设计为线性,也可以设计为与输出电压相关的函数(如输出电压越高,斜率可以适当加快)。一个经验公式是:
频率变化率 (Hz/ms) = (FREQ_HIGH_START - FREQ_NOMINAL) / 软启动总时间。对于10kW LLC,软启动时间通常在几十毫秒到一百毫秒量级。电压环PID参数:软启动阶段的PID参数(
Kp_soft, Ki_soft)与稳态参数(Kp_steady, Ki_steady)通常不同。软启动时,Kp可以稍大以快速响应,但Ki必须非常小或为零,比例带也可以设置得宽一些。
调试记录片段:
在调试一台12V/1000A输出的LLC时,最初将
FREQ_HIGH_START设为120kHz(Fr=100kHz),预充电占空比设为3%。上电发现第一个脉冲电流就触发保护。用电流探头查看,发现是因为MOSFET的米勒电容和变压器寄生电容导致窄脉冲的实际电流并不小。解决方案:将初始频率提高到150kHz,进一步降低了增益;同时,将前5个脉冲的占空比设置为1%,之后逐步增加到3%,实现了更平滑的预充电。
5. 常见故障排查与实战技巧
5.1 启动瞬间炸管(MOSFET损坏)
这是最令人恐惧的问题。可能的原因和排查方向如下:
| 故障现象 | 可能原因 | 排查方法与解决思路 |
|---|---|---|
| 第一个或前几个脉冲就炸管 | 1.死区时间不足:上下管直通。 2.预充电频率不够高:增益仍较大,电流过大。 3.电流采样或保护失效:硬件比较器电平错误,或DSP的TripZone配置错误,未能及时关断。 4.驱动问题:驱动电压不足、波形畸变、有振荡。 | 1.示波器双通道测量上下管GS波形,确认死区时间是否足够且稳定。 2.提高初始频率,用示波器测量谐振电流波形,估算峰值是否超限。 3.单独测试保护电路:注入一个模拟过流信号,看PWM是否能立即关闭。检查TripZone模块配置,特别是 TZSEL(选择信号源)和TZCTL(配置动作)。4.检查驱动芯片供电、栅极电阻,用探头直接测MOSFET的GS电压,看上升/下降沿是否干净。 |
| 在频率斜坡过程中炸管 | 1.频率下降过快:导致增益上升太快,电流激增。 2.电压环参数激进:积分饱和或比例过大,导致频率指令突变。 3.负载突变启动:带重载启动,但软启动参数是按轻载调的。 | 1.降低频率斜坡斜率,延长软启动时间。 2.检查软启动阶段的PID输出,通过DSP的DAC模块或串口输出该值,观察其变化是否平滑、有无跳变。大幅减小 Ki,甚至设为0。3.区分轻载/重载启动参数。可以在程序中检测负载,采用不同的软启动曲线。 |
实操心得:务必、务必、务必在正式上高压前,做低压弱电测试。用可调电源将母线电压降到安全范围(如30V-50V),甚至可以先不接主变压器,用电阻电容模拟负载。通过示波器观察PWM序列、驱动波形、以及模拟采样点的电压,确保逻辑正确。这样可以避免大部分因程序bug导致的硬件损坏。
5.2 启动失败,进入保护状态
表现为启动几次后停止,DSP报过流或过压故障。
| 故障现象 | 可能原因 | 排查方法与解决思路 |
|---|---|---|
| 预充电阶段报过流 | 1.输出短路或负载过重。 2.电流采样零点漂移:导致实际电流正常,但采样值偏大。 3.保护阈值设置过小。 | 1.检查负载。 2.在PWM关闭状态下,读取ADC采样的电流通道值,应为零点。如果不为零,进行软件校准(减去固定偏置)或检查采样电路。 3.适当提高 PRIMARY_CURRENT_LIMIT_SOFTSTART,但必须在器件SOA内。 |
| 频率斜坡阶段报过压 | 1.电压环太“硬”:为了快速建立电压,PID参数导致频率下降过快,输出电压过冲。 2.输出电压采样反馈环路异常:分压电阻误差、运放电路问题,导致DSP读到的电压低于实际电压,控制器误以为电压没上来,继续加大能量注入。 | 1.观察输出电压波形,看是否过冲。降低软启动阶段电压环的Kp,增大Ki的限幅。2.校准输出电压采样:用万用表测量实际输出电压,与DSP读取并计算出的值对比,修正采样系数。检查反馈电路运放的供电和滤波电容。 |
| 无法进入稳态,在某个频率点振荡 | 1.PID参数不匹配,系统在软启动阶段的相位裕度不足。 2.频率更新点与ADC采样点冲突,导致控制延时不一致。 | 1. 这是一个环路稳定性问题。尝试在软启动阶段使用更保守的PID参数,甚至只用P控制。进入稳态后再切换为优化好的稳态参数。 2.确保ADC采样、计算、PWM更新在一个控制周期内顺序完成。最佳实践是在EPWM周期中断的开始触发ADC,在中断服务程序的末尾更新下一个周期的PWM参数(如TBPRD)。 |
5.3 代码与调试技巧
- 利用DSP的CLA协处理器:如果DSP28335的CLA(控制律加速器)空闲,可以将电流环、电压环的PID计算放到CLA中。这样能极大减轻CPU负担,提高控制频率,让软启动的控制更精细。
- Graphical Debugging(图形化调试):CCS(Code Composer Studio)的Graph功能是你的好朋友。将关键变量(如
gVoltageRef,vpid.Out,primary_current_actual,EPwm1Regs.TBPRD)添加到实时 Watch 窗口,并绘制成曲线。你可以清晰地看到整个软启动过程中,频率如何变化,电压如何上升,电流峰值在哪里。这对于参数整定和故障分析至关重要。 - 非易失性存储故障信息:当软启动失败进入故障状态时,不要只是简单地关闭PWM。将故障发生时的关键变量(如故障代码、输出电压、输入电压、电流值、频率指令等)保存到DSP的Flash或外部EEPROM中。下次上电时,可以通过串口读出这些“黑匣子”数据,极大方便远程问题定位。
- 加入“软启动超时”保护:在状态机中增加一个全局计时器。从
SS_PRE_CHARGE状态开始计时,如果超过预设时间(如200ms)仍未进入SS_STEADY状态,则强制跳转到SS_FAULT。这可以防止程序因某些边界条件异常而卡死在某个启动阶段。
数字控制的LLC软启动,是将对拓扑原理的理解、对处理器资源的掌控和对实际工程问题的解决能力三者结合的典型体现。它没有唯一的标准答案,需要根据具体的功率等级、谐振参数和负载特性进行反复调试和优化。那个名为“LLC软启动程序18.1.16.zip”的文件,背后很可能就是一个工程师经历了数十次炸机、数百次参数调整后的智慧结晶。理解其中的状态机设计、保护逻辑和参数整定思路,远比直接复制代码更有价值。当你亲手调通一个从零平稳启动至满负载的LLC变换器时,那种成就感,绝对是电源工程师独有的快乐。
本文还有配套的精品资源,点击获取