TI中文支持网
TI专业的中文技术问题搜集分享网站

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

Part Number:TMS320F280049COther 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模块的代码我都放在一起了,还请各位前辈能提供给我一点建议,谢谢!

Ben Qin:

你好,你这里是设置的trip4作为触发信号,但是你这里trip4连接的是什么信号?

建议可以从DC模块入手,根据下图看下各个信号的传输,从而找出没有触发的原因。

,

??? ???:

你好,关于你提到的这个建议,我是这么理解的。

比如28035可以直接将比较器的输出送给DC模块,而0049需要通过X-BAR进行映射,我在比较器的输出配置了X-BAR,写在我的问题的最后,就是这几行代码。

//比较器输出引脚配置

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

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

使能OUTPUTX4-BAR模块,然后EPwmXbar模块使能输出。

不知道是不是我这几行代码写的有问题?

,

Ben Qin:

??? ??? 说:EPwmXbarRegs.TRIP4MUX0TO15CFG.bit.MUX0=0; //输出为输出为CMPSS1.CTRIPH_OR_CTRIPL

根据您这行的注释,您这里应该赋值为1.

,

??? ???:

您好,我将代码改成您建议的答案,峰值还是没有触发。我猜测是比较器输出的值并没有送进DC模块中

,

Ben Qin:

有参考过这个例程吗?使用这个例程能否正常触发?

C2000Ware_5_01_00_00\driverlib\f28004x\examples\epwm\epwm_ex4_digital_compare

,

??? ???:

这个例程是库函数版的,因为配置的原因,一直报错,我就没有用这个例程了。

我之前设置的已经能触发了,就是目前的问题是设置比较器DAC参考值的时候,其实际触发比较器的值与参考值不一致;另外,就是当比较器触发之后,当输入功率上升后,变换器就会进入振荡状态,我不知道是什么原因?

,

Ben Qin:

好的,在新帖中回复您。

e2echina.ti.com/…/tms320f280049c-tms320f280049c

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F280049C: 峰值电流控制不触发的问题
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1