1. 介绍
C2000系列芯片在数字电源和电机控制中有着广泛的应用,在这些应用中,过流过压保护是必不可少的。传统的方法是使用外部比较器,但是会存在滤波电路不好设计,不同版本需要不同的BOM来提供不同的保护点等问题。本文针对所有第三代C2000芯片,比如F2807x/37x,F28004x,F28002x等,介绍C2000内部比较器的具体实践方法,并提供了与传统的外部比较器方法的比较,结果表明,使用C2000内部比较器的方法在效率和成本上都具备明显的优势。
2. C2000 内部比较器的介绍
TI 第三代C2000芯片全系列集成了带DAC的片内比较器,通过DAC设定阈值,与采样信号分别送到片内比较器的正负输入端做比较,由于DAC的集成,用户可以方便地修改比较的电压值。同时,C2000比较器内部集成数字滤波器,可以实现高性能的滤波。生成保护信号给到PWM模块封锁PWM输出,从而实现快速的过流过压保护,无需额外再加比较器和基准电压。另外,C2000内部的比较器响应速度快,以F280049 为例(可参考datasheet上Comparator Electrical Characteristics这一章节),从比较器输入的电平异常到比较器产生输出信号,延迟最多60ns, 而通用比较器的延迟一般要1us左右,使用与C2000内部比较器相似规格的比较器成本又会比较高。
比较器子系统 (CMPSS) 模块由模拟比较器和支持组件组成它们组合成一种拓扑结构,可用于功率应用,例如峰值电流模式控制,开关电源、功率因数校正和电压跳闸监控。 每个CMPSS 模块包括两个模拟比较器、两个可编程 12 位DAC、一个斜坡发生器和两个数字滤波器。CMPSS有两个输出,一个是CTRIPH,送到芯片内部,可以和PWM模块同步,配合使用。一个是CTRIPOUTH,可以通过OUTPUTXBAR 送到外部GPIO和系统其他模块搭配使用。简化的示意图如图1所示:
图1 比较器子系统 (CMPSS)简图
3. 比较器滞回功能的使用
为了避免噪声波动引起的比较器输出的反复跳变,我们一般都会配置滞回比较。 C2000比较器的滞环是可以设定的,COMPHYSCTL的COMPHYS位可以设定滞环的环宽,当环宽设定为0时也就意味着没有滞环。注意在规格书中,滞环的单位是LSB,所以它和CMPSS模块内部的DAC的参考有关。如果内部DAC的参考电压是3V,1LSB对应3V/4096=0.7mV。 以F28004x,F2807x,F2837x为例,其滞环可以在12LSB, 24LSB, 36LSB, 48LSB中选择。具体可以在datasheet的电气参数中看到。
CMPSS内部DAC的参考可以看TRM (Technical Reference Manual) 中关于参考的介绍,可以在VDDA和VDAC中选择:
设置滞回的寄存器是COMPHYS, 设置滞回也可以调用driverlib中的函数CMPSS_setHysteresis(uint32_t base, uint16_t value)。设置值和滞回环宽的关系可以看具体型号C2000的Technical Reference Manual中寄存器的解释。
4. 数字滤波器的使用
当外部输入的滤波电路设计不当时,会导致比较器被误触发的情况,C2000内部比较器还集成了可配置的数字滤波器,CMPSS数字滤波器的时钟来源是系统时钟, 预分频(CLKPRESCALE)决定了滤波器的采样率,滤波器的FIFO在每个分频后时钟采样一次。数字滤波器在从输入端采集的FIFO采样(SAMPWIN)窗口上工作。滤波器输出为采样窗口内的多数值,其中多数由阈值(THRESH)定义。如果不满足阈值,则滤波器输出保持不变。具体的工作逻辑可以参考TRM(Technical Reference Manual)的Digital filter behavior,如图2。
这里以F280049为例,需要注意的是,THRESH的值必须被设置为大于SAMPWIN/2并且小于或等于SAMPWIN。同时,FIFO中的旧数据将被丢弃。在用寄存器配置的情况下,对于SAMPWIN、THRESH和CLKPRESCALE,数字滤波器使用的内部数字在所有情况下都是+1。也就是说,samples=SAMPWIN+1,threshold=THRESH+1,pre scale=CLKPRESCALE+1。
图2 比较器滤波子模块功能
也可以用driverlib函数配置,即在函数中配置相应的分频值,采样窗和阈值。
- Void CMPSS_configFilterHigh(uint32_t base, uint16_t samplePrescale, uint16_t sampleWindow, uint16_t threshold);
- Void CMPSS_configFilterLow(uint32_t base, uint16_t samplePrescale, uint16_t sampleWindow, uint16_t threshold);
CMPSS可以很方便地和PWM等其他内部外设配合使用,但是有些应用中,也需要把内部比较器的信号锁存起来,比如传给外部的IPM模块等。CMPSS也支持这种模式,用户可选择穿透模式,和锁存(Latch)模式,在锁存模式下,可以将瞬间的过压过流给到外部,保护外部的模块不被损坏。
同时,也可以在比较器的输出源中选择通过或门的锁存信号,也就是高低两个寄存器的COMPCTL.CTRIPOUTLSEL和用COMPCTL.CTRIPOUTHSEL ,第三个输入选项就是经过滤波器后的锁存信号,也可以选择0-异步模式或是和1-CPU时钟同步,或是2-经过滤波器但是不锁存的信号,具体选项和对应关系,可以参考图3。
同样的,也可以用Driverlib函数配置,在void CMPSS_configOutputsHigh(uint32_t base, uint16_t config)和void CMPSS_configOutputsLow(uint32_t base, uint16_t config)函数里面的config增加一个参数CMPSS_TRIPOUT_LATCH即可,TRIPOUT代表是将这个信号通过OUTPUTXBAR送到芯片外部GPIO。
图3 比较器子系统完整信号框图
6. 和PWM配合使用的实际应用
传统的保护方式是使用外部比较器,本文介绍的使用C2000内部的窗口比较器(ADC与比较器pin 脚共用)的方式,可以节省物料成本和布板空间。具体配置方法如下(完整代码参考TIDM-02002
针对 HEV/EV 车载充电器的双向 CLLLC 谐振、双有源电桥 (DAB) 参考设计):
第一步,选择合适的CMPSS输入的脚,查看TRM 的Table 15-2. Analog Pins and Internal Connections,并通过CMPSS的DAC 子模块,配置合适的值; 这边需要注意,比较器模块的高低比较器的Positive input必须是外部AIO引脚,negative input 可以说DAC 的输出或外部AIO引脚。
- // set CMPSS H and L Positive input pins
- ASysCtl_selectCMPHPMux(CLLLC_IPRIM_CMPSS_ASYSCTRL_CMPHPMUX,
- CLLLC_IPRIM_CMPSS_ASYSCTRL_MUX_VALUE);
- ASysCtl_selectCMPLPMux(CLLLC_IPRIM_CMPSS_ASYSCTRL_CMPLPMUX,
- CLLLC_IPRIM_CMPSS_ASYSCTRL_MUX_VALUE);
- // set DAC H and L values
- CMPSS_setDACValueHigh(CLLLC_ISEC_TANK_CMPSS_BASE,
- CLLLC_ISEC_TANK_DACHVAL);
- CMPSS_setDACValueLow(CLLLC_ISEC_TANK_CMPSS_BASE,
- CLLLC_ISEC_TANK_DACLVAL);
- 第二步,配置输出,通过XBAR 将CMPSS的高和低两个比较器的结果,映射到XBAR_TRIP5和XBAR_TRIP7;
- XBAR_setEPWMMuxConfig(XBAR_TRIP5,
- CLLLC_IPRIM_TANK_H_PWM_XBAR_MUX_VAL);
- XBAR_enableEPWMMux(XBAR_TRIP5,
- CLLLC_IPRIM_TANK_H_XBAR_MUX);
- XBAR_setEPWMMuxConfig(XBAR_TRIP7,
- CLLLC_IPRIM_TANK_L_PWM_XBAR_MUX_VAL);
- XBAR_enableEPWMMux(XBAR_TRIP7,
- CLLLC_IPRIM_TANK_L_XBAR_MUX);
7. 总结
在本文中,我们讨论了通过 C2000内部集成的模拟比较器功能,在增加系统功能的同时减少外部组件的需求,同时提供了更多的数字编程控制的灵活性,这种实现还可以帮助节省成本和电路板空间,本文还通过几个具体案例详细介绍了集成模拟比较器的使用方法。更多相关应用、硬件和软件的示例,请参阅 TI 官网提供的C2000开发工具、应用手册、设计指南、硬件原理图和软件示例。