主题中讨论的其他器件:C2000WARE
你(们)好
我已将 ePWM 的固定频率配置为100KHz。 我想知道在95KHz 到105KHz 之间更改、配置完成后继续。 是否需要更新影子寄存器? 但我无法找到如何使用 c2000war。执行该操作
请提供建议
HK Woo
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 的固定频率配置为100KHz。 我想知道在95KHz 到105KHz 之间更改、配置完成后继续。 是否需要更新影子寄存器? 但我无法找到如何使用 c2000war。执行该操作
请提供建议
HK Woo
您好、HK Woo、
PWM 输出的频率取决于 TBPRD 值(时基计数器的周期)、时基计数模式和 TBCLK。 TBCLK 通过 EPWMCLK 和 HSPCLKDIV/CLKDIV 位进行配置[TBCLK = EPWMCLK/(HSPCLKDIV * CLKDIV)]。
在 C2000Ware 示例程序中、可使用以下函数配置 HSPCLKDIV 和 CLKDIV:
EPWM_setClockPrescaler(EPWM1_BASE,EPWM_CLOCK_DIVIDER_2,EPWM_HSCLOCK_DIVIDER_2);
计数模式和 TBPRD 可通过以下功能配置:
EPWM_setTimeBaseCounterMode(EPWM1_BASE, EPWM_COUNTER_MODE_UP); EPWM_setTimeBasePeriod(EPWM1_BASE, EPWM1_TIMER_TBPRD);
对于所有这些配置选项、TBPRD 是唯一 具有影子寄存器(TBCTL 寄存器中的 PRDLD)的位。
影子到活动写入很有用、因为它们可以防止由于寄存器被软件异步修改而导致的损坏或虚假操作。
要为 TBPRD 启用影子模式并选择影子到活动加载事件的类型、您可以使用以下函数:
EPWM_setPeriodLoadMode(EPWM1_BASE, EPWM_PERIOD_SHADOW_LOAD); EPWM_selectPeriodLoadEvent(EPWM1_BASE,EPWM_SHADOW_LOAD_MODE_COUNTER_ZERO);
注意:上面提供的所有函数都具有样本输入参数、您可能需要更改这些输入参数以满足您的应用需求。
此致、
Marlyn
感谢您的信息。 我会根据您的信息进行一些实验。 我发现、如果我使用 EPWM_setTimeBasePeriod (EPWM1_base、x)来更改周期、则 PWM 随机错过了200-300us、其中 x 是周期的变量。 删除 EPWM_setTimeBasePeriod()后不会出现此问题。
我的项目运行@ 100M、ePWM @ 100KHz。
BR
HK Woo