XMC输出低频率PWM
本帖最后由 Burnon_FAE_4 于 2023-12-14 13:40 编辑项目需要使用XMC输出低频率PWM,然后查看了ccu4_timer_xmc13例程,然后修改使用,发现修改XMC_CCU4_SLICE_SetTimerPeriodMatch函数PWM频率降低不下来,然后阅读手册,上面描述为“PWM信号的周期和占空比的基准总是与定时器自身频率相关,与模块时钟的频率无关。”,然后找到了修改定时器频率的寄存器为CC4yPSC.PSIV,可以对CCU4模块时钟进行分频,降低定时器的频率,只要满足:PWM周期 < ((1/定时器频率) * 65536),那就可以输出想要的PWM频率了。CCU8同理。 确实,走例程上的然后修改真的很方便 这种时钟要是能UI配置一下,也就是一键配置一下就好了 这个与芯片时钟有关系,与分出的外设模块时钟没关系还真第一次听说 这就是需要看时钟树了是吧 一般芯片是不是可以看参数配置啊,直接就能改PWM了 对了,这芯片是不是有可视化配置的软件啊? 原来这么配置PWM就可以了啊,挺好,看着还比较简单 为啥要满足:PWM周期 < ((1/定时器频率) * 65536)? 其实官方要是把手册写全一些,详细一些,真的很方便,感谢FAE分享 降低频率就能实现PWM降低,这是对的逻辑 本帖最后由 IFX_Lingling 于 2024-1-8 16:15 编辑
这个PWM的问题可以下载Infineon的开发工具Modus Toolbox,这个tool可以有图形界面看时钟的配置:
从这个图可以看出路由给CCU8的时钟是64Mhz。
__STATIC_INLINE void XMC_CCU4_SLICE_SetTimerPeriodMatch(XMC_CCU4_SLICE_t *const slice, const uint16_t period_val)
{
XMC_ASSERT("XMC_CCU4_SLICE_SetTimerPeriodMatch:Invalid Slice Pointer", XMC_CCU4_IsValidSlice(slice));
slice->PRS = (uint32_t) period_val;
}
这个函数是设置周期:
XMC_CCU8_SLICE_SetTimerPeriodMatch(SYMMETRIC_PWM_SLICE_HW, 10000U);
比如我CCU8的时钟是64M,分频64,那么我给PWM的clock是1M,周期为10000的话,配置成Edge Aligned的模式话,PWM的周期是10ms((1/1M)*10K )。
如果通过API:XMC_CCU8_SLICE_SetTimerPeriodMatch(SYMMETRIC_PWM_SLICE_HW, 7000U);那么PWM的周期会被更改掉。但是输入时钟还是1M。
配置配置:
页:
[1]