查看: 5105|回复: 3

[已解决] PWM寄存器FTMx_CnV值更新问题【已解决】

[复制链接]

该用户从未签到

25

主题

104

帖子

0

中级会员

Rank: 3Rank: 3

积分
302
最后登录
1970-1-1
发表于 2013-5-20 17:06:56 | 显示全部楼层 |阅读模式
如题,KINETICS系列,FTM模块,EPWM模式,希望实现的是在几个PWM周期后更改CnV的值以改变PWM占空比。我的代码实现不管是用for循环制造时间延迟还是用定时周期中断更改CnV的值都发现没有按照预期更改,实在不解,求指点。难道CnV的值不是按照文档如下所说更新值的吗?
 If the selected mode is EPWM, then CnV register is updated after CnV
register was written and the FTM counter changes from MOD to CNTIN. 
附代码如下:
void InitPWM(void)
{
   initpwmgpio();
FTM0_MODE |= FTM_MODE_WPDIS_MASK;
FTM0_MODE &= ~FTM_MODE_FTMEN_MASK;
 FTM0_QDCTRL &=~FTM_QDCTRL_QUADEN_MASK;
 FTM0_CNT = 0x0; 
FTM0_MOD = 300;
FTM0_CNTIN = 0; 
 
   FTM0_C1SC |= FTM_CnSC_ELSB_MASK; //Edge or level select
    FTM0_C1SC &= ~FTM_CnSC_ELSA_MASK; //Edge or level Select
    FTM0_C1SC |= FTM_CnSC_MSB_MASK; //Channel Mode select
FTM0_SC = 0; //Make sure its Off!
 FTM0_SC =  FTM_SC_CLKS(1); //系统时钟
 
}
void main()
{
.........//初始化。。。
 
while(1)
        {

                for(i=0;i
我知道答案 目前已有3人回答
回复

使用道具 举报

该用户从未签到

35

主题

508

帖子

0

金牌会员

Rank: 6Rank: 6

积分
2167
最后登录
1970-1-1
发表于 2013-5-21 11:14:44 | 显示全部楼层

RE:PWM寄存器FTMx_CnV值更新问题

请参考Kinetis手册[Intermediate Load]这一节,这种加载CnV寄存器值的方法只适用于PWM in combine mode。根据你的设置并没有配置PWM工作于联合模式下,所以只有在FTM计数器值由MOD变为CNTIN值才能加载CnV寄存器的新设定值。
回复 支持 反对

使用道具 举报

该用户从未签到

25

主题

104

帖子

0

中级会员

Rank: 3Rank: 3

积分
302
最后登录
1970-1-1
 楼主| 发表于 2013-5-22 21:25:45 | 显示全部楼层

回复:PWM寄存器FTMx_CnV值更新问题

谢谢斑竹!今天调通后才回复,因为觉得你说的这一节跟我的不太相符,我确实不是combine mode,就是EPWM模式,我希望更新FTM0_CnV的值能够是在手册所说的条件下: If the selected mode is EPWM, then CnV register is updated after CnV
register was written and the FTM counter changes from MOD to CNTIN. 
可能因为我定时器或者更新值的时间点不太对,所以不能直接看到CnV值的更新,当我把更新点设在FTM counter值达到MOD溢出时,下一刻就能看到实时更新了,即满足了在EPWM模式下更新条件:1. CnV
register was written    2.FTM counter changes from MOD to CNTIN
 
问题终于解决啦,哈哈,不过还是非常感谢你的帮助!
哦,另外发现FTM0_PWMLOAD |= FTM_PWMLOAD_LDOK_MASK;
                       FTM0_PWMLOAD |= FTM_PWMLOAD_CH1SEL_MASK ;
这两句似乎没有什么影响,版主要是有更明白透彻的见解还请不吝赐教
回复第 2 楼 于2013-05-21 19:14:44发表:
请参考Kinetis手册[Intermediate Load]这一节,这种加载CnV寄存器值的方法只适用于PWM in combine mode。根据你的设置并没有配置PWM工作于联合模式下,所以只有在FTM计数器值由MOD变为CNTIN值才能加载CnV寄存器的新设定值。
 
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

2

帖子

0

注册会员

Rank: 2

积分
148
最后登录
2025-5-16
发表于 2022-11-9 09:55:41 | 显示全部楼层
grace-425826 发表于 2013-5-22 21:25
谢谢斑竹!今天调通后才回复,因为觉得你说的这一节跟我的不太相符,我确实不是combine mode,就是EPWM模式 ...

楼主好,请问”另外发现FTM0_PWMLOAD |= FTM_PWMLOAD_LDOK_MASK;
                       FTM0_PWMLOAD |= FTM_PWMLOAD_CH1SEL_MASK ;
这两句似乎没有什么影响”
请问这个问题您有研究吗,我现在也是遇到这问题,首先是LDOK位无法置位,其次是LDOK位对加载更新没有影响。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-27 12:54 , Processed in 0.094042 second(s), 24 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表