F280049的cmpss比较器

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

包含DAC模块,反相端可作为DAC的输入
在DAC的基础上可设置斜波补偿,用来做峰值电流控制
比较器的输出可设置数字滤波
比较器可设置滞环宽度
比较器的内部框图如下所示:

比较器的使用配置起来比较复杂(我花了好几天才配置成功),实现的功能为:三角波信号与直流信号作比较,比较器的同向输入端为外部输入的三角波信号,反向输入端为内部DAC输入,输出通过GPIO引脚引出。配置步骤为:

配置内部DAC、比较器反向输入端输入源、输出端是否反向
配置比较器输出数字滤波(慎用)
配置比较器的输出方式:输出非同步非滤波信号
设置比较器的滞环宽度,主要是噪声免疫
配置比较器的输出对应的GPIO引脚,这一部分需要参考X-bar部分
配置比较器同相输入端的输入引脚
配置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复用功能表,部分截图如下所示:

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

void InitEMPSSGpio(void)
{
    EALLOW;
 
    GpioCtrlRegs.GPADIR.bit.GPIO2 = 1;              //
    GpioCtrlRegs.GPAPUD.bit.GPIO2 = 1;
    GpioCtrlRegs.GPAGMUX1.bit.GPIO2 = 0x01;
    GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 0x01;           //配置GPIO2引脚输出OUTPUTXBAR1
 
    EDIS;
}
(4)总结
F280049C集成的片上模拟比较器,使用方便,无需外接比较器,而且参考电压可以使用内部DAC,可以用来做峰值电流控制。使用起来需要注意以下几点:

比较器属于模拟电路,所以对噪声的免疫能力较差,使用时最好设置相应的滞环宽度
比较器输出的数字滤波能起到滤波作用,但是需慎用
比较器输出最好不要直接作为PWM信号使用,最好将其输出引到ePWM模块,用ePWM模块输出PWM波
比较器输出作为PWM信号使用时,最好在输出信号上加220pF左右的电容
 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值