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.

[参考译文] TM4C1231H6PZ:PWM 和预分频器

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1042913/tm4c1231h6pz-pwm-and-prescaler

器件型号:TM4C1231H6PZ

您好,

我无法理解 PWM 和预分频器...

如果我使用没有预分频器的 PWM、

一切都按 预期工作。

如果我使用密封剂,错误的地方……

TimerPrescaleSet (TIMER0_BASE,TIMER_Both,1);

我想这将会将/2除。

频率将为1kHz 而不是2kHz、但 PWM 占空比不再工作。

据我所知,我将有一个24位计数器(16位+ 8位预分频器),但它的作用是什么

负载和匹配、它们仍然是16位?

我必须做什么、才能将 PWM 与预分频器结合使用?

以 Hz 为单位的//PWM 频率
uint32_t freq = 2000;

int tmain()


 //将系统时钟设置为80MHz
 SysCtlClockSet (SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHz);
 SysTickbege();

 uint32_t 周期、dutyCycle;
 周期= SysCtlClockGet ()/freq;
 dutyCycle =周期2;
 
 SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
 SysCtlDelay(3);


 GPIOPinConfigure (GPIO_PF1_T0CCP1);
 GPIOPinTypeTimer (GPIO_PORTF_BASE、GPIO_PIN_1);
 
 SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
 SysCtlDelay(3);

 TimerPrescaleSet (TIMER0_BASE,TIMER_Both,1);

 
 TimerConfigure (TIMER0_BASE、TIMER_CFG_SPLIT_PAGE|TIMER_CFG_B_PWM);
 TimerLoadSet (TIMER0_BASE、TIMER_B、周期-1);
 TimerMatchSet (TIMER0_BASE、TIMER_B、PERIOD );// PWM

 
 TimerEnable (TIMER0_BASE、TIMER_B);

 int i;

 while (1)


 
   for (i=1;i < (周期)-1;i++){
     TimerMatchSet (TIMER0_BASE、TIMER_B、I);
     SysCtlDelay (200);
   }

 }

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

    您好!

      TimerPrescaleSet 用于预分频时基。 如果预分频值等于0、则时基到 PWM 为80MHz。 因此、80MHz 是计数器根据 您在 TimerLoadSet 中设置的加载值进行倒计数的时基。 如果 在 TimerPrescaleSet (TIMER0_BASE、TIMER_Both、1)中预分频值为1 、则时基为40MHz。 计数器首先预加载 您在 TimerLoadSet()中定义的值,然后根据40MHz 的时基进行倒计数。 假设预分频值为9、因此时基变为8MHz。  计数器的时基变为8MHz。 您必须配置加载值和与新时基匹配的值。 如果您需要50%的占空比、仍需要按如下方式进行配置:

     TimerLoadSet (TIMER0_BASE、TIMER_B、REQUIRED);

    TimerMatchSet (TIMER0_BASE、TIMER_B、REQUIAL_PERIOED / 2);  

    我不知道为什么你写了以下内容。 匹配值大于加载值。 在这种情况下、PWM 输出将始终为高电平。  

     TimerLoadSet (TIMER0_BASE、TIMER_B、周期-1);
     TimerMatchSet (TIMER0_BASE、TIMER_B、PERIOD );// PWM

    此外、在 while 循环中、您不能只继续更新匹配值。 您的 while 循环将比 PWM 完成一个 PWM 周期快得多。  如果您想浏览所有匹配值、应在每个 PWM 周期结束时生成中断、并在 ISR 中递增匹配值。  

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

    您好!

    我想不明白预分频器...

    我已将负载和匹配更改为固定值。

    使用此代码、我可以看到我所期望的结果

     // TimerPrescaleSet (TIMER0_BASE,TIMER_Both,1);


     TimerConfigure (TIMER0_BASE、TIMER_CFG_SPLIT_PAGE|TIMER_CFG_B_PWM);
     TimerLoadSet (TIMER0_BASE、TIMER_B、32000);
     TimerMatchSet (TIMER0_BASE、TIMER_B、16000);// PWM

    我使用预分频器 ....

     TimerPrescaleSet (TIMER0_BASE,TIMER_Both,1);


     TimerConfigure (TIMER0_BASE、TIMER_CFG_SPLIT_PAGE|TIMER_CFG_B_PWM);
     TimerLoadSet (TIMER0_BASE、TIMER_B、32000);
     TimerMatchSet (TIMER0_BASE、TIMER_B、16000);// PWM

    我得到了这个

    如果预分频器仅将频率偏离至????,为什么 dutycycle 不再是50%??

    Andreas

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

    您好!

     抱歉、我之前的解释可能不清楚。 设置  TimerPrescaleSet (TIMER0_BASE、TIMER_Both、1)时,尝试将计数器设置为17位。 PWM 的周期计算如下。  

     TimerPrescaleSet (TIMER0_BASE,TIMER_Both,1);

     TimerConfigure (TIMER0_BASE、TIMER_CFG_SPLIT_PAGE|TIMER_CFG_B_PWM);


     TimerLoadSet (TIMER0_BASE、TIMER_B、32000);


     周期= TimerLoadGet (TIMER0_BASE、TIMER_B)+ TimerPrescaleGet (TIMER0_BASE、TIMER_B)* 65536;

     占空比=周期/2;  

     TimerPrescaleMatchSet (TIMER0_BASE、TIMER_B、Duty / 65536);


    TimerMatchSet (TIMER0_BASE、TIMER_B、占空比% 65536);

    您可以尝试使用以下 PWM 周期进行实验。 如果您获得50%的占空比、请告诉我。  

     TimerPrescaleSet (TIMER0_BASE,TIMER_Both,123);

     TimerConfigure (TIMER0_BASE、TIMER_CFG_SPLIT_PAGE|TIMER_CFG_B_PWM);

     TimerLoadSet (TIMER0_BASE、TIMER_B、 45678);

     周期= TimerLoadGet (TIMER0_BASE、TIMER_B)+ TimerPrescaleGet (TIMER0_BASE、TIMER_B)* 65536;

     占空比=周期/2;  

     TimerPrescaleMatchSet (TIMER0_BASE、TIMER_B、Duty / 65536);


    TimerMatchSet (TIMER0_BASE、TIMER_B、占空比% 65536);