本帖最后由 FSL_TICS_A 于 2014-10-21 15:29 编辑
【经验分享】kinetis K系列FTMEN非零情况下修改MOD值 一问题描述 有些网友反映,在kinetis K(K20D50M)系列的FTMEN非零情况下修改MOD值失败,其实在FTMEN非零情况下修改MOD值是最简单的,它不同于FTMEN=1,需要做MOD寄存器同步更新。只需要直接修改MOD值,等到FTM counter满足了相应的条件之后,就可以更新MOD值。 二 问题解答 根据用户手册如下:
如果FTMEN=0,则按照PWM的模式有两种情况,CPWM和非CPWM, 如果是CPWM,则当MOD寄存器写入数据并且FTM的计数值从MOD到MOD-1的时候,就会实现真实MOD的改变。 如果是非CPWM,则当MOD寄存器写入数据并且FTM的计数值从MOD到CNTIN的时候,就会实现真实MOD的改变。如果是free-runing,则就是则当MOD寄存器写入数据并且FTM的计数值从0XFFFF到0的时候,会实现真实MOD的改变。 为了便于网友测试,我这边使用CW的PE做了一个FTM的例程,PWM模式是EPWM,然后通过测试实现MOD的改变。使用的FTM模块是init_FTM. 三 测试结果 测试平台:FRDM_K20D50M PWM 模式: EPWM 测试目的:将MOD从6000变到5000. 时钟源:系统时钟并且2分频。 程序功能:MOD为6000时跑一段时间后将MOD改为5000并查看波形。 测试结果显示,能够将MOD改变到自己想要的值。
图1 Test1为改变MOD前读的值,test2为改变MOD后读的值,可以看到成功改到了5000。
图2 以上是实际测试的波形,可以看到后面的PWM的周期已经改变掉。 四 附件 附件为测试的代码,需要的网友可以拿去。 |