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.

[参考译文] TMS320F28377D:ePWM 时钟设置

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/996525/tms320f28377d-epwm-clock-setting

器件型号:TMS320F28377D

大家好、

我的同事和我 目前正在尝试使用 ePWM 作为 SOC 触发器以每秒1M 次采样的速度对信号进行采样(以分析信号的频谱)。 外部 OSC 频率为16M、我们使用 了示例 ADC_ex2_SoC_ePWM.c 中的函数 但我们发现它没有以我们希望的速度进行采样。

ePWM 初始化代码如下:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void initEPWM(void)
{
//
// Disable SOCA
//
EPWM_disableADCTrigger(EPWM1_BASE, EPWM_SOC_A);
EPWM_setClockPrescaler(EPWM1_BASE,
EPWM_CLOCK_DIVIDER_1,
EPWM_HSCLOCK_DIVIDER_1);
//
// Configure the SOC to occur on the first up-count event
//
EPWM_setADCTriggerSource(EPWM1_BASE, EPWM_SOC_A, EPWM_SOC_TBCTR_U_CMPA);
EPWM_setADCTriggerEventPrescale(EPWM1_BASE, EPWM_SOC_A, 1);
//
// Set the compare A value to 2048 and the period to 4096
//
EPWM_setCounterCompareValue(EPWM1_BASE, EPWM_COUNTER_COMPARE_A, 0x01);// max 100Mhz
EPWM_setTimeBasePeriod(EPWM1_BASE, 0x200);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

时钟设置为:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#define DEVICE_OSCSRC_FREQ 16000000U
//
// Define to pass to SysCtl_setClock(). Will configure the clock as follows:
// PLLSYSCLK = 16MHz (XTAL_OSC) * 20 (IMULT) * 1 (FMULT) / 2 (PLLCLK_BY_2)
//
#define DEVICE_SETCLOCK_CFG (SYSCTL_OSCSRC_XTAL | SYSCTL_IMULT(20) | \
SYSCTL_FMULT_NONE | SYSCTL_SYSDIV(2) | \
SYSCTL_PLL_ENABLE)
//
// 192MHz SYSCLK frequency based on the above DEVICE_SETCLOCK_CFG. Update the
// code below if a different clock configuration is used!
//
#define DEVICE_SYSCLK_FREQ ((DEVICE_OSCSRC_FREQ * 20 * 1) / 2)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

根据我对 ePWM 的了解、时钟和 HSCLOCK 的预分频器都为1。 我们仅使用 CPU1、 ePWM 应为16MHz x 20 x 1 / 2 = 192MHz。 ePWM 周期为200、因此采样频率应约为1MHz (192Mhz / 200)。 但是、我们切换了 adcA1ISR 中的输出引脚、并以372khz 的频率切换。 什么可能是错误的,为什么是372khz?  

感谢您的回复!

此致

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

    您好!

    我查看了提供的代码序列、实际上 TBPRD 值0x200 (这是一个十六进制值)是在第21行上配置的、等于 TBPRD = 512。 这就是观察到的 PWM 频率为(192Mhz / 512)的原因。

    希望这能帮助您解决问题。

    如果我的回复回答了您的问题、请点击位于我帖子底部的"我的问题已解决"按钮。

    此致

    Himanshu

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

    感谢您的回复。 我们都忽略了这是一个十六进制值。 这很可能是问题所在。 很抱歉、我无法立即回复、如果有其他问题、我稍后会告诉您。

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

    当然、请告知我们上述建议是否有助于解决您的问题。 我将继续并关闭该线程。

    如果我的回复回答了您的问题、请点击位于我帖子底部的"我的问题已解决"按钮。

    此致

    Himanshu

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

    您好、 Himanshu、

    我们降低 了 TBPRD、但仍然无法将采样频率升压到1MHz。 我 发现在此后 置 ADC 采样率->无法在 EVM 上获得高于250kSPS 的采样率?  这可能是由于 CPU 为 ISR 提供服务的最大速率。 我们目前正在实施 DMA。

    我对时钟设置也很好奇。 根据我发布的内容、ePWM 时钟为192Mhz。 但2837xD 的数据表显示最大 ePWM 频率为100Mhz。 它的行为是否正常只是巧合?

    此致

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

    您好!

    是的、F2837x 上的 ePWM 频率为100MHz。 我建议您在将 TBPRD 减小到200U 后首先检查 PWM 频率、看看您是否能够使 ePWM 正常工作。 您可以通过生成50%占空比 PWM 输出并在示波器上观察来测试这一点。 在该操作完成后、您可以开始调试 ADC 部件。

    如果您担心 ISR 内部花费的周期和缺少中断、请尝试提高优化级别以提高代码性能。

    如果我的回复回答了您的问题、请点击位于我帖子底部的"我的问题已解决"按钮。

    此致

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

    您好 、Himanshu、

    感谢您的建议。 我将在测试结果时发布该结果。 或者现在需要关闭该线程?

    此致

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

    您好!

    请注意 、F2837x 上的 ePWM 频率为100Mhz (10MHz 是我上次答复中的拼写错误)。 确保您可以对其进行测试、并让我们知道结果。

    如果我的回复回答了您的问题、请点击位于我帖子底部的"我的问题已解决"按钮。

    此致

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

    您好、 Himanshu、

    这是很长的一段时间、我们对其进行了测试。 DMA 确实有助于我们将采样频率提升到2MHz。 希望此消息能帮助查看此帖子的其他人。

    此致

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

    您好!

    您很高兴知道您能够实现所需的采样和触发速度。

    如果我的回复回答了您的问题、请点击位于我帖子底部的"我的问题已解决"按钮。

    此致