1. CMPSS模块深度解析:从原理到电力电子实战
作为一名在电力电子领域摸爬滚打多年的工程师,我深知比较器子系统(CMPSS)在数字电源控制中的核心地位。今天我们就来彻底拆解TI F28004x系列DSP中的这个关键外设,不仅讲透手册上的内容,更会分享实际工程中那些手册不会告诉你的实战经验。
1.1 CMPSS在电力电子中的核心作用
CMPSS模块是数字电源设计的"神经末梢",它实现了模拟信号到数字控制的精准转换。在峰值电流模式控制中,正是通过CMPSS实时比较电感电流与设定值,才能实现精确的逐周期限流。我曾在一个3kW的PFC项目中,就因为没吃透CMPSS的斜坡补偿机制,导致系统在轻载时出现次谐波振荡,这个教训让我深刻理解了模块每个参数的意义。
模块的典型应用场景包括:
- 峰值电流控制:通过比较器实时捕捉开关管电流
- 电压保护:监控母线电压的过压/欠压状态
- PFC控制:配合斜坡发生器实现平均电流控制
- 同步整流:检测体二极管导通时刻实现ZVS开关
1.2 模块架构与信号流
CMPSS的完整信号通路可以比作一个精密的"信号加工厂"(见图16-1):
- 前端采集:正输入端可接外部引脚或PGA输出,负端接DAC或直接输入
- 核心比较:模拟比较器进行高速(典型50ns)电压比较
- 信号调理:数字滤波器消除振铃和噪声干扰
- 输出分配:通过Crossbar路由到ePWM或GPIO
关键经验:在布局PCB时,比较器输入走线要远离功率回路,我曾因布局不当导致比较器误触发,后来采用以下措施:
- 使用差分走线并包地处理
- 在输入端添加100pF~1nF的滤波电容
- 避免与MOSFET栅极驱动线平行走线
2. 比较器与DAC的实战配置
2.1 比较器参数化配置
比较器的配置远不止简单的使能/禁用,几个关键参数直接影响系统可靠性:
c复制// 典型配置代码示例
CMPSS_configComparator(CMPSS1_BASE, CMPSS_COMP_HIGH,
CMPSS_INPUT_PGA, // 正极输入源
CMPSS_INPUT_DAC, // 负极输入源
0x80, // 迟滞电压(mV)
true); // 输出极性
迟滞电压选择:
- 小信号场景(电流检测):50-100mV
- 高噪声环境(母线电压):200-500mV
- 特殊应用:零迟滞需关闭此功能
我在调试一台通信电源时,发现比较器在阈值点频繁抖动,最终通过将迟滞电压从50mV调整到150mV解决了问题。这个值需要根据信号斜率(dV/dt)和噪声水平综合确定。
2.2 参考DAC的精度优化
12位DAC的电压输出公式虽简单,但实际应用中要注意:
code复制V_DAC = (DACVALA × DACREF) / 4096
精度提升技巧:
- 参考电压选择:
- VDAC(内部3.3V):温度稳定性±50ppm/℃
- VDDA(外部供电):需选用低噪声LDO
- 软件校准:
c复制// DAC线性度校准 for(int i=0; i<4096; i+=256){ CMPSS_setDACValue(CMPSS1_BASE, CMPSS_DAC_HIGH, i); actual_voltage = ADC_read(COMP_DAC_MONITOR); calibration_table[i] = i * 4096 / actual_voltage; } - 动态响应:
- 直接写入DACVALA:立即生效
- 写入DACVALS:在下次SYNCPER同步
实测发现,当DAC输出接近0V或VREF时,非线性误差会增大,建议工作范围控制在5%-95%。
3. 斜坡发生器的精妙设计
3.1 斜坡补偿原理与实现
在峰值电流控制中,斜坡补偿是避免次谐波振荡的关键。CMPSS的斜坡发生器通过硬件实现这一功能,其工作流程如下:
- 初始化参数:
c复制CMPSS_configRamp(CMPSS1_BASE, 3750, // RAMPMAXREFS (初始值) 8, // RAMPDECVALA (步进值) 100, // RAMPDLYA (延迟周期) true); // 同步使能 - 动态过程:
- EPWMSYNCPER触发时加载初始值
- 延迟RAMPDLYA个时钟后开始递减
- 每个SYSCLK周期减少RAMPDECVALA
参数计算实例:
假设需要斜率=0.5V/μs,SYSCLK=100MHz,DACREF=3.3V:
code复制步进值 = (0.5V/μs × 10ns × 4096) / 3.3V ≈ 6.21 → 取整6
实际项目中,我通常先用这个理论值,再通过示波器观察电流波形微调。
3.2 边界条件处理实战
手册16.4.2节提到的边界情况在实际中经常遇到,特别是当COMPHSTS和EPWMSYNCPER接近时。我的处理策略是:
- 软件同步:
c复制
EPWM_disableSync(CMPSS_EPWM_BASE); CMPSS_forceSync(CMPSS1_BASE); EPWM_enableSync(CMPSS_EPWM_BASE); - 硬件设计:
- 增加RC滤波(典型1kΩ+100nF)消除比较器抖动
- 在PCB上缩短COMPHSTS到ePWM的走线
一个反例:在某工业电源项目中,因COMPHSTS信号延迟了3ns,导致斜坡在异常点重启,最终通过调整PCB布局解决。
4. 数字滤波器的抗干扰设计
4.1 滤波器参数化配置
数字滤波器是抑制噪声的最后防线,其核心参数关系为:
code复制实际采样数 = SAMPWIN + 1
实际阈值 = THRESH + 1
采样周期 = (CLKPRESCALE + 1) × SYSCLK
电力电子典型配置:
c复制CMPSS_configFilter(CMPSS1_BASE, CMPSS_FILTER_HIGH,
7, // SAMPWIN (窗口=8)
5, // THRESH (阈值=6)
1); // CLKPRESCALE (分频=2)
这个配置意味着:
- 每2个SYSCLK周期采样一次
- 统计最近8次采样结果
- 当6次及以上为高时输出高电平
4.2 异常情况处理
遇到过最棘手的滤波问题是"采样窗口与开关频率共振",现象是滤波器会周期性漏过噪声。解决方案是:
- 确保采样窗口不是开关周期的整数倍
- 动态调整策略:
c复制if(EPWM_getTimeBaseCounter(EPWM1_BASE) < EPWM_getPeriod(EPWM1_BASE)/2){ CMPSS_setFilterPrescale(CMPSS1_BASE, CMPSS_FILTER_HIGH, 1); }else{ CMPSS_setFilterPrescale(CMPSS1_BASE, CMPSS_FILTER_HIGH, 2); }
5. 系统集成与调试技巧
5.1 与ePWM的协同工作
CMPSS与ePWM的交互是数字电源的核心,几个关键点:
- 同步时序:
- EPWMSYNCPER通常连接ePWM的TBCTR=0事件
- EPWMBLANK用于设置最小导通时间
- 典型配置流程:
c复制EPWM_setSyncOutPulseMode(EPWM1_BASE, EPWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO); CMPSS_setSyncConfig(CMPSS1_BASE, CMPSS_SYNC_IN_EPWM1, true);
5.2 校准实战方法
不同于手册建议,我开发了更高效的"二分法校准":
c复制uint16_t dac_low = 0, dac_high = 4095;
while(dac_high - dac_low > 1){
uint16_t mid = (dac_low + dac_high)/2;
CMPSS_setDACValue(CMPSS1_BASE, CMPSS_DAC_HIGH, mid);
if(CMPSS_getOutput(CMPSS1_BASE, CMPSS_OUTPUT_HIGH)){
dac_high = mid;
}else{
dac_low = mid;
}
}
threshold = (dac_low + dac_high)/2;
这个方法将校准时间从最多4096次缩短到12次,特别适合产线自动化校准。
6. 寄存器级操作与性能优化
6.1 关键寄存器速查
虽然TI提供了配置函数,但理解寄存器对调试至关重要:
| 寄存器组 | 关键寄存器 | 功能说明 |
|---|---|---|
| COMPCTL | COMPDACCTL | 控制DAC更新模式 |
| COMPDAC | DACVALS | DAC影子寄存器 |
| RAMP | RAMPMAXREFS | 斜坡初始值 |
6.2 低延迟优化技巧
在要求纳秒级响应的应用中,可以:
- 禁用数字滤波器(设置SAMPWIN=0)
- 使用直接路径(COMPSTS而非CTRIP)
- 关闭同步器(COMPCTL[SYNCEN]=0)
实测这样可将响应延迟从>100ns缩短到<50ns。
