请问有谁用过KE02或者KE04,FTM2模块的中心对齐模式,做电机控制用。
目前用边沿对齐可以正常工作,中心对齐模式当占空比发生变化时,周期也改变了。不知有谁有同样的问题,或给个参考程序
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!
-----------------------------------------------------------------------------------------------------------------------
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
Hi Ping wang,
你说的下三桥开通对称,上三桥在占空比发生变化时发生了不对称, 你这里的对称指的是周期是否改变,还是三相桥直接波形的对称关系?
另外,你给出的代码只是初始化代码,并没有给出在什么时候修改占空比,并且是如何改变的?
你可以先单独测试周期改变的通道,看看周期改变是在什么时候改变的?并且修改了哪些参数。
如果方便的话,你可以把你的代码工程放上来,我这边好看看具体的代码情况。
Best Regards,
Jingjing