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.

[参考译文] LAUNCHXL-F28379D:缓冲 DAC 输出与 PWM 同步事件同步时出现问题

Guru**** 2529560 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1426878/launchxl-f28379d-problem-with-buffered-dac-output-synchronized-with-pwm-sync-event

器件型号:LAUNCHXL-F28379D

工具与软件:

您好、我正在尝试使用 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同步脉冲发生的时间。

有人可以澄清这一问题吗?

提前感谢!  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您是否使用编译器优化? 如果可以、请将其关闭、以便更轻松地进行调试。 如果您同时(在 DAC 之前或之后)切换 GPIO、您是否看到相同的延迟?  

    谢谢!

    Ben Collier

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ben:

    感谢您的答复!

    编译器优化已关闭。

    当我使用立即更新模式配置 DAC (DacaRegs.DACCTL.bit.LOADMODE = 0;)时、DAC 值在一个 SYSCLK 中更新。 我已验证此操作。 但是、当我尝试在 TBCTR=0 (正如我在上一报告中的配置)时配置 DAC 负载模式时、我看到 DAC 值会在 TBCTR=TBPRD 时更新。  

    假设有一些与 PWMSYNC 脉冲相关的其他寄存器需要配置、我发现该脉冲缺失。 我在技术参考手册的缓冲 DAC 部分找不到任何内容。    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我会在一周的末回到你的身边。

    此致、

    Ben Collier

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当然、谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Arjun,

    尝试使用 HRPCTL 寄存器中的 PWMSYNCSEL 位 为 DAC 生成 EPWMSYNCPER 信号

    (因此、您可以在 DAC 初始化中尝试使用以下配置)

    EALLOW;

    EPwm4Regs.HRPCTL.bit.PWMSYNCSEL = 1;//在 TBCTR=0时输出 DAC 值。

    EDIS;

    图 HRPCTL 寄存器

    图2. HRPCTL 寄存器的 PWMSYNCSEL 位  

    图3。 DAC 方框图。