搜索
bottom↓
回复: 1

KE02 FTM2(已解决)

[复制链接]

出0入0汤圆

发表于 2014-1-17 15:53:47 | 显示全部楼层 |阅读模式
本帖最后由 FSL_TICS_ZJJ 于 2014-1-26 13:57 编辑

在看定时器FTM2的时候,完全搞不懂FTM2在COMBINE模式下是如何输出互补PWM的,下面的这个初始化函数也有搞不明白的地方:
void FTM_PWMInit(FTM_Type *pFTM, uint8_t u8PWMModeSelect, uint8_t u8PWMEdgeSelect)
{
    uint8_t   channels, i;
   
    ASSERT((FTM0== pFTM) || (FTM1== pFTM) || (FTM2== pFTM));
   
    /* open the clock gate */
        if (FTM0 == pFTM)
    {
        channels = 2;
        SIM->SCGC |= SIM_SCGC_FTM0_MASK;
    }
    else if(FTM1 == pFTM)
    {
        channels = 2;
        SIM->SCGC |= SIM_SCGC_FTM1_MASK;
    }        
    else
    {
        channels = 6;
        SIM->SCGC  |= SIM_SCGC_FTM2_MASK;
    }
   
    pFTM->SC  = 0x0;                                    /* disable counter */  
        pFTM->MOD = FTM_MOD_INIT;
   
    if(FTM_PWMMODE_CENTERALLIGNED == u8PWMModeSelect)   /* enable CPWM */
    {
        pFTM->SC |= FTM_SC_CPWMS_MASK;
    }
    else if(FTM_PWMMODE_COMBINE == u8PWMModeSelect)     /* enable combine pwm mode */
    {
        ASSERT(FTM2 == pFTM);
        pFTM->MODE    |= FTM_MODE_WPDIS_MASK | FTM_MODE_FTMEN_MASK;
        pFTM->COMBINE = FTM_COMBINE_FAULTEN0_MASK |
                        FTM_COMBINE_COMBINE0_MASK | FTM_COMBINE_COMP0_MASK | FTM_COMBINE_SYNCEN0_MASK | FTM_COMBINE_DTEN0_MASK |
                        FTM_COMBINE_FAULTEN1_MASK |   
                        FTM_COMBINE_COMBINE1_MASK | FTM_COMBINE_COMP1_MASK | FTM_COMBINE_SYNCEN1_MASK | FTM_COMBINE_DTEN1_MASK |
                        FTM_COMBINE_FAULTEN2_MASK |   
                        FTM_COMBINE_COMBINE2_MASK | FTM_COMBINE_COMP2_MASK | FTM_COMBINE_SYNCEN2_MASK | FTM_COMBINE_DTEN2_MASK
                        ;     
        pFTM->SC &= ~FTM_SC_CPWMS_MASK;
    }
    if(FTM_PWM_HIGHTRUEPULSE == u8PWMEdgeSelect)
    {
        /* Configure timers PWM High True Pulses */
        for(i=0; i<channels; i++)
        {
            pFTM->CONTROLS.CnSC = FTM_CnSC_MSB_MASK | FTM_CnSC_ELSB_MASK;  
            pFTM->CONTROLS.CnV  = FTM_C0V_INIT + i*100;
        }
    }
    else if(FTM_PWM_LOWTRUEPULSE == u8PWMEdgeSelect)
    {
        /* Configure timers for PWM Low True Pulses */
        for(i=0; i<channels; i++)
        {
            pFTM->CONTROLS.CnSC = FTM_CnSC_MSB_MASK | FTM_CnSC_ELSA_MASK;
            pFTM->CONTROLS.CnV  = FTM_C0V_INIT + i*100;
        }
    }  
}

问题一:如红色字体部分,不明白为什么要+i*100
还有就是:
初始化函数如下:
/* set FTM2 as combine mode */
    FTM_PWMInit(FTM2, FTM_PWMMODE_COMBINE, FTM_PWM_LOWTRUEPULSE);
    /* set MOD value */
    FTM_SetModValue(FTM2, 1000);
    /* set clock source and start the counter */
    FTM_ClockSet(FTM2, FTM_CLOCK_SYSTEMCLOCK, FTM_CLOCK_PS_DIV1);
    //FTM_PWMDeadtimeSet(FTM2,DEAD_PS_DIV1,DEAD_TIME);
    //FTM2_PolaritySet(FTM2, FTM2POL_INT);
        
    FTM_SetCallback(FTM2, FTM2_Task);
    NVIC_EnableIRQ(FTM2_IRQn);
    FTM_EnableOverflowInt(FTM2);
经过测试,FTM2CH3,FTM2CH5输出完全为低电平,FTM2CH2,FTM2CH4输出完全为高电平,但是FTM2CH0和FTM2CH1输出的却是一组互补的PWM
问题是:为什么三组输出会有不同,为什么FTM2CH0和FTM2CH1的PWM

出0入0汤圆

发表于 2014-1-18 00:12:38 | 显示全部楼层
楼主,你选择combine的引脚不对啊,RM上面有讲

这就是为啥你0,1通道可以,2,4通道不行,因为你不是连续的,你需要2,3以及4,5这样通道combine。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-2 20:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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