我的消隐窗口有问题。 我将采用 Comp7的 PWM2A 作为 TZ 输入。 COMP7INP 连接到 我在评估板上跳线的 ECAP3。 每当 COMP7触发时、PWM2A 也应跳闸并附带以下注意事项。
1) 1) AQ 已用于为 PWM2A 设置最大占空比、因此即使 COMP7未跳闸、它也会跳闸至低电平。
2) 2)消隐窗口用于 PWM2A、它以 CTR = 0为中心、因此 PWM2A 不应在 CTR = 0之前或刚刚之后跳闸。 如果比较器在消隐窗口中跳闸、我希望 PWM2A 根据 AQ 跳闸。
问题是、当比较器跳闸接近消隐窗口的末尾时、我会遇到奇怪的行为。 当 COMP 输出超过 消隐窗口的末尾时、它会在变为低电平状态以保持良好状态之前进行切换。 如果在事件发生时使用 AQTSRCSEL 强制 PWM2A 为低电平、则我不会获得所需的消隐函数。 请参阅下面的比较器、PWM 和 ECAP 设置。 抱歉、示波器镜头不完美、因为 我缺少探针的接地夹。 我是否对消隐窗口执行了错误操作? 如何 通过消隐窗口获得所需的函数?
光标测量显示的是 PWM2A 周期开始后的210ns、 这对应于消隐窗口结束。 即
(DCFOFFSET + DCFWINDOW - TBPRD)* PWM_PER =(240 + 30 - 249)*10ns = 210ns
//斜坡用于 CMPSS7 
cmps7Regs.RAMPDECVALS = glbPT1RampSlope;//每个 CLK 周期从斜坡中减去的值
Cmpss7Regs.RAMPMAXREFS = glbPT1RampMax;//接收到 PWMSYNC 后预加载到斜坡中的值
cmps7Regs.RAMPDLYS.bit.DELAY = 0;//斜坡递减之前 PWMSYNC 之后的时间偏移
Cmpss7Regs.COMPCTL.bit.COMPDACE = 1;//启用比较器/DAC
Cmpss7Regs.COMPDACCTL.bit.RAMPSOURCE = 1;//确定要使用哪个 PWMSYNC 输出;n - 1的值使用 PWMSYNCn (在本例中为 PWM2)
Cmpss7Regs.COMPDACCTL.bit.RAMPLOADSEL = 0;//将 RAMPMAXREF 中的更改同步到 CLK
Cmpss7Regs.COMPDACCTL.bit.DACSOURCE = 1;//将斜升输出到 DAC 中
Cmpss7Regs.COMPDACCTL.bit.SWLOADSEL = 0;//从 SYSCLK 上的 DACHVALS 更新 DACHVALA
Cmpss7Regs.COMPCTL.bit.COMPHINV = 0;//不要反相比较器的输出;V+>V-会导致逻辑高电平、否则为低电平
Cmpss7Regs.COMPCTL.bit.COMPHSOURCE = 0;//通过比较器的负端子馈送 DAC 输出
//设置比较器输出的滤波器参数
cmps7Regs.CTRIPHFILCTL.bit.SAMPWIN = 9;//滤波器窗口将使用10个样本(SAMPWIN + 1)
Cmpss7Regs.CTRIPHFILCTL.bit.THRESH = 8;// 10个样本中的8个必须为高电平才能更改输出
cmps7Regs.CTRIPHFILCLKCTL.bit.CLKPRESCALE = 0;//使用完整的 SYSCLK 进行采样
Cmpss7Regs.CTRIPHFILCTL.bit.FILINIT = 1;//初始化所有采样到滤波器输入值-此时该值应该是低电平
Cmpss7Regs.COMPCTL.bit.CTRIPHSEL = 2;//从比较器中选择数字滤波器输出以驱动 CTRIPH
Cmpss7Regs.COMPCTL.bit.CTRIPOUTHSEL = 2;//从比较器中选择数字滤波器输出以驱动 CTRIPOUTH
//基本 PWM2参数
EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//向上计数模式
EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE;//从 PWM1同步 PWM2
EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//设置为0 (/1)以保持100MHz EPWMCLK 频率(这使得 TBCLK = EPWMCLK)
EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;//设置 SYNC OUT 以通过 pwm1同步
EPwm2Regs.TBPRD = 249;//在 EPWMCLK 计数中设置周期
// PWM2A 生成 PWM/TRIP 信号
//输出在零时变为高电平有效、并且只持续到所需的最大占空比或触发区
//设置此处和 CLA 中使用的最大占空比计数
EPwm2Regs.CMPA.bit.CMPA = 229; 
EPwm2Regs.AQCTLA.bit.ZRO = AQ_SET;//将 PWM2A 设置为零
EPwm2Regs.AQCTLA.bit.CAU = AQ_CLEAR;//在比较 A 值时将 PWM2A 设置为低电平
//配置 PWM2A 以响应跳闸输入 TRIP4 (高优先级)
EPwm2Regs.DCTRIPSEL.bit.DCAHCOMPSEL = 3;//为 DCAH 选择 TRIPIN4 
EPwm2Regs.TZDCSEL.bit.DCAEVT2 = TZ_DCAH_HI;// DCAEVT2上的 DCAH 变为高电平时跳闸 PWM 
EPwm2Regs.DCACTL.bit.EVT2FRCSYNCSEL = DC_EVT_异 步;// DCAEVT2的源是异步的
EPwm2Regs.DCACTL.bit.EVT2SRCSEL = DC_EVT_FLT;//为 DCAEVT2信号选择滤波输入(使用消隐窗口) 
EPwm2Regs.TZSEL.bit.DCAEVT2 = TZ_ENABLE;//启用 DCAEVT2作为 CBC 跳闸源
EPwm2Regs.TZCTL.bit.DCAEVT2 = TZ_FORCE_LO;//跳闸时强制 PWM 为低电平
EPwm2Regs.TZCTL.bit.TZA = TZ_FORCE_LO;//跳闸时强制 PWM 为低电平
EPwm2Regs.TZCLR.bit.CBCPULSE = 2;//在 PWM 计数器=周期时清除 CBC 跳闸锁存器。
//消隐有助于滤除接近 PWM2周期结束的比较器跳闸
EPwm2Regs.DCFCTL.bit.Blanke = 1;//启用消隐窗口滤波器
EPwm2Regs.DCFCTL.bit.PULSESEL = 0;//在 TBCTR = 0处对齐消隐窗口
EPwm2Regs.DCFCTL.bit.SRCSEL = 1;//滤波器源为 DCAEVT2
EPwm2Regs.DCFWINDOW= 30;//应用窗口大小
EPwm2Regs.DCFOFFSET = 240;//将窗口偏移一些值 
//将 ECAP3设置为脉冲,并将跳线 ECAP3输出设置为 COMP7INP
TRIGRegs.SYNCSELECTB.ECAP1SYNCIN = 0;//为 ECAP1选择 EPWM1SYNCOUT
ECap3Regs.CAP3 = 499;//设置周期值
ECap3Regs.CTRPHS = 12;//将相位设置为 CMP 值、以便 PWM 开始低电平
ECap3Regs.CAP4 = 10;// PWM 将在10个时钟内保持高电平
ECap3Regs.ECCTL2.bit.CAP_APWM = 1;//在 APWM 模式下运行
ECap3Regs.ECCTL2.bit.APWMPOL = 0;//高电平有效
ECap3Regs.ECCTL2.bit.SYNCI_EN = 1;//同步输入被使用
ECap3Regs.ECCTL2.bit.SYNCO_SEL = 0;//同步输出为同步输入
ECap3Regs.ECCTL2.bit.TSCTRSTOP = 1;//允许 TSCTR 运行
OutputXbarRegs.OUTPUT1MUX0TO15CFG.bit.MUX4 = 3;//通过 X-BAR 路由 ECAP
OutputXbarRegs.OUTPUT1MUXENABLE.BIT.MUX4 = 1;//通过 X-BAR 启用 ECAP
GpioCtrlRegs.GPBGMUX2.bit.GPIO58 = 1;//使用 OUTPUTXBAR1输出配置 GMUX GPIO 引脚
GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 1;//使用 OUTPUTXBAR1输出配置 MUX GPIO 引脚
GpioCtrlRegs.GPBPUD.bit.GPIO58 = 1;//禁用上拉
 
				 
		 
					 
				

