This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F280049C: 峰值电流控制不触发的问题

Part Number: TMS320F280049C
Other Parts Discussed in Thread: C2000WARE

请问有前辈知道我这个是什么原因吗?是代码写的原因吗?

我想做峰值电流控制,但是现在的问题是到了我设置的参考电流,比较器并不会触发,我也不知道是什么原因。

这是我的EPWM部分的代码

// AQ模块配置//
EPwm3Regs.AQCTLA.bit.CAU=AQ_CLEAR;//增计数匹配置低
EPwm3Regs.AQCTLA.bit.ZRO = AQ_SET; //零匹配置高
EPwm3Regs.AQCTLA2.bit.T1U = 1;//当发生T1事件时,置低
EPwm3Regs.AQCTLB.bit.CBU = AQ_SET;//增计数匹配置高
EPwm3Regs.AQCTLB.bit.ZRO = AQ_CLEAR; //零匹配置低
EPwm3Regs.AQCTLB2.bit.T1U=2;//当发生T1事件时,置高

// EPwm3Regs.AQCTLB2.bit.T1U=2;//当发生T1事件时,置高

// DC模块设置,不采用滤波
EPwm3Regs.DCTRIPSEL.bit.DCAHCOMPSEL = 3;//DCAH = Comparator 1 output,选择为TRIPIN4,比较器的输出与TRIP4再与DC模块对应
 EPwm3Regs.DCTRIPSEL.bit.DCBHCOMPSEL = 3;//DCAH = Comparator 1 output,选择为TRIPIN4,比较器的输出与TRIP4再与DC模块对应
EPwm3Regs.DCTRIPSEL.bit.DCAHCOMPSEL = 3; // DCBH = Comparator 1 output
EPwm3Regs.TZDCSEL.bit.DCAEVT1 = 2; //DCAEVT1 = DCAH high(will become active as Comparator output goes high)
EPwm3Regs.DCACTL.bit.EVT1SRCSEL = DC_EVT1;//DCAEVT1=DCAEVT1 (not filtered)
EPwm3Regs.DCACTL.bit.EVT1FRCSYNCSEL = DC_EVT_ASYNC; // Take async path,DCAEVT1强制同步信号选择,0是选择与EPWMCLK同步,1是选择源异步同步,此处选择是异步同步
EPwm3Regs.DCAHTRIPSEL.bit.TRIPINPUT4 = 1;// Trip Input 4 selected as combinational ORed input to DCAH mux

// Init Trip Zone Select Register
// Enable DCAEVT1 and DCBEVT1 are one shot trip sources
EPwm3Regs.TZSEL.bit.DCAEVT1 = 1;//使能DCAEVT1为该ePWM模块的一次跳闸源
// EPwm1Regs.TZSEL.bit.DCBEVT1 = 1;
EPwm3Regs.AQTSRCSEL.bit.T1SEL=0;//选择T1事件为DCAEVT1,当有DCAEVT1时,则有一次T1事件

// What do we want the DCAEVT1 and DCBEVT1 events to do?
// DCAEVTx events can force EPWMxA
// DCBEVTx events can force EPWMxB
EPwm3Regs.TZCTL.bit.TZA = 2; // EPWM3A will go low
EPwm3Regs.TZCTL.bit.TZB = 1; // EPWM3B will go HIGH

这是我的DAC部分的代码

void InitDACa(void)
{
EALLOW;

AnalogSubsysRegs.ANAREFCTL.bit.ANAREFA2P5SEL = 0;
//1表示选择内部基准电压为2.5V,0表示选择内部基准电压为1.65V
AnalogSubsysRegs.ANAREFCTL.bit.ANAREFASEL = 0;
//1表示选择外部参考模式,0表示选择内部参考模式。


DacaRegs.DACCTL.bit.DACREFSEL = 1;//1表示将选择外部参考源为内部的这个2.5V,0表示外部为其他的参考源,这里用1即可。
DacaRegs.DACCTL.bit.MODE=1; //增益x2
DacaRegs.DACOUTEN.bit.DACOUTEN = 1;// DAC输出使能,即允许DAC输出

DacbRegs.DACVALS.bit.DACVALS = 0; //设置DAC影子寄存器输出
DacbRegs.DACCTL.bit.DACREFSEL = 1;//1表示将选择外部参考源为内部的这个2.5V,0表示外部为其他的参考源,这里用1即可。
DacbRegs.DACCTL.bit.MODE=1; //增益x2
DacbRegs.DACOUTEN.bit.DACOUTEN = 1;// DAC输出使能,即允许DAC输出

EDIS;
DELAY_US(0);//延迟等待DAC上电

DacaRegs.DACVALS.bit.DACVALS = 124; //设置DAC A口影子寄存器输出,只有影子寄存器可写,所以模块都是
// DacbRegs.DACVALS.bit.DACVALS = 0; //设置DAC B口影子寄存器输出

}

这是我的比较器部分的代码

void InitCMPSS(void)
{
EALLOW;
//比较器配置
Cmpss1Regs.COMPCTL.bit.COMPDACE = 1; //比较器DAC使能
Cmpss1Regs.COMPCTL.bit.COMPHSOURCE = 0; //高侧比较器反向输入端为DAC
Cmpss1Regs.COMPCTL.bit.COMPHINV = 1; //高侧比较器输出反向
Cmpss1Regs.COMPCTL.bit.ASYNCHEN = 0; ////高侧异步比较器输出不反馈带有锁存数字滤波器输出的或门

Cmpss1Regs.COMPDACCTL.bit.DACSOURCE = 0; //DACHVALA是从DACHVALS更新的
Cmpss1Regs.COMPDACCTL.bit.SELREF = 0; //VDDA作为DAC的参考电压
Cmpss1Regs.COMPDACCTL.bit.SWLOADSEL = 0; //使用系统时钟同步DAC.

Cmpss1Regs.DACHVALS.bit.DACVAL = 124; //配置高侧DAC的值


//比较器输入引脚配置

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

//比较器输出引脚配置

OutputXbarRegs.OUTPUT4MUX0TO15CFG.all |= 0; // Set CMPSS1.CTRIPH as OUTPUT1 input
OutputXbarRegs.OUTPUT4MUXENABLE.all |= 1; // enable that mux input

EPwmXbarRegs.TRIP4MUXENABLE.bit.MUX0=1; //使能TRIP4的MUX0部分
EPwmXbarRegs.TRIP4MUX0TO15CFG.bit.MUX0=0; //输出为输出为CMPSS1.CTRIPH_OR_CTRIPL

EDIS;

}

我在EPWM部分用了AQCTLA2来关断开关管,想着这个可以设置死区时间,但是不行;然后我又TZ来触发,也还是不行,我不知道是不是因为我写的代码并没有将比较器输出的值送给DC部分,才导致的,但是我又检查不出有什么问题,AQCTLA2和TZ模块的代码我都放在一起了,还请各位前辈能提供给我一点建议,谢谢!