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.
应届生想请教一下各位大佬前辈。
如果我通过CMPSS3->EPWMXBAR->DC->TZ->EPWMA实现硬件过流保护
CMPSS3的CTRIPH信号调用的是DCAEVT1这个寄存器,同时我也把OST关了 为啥过流保护的时候FLAG.OST还是会置1 ,并且FLAG.DCAEVT1没反应 不跳闸,这个问题有遇到过吗?
同时也想请教一下TZ模块是如何配置的 如果按这个配置路线的话,还需要配置EPWM里的TB之类的吗?还是只需要配置TZ和DC就行了
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模块配置完成 将对TZ模块输出DCAEVT1.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; // 低电平 EPwm1Regs.TZCTL.bit.DCAEVT1 = 2; EPwm1Regs.TZCTL.bit.DCAEVT2 = 2;
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
FLAG.DCAEVT1并不会置1对吗?
FLAG只是标志位,一般标志位就是用于表示是否有相应的中断产生;如果这时也配置了使能位,则产生相应中断;
DCAEVT1的相关输出会使OST跳闸,
想使OST跳闸有很多选择,这只是一个选项,比如TZ信号也可以,具体要看你的选择;
也就是说DCAEVT1如果触发了中断,会使FLAG.OST置1,FLAG.DCAEVT1并不会置1对吗?
如果OST信号是由DCAEVT1触发,则都会置1。
左侧的橙色信号是触发TZ的信号,上面的黄色寄存器是控制位、来选择哪些信号触发什么样的动作。
你上传一下你的工程,我帮你看一下。
只用DCAEVT1可以触发中断吗?因为我看到你画橙色圈的DCAEVT1信号并没有进入OST event模块呀
可以的,DCAEVT1下的不同信号有不同的用处,
.sync信号用于触发同步事件(同步移相用,ePWM、eCAP),.force就是最基本的用于触发TRIP的,.inter就是interrupt的缩写、用于触发中断,.soc用于触发其它外设(ADC)
好的 我现在上传的就是从CMPSS开始的全部了 但是完整工程文件被加密了我传不了T T 您看这些够吗,其他功能我都不用动 光改这里。
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; //VDDA作为DAC的参考电压: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; Cmpss3Regs.COMPCTL.bit.CTRIPHSEL = 0; //比较器输出非同步非滤波信号 //Cmpss3Regs.COMPHYSCTL.bit.COMPHYS = 4; //设置典型的滞环宽度 EPwmXbarRegs.TRIP4MUX0TO15CFG.bit.MUX4 = 0; // MUX4=0 CMPSS3.CTRIPH EPwmXbarRegs.TRIP4MUXENABLE.bit.MUX4 = 1; //复用开关使能 EPwmXbarRegs.TRIPOUTINV.bit.TRIP4 = 0; //CMP3HP输入信号 AnalogSubsysRegs.CMPHPMXSEL.bit.CMP3HPMXSEL = 1; //选择C2引脚作为高侧比较器3的同向输入端 Cmpss3Regs.DACHVALS.bit.DACVAL= i32temp;//CMPSS3 输入电流 350A触发过载保护 //DC Init EPwm1Regs.DCAHTRIPSEL.bit.TRIPINPUT4 = 1;//输入 EPwm1Regs.DCTRIPSEL.bit.DCAHCOMPSEL = 3;//Digital Compare A High Input Select Bits Trip4 EPwm1Regs.TZDCSEL.bit.DCAEVT1 = 2;//Digital Compare Output A1 EPwm1Regs.DCACTL.bit.EVT1SRCSEL = 0;//DCAEVT1 Source Signal Select EPwm1Regs.DCACTL.bit.EVT1FRCSYNCSEL = 1;//DCAEVT1 Force Synchronization Signal Select 异步 EPwm1Regs.DCACTL.bit.EVT1SOCE = 0;//断soc使能 EPwm1Regs.DCACTL.bit.EVT1SYNCE = 0;//断sync使能 EPwm1Regs.DCACTL.bit.EVT1LATSEL = 0;//DCAEVT1事件触发时立即更新事件标志,不会延迟。 //TZ Init EPwm1Regs.TZSEL.all = 0; EPwm1Regs.TZFRC.bit.OST = 1;//3kW初始化时处于封波状态 EPwm1Regs.TZCTL.bit.TZA = 2; EPwm1Regs.TZCTL.bit.TZB = 2; EPwm1Regs.TZCTL.bit.DCAEVT1 = 2; EPwm1Regs.TZSEL.bit.DCAEVT1 = 1; EPwm1Regs.TZCTL2.bit.ETZE = 0; EDIS;
ADC接收也是正常的
TZ之前的TB CC DB AQ PC 都是以前别人配置的 我也不太敢动。
其中 C_INIT_PRD = 6250
PWM_CLK_DIV = 0
C_MAX_DB = 320
gADC.DelayApply为ADC采样延时时间(PWM定时器周期单位)
//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;
能明确一下需求吗?
是通过信号链:
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
你看一下这个例程,完全符合你的需求