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.

[参考译文] MSP432E401Y:关于 PWM 输出 (PF1–M0PWM1) 未在 MSP432E4 上生成预期信号的说明

Guru**** 2524550 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1560847/msp432e401y-clarification-on-pwm-output-pf1-m0pwm1-not-generating-expected-signal-on-msp432e4

器件型号:MSP432E401Y


工具/软件:

尊敬的 TI 支持团队:

                 我正在使用 MSP432E4 MCU、并尝试在上生成 PWM 信号 PF1 (M0PWM1) 。 PF1 引脚连接到另一侧的 FPGA、其中 PWM 输出将用作基准时钟。

我已使用 PLL 和启用的 PWM0 将系统时钟配置到 120MHz。 PF1 引脚配置为GPIO_PF1_M0PWM1、我正在使用 PWM 发生器 0、输出 1 。 我的代码基于 TI 的 driverlib、并遵循了标准的初始化步骤:

  1. 系统时钟设置为 120MHz

  2. SysCtlPeripheralEnable()GPIOF 和 PWM0 稳压器

  3. SysCtlPWMClockSet(SYSCTL_PWMDIV_1)以获得最大 PWM 分辨率

  4. 使用GPIOPinConfigure(GPIO_PF1_M0PWM1)和配置 PF1 GPIOPinTypePWM()

  5. PWMGenConfigure(PWM0_BASE, PWM_GEN_0, PWM_GEN_MODE_DOWN)

  6. PWMGenPeriodSet()PWMPulseWidthSet()用于配置周期和占空比

  7. PWMOutputState()PWMGenEnable()可调用

但是、我观察到了这一点 PF1 始终保持高电平  或者、如果我更改任何内容、在 PF1 引脚中看不到任何输出。 即使我配置为低频(例如,1kHz、50%占空比)、也看不到预期的波形。

您能否澄清以下几点?

  1. 是否需要任何其他配置 M0PWM1 (PF1) 输出?

  2. PF1 上可实现的最大 PWM 频率是否存在已知限制?

  3. 直接从 PWM 引脚驱动 FPGA 输入时、是否存在任何限制?

下面我提供了我的代码供您参考、

#include
#include
#include “ti/devices/msp432e4/driverlib/driverlib.h"</s>“


#define SYSTEM_CLOCK_HZ 120000000 // 120MHz 系统时钟
#define PWM_FREQUENCY 1000 // 1kHz 以方便观察
#define PWM_DUTY_PERCENT 50 // 50%占空比


uint32_t ui32SysClock;
uint32_t ui32Period;

// 1。 使用 PLL 为 120MHz 配置系统时钟
ui32SysClock = SysCtlClockFreqSet (
(SYSCTL_XTAL_25MHz |
SYSCTL_OSC_MAIN |
SysCtl_USE_PLL |
SYSCTL_CFG_VCO_480)、
SYSTEM_CLOCK_Hz);

// 2. 启用外设
SysCtlPeripheralEnable (SYSCTL_PERIPH_PWM0);
SysCtlPeripheralEnable (SysCtl_Periph_GPIOF);

while(!SysCtlPeripheralReady (SYSCTL_PERIPH_PWM0));
while(!SysCtlPeripheralReady (SYSCTL_PERIPH_GPIOF));

// 3. 将 PF1 配置为 M0PWM1
GPIOPinConfigure (GPIO_PF1_M0PWM1);
GPIOPinTypePWM (GPIO_PORTF_BASE、GPIO_PIN_1);

// 4. 在配置前禁用发生器
PWMGenDisable (PWM0_BASE、PWM_GEN_0);

//将生成器 0 配置为向下计数模式
PWMGenConfigure (PWM0_BASE、PWM_GEN_0、PWM_GEN_MODE_DOWN);

// 5. 设置 PWM 周期和占空比
ui32Period =(ui32SysClock/PWM_FREQUENCY);
PWMGenPeriodSet (PWM0_BASE、PWM_GEN_0、ui32Period);

//将占空比设置为 50%
PWMPulseWidthSet (PWM0_BASE、PWM_OUT_1、(ui32Period * PWM_Duty_Percent)/ 100);

// 6. 启用 PWM 输出
PWMOutputState (PWM0_BASE、PWM_OUT_1_BIT、TRUE);

//启用生成器
PWMGenEnable (PWM0_BASE、PWM_GEN_0);

while (1)

//永远循环–PWM 在硬件中运行
}

感谢您在解决此问题方面提供指导、因为 PF1 输出对于我的设计至关重要。



此致、

J.Manikandasamy

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

    您好、

     PWM 计数器只有 16 位。 当您使用系统时钟 120MHz 作为 PWM 的时钟源时、它将在 1kHz 的 PWM 周期内使计数器溢出。 您可以使用 PWMlockSet 对 PWM 时钟进行预分频。 请参阅以下示例以将 PWM 时钟预分频为系统时钟 16 分频。

    MAP_PWMClockSet (PWM0_BASE、PWM_SYSCLK_DIV_16);

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

    亲爱的查尔斯·蔡:

                  感谢您有关 16 位 PWM 计数器限制的说明和使用MAP_PWMClockSet(PWM0_BASE, PWM_SYSCLK_DIV_16); API 的建议。

    我有一个后续问题:

    即使我适当地配置了 PWM 时钟分频器、仍然可以生成 40MHz 输出 在 PWM 引脚(例如 PF1→M0PWM1)上?

    根据我的计算:

    • 系统时钟= 120MHz

    • 所需的 PWM 频率= 40MHz

    • 周期= 120MHz / 40MHz = 3 个计数

    这意味着计数器仅运行 3 个周期、从而提供极差的占空比分辨率(仅为 0%、33%、66%或 100%)。

    您能否确认 PWM 模块是否可以实际支持此频率、或者是否应使用外部振荡器等替代方案为我的 FPGA 供电?


    如果可能、请分享您可能拥有的任何链接或代码;非常感谢。

    此致、

    J.Manikandasamy

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid=“564455" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1560847/msp432e401y-clarification-on-pwm-output-pf1-m0pwm1-not-generating-expected-signal-on-msp432e4/6010431

    即使我适当地配置了 PWM 时钟分频器、仍然可以生成 40MHz 输出 在 PWM 引脚(例如 PF1→M0PWM1)上?

    根据我的计算:

    • 系统时钟= 120MHz

    • 所需的 PWM 频率= 40MHz

    • 周期= 120MHz / 40MHz = 3 个计数

    这意味着计数器仅运行 3 个周期、从而提供极差的占空比分辨率(仅为 0%、33%、66%或 100%)。

    [/报价]

    我认为这是不可能的。 您正在使用哪种类型的应用? 典型的 PWM 应用的频率在 kHz 范围内。 我不是您的应用、也无法评论为什么它需要在 MHz 范围内的频率。 尽管 d/s 未指定最大 PWM 频率、但仍无法实现 40MHz。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    亲爱的查尔斯·蔡:
         感谢您的答复。

    为了提供有关我们应用的一些背景信息—我们的定制电路板包括一个 MSP432E4 微控制器、一个 Artix-7 FPGA 和一个 RFIC。 我们目前正在努力实现 QPSK 调制、这需要 为 FPGA 提供 40MHz 时钟输入。

    作为我们探索的一部分、我们正在评估是否可以 使用 MSP432E4 的 PWM 功能生成此 40MHz 时钟。 根据您的响应、即使数据表中未明确提及最大 PWM 频率、这样的频率通过 PWM 可能不可行。

    我们还尝试使用外部 40MHz 晶体振荡器来满足 FPGA 的时钟要求、但遗憾的是、它在当前设置中的性能未达到预期。 这就是我最初提出问题的原因—以确认是否 可以或官方支持任何从微控制器生成 40MHz 信号的替代方法。

    如果您可以分享生成稳定 40MHz 时钟的任何建议或替代方法(来自 MSP432E4 或其他可行方法)、这将极大地帮助我们确定理想前进路径。

    期待您的宝贵意见。

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

    MCU 可以通过 DIVSCLK 引脚输出时钟。 然而、I/O 不是针对高频设计的。 您将在高频下(如 40MHz)看到噪声和信号失真形状。 我不知道这是否适合您的 FPGA。