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.

[参考译文] MSPM0G3507:当比较值等于0时、发生比较模式下的计时器问题

Guru**** 2454490 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1497365/mspm0g3507-timer-in-compare-mode-issue-when-value-compared-equals-0

器件型号:MSPM0G3507

工具/软件:

您好:

我发现计时器存在问题、特别是比较模式问题、并在尝试生成 PWM 信号时在零事件期间进行更新。 当与值0 (100% PWM 占空比)进行比较时、信号值而不是设置为高电平会保持在低电平状态(图1)。 临时修复是改为0比较值已设置为1 (图2)、但这不是一个理想的情况。 解决此问题的另一种思路是、如果比较值等于0、则将更新模式更改为立即而非零事件(图3)、但这也不是一个没有缺点的解决方案、主要问题是、如果发生为设置适用占空比而执行的计算不够快、无法在下一个零事件之前完成、则在以下值为0时跳过该值。

当比较向上设置时的 CCP 极性更改为高电平、而比较向上设置时的 CCP 极性更改为低电平时、该问题仍然存在。

展示该问题的方法是计时器每个周期更改比较值、从0更改为负载值833、步长为83+/- 1、针对整数类型进行了调整。 在图中、通道0是互补的、通道1是主通道、通道3是更改比较值的每个实例切换的 GPIO。 使用的计时器为 TIMA1、配置为中心对齐 PWM、CCP 设置为发生零事件时的输出操作、频率为48kHz、加载值833

我的问题是、如果与0进行比较时计时器行为不正常、或者存在用于修复的设置、这是正常的。

uint16_t instances_counter;
uint16_t compare_value;
uint32_t compare_values[] = {1, 83, 167, 250, 333, 416, 500, 583, 666, 750, 833};
uint32_t tabele_size = sizeof(compare_values)/sizeof(compare_values[0]);

void Timer_Duty_Change( void )
{
   if ( instances_counter < tabele_size)
   {
      compare_value = compare_values[instances_counter];
      instances_counter++;
   }
   else
   {
      instances_counter = 0;
   }

   TIMA1->COUNTERREGS.CC_01[ 1 ] = compare_value;
}

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

    您好、

    感谢您的问题。

    当"比较计数器(CC)值更新事件"和"CC 值和计数器值比较事件"在同一周期发生时、可能会发生此问题。 因此、如果我们将占空比设置为零并使用零事件作为 CC 更新触发器、则可能会发生此问题。

     避免这种情况的方法是确保 CC 寄存器更新和与 CC 的计数器比较不会同时发生。 这就是为什么如果将 CC 设置为1而不是0可以临时解决此问题的原因。 解决方法可能是通过 DL_Timer_overrideCCPOut () API 在0%或100%占空比内将 PWM 输出强制为低电平或高电平。 请参阅 TRM  27.2.5.3强制输出 以了解更多信息。

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

    因此、我认为这是一个硬件问题、如果是、您是否要将其添加到下一修订版的勘误表中?