打印
[Kinetis]

关于KE06模式的EPWM模式(2)

[复制链接]
1820|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zshzcz|  楼主 | 2015-1-26 13:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     大家好,关于之前我问过的KE06板子的EPWM模式,我还有一些后续的问题,苦于找不到人求助,也只能再次的求助大家,实在是不好意思。
     我看过了KE06的手册上面说:采用向上计数时的FTM 周期为(MOD – CNTIN + 0x0001) × FTM 计数器时钟的周期。然后也说了:如果(CNTIN = 0x0000),FTM 计数与TPM 向上-向下计数等效,即无符号向上-向下计数。而EPWM模式的介绍上面有:只能在CNTIN = 0x0000 的情况下使用EPWM 模式。
    所以上面所述情况应该可以为FTM的周期为(MOD+0x0001)乘以FTM计数器时钟的周期。
    上次@FSL_TICS_ZJJ大神给我解答的时说让我看一下计时器的种类,但是我看介绍上说:FTM 只有一个时钟域:系统时钟。并且在函数: FTM_ClockSet(FTM2, FTM_CLOCK_SYSTEMCLOCK, FTM_CLOCK_PS_DIV2); 里面对于后面的预分频器的修改好像没有什么差别,然后我又想,我自己任务要求的定时器为200ms,照上述公式说,我如果把200ms当做200000us(因为如果就当做200,感觉好像有问题),就应该是只要MOD的值和FTM计数器的值满足等于200000就行。
     FTM_SetModValue(FTM2,9999);这应该是设置MOD值的。
     void FTM2_Task(void)
{
    static uint16_t u16count;
    static uint8_t u8DirMark;

   
    /* clear the flag */
    FTM_ClrOverFlowFlag(FTM2);
         
    if(100 == u16count)
    {
        u16count = 0;
        u16ChV_old = FTM2->CONTROLS[5].CnV;
        if(!u8DirMark)
        {
            u16ChV_new = u16ChV_old + 200;
            if(u16ChV_new >= FTM2->MOD)
            {
                u16ChV_new = FTM2->MOD - 200;
                u8DirMark  = 1;
            }
            else
            {
            }
        }
        else
        {
            u16ChV_new = u16ChV_old - 200;
            if(u16ChV_new <  200)
            {
                u16ChV_new = 200;
                u8DirMark  = 0;
            }
            else
            {  
            }
        }
        /* update the channel value */
        FTM_SetChannelValue(FTM2, FTM_CHANNEL_CHANNEL5, u16ChV_new);
    }
    else
    {
        u16count++;
    }
}
这个FTM2_Task函数里的u16count++我觉得应该算是计数器。但是我改变:100 == u16count中100的值的时候,频率的确会变,但是我改变MOD值的时候它就不会变,比如,我不要求渐变,把函数FTM2_Task函数里面的200全改成9999,这样就没有渐变只有闪烁。但是我将MOD和函数中的数同时改成999,或者其他,为什么还是没有变化?我把值变小了,那个FTM的周期应该也变小了吧?但是为什么没有变化?可能频率和那个u16count的值有关,但是如果把那个值变为200的话又感觉太慢了。
   可能我表述的不太清楚,但是问题大概就是只改变MOD值造成的FTM周期改变为什么灯的闪烁频率不改变?
   代码都是来源于FRDM-KE06Z的FTM-EPWM_demo.c里面。
   谢谢大家了。

相关帖子

沙发
zshzcz|  楼主 | 2015-1-26 14:52 | 只看该作者
怎么现在经过自己测试一下以后感觉那个u16count才是周期数,那个MOD值的改变好像只让灯亮的程度发生了一些变化,是我自己哪里理解错了吗?

使用特权

评论回复
板凳
sunriselight| | 2015-1-26 16:13 | 只看该作者
这么乱改参数,是不可以的,仔细看数据手册,理解到底时间是如何计算来的,不弄懂原理,乱修改不好

使用特权

评论回复
地板
FSL_TICS_ZJJ| | 2015-1-26 16:24 | 只看该作者
楼主,我建议你拿一个示波器看看你修改值和输出的PWM的周期以及占空比关系,这样对着你的设置以及频率就会比较清楚。
这里和你说下,MOD是修改你输出PWM的频率的,你拿示波器看看,修改MOD值之后是不是改变了频率,你可以直接修改MOD寄存器。自己写,等代码看懂了再修改。

使用特权

评论回复
5
powerful1| | 2015-1-27 23:01 | 只看该作者
还是拿示波器看看波形吧

使用特权

评论回复
6
zshzcz|  楼主 | 2015-1-28 09:10 | 只看该作者
FSL_TICS_ZJJ 发表于 2015-1-26 16:24
楼主,我建议你拿一个示波器看看你修改值和输出的PWM的周期以及占空比关系,这样对着你的设置以及频率就会 ...

额。。好的。。

使用特权

评论回复
7
FSL_TICS_ZJJ| | 2015-1-28 10:36 | 只看该作者
zshzcz 发表于 2015-1-28 09:10
额。。好的。。

你还可以用CW的PE或者KDS的PE中FTM模块直接配置,然后修改参数看PWM波形。

使用特权

评论回复
8
zshzcz|  楼主 | 2015-1-28 13:46 | 只看该作者
FSL_TICS_ZJJ 发表于 2015-1-28 10:36
你还可以用CW的PE或者KDS的PE中FTM模块直接配置,然后修改参数看PWM波形。

您好,我现在看到一个微博上面讲FTM0_SC=FTM_SC_CLKS(1)|FTM_SC_PS(4);//中断禁止,时钟源来自总线时钟60MHz,16分频后得到3.75MHz,CLKS=01,PS=100,CPWMS=0,递增计数
然后我明白了那个FTM的时钟周期就是根据这个分频后来的,但是为什么这上面说总线时钟是60MHZ的呢?他好像用的是K60系列的板子,那像我的那个KE06的CLKS=01的是系统时钟吧?那它的频率是多少呢?

使用特权

评论回复
9
FSL_TICS_ZJJ| | 2015-1-28 13:59 | 只看该作者
zshzcz 发表于 2015-1-28 13:46
您好,我现在看到一个微博上面讲FTM0_SC=FTM_SC_CLKS(1)|FTM_SC_PS(4);//中断禁止,时钟源来自总线时钟60 ...

他的K60主频应该是120M的,bus时钟是core时钟的一半,所以是60Mhz。
KE06选择系统时钟,应该最高可以到答48Mhz。
所以,你需要按照你配置的系统时钟计算。

使用特权

评论回复
10
zshzcz|  楼主 | 2015-1-28 14:08 | 只看该作者
FSL_TICS_ZJJ 发表于 2015-1-28 13:59
他的K60主频应该是120M的,bus时钟是core时钟的一半,所以是60Mhz。
KE06选择系统时钟,应该最高可以到答 ...

我配置的系统时钟?难道这个还和电脑配置有关啊?那怎么看我配置的系统时钟啊?感觉好高端。。

使用特权

评论回复
11
zshzcz|  楼主 | 2015-1-28 14:11 | 只看该作者
zshzcz 发表于 2015-1-28 14:08
我配置的系统时钟?难道这个还和电脑配置有关啊?那怎么看我配置的系统时钟啊?感觉好高端。。 ...

MKE06Z128VLK4 MCU – 48MHz, 128KB Flash, 16KB SRAM,
80LQFP.
是不是这个啊?我在快速指导上找到的唯一和频率有关的。。这个是不是说我的这个芯片的系统时钟是48MHZ,然后总线的就是24MHZ?算周期就是1/24000ms?(如果分频为1的话)。

使用特权

评论回复
12
zshzcz|  楼主 | 2015-1-28 15:11 | 只看该作者
FSL_TICS_ZJJ 发表于 2015-1-28 13:59
他的K60主频应该是120M的,bus时钟是core时钟的一半,所以是60Mhz。
KE06选择系统时钟,应该最高可以到答 ...

嗯,我的那个周期的问题解决了,我已经调成了200ms了,现在就是占空比的关系,可能设置不正确,导致每一个200ms一闪就过去了。我自己还继续研究下吧,这个帖子的问题就结了,谢谢。

使用特权

评论回复
13
FSL_TICS_ZJJ| | 2015-1-28 16:53 | 只看该作者
zshzcz 发表于 2015-1-28 15:11
嗯,我的那个周期的问题解决了,我已经调成了200ms了,现在就是占空比的关系,可能设置不正确,导致每一 ...

有进步!
占空比设置看通道值,占空比值小于你MOD值,大于CIN值,你可以设置为MOD的一半,那样就能看到占空比了。

使用特权

评论回复
14
zshzcz|  楼主 | 2015-1-29 09:24 | 只看该作者
FSL_TICS_ZJJ 发表于 2015-1-28 16:53
有进步!
占空比设置看通道值,占空比值小于你MOD值,大于CIN值,你可以设置为MOD的一半,那样就能看到占 ...

对,哈哈,我昨天就是试着把那个CnV的值改成MOD的一半,结果也成功了!真的是非常感谢了!

使用特权

评论回复
15
FSL_TICS_ZJJ| | 2015-1-29 09:42 | 只看该作者
zshzcz 发表于 2015-1-29 09:24
对,哈哈,我昨天就是试着把那个CnV的值改成MOD的一半,结果也成功了!真的是非常感谢了! ...

不客气,后续有问题,继续发问题帖交流。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

40

帖子

0

粉丝