工具与软件:
您好、我正在尝试使用 F28379-LaunchXL 中的缓冲 DAC . 我想将 DAC 输出与 PWM 同步事件同步。
我将 ePWM 4、5和6用于我的应用。 PWM 相对于 SYNC 脉冲的初始化如下所示、
<
EPwm4Regs.TBPRD = PWM_TBPRD;
EPwm4Regs.TBPHS.bit.TBPHS = 0x0000;
EPwm4Regs.TBCTR = 0x0000;
EPwm4Regs.TBCTL.bit.CTRMODE = tb_count_updown;//向上计数和向下计数
EPwm4Regs.TBCTL.bit.PHSEN = TB_DISABLE;// Disable phase loading (禁用相位加载)
EPwm4Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//时钟与 SYSCLKOUT 的比率
EPwm4Regs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwm4Regs.TBCTL.bit.SYNCOSEL=0x1;
>
EPWM4用作 ADC SOC 触发器、ADC SOC 的末尾将调用一个 ISR。
我已经验证 ISR 在 TBCTR=0之后被调用大约8us (6个 SOC 的 ADC 转换时间)。 我将为 PWM 使用10kHz 开关频率。
现在、我想使用缓冲 DAC 在 ISR 内输出一个值。 我需要在每次 TBCTR=0时更新此值、这对应于 EPWM4同步脉冲事件。
我按如下所示配置了 DAC、
<
EALLOW;
DacaRegs.DACCTL.bit.DACREFSEL = 1;
DacaRegs.DACCTL.bit.LOADMODE = 1;
DacaRegs.DACCTL.bit.SYNCSEL = 3;
DacaRegs.DACOUTEN.bit.DACOUTEN = 1;
DacaRegs.DACVALS.all = 0;
DELAY_US (10);
EDIS;
>
在下面的示波器图像中、通道2是 GPIO 输出、在进入 ISR 时设置为高电平、在退出 ISR 时设置为低电平。 因此、通道2的上升沿对应于 TBCTR=0后~8us 的时间。
现在、通道1是 DAC 输出。 DAC 值初始化为零。 在 ISR 的第一个条目中、它被设定为4095、随后在0和4095之间切换。
我面临的问题是、DAC 输出的上升沿出现在进入 ISR 后大约43us 时。 考虑到 ADC 转换时间、它在 TBCTR=0时大约为50us 时发生。 这是 TBCTR=TBPRD 时的情况。 我希望 DAC 输出在下一次 TBCTR=0时出现(即~93us 时消失)。 我假设这是 EPWM4同步脉冲发生的时间。
有人可以澄清这一问题吗?
提前感谢!



