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.

[参考译文] RM48L952:PWM 波形与我们设置的占空比和频率不匹配

Guru**** 2455360 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/639390/rm48l952-pwm-waveform-doesn-t-match-the-duty-cycle-and-frequency-we-set

器件型号:RM48L952
主题中讨论的其他器件:HALCOGEN

您好!

 我们将您的 RM48L952zwt 平台与 HalCoGen 4.03.00生成的驱动程序结合使用、并基于我们几年前从 TI 获得的示例函数。 我们的硬件一直停留在波形与传输的设置不匹配上。 即、屏幕截图 PWM 占空比= 37且频率= 100、生成的波形的占空比为28.6

或者、如果 PWM 占空比设置为38 - 40且频率设置为100、则波形的占空比为42.9:

/**
* void setPWMOutput (PWM_channel_type PWM、CPU_INT32U 赫兹、CPU_FP32百分比)
*
*@简要设置特定通道的 PWM 值
*
*@param[in]   PWM             PWM 通道
*@param[in]   赫兹            使用的频率
*@param[in]   浮   点值百分比
*
*@返回    void
*
void setPWMOutput (PWM_CHANNEL 类型 PWM、CPU_INT32U 赫兹、CPU_FP32百分比)

   CPU_FP64周期= 0;
   CPU_FP32 dutyCycle = 0;
   CPU_FP32 polarityReversedDutyCycle = 0;
   HW_PWM_CONTRAL_SET_FN 设置 Fn = 0;

   //占空比不能超过100%
   if (百分比> MAX_DUTY 周期百分比值)
      百分比= MAX_DUTY 周期百分比值;

   周期=(1/((CPU_FP64)赫兹)* 1000 * 1000;
   dutyCycle =百分比;

   //TODO 清理魔术编号
   if (g_pwmPinPolarity[PWM]=极性_有效_低电平)
      PolarityReversedDutyCycle = 100 - dutyCycle;
   其他
      PolarityReversedDutyCycle = dutyCycle;

   IF (PWM < PWM_LAST)
      setFn = g_pwmPinSetFn[PWM];

   if (setFn!= 0)
   {
      //无法将 PWM 直接设置为0,必须先将其设置为中间值,然后再设置为0
      if (polarityReversedDutyCycle = 0)
      {
         if (g_pwmPinPolarity[PWM]=极性_有效_低电平)
            (* setFn)(g_pwmPinMapping[PWM]、周期、(100.0 - One_Percent _duty_cycle));
         其他
            (* setFn)(g_pwmPinMapping[PWM]、period、One_Percent _duty_cycle);

         OSTimeDlyHMSM (0、0、0、PWM_TIME_DELAY);
      }

      (* setFn)(g_pwmPinMapping[PWM]、句点、多项式 ReversedDutyCycle);

      dataStruct_setPWMFrequency (PWM、Hz);
      dataStruct_setPWMDutyCycle (PWM、百分比);
   }


谢谢你。

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

    您好、 Tammy、

    请清除 HR_LR 位以使用 HR 延迟。 这将提高占空比的精度。

    例如、VCLK=100MHz、

               HR=1 -> HRP = 10ns

               LR=32 --> LRP= LR*HRP = 320ns

               频率= 100kHz,p=10us --> CNT_Max=31.25-1=30 -->实际周期= 31*320=9920ns -->频率=100.8Khz

               如果占空比为37%,则 ECMP 数据字段为:31*(0.63)*128=2500=b1001_1100_0100 --> HR 延迟将为 b10001=17 HR 时钟周期=17/32 LRP

    如果设置了 hr_lr、请勿使用 HR Delay

               占空比约为19/31=61.3% (或38.7%) 、其中19=b10011

    如果清除了 hr_lr、请使用 HR Delay (HR 延迟):

               占空比约为(19+17/32)/31=63% (或37%)  

    您在 HET 代码中的设置在哪里?