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.
大家好、
我的目标是生成具有固定导通时间和300Hz 至400Hz 可变频率且每1ms 更新一次的 PWM 信号。
为此、我将计时器的"加载值"设置为相应的计时器值和关断时间的"捕获比较值"、以便导通时间始终保持恒定(~200us)。
类似地、我有一个用于 ADC 测量的10us 中断。
void Pwm_SetFrequencyTicks(uint16_t au16_Ticks) { /* Set the calculated Clock Timer Count for the PWM */ DL_Timer_setLoadValue(PWM_Transistor_Drive_INST, (uint16_t)(au16_Ticks - 1U)); /* Set the on time of the pwm */ DL_TimerG_setCaptureCompareValue(PWM_Transistor_Drive_INST, (au16_Ticks - PWM_ONTIME_TICKS), DL_TIMER_CC_1_INDEX); }
现在、我遇到了一个问题、即控制器输出的 PWM 每隔几秒随机跳过一个 PWM 周期的下降沿。
因此、在较新的软件版本中、我反转了 PWM、以便我 可以通过"捕获比较值"直接设置 PWM 的导通时间、并且在启动后仅设置一次。
通过此更改、问题似乎得到解决。
void Pwm_SetFrequencyTicks(uint16_t au16_Ticks) { /* Set the calculated Clock Timer Count for the PWM */ DL_Timer_setLoadValue(PWM_Transistor_Drive_INST, (uint16_t)(au16_Ticks - 1U)); }
我的问题是:这是已知问题还是我的第一个实施问题? 我能否确定我的第二个实施方案确实解决了这个问题?
尊敬的 Maximilian:
您正在使用什么计时器实例? 对于平滑转换、如果您要更改频率/占空比、则需要使用具有影子负载和流水线 CC 功能的 TIMG4实例。 这些功能使您只能在下一次加载事件(同步)而 不是立即(异步)加载更改的值。 启用影子加载可让您平滑更改 PWM 的频率、而流水线 CC 使能功能也可用于占空比。
请记住、如果您在不更改占空比的情况下更改 PWM 的频率、则相对占空比百分比(以及绝对时间)将发生变化。 现在、您可以将其设置为占空比一侧(高电平或低电平、您的选择)的最小时间始终相同、而另一侧是可变的时间。
您好 Jace、
感谢您的回答。 如您在随附的 SysConfig 屏幕上所见、使用 TIMG4的 IAM。 我是否需要激活这些功能?
Maximillian、
SysConfig 中对这些功能的控制尚不可用、但话虽如此、大多数功能默认处于启用状态。 默认情况下应启用影子加载(freq)。 您可以通过查看器件中的 GCTL.SHDWLDEN 位进行检查。 默认情况下应启用此功能,但可以通过使用 DL_Timer_enableShadowImage 功能()来确保。 然后,您只需使用您当前使用的 setLoadValue()即可。 对于占空比值,需要使用 DL_Timer_setCaptCompUpdateMethod()设置 CC Update 方法,以设置管线 CC 功能。