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.
大家好、
我的同事和我 目前正在尝试使用 ePWM 作为 SOC 触发器以每秒1M 次采样的速度对信号进行采样(以分析信号的频谱)。 外部 OSC 频率为16M、我们使用 了示例 ADC_ex2_SoC_ePWM.c 中的函数 但我们发现它没有以我们希望的速度进行采样。
ePWM 初始化代码如下:
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); // // Freeze the counter // EPWM_setTimeBaseCounterMode(EPWM1_BASE, EPWM_COUNTER_MODE_STOP_FREEZE); }
时钟设置为:
#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)
根据我对 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。 希望此消息能帮助查看此帖子的其他人。
此致
您好!
您很高兴知道您能够实现所需的采样和触发速度。
如果我的回复回答了您的问题、请点击位于我帖子底部的"我的问题已解决"按钮。
此致