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**** 2330830 points
Other Parts Discussed in Thread: TM4C1231H6PZ
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/591443/tm4c1231h6pz-pwm-initialization-with-prescalar

器件型号:TM4C1231H6PZ

您好!

我使用 PWM 来控制 LCD 背光亮度-请参阅下面的 INIT 函数。  我遇到了一个问题,即输出引脚在此函数之后打开,尽管我希望它关闭(具体而言,引脚在 ROM_TimerControlLevel ()调用后立即打开)。  

我使用这些 ROM 调用的顺序进行了变通、我发现、如果我在   ROM_TimerConfigure()调用之后移动了 ROM_TimerMatchSet()和 ROM_TimerPrescaleMatchSet()调用、问题就得到了解决。  这有道理吗?  MatchSet()函数是否需要位于 TimerConfigure 之后才能正常工作?  只是想确保我找到了问题的根源、而不仅仅是意外地解决了问题。

静态空 LCD_BacklightInit (空){

uint32 timerPeriod;
uint8 timerPrescaler;

backlightLoadValue = SysCtlClockGet ()/ backlight_PWM_FREQ_Hz;
timerPeriod = backlightLoadValue & 0xFFFF;//最低4字节
timerPrescaler = backlightLoadValue >> 16;

ROM_SysCtlPeripheralEnable (SYSCTL_Periph_TIMER2);
ROM_TimerDisable (TIMER2_base、TIMER_B);
ROM_TimerMatchSet (TIMER2_base、TIMER_B、0);//初始关闭
ROM_TimerPrescaleMatchSet (TIMER2_base、TIMER_B、0);ROM_GPIOPinConfigure (GPIO_PF5_T2CCP1);
ROM_GPIOPinTypeTimer (GPIO_PORTF_BASE、GPIO_PIN_5);
ROM_TimerConfigure (TIMER2_base、TIMER_CFG_SPLIT_PAIR | TIMER_CFG_B_PWM);
ROM_TimerControlLevel (TIMER2_base、TIMER_B、true);//反转 PWM 输出、启用更简单的占空比设置函数
ROM_TimerLoadSet (TIMER2_base、TIMER_B、timerPeriod);
ROM_TimerPrescaleSet (TIMER2_base、TIMER_B、timerPrescaler);
ROM_TimerEnable (TIMER2_base、TIMER_B);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是一个有趣的点-实际上-有时函数调用的顺序很重要。 我正在旅行-无法重复您的测试(并且没有该 MCU)、但您的努力不会因为"移除预分频器? 如果我正确地回忆一下-启用定时器的 PWM 包含16位-这肯定足以实现 LCD 背光"调光"控制-您是否同意?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复。 我应该提到我的系统时钟为80MHz、PWM 频率为800Hz。 因此、加载值需要超过16位(80MHz/800Hz = 0x186A0)。 对于调光控制、您是对的-我可以将 PWM 频率提高到1220Hz 以上、并且只需要16位(因此无需预分频器)。

    我还计划使用类似的代码在数字输出上启用 PWM、我需要允许频率低于1220Hz。 因此、如果系统时钟频率为80MHz、我相信我需要预分频器。 在这种情况下、我实际上需要确保我的输出不会开启 PWM 初始化。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    公司/我过去曾"参与"平板显示器业务。 (LCD、VFD、OLED 等) 800Hz 将起作用-我们通常运行的频率要低得多-比如200Hz -有时甚至更低。 (我假设您的 LED 背光更现代-不是 CFL 也不是电致发光二极管。)

    您可以"保留"80MHz 系统时钟-并且仍然可以通过使用 PWM 发生器而不是计时器控制的 PWM 来实现"低于250Hz 的背光 PWM"。 PWM 发生器支持广泛的系统时钟分频- 16位应轻松满足您的全范围要求。

    PWM 发生器的另一个优势-您可以更好地控制 PWM 频率-这使您能够防止 PWM 背光和显示屏的扫描行多路复用器之间出现"拍频"(视觉干扰)。   PWM 发生器需要更大的"设置/配置"(我怀疑这将是您的问题-但我们可以提供帮助)、并且确实提供了许多附加功能-通过更简单的 Timer-PWM 是无法获得的。

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

    感谢您提供有关"拍频"的信息。  我在较低的频率看到了这种情况、但我没有意识到它是什么。  我想我只需要更高的频率。

    遗憾的是、TM4C1231H6PZ 看起来没有 PWM 发生器。  此时硬件设计已锁定、因此我将强制使用计时器 PWM。  PWM 的容差并不重要、因此我认为这是可以的。  它似乎可以很好地处理初始化顺序的更改、如原始帖子中所述。  

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

    我的天-你是对的-没有 PWM 发生器出现! 当然-您选择此器件是为了 GPIO 和价格...

    我不确定该代码序列是最好的还是唯一的修复方法。 您无法查看密钥/关键定时器寄存器-并确定您(不同)顺序代码"恰好在何时/何地"创建非法寄存器条目? 我有一个不同的 MCU -也许您注意到的是以 MCU 为中心的吗? (即 Krazzy-Making)

    我很好奇-但直到明天才能访问我们的电路板。 我还记得、我过去通过计时器的"设置/配置"进行的 PWM 非常直观、并且"开箱即用"。

    和... 刚刚搜索并发现(过去)代码-我发现"直观且有效"都是使用 PWM 发生器造成的。 我们确实使用了多个计时器-但不会生成 PWM。   拉茨!