Bootstrap

TMS320F280013x的CMPSS与OUTPUT-XBAR的相关配置(TI 、DSP、C2000)

TMS320F280013X是一款数模集成的DSP控制器,除了强大的数字处理能力外,还包含一部分的模拟电路,主要有比较器CMPSS、运放PGA、DAC、ADC。内部的比较器一般是结合DAC来使用,每个比较器模块包含两个比较器,高侧and低侧。比较器的特点如下:

1、包含DAC模块,反相端可作为DAC的输入
2、在DAC的基础上可设置斜波补偿,用来做峰值电流控制
3、比较器的输出可设置数字滤波
4、比较器可设置滞环宽度

比较器的使用配置起来比较复杂(涉及到的模块较多),实现的功能为:比较器的同向输入端为外部输入的三角波信号,反向输入端为内部DAC输入,比较器事件输出通过GPIO引脚引出。
配置步骤为:

1、配置内部DAC、比较器反向输入端输入源、输出端是否反向
2、配置比较器输出数字滤波(慎用)
3、配置比较器的输出方式:输出非同步非滤波信号
4、配置比较器的滞环宽度,主要是过滤噪声
5、配置比较器的输出对应的GPIO引脚,这一部分需要参考X-bar部分
6、配置比较器同相输入端的输入引脚
7、配置GPIO引脚的复用功能,作为Output X-bar输出

附比较器框图:
在这里插入图片描述

(1) 比较器配置

比较器的反相端为DAC的输入(不使用斜波发生器,后边讲解),直接往DAC影子寄存器中填值就可以配置DAC输出。比较器的输出不滤波,直接将其引到GPIO引脚。比较器部分的配置代码如下所示:

void InitEMPSS(void)
{
    EALLOW;
    Cmpss1Regs.COMPCTL.bit.COMPDACE = 1;        //比较器DAC使能
    Cmpss1Regs.COMPCTL.bit.COMPHSOURCE = 0;     //高侧比较器方向输入端为DAC
    Cmpss1Regs.COMPCTL.bit.COMPHINV = 0;        //比较器输出不反向
    Cmpss1Regs.COMPCTL.bit.ASYNCHEN = 0;        //
 
    Cmpss1Regs.COMPDACCTL.bit.DACSOURCE = 0;    //DAC更新数据来自于其影子寄存器
    Cmpss1Regs.COMPDACCTL.bit.SELREF = 0;       //VDDA作为DAC的参考电压
    Cmpss1Regs.COMPDACCTL.bit.SWLOADSEL = 0;    //使用系统时钟同步DAC
 
    Cmpss1Regs.DACHVALS.bit.DACVAL = 1700;      //配置DAC的影子寄存器值
 
    /*数字滤波*/
    Cmpss1Regs.CTRIPHFILCLKCTL.bit.CLKPRESCALE = 0x3FF;
    Cmpss1Regs.CTRIPHFILCTL.bit.SAMPWIN = 31;
    Cmpss1Regs.CTRIPHFILCTL.bit.THRESH = 31;
    Cmpss1Regs.CTRIPHFILCTL.bit.FILINIT = 1;
 
    Cmpss1Regs.COMPCTL.bit.CTRIPOUTHSEL = 0;
    Cmpss1Regs.COMPCTL.bit.CTRIPLSEL = 0;       //比较器输出非同步非滤波信号
 
    Cmpss1Regs.COMPHYSCTL.bit.COMPHYS = 4;      //设置典型的滞环宽度
 
    OutputXbarRegs.OUTPUT1MUX0TO15CFG.bit.MUX0 = 0; // MUX0=0  CMPSS1.CTRIPOUTH
    OutputXbarRegs.OUTPUT1MUXENABLE.bit.MUX0 = 1;   //复用开关使能
 
    AnalogSubsysRegs.CMPHPMXSEL.bit.CMP1HPMXSEL = 0;    //选择A2引脚作为高侧比较器1的同向输入端
//    AnalogSubsysRegs.CMPHNMXSEL.bit.CMP1HNMXSEL = 1;  //选择反向输入端的信号
    EDIS;
}

(2)比较器输入引脚配置

比较器同向输入端的配置需要用到模拟子系统(Analog Subsystem)里边的寄存器,配置比较简单,主要参照引脚对应表配置即可,由于使用的是专用引脚,因此不需要相关的GPIO复用功能配置。部分截图如下所示:
在这里插入图片描述

相关的配置代码如下所示:

AnalogSubsysRegs.CMPHPMXSEL.bit.CMP1HPMXSEL = 0;    //选择A2引脚作为高侧比较器1的同向输入端

(3)比较器输出引脚配置

比较器的输出引脚配置也是理解起来比较复杂,配置很简单,需要用到GPIO Output X-bar里边的相关寄存器将比较器的输出引到相关的GPIO引脚。X-bar其实就是实现多路开关复用的功能,eCAP中需要使用INPUT X-bar,想了解的可以参考我前面的博文。Output X-bar 共对应有8路输出(Output1-Output8),每一路output对应有32个多路选择器,每个选择器都是四选一的数据选择器。GPIO Output X-bar的内部结构图如下所示:
在这里插入图片描述

我使用的是Output1的MUX0开关,对应的输出为OUTPUTXBAR1,四选一的数据选择器的功能对应表部分截图如下所示:
在这里插入图片描述

配置代码中只需要配置MUX0的功能以及输出使能即可。相关的配置代码如下所示:

OutputXbarRegs.OUTPUT1MUX0TO15CFG.bit.MUX0 = 0; // MUX0=0  CMPSS1.CTRIPOUTH
OutputXbarRegs.OUTPUT1MUXENABLE.bit.MUX0 = 1;   //复用开关使能

OUTPUTXBAR1是通过GPIO的复用功能输出,对应到哪个GPIO引脚需要查GPIO复用功能表,部分截图如下所示:
DSP的OUTPUTX-BAR数据表

只需要配置GPIO复用功能引脚即可,相关配置如下所示:

void InitEMPSSGpio(void)
{
    EALLOW;
 
    GpioCtrlRegs.GPADIR.bit.GPIO24 = 1;              //
    GpioCtrlRegs.GPAPUD.bit.GPIO24 = 1;
    GpioCtrlRegs.GPAGMUX1.bit.GPIO24 = 0x01;
    GpioCtrlRegs.GPAMUX1.bit.GPIO24 = 0x01;           //配置GPIO24引脚输出OUTPUTXBAR1
 
    EDIS;
}

(4)总结

TMS320F280013X集成的片上模拟比较器,使用方便,无需外接比较器,而且参考电压可以使用内部DAC,可以用来做峰值电流控制。使用起来需要注意以下几点:
1、比较器属于模拟电路,所以对噪声的免疫能力较差,使用时最好设置相应的滞环宽度
2、比较器输出的数字滤波能起到滤波作用,但是需慎用
3、比较器输出最好不要直接作为PWM信号使用,最好将其输出引到ePWM模块,用ePWM模块输出PWM波
4、比较器输出作为PWM信号使用时,最好在输出信号上加电容

;