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.

TMS320F280025: 关于设计硬件过流保护时TZ模块与DC模块的相关问题

Part Number: TMS320F280025
Other Parts Discussed in Thread: C2000WARE

应届生想请教一下各位大佬前辈。

如果我通过CMPSS3->EPWMXBAR->DC->TZ->EPWMA实现硬件过流保护

CMPSS3的CTRIPH信号调用的是DCAEVT1这个寄存器,同时我也把OST关了 为啥过流保护的时候FLAG.OST还是会置1 ,并且FLAG.DCAEVT1没反应 不跳闸,这个问题有遇到过吗?

同时也想请教一下TZ模块是如何配置的 如果按这个配置路线的话,还需要配置EPWM里的TB之类的吗?还是只需要配置TZ和DC就行了

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
EPwm1Regs.TZCLR.all = 127;
//DC-------------------------------------------------------------------------------------------------------------
EPwm1Regs.DCTRIPSEL.bit.DCAHCOMPSEL = 3;//Digital Compare A High Input Select Bits Trip4
//INTrip4
EPwm1Regs.TZDCSEL.bit.DCAEVT1 = 2;//Digital Compare Output A1
//DCAEVT1.DCAH
EPwm1Regs.DCACTL.bit.EVT1SRCSEL = 0;//DCAEVT1 Source Signal Select
EPwm1Regs.DCACTL.bit.EVT1FRCSYNCSEL = 1;//DCAEVT1 Force Synchronization Signal Select
// DC TZDCAEVT1.Force
EPwm1Regs.TZEINT.bit.DCAEVT1 = 0;//EINT inter使
EPwm1Regs.TZEINT.bit.OST = 0;//OSTEINT使
EPwm1Regs.DCACTL.bit.EVT1SOCE = 0;//soc使
EPwm1Regs.DCACTL.bit.EVT1SYNCE = 0;//sync使
EPwm1Regs.DCACTL.bit.EVT1LATSEL = 0;//DCAEVT1
//EPwm1Regs.DCACTL.bit.EVT1LATCLRSEL
//TZ------------------------------------------------------------------------------------------------
EPwm1Regs.TZSEL.all = 0;
EPwm1Regs.TZCTL.bit.TZA = 2; //
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  • CMPSS3的CTRIPH信号调用的是DCAEVT1这个寄存器,

    DCAEVT1就是用于触发OST的,DCAEVT2是用于触发CBC的;

    同时我也把OST关了 为啥过流保护的时候FLAG.OST还是会置1 ,

    我不清楚你这个关具体是怎么操作的,但是请看一下框图:

    只要有相关的信号进来,标志位就会置1;

    并且FLAG.DCAEVT1没反应 不跳闸,

    这两个标志位之间是相互独立的;主要是用来触发中断的。

    其它模块要根据需求来配置。

    先参考一下例程:C:\ti\c2000\C2000Ware_5_00_00_00\driverlib\f28002x\examples\epwm,ex1、4、5

  • 谢谢Li总又一次为我答疑解惑,你的意思是说DCAEVT1的相关输出会使OST跳闸,FLAG.DCAEVT1并不会置1对吗?我会认真看看你所说的例程的,感谢!

  • 也就是说DCAEVT1如果触发了中断,会使FLAG.OST置1,FLAG.DCAEVT1并不会置1对吗?

  • FLAG.DCAEVT1并不会置1对吗?

    FLAG只是标志位,一般标志位就是用于表示是否有相应的中断产生;如果这时也配置了使能位,则产生相应中断;

    DCAEVT1的相关输出会使OST跳闸,

    想使OST跳闸有很多选择,这只是一个选项,比如TZ信号也可以,具体要看你的选择;

    也就是说DCAEVT1如果触发了中断,会使FLAG.OST置1,FLAG.DCAEVT1并不会置1对吗?

    如果OST信号是由DCAEVT1触发,则都会置1。

    左侧的橙色信号是触发TZ的信号,上面的黄色寄存器是控制位、来选择哪些信号触发什么样的动作。

  • 好的Li总 我再试试吧 您看我现在的配置有问题吗?我确实有点找不到哪里出问题了 现在FLAG.DCAEVT1不置1,只有FLAG.OST1置1

  • Li总 只用DCAEVT1可以触发中断吗?因为我看到你画橙色圈的DCAEVT1信号并没有进入OST event模块呀

  • 你上传一下你的工程,我帮你看一下。

    只用DCAEVT1可以触发中断吗?因为我看到你画橙色圈的DCAEVT1信号并没有进入OST event模块呀

    可以的,DCAEVT1下的不同信号有不同的用处,

    .sync信号用于触发同步事件(同步移相用,ePWM、eCAP),.force就是最基本的用于触发TRIP的,.inter就是interrupt的缩写、用于触发中断,.soc用于触发其它外设(ADC)

  • 好的 我现在上传的就是从CMPSS开始的全部了 但是完整工程文件被加密了我传不了T T 您看这些够吗,其他功能我都不用动 光改这里。

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    EALLOW;
    Cmpss3Regs.COMPCTL.bit.COMPDACE = 1; //DAC使
    Cmpss3Regs.COMPCTL.bit.COMPHSOURCE = 0; //DAC
    Cmpss3Regs.COMPCTL.bit.COMPHINV = 0; //
    Cmpss3Regs.COMPCTL.bit.ASYNCHEN = 0; // OR
    Cmpss3Regs.COMPDACCTL.bit.DACSOURCE = 0; //DAC
    Cmpss3Regs.COMPDACCTL.bit.SELREF = 0; //VDDADAC:2.5?
    Cmpss3Regs.COMPDACCTL.bit.SWLOADSEL = 0; //使DAC
    Cmpss3Regs.DACHVALS.bit.DACVAL = 434; //DAC
    /**///
    Cmpss3Regs.CTRIPHFILCLKCTL.bit.CLKPRESCALE = 0x3FF;
    Cmpss3Regs.CTRIPHFILCTL.bit.SAMPWIN = 31;
    Cmpss3Regs.CTRIPHFILCTL.bit.THRESH = 31;
    Cmpss3Regs.CTRIPHFILCTL.bit.FILINIT = 1;
    //
    //Cmpss3Regs.COMPCTL.bit.CTRIPOUTHSEL = 0;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  • ADC接收也是正常的

    TZ之前的TB CC DB AQ PC 都是以前别人配置的 我也不太敢动。 

    其中 C_INIT_PRD = 6250           

    PWM_CLK_DIV = 0             

    C_MAX_DB = 320    

    gADC.DelayApply为ADC采样延时时间(PWM定时器周期单位)

     

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    //Set the Time-Base (TB) Module
    EPwm1Regs.TBPRD = C_INIT_PRD;//100MHz/2*TBPRD=8k
    EPwm1Regs.CMPB.bit.CMPB = EPwm1Regs.TBPRD - gADC.DelayApply;
    EPwm1Regs.TBPHS.all = 0;
    EPwm1Regs.TBCTL.all = 0xE012;//0xE012 up-down counts
    EPwm1Regs.TBCTL.bit.HSPCLKDIV = PWM_CLK_DIV;
    //Set the Counter-compare (CC) Module
    EPwm1Regs.CMPCTL.all = 0x0100;
    EPwm1Regs.CMPA.bit.CMPA = C_INIT_PRD/2;
    //Set the Action-qualifier (AQ) Module
    EPwm1Regs.AQCTLA.all = 0x0060; //From 0x0090 lxt 2015.8.17
    //Set the Dead-Band Generator (DB) Module
    EPwm1Regs.AQSFRC.all = 0x0;
    EPwm1Regs.AQCSFRC.all = 0x0;//0x05; ////BYCAO FOR POWER HAVE PWM OUTPUT
    EPwm1Regs.DBCTL.all = 0x000B;
    EPwm1Regs.DBFED.bit.DBFED = C_MAX_DB;
    EPwm1Regs.DBRED.bit.DBRED = C_MAX_DB;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
     

  • 能明确一下需求吗?

    是通过信号链:

    CMPSS3 --(DCAEVT1)--> EPWMXBAR --> DC --> TZ --> EPWMA

    实现CBC保护吗?

  • 需求就是实现硬件过流保护 只要输入电流过大了就直接封波。不应该是用OST或者直接通过DCAEVT1的触发来实现嘛?

    信号链就是您说的这个 但是不应该是CMPSS3 --> EPWMXBAR --> DC --> TZ --> EPWMA吗?这个DCAEVT1不是在DC这个模块里产生的嘛?

    感谢Li总!!!!

  • C:\ti\c2000\C2000Ware_5_00_00_00\driverlib\f28002x\examples\cmpss

    你看一下这个例程,完全符合你的需求