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.

[参考译文] TMS320F28027:EPWM2用作通用定时器、结果在已知时间间隔内关闭

Guru**** 2525430 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1326911/tms320f28027-epwm2-used-as-general-purpose-timer-results-are-off-with-known-interval

器件型号:TMS320F28027

您好!


我正在尝试将 EPWM2用作通用计时器、以提供时间戳来测量 XINT1中断之间的间隔。

CPU 位于 LaunchpadXL 上的60 MHz 处、EPWM2预分频器设置为/1。

XINT1 ISR 是针对上升沿和下降沿配置的(极性= 3)

在每个 XINT1 ISR 中、我捕获 EPWM2.TBCTR 的值、然后设置 EPWM2.TBCTR=0;

 50%占空比、10kHz 输入到 GPIO6/XINT1、我的预期是应该看到 TBCTR=3000个计数。  相反、我看到~3250计数在检测到上升沿时、而~2700计数在 检测到下降沿时。

我在示波器上确认、被输入的信号是具有50us 高电平时间、50us 低电平时间的 PWM。

如果我将 PWM 设置为25%占空比、10kHz 输入、那么 在下降沿我预计会看到 TBCTR = 1500个计数(25us)、在上升沿看到4500个计数(75us)。  相反、我看到下降边沿上计数为~1210、上升边沿上计数为~4760。  我再次确认了 GPIO6/XINT1的输入是正确的。

XINT ISR 为

__interrupt void XINT1_ISR (){

XINT1_CAPTURE = EPwm2Regs.TBCTR;
EPwm2Regs.TBCTR = 0x0000;//重置时间戳的计数器

if (next_edge_is_rising == true){

xint1_low_time = xint1_capture

next_edge_is_rising = false;

否则{

xint1_high_time = xint1_capture

next_edge_is_rising = true;

PieCtrlRegs.PIEACK.ACK1 = 1;

有什么关于为什么我看到这些不同的测量结果的建议吗?

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

    尊敬的 Mark:

    我说您的 EPWM 信号输出看起来正常/符合预期吗?但是您在 XINT ISR (使用 XINT1_CAPTURE 变量)中捕获的 TBCTR 值与预期不匹配? 您符合哪些 EPWM 行动条件? 如 数据表中所述、PIE 有一些中断延迟、但我不确定它在这里会起什么作用。

    是否曾尝试使用事件触发器子模块来触发中断 ISR 并比较该方法的结果(您必须选择事件触发器中断源以匹配您用于切换 ePWM 例如 CMPA/B 的动作限定器事件)?  

    此致、

    艾里森