TI|TMS320F280049C 学习笔记16 比较器子系统(CMPSS)

【TI|TMS320F280049C 学习笔记16 比较器子系统(CMPSS)】
文章目录

  • 概述
  • 关键模块
    • 1. 参考DAC
    • 2. 斜坡发生器
    • 3. 数字滤波器
  • 例程
    • CMPSS Asynchronous Trip
    • CMPSS Digital Filter Configuration
  • 参考文献

新一代DSP添加的功能,不是很熟悉,先参考手册和例程学习,之后结合具体项目再补充。
概述 比较器子系统(Comparator Subsystem, CMPSS)由模拟比较器和支持电路组成,可用于峰值电流模式控制、开关电源、功率因数校正、电压跳闸监测等应用。
每个CMPSS包含两个比较器、两个12位DAC参考、两个数字滤波器和一个斜坡发生器。比较器在每个模块中表示为“H”或“L”,其中“H”和“L”分别表示高和低。每个比较器产生一个数字输出,指示正输入端的电压是否大于负输入端的电压。比较器的正输入由外部引脚或PGA驱动,负输入可由外部引脚或可编程参考12位DAC驱动。每个比较器输出通过一个可编程的数字滤波器,可以消除假跳闸信号。如果不需要滤波,也可以使用未滤波的输出。一个可选的斜坡发生器电路可用于控制高比较器的12位参考DAC值。
TI|TMS320F280049C 学习笔记16 比较器子系统(CMPSS)
文章图片

关键模块 1. 参考DAC 每个参考12位DAC都有两组DACxVAL寄存器,即DACxVALA和DACxVAL。DACxVALA是一个只读寄存器,它直接控制12位DAC值。DACxVALS是一个可写的影子寄存器,可以立即加载到DACxVALA中,也可以与下一个EPWMSYNCPER事件同步。高参考12位DAC(DACH)可以选择从斜坡发生器而不是DACHVALS获取其DACHVALA值。
参考12位DAC的工作范围由DACREF和VSSA限定。默认情况下,高压参考电压为VDDA,但可以配置为VDAC。参考12位DAC如图16-3所示。
TI|TMS320F280049C 学习笔记16 比较器子系统(CMPSS)
文章图片

2. 斜坡发生器 有点复杂,暂时用不到,未来再学。
3. 数字滤波器 数字滤波器在从输入端采集的FIFO采样(SAMPWIN)窗口上工作。滤波器输出为采样窗口内的多数值,其中多数由阈值(THRESH)定义。如果不满足阈值,则滤波器输出保持不变。
THRESH的值必须被设置为大于SAMPWIN/2并且小于或等于SAMPWIN。
预分频(CLKPRESCALE)决定了滤波器的采样率,滤波器的FIFO在每个分频后时钟采样一次。FIFO中的旧数据将被丢弃。
注意,对于SAMPWIN、THRESH和CLKPRESCALE,数字滤波器使用的内部数字在所有情况下都是+1。实际上,samples=SAMPWIN+1,threshold=THRESH+1,prescale=CLKPRESCALE+1。
TI|TMS320F280049C 学习笔记16 比较器子系统(CMPSS)
文章图片

例程 提供了2个例程,位置在
C:\ti\c2000\C2000Ware_3_01_00_00\driverlib\f28004x\examples\cmpss
CMPSS Asynchronous Trip 此示例启用CMPSS1 COMPH比较器,并将异步CTRIPOUTH信号馈送至GPIO14/OUTPUTXBAR3引脚,CTRIPH馈送至GPIO15/EPWM8B。CMPSS配置为生成跳闸信号以跳闸EPWM信号。CMPIN1P用于提供正输入,内部DAC配置为提供负输入。内部DAC配置为在VDD/2上提供信号。EPWM信号在GPIO15处生成,配置为由CTRIPOUTH触发。
  • 当向CMPIN1P提供低输入(VSS)时,跳闸信号(GPIO14)输出为低;
  • 当向CMPIN1P提供高输入(高于VDD/2)时,跳闸信号(GPIO14)输出变为高,PWM8B(GPIO15)被跳闸,并输出高。
外部连接:向CMPIN1P提供模拟输入电平,该引脚与ADCINB6共享;用示波器观察GPIO14和GPIO15的输出。
这段代码的配置用到了ePWM的DC模块,先做记录,过几天再看。
#include "driverlib.h" #include "device.h"// // Function Prototypes // void initCMPSS(void); void initEPWM(void); // // Main // void main(void) { // // Initialize device clock and peripherals // Device_init(); // // Disable pin locks and enable internal pullups. // Device_initGPIO(); // // Initialize PIE and clear PIE registers. Disables CPU interrupts. // Interrupt_initModule(); // // Initialize the PIE vector table with pointers to the shell Interrupt // Service Routines (ISR). // Interrupt_initVectorTable(); // // Set up COMP1H // initCMPSS(); // // Set up ePWM8 to take CTRIPH as TRIP4 for its DC trip input // initEPWM(); // // Configure GPIO14 to output CTRIPOUT1H (routed through XBAROUTPUT3) and // GPIO15 to output CTRIPH (routed through ePWM TRIP4 and ePWM8) // GPIO_setPinConfig(GPIO_14_OUTPUTXBAR3); GPIO_setPinConfig(GPIO_15_EPWM8B); // // Enable Global Interrupt (INTM) and realtime interrupt (DBGM) // EINT; ERTM; // // Loop indefinitely // while(1) { // // Trip flag is set when CTRIP signal is asserted // if((EPWM_getTripZoneFlagStatus(EPWM8_BASE) & EPWM_TZ_FLAG_OST) != 0U) { // // Wait for comparator CTRIP to de-assert // while((CMPSS_getStatus(CMPSS1_BASE) & CMPSS_STS_HI_FILTOUT) != 0U) { ; }// // Clear trip flags // EPWM_clearTripZoneFlag(EPWM8_BASE, EPWM_TZ_INTERRUPT | EPWM_TZ_FLAG_OST); } } }// 初始化CMPSS 设置CMPSS1的高侧比较器 void initCMPSS(void) { // 使能CMPSS,设置负输入为DAC CMPSS_enableModule(CMPSS1_BASE); CMPSS_configHighComparator(CMPSS1_BASE, CMPSS_INSRC_DAC); // 使用VDDA作为DAC的参考值,并将参考值设置为一半 CMPSS_configDAC(CMPSS1_BASE, CMPSS_DACREF_VDDA | CMPSS_DACVAL_SYSCLK | CMPSS_DACSRC_SHDW); CMPSS_setDACValueHigh(CMPSS1_BASE, 2048); // 设置输出信号,CTRIPH 和 CTRIPOUTH 都将由异步比较器输出 CMPSS_configOutputsHigh(CMPSS1_BASE, CMPSS_TRIP_ASYNC_COMP | CMPSS_TRIPOUT_ASYNC_COMP); // 设置输出X-Bar: CTRIPOUTH on OUTPUTXBAR3 XBAR_setOutputMuxConfig(XBAR_OUTPUT3, XBAR_OUT_MUX00_CMPSS1_CTRIPOUTH); XBAR_enableOutputMux(XBAR_OUTPUT3, XBAR_MUX00); }// // initEPWM - Function to configure ePWM8 and the ePWM X-BAR to take CTRIPH as //the DC trip input // void initEPWM(void) { // 在设置模块之前关闭ePWM时钟 SysCtl_disablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC); // // 设置时钟预分频为 /1 // EPWM_setClockPrescaler(EPWM8_BASE, EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1); // 为ePWM计数器赋初值 EPWM_setTimeBaseCounter(EPWM8_BASE, 0); EPWM_setTimeBasePeriod(EPWM8_BASE, 0xFFFF); // 设置比较器值 EPWM_setCounterCompareValue(EPWM8_BASE, EPWM_COUNTER_COMPARE_B, 0x8000); // 设置动作 EPWM_setActionQualifierAction(EPWM8_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPB); EPWM_setActionQualifierAction(EPWM8_BASE, EPWM_AQ_OUTPUT_B, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_ZERO); // 设置ePWM8B在TZB事件时输出高 EPWM_setTripZoneAction(EPWM8_BASE, EPWM_TZ_ACTION_EVENT_TZB, EPWM_TZ_ACTION_HIGH); // 当DCNH为高时触发的事件 // Trigger event when DCBH is high EPWM_setTripZoneDigitalCompareEventCondition(EPWM8_BASE, EPWM_TZ_DC_OUTPUT_B1, EPWM_TZ_EVENT_DCXH_HIGH); // 设置TRIP4作为DCBH的输入 EPWM_enableDigitalCompareTripCombinationInput(EPWM8_BASE, EPWM_DC_COMBINATIONAL_TRIPIN4, EPWM_DC_TYPE_DCBH); // 设置DCB为一次性的 OST EPWM_enableTripZoneSignals(EPWM8_BASE, EPWM_TZ_SIGNAL_DCBEVT1); // 设置DCB的路径为异步非滤波 EPWM_setDigitalCompareEventSource(EPWM8_BASE, EPWM_DC_MODULE_B, EPWM_DC_EVENT_1, EPWM_DC_EVENT_SOURCE_ORIG_SIGNAL); // 同步ePWM时基 SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC); // 设置TRIP4 为 CTRIP1H,使用ePWM X-Bar XBAR_setEPWMMuxConfig(XBAR_TRIP4, XBAR_EPWM_MUX00_CMPSS1_CTRIPH); XBAR_enableEPWMMux(XBAR_TRIP4, XBAR_MUX00); // 清除trip标志位 EPWM_clearTripZoneFlag(EPWM8_BASE, EPWM_TZ_INTERRUPT | EPWM_TZ_FLAG_OST); // 增计数模式 EPWM_setTimeBaseCounterMode(EPWM8_BASE, EPWM_COUNTER_MODE_UP); }

CMPSS Digital Filter Configuration 此示例启用CMPSS1 COMPH比较器,并将输出通过数字滤波器馈送到GPIO14/OUTPUTXBAR3引脚。CMPIN1P用于提供正输入,内部DAC配置为提供负输入。内部DAC配置为在VDD/2上提供信号。
  • 当向CMPIN1P提供低输入(VSS)时,跳闸信号(GPIO14)输出为低;
  • 当向CMPIN1P提供高输入(高于VDD/2)时,跳闸信号(GPIO14)输出变为高,
参考文献
  1. DSP TMS320F280049之模拟比较器CMPSS(寄存器版)
  2. CMPSS(模拟比较器)模块学习

    推荐阅读