cl1cl1cl1cl1 发表于 2015-11-15 12:23:22

[TRK-KEA使用经验分享]KEA64 FTM 移相波形 学习过程

本帖最后由 cl1cl1cl1cl1 于 2015-11-15 12:25 编辑

KEA64看见官网介绍例程多是CW环境和KEIL下的例程,下了库 KEXX_DRIVERS_V1.2.1_DEVD 又是KE系列的虽说差不多,但要配置FTM组合不对称PWM还真有些不顺,而且debug也没有IAR方便(我用IAR的多些)。
找找IAR例程应该有KEA64系列的,就打开IAR的


接着




选择自定义文件夹,把FTM例子就下来了。
接着修改FTM的寄存器。

        FTM2_SC |= FTM_SC_TOIE_MASK;//打开TOIE中断每次匹配中断

        SIM_SOPT &=~SIM_SOPT_NMIE_MASK;//将NMI禁止 用来复用FTM2_CH4
       
        FTM2_MODE   
          |= FTM_MODE_WPDIS_MASK //打开MODEWPDIS位的写保护
          | FTM_MODE_FTMEN_MASK;//FTM 使能1 自由运行计数器并且同步与 TPM 行为不同。
        FTM2_COMBINE =
          FTM_COMBINE_COMBINE0_MASK //组合通道(n = 0)1 通道(n)和(n+1)组合。
                | FTM_COMBINE_COMP0_MASK //通道(n)互补(n = 0) 1 通道(n+1)输出与通道(n)输出互补。
                  | FTM_COMBINE_SYNCEN0_MASK //同步使能(n = 0) 1 使能该通道对中的 PWM 同步。
                        | FTM_COMBINE_DTEN0_MASK |//死区时间使能(n = 0) 1 使能该通道对中的死区时间插入。
                                          FTM_COMBINE_COMBINE1_MASK | FTM_COMBINE_COMP1_MASK | FTM_COMBINE_SYNCEN1_MASK | FTM_COMBINE_DTEN1_MASK
                                        |FTM_COMBINE_COMBINE2_MASK | FTM_COMBINE_COMP2_MASK | FTM_COMBINE_SYNCEN2_MASK | FTM_COMBINE_DTEN2_MASK
                                          ;   
        FTM2_C0SC |= FTM_CnSC_ELSA_MASK |
          FTM_CnSC_MSA_MASK;/* 组合PWM输出 高真脉冲(通道(n)匹配时置位,通道(n+1)匹配时清零) */
        FTM2_C1SC |= FTM_CnSC_ELSA_MASK |
          FTM_CnSC_MSA_MASK;/* 组合PWM输出 高真脉冲(通道(n)匹配时置位,通道(n+1)匹配时清零) */
        FTM2_C2SC |= FTM_CnSC_ELSA_MASK |
          FTM_CnSC_MSA_MASK;/* 组合PWM输出 高真脉冲(通道(n)匹配时置位,通道(n+1)匹配时清零) */
        FTM2_C3SC |= FTM_CnSC_ELSA_MASK |
          FTM_CnSC_MSA_MASK;/* 组合PWM输出 高真脉冲(通道(n)匹配时置位,通道(n+1)匹配时清零) */
        FTM2_C4SC |= FTM_CnSC_ELSA_MASK |
          FTM_CnSC_MSA_MASK;/* 组合PWM输出 高真脉冲(通道(n)匹配时置位,通道(n+1)匹配时清零) */
        FTM2_C5SC |= FTM_CnSC_ELSA_MASK |
          FTM_CnSC_MSA_MASK;/* 组合PWM输出 高真脉冲(通道(n)匹配时置位,通道(n+1)匹配时清零) */
       
        FTM2_CNTIN = 10;//开始
        FTM2_MOD = 65500;//结束
       
        FTM_SetPeriod(0, 15625);                /* Interrupt every 15625 counts,equal to every 100 ms */
        FTM_SetPeriod(1, 31250);          /* Interrupt every 31250 counts, equal to every 200 ms */
        FTM_SetPeriod(2, 46875);                /* Interrupt every 46875 counts, equal to every 300 ms */
        FTM_SetPeriod(3, 62500);                /* Interrupt every 62500 counts, equal to every 400 ms */



        FTM2_PWMLOAD = FTM_PWMLOAD_LDOK_MASK;//自动加载缓存值

        //FTM2_SC &= ~FTM_SC_CPWMS_MASK; //中心对齐 PWM 选择   1 FTM 计数器可工作在先增后减计数模式中。
                                                                        //0 FTM 计数器可工作在向上计数模式中。
        FTM2_SC |= FTM_SC_CPWMS_MASK; //中心对齐 PWM 选择   1 FTM 计数器可工作在先增后减计数模式中。
                                                                        //0 FTM 计数器可工作在向上计数模式中。
       
        //死区设置
        FTM2_DEADTIME |= FTM_DEADTIME_DTPS_MASK//系统时钟 0xc016分频
                                |FTM_DEADTIME_DTVAL(3);//20个时钟周期
       
       
        //0 FTM2 CH4 映射到 PTB4 上。默认SIM_PINSEL = |
       
        FTM2_SC |= FTM_SC_CLKS(1); /*FTM2 use system clock*///时钟源选择 01 系统时钟

经过这些修改得到了我需要的带死区的PWM波形。


下面会加入AD 和 比较器功能串口modbus等代码。


页: [1]
查看完整版本: [TRK-KEA使用经验分享]KEA64 FTM 移相波形 学习过程