请问有谁用过KE02或者KE04,FTM2模块的中心对齐模式,做电机控制用。

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

请问有谁用过KE02或者KE04,FTM2模块的中心对齐模式,做电机控制用。

2,383 Views
pingwang
Contributor II

请问有谁用过KE02或者KE04,FTM2模块的中心对齐模式,做电机控制用。

目前用边沿对齐可以正常工作,中心对齐模式当占空比发生变化时,周期也改变了。不知有谁有同样的问题,或给个参考程序

Labels (1)
0 Kudos
3 Replies

1,922 Views
kerryzhou
NXP TechSupport
NXP TechSupport

Hi Ping wang,

      中心对齐,也就是选择CPWM的时候, 占空比是:2*(CnV-CNTIN)*FTM period, 周期是2*(MOD-CNTIN)*FTM period。这个周期是和EPWM不一样的。

不过,如果你不改变CNTIN的话,改变占空比,只改变CnV,周期是不会改变的,因为周期只和MOD,CNTIN,FTM period有关。所以你现在发现周期改变,不知道你改变了哪些参数?

      关于参考代码,你直接参考KE02的驱动库:

FRDM-KEXX Driver Library Package

  然后参考代码:KEXX_DRIVERS_V1.2.1_DEVD\kexx_drv_lib\build\iar\ke02\FTM_EPWM_demo

main 函数修改如下:

int main (void)

{    

    /* Perform processor initialization */

    sysinit();

   

    SIM_RemapFTM2CH1Pin();

    SIM_RemapFTM2CH0Pin();

    /* FTM2 is set as edge aligned pwm mode, high true pulse */

   // FTM_PWMInit(FTM2, FTM_PWMMODE_EDGEALLIGNED, FTM_PWM_HIGHTRUEPULSE);

    FTM_PWMInit(FTM2, FTM_PWMMODE_CENTERALLIGNED, FTM_PWM_HIGHTRUEPULSE);

    /* FTMEN enable */

    FTM_SetFTMEnhanced(FTM2);

    /* update MOD value */

    FTM_SetModValue(FTM2, 9999);

    /* set clock source, start counter */

    FTM_ClockSet(FTM2, FTM_CLOCK_SYSTEMCLOCK, FTM_CLOCK_PS_DIV1); 

    /* enable FTM2 interrupt in NVIC */

    NVIC_EnableIRQ(FTM2_IRQn);

    /* setup call back function for interrupt */

    FTM_SetCallback(FTM2, FTM2_Task);

    /* enable FTM2 overflow interrupt */

    FTM_EnableOverflowInt(FTM2);

    while(1)

    {}

}

  这样你可以发现,PTH1会出现占空比变化的波形,但是周期并不改变。

希望能帮到你!

If you still have question, please let me know!

Have a great day,
Jingjing

-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

0 Kudos

1,922 Views
pingwang
Contributor II

Hi Jingjing,

如我附件图所示:

蓝色:A相上桥

黄色:A相下桥

粉色:B相下桥

绿色:C相下桥

我现在采用的是KE04Z128,中心对齐模式,很明显,只能做到下三桥开通对称,上三桥在占空比发生变化时发生了不对称。我的软件配置如下。请帮我看看是怎么回事。

//center pwm

void FTM2_Init(void)

{

SIM_PINSEL1 = (uint32_t)((SIM_PINSEL1 & (uint32_t)~(uint32_t)(

SIM_PINSEL1_FTM2PS5_MASK |

SIM_PINSEL1_FTM2PS4_MASK |

SIM_PINSEL1_FTM2PS3(0x02) |

SIM_PINSEL1_FTM2PS2(0x02) |

SIM_PINSEL1_FTM2PS1(0x03) |

SIM_PINSEL1_FTM2PS0(0x02)

)) | (uint32_t)(

SIM_PINSEL1_FTM2PS3(0x01) |

SIM_PINSEL1_FTM2PS2(0x01) |

SIM_PINSEL1_FTM2PS0(0x01)

));

SIM_SCGC |= SIM_SCGC_FTM2_MASK;

FTM2_SC = 0;

FTM2_SC |= FTM_SC_CPWMS_MASK;//enable Center Aligned PWM

FTM2_C0SC = (FTM2_C0SC & (~FTM2_C0SC_MASK)) |FTM_CnSC_MSB_MASK| FTM_CnSC_ELSA_MASK;//ok

FTM2_C1SC = (FTM2_C1SC & (~FTM2_C1SC_MASK)) |FTM_CnSC_MSB_MASK| FTM_CnSC_ELSA_MASK;

FTM2_C2SC = (FTM2_C2SC & (~FTM2_C2SC_MASK)) |FTM_CnSC_MSB_MASK| FTM_CnSC_ELSA_MASK;

FTM2_C3SC = (FTM2_C3SC & (~FTM2_C3SC_MASK)) |FTM_CnSC_MSB_MASK| FTM_CnSC_ELSA_MASK;

FTM2_C4SC = (FTM2_C4SC & (~FTM2_C4SC_MASK)) |FTM_CnSC_MSB_MASK| FTM_CnSC_ELSA_MASK;

FTM2_C5SC = (FTM2_C5SC & (~FTM2_C5SC_MASK))|FTM_CnSC_MSB_MASK | FTM_CnSC_ELSA_MASK;

//FTM2_COMBINE |= FTM_COMBINE_SYNCEN0_MASK|FTM_COMBINE_SYNCEN1_MASK|FTM_COMBINE_SYNCEN2_MASK;

FTM2_COMBINE = FTM_COMBINE_SYNCEN0_MASK | FTM_COMBINE_DTEN0_MASK| FTM_COMBINE_COMP0_MASK

FTM_COMBINE_SYNCEN1_MASK

FTM_COMBINE_DTEN1_MASK

FTM_COMBINE_COMP1_MASK

FTM_COMBINE_SYNCEN2_MASK

FTM_COMBINE_DTEN2_MASK

FTM_COMBINE_COMP2_MASK ;

FTM2_MODE

= FTM_MODE_WPDIS_MASK; // Disable write protection for certain registers

FTM2_MODE

= FTM_MODE_FTMEN_MASK; // enable the counter

FTM2_MOD = 1199;

FTM2_CNTIN = 0x00;

FTM2_C0V = 1200;

FTM2_C1V = 1200;

FTM2_C2V = 1200;

FTM2_C3V = 1200;

FTM2_C4V = 1200;

FTM2_C5V = 1200;

FTM2_PWMLOAD

= 0x200 ; //LDOK

//

// FTM2_CONF

= FTM_CONF_BDMMODE(3); // counter running in BDM mode

// FTM2_MODE

= FTM_MODE_FTMEN_MASK

FTM_MODE_PWMSYNC_MASK;

// FTM2_MODE

= FTM_MODE_FTMEN_MASK;

// FTM2_FLTCTRL

= FTM_FLTCTRL_FAULT1EN_MASK;//FTM2Fault1 enbale

// FTM2_MODE

= FTM_MODE_FAULTM(2)

FTM_MODE_FAULTIE_MASK;//Fault1 enable interrupt and manual clear

FTM2_SYNCONF

= FTM_SYNCONF_SYNCMODE_MASK; // should be set enhanced PWM sync mode add

// CTNMAX = 1 - PWM update at counter in max. value

FTM2_SYNC = FTM_SYNC_CNTMAX_MASK;

// FTM2_SYNC = FTM_SYNC_CNTMIN_MASK;

// FTM2_SYNC

= FTM_SYNC_SWSYNC_MASK; // add

FTM2_SYNCONF

= FTM_SYNCONF_SWWRBUF_MASK

FTM_SYNCONF_SWRSTCNT_MASK

FTM_SYNCONF_SYNCMODE_MASK; // should be set enhanced PWM sync mode

/*

*/

// FTM2_COMBINE = (FTM2_COMBINE & (~FTM2_COMBINE_MASK))

FTM2_COMBINE_VALUE;//ok

FTM2_POL = 0x3F ;

// Dead time = 1 us for 24 MHz core clock 1/1/24

FTM2_DEADTIME = (FTM2_DEADTIME & (~FTM2_DEADTIME_MASK))

FTM2_DEADTIME_VALUE;

//Set system clock as source for FTM0 (CLKS[1:0] = 01)

//FTM2_SC

= FTM_SC_CLKS(1);

////////////////////////////////////////////////////////////////////////////////////////////////////////////

FTM2_EXTTRIG

= FTM_EXTTRIG_INITTRIGEN_MASK; //

//FTM2_EXTTRIG

= FTM_EXTTRIG_CH0TRIG_MASK;

//FTM2_SC

= FTM_SC_TOIE_MASK; //enable TOF interrupt

FTM2_SC

= FTM_SC_CLKS(1);

//enable_irq(35-16);//enable FTM2 interrupt

//NVIC_IP(4)=3; //pri level

//FTM2_OUTMASK = 0x00;

FTM2_OUTMASK = FTM_OUTMASK_CH5OM_MASK

FTM_OUTMASK_CH4OM_MASK

FTM_OUTMASK_CH3OM_MASK

FTM_OUTMASK_CH2OM_MASK | FTM_OUTMASK_CH1OM_MASK | FTM_OUTMASK_CH0OM_MASK;

FTM2_OUTMASK = 0x00;

}

Ping Wang

Design Engineer

Avnet Electronics Marketing

ping.wang@avnet.com

Avnet(Shanghai) Limited

15F,Innov TOWER,1801 Hongmei Road,Shanghai,China

上海市虹梅路1801号凯科国际大厦15楼,邮编:200233

Office:

+86 21 3367 8988

Direct:

+86 21 3367 8783

Mobile:

13601744500

0 Kudos

1,922 Views
kerryzhou
NXP TechSupport
NXP TechSupport

Hi Ping wang,

    你说的下三桥开通对称,上三桥在占空比发生变化时发生了不对称, 你这里的对称指的是周期是否改变,还是三相桥直接波形的对称关系?

   另外,你给出的代码只是初始化代码,并没有给出在什么时候修改占空比,并且是如何改变的?

   你可以先单独测试周期改变的通道,看看周期改变是在什么时候改变的?并且修改了哪些参数。

  如果方便的话,你可以把你的代码工程放上来,我这边好看看具体的代码情况。

Best Regards,

Jingjing

0 Kudos