EPwm1Regs.TBCTL.bit.PRDLD = TB_IMMEDIATE; // Set immediate load
EPwm1Regs.TBPRD = period; // PWM frequency = 1 / perio
这两句是讲epwm文档上的103页的两句。
如果把这两句颠倒 那么先前配置的TBPRD就会清0 ,为什么会这样?配置也要讲先后顺序?
mangui zhang:周期寄存器配置肯定与上一句无关系可能是其他的配置导致清零了
如下面配置:
void Epwm1_Init(int16 PRD){
EPwm1Regs.TBPRD = PRD ; //设置周期EPwm1Regs.CMPA.half.CMPA = 0;//设置占空比
EPwm1Regs.CMPB = 0;
// Setup TBCLK
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//递增模式
//EPwm1Regs.TBCTL.bit.CTRMODE =TB_COUNT_UPDOWN;//增减模式
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;// Disable phase loading
EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;// Disable phase loading
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;//
EPwm1Regs.TBPHS.half.TBPHS = 0x0000;// Phase is 0
EPwm1Regs.TBCTR = 0x0000;// Clear counter
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;// Clock ratio to SYSCLKOUT
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;// TBCLK = SYSCLKOUT/(HSPCLKDIV*CLKDIV)
// Setup shadow register load on ZERO
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
// 递增模式的动作
EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;// Set PWM1A on Zero
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;// Clear PWM1A on event A, up count
EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET;// Set PWM1B on Zero
EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR;// Clear PWM1B on event B, up count}
EPwm1Regs.TBCTL.bit.PRDLD = TB_IMMEDIATE; // Set immediate load
EPwm1Regs.TBPRD = period; // PWM frequency = 1 / perio
这两句是讲epwm文档上的103页的两句。
如果把这两句颠倒 那么先前配置的TBPRD就会清0 ,为什么会这样?配置也要讲先后顺序?
Susan Yang:配置是没有先后顺序的,建议您参考下例程进行配置。
EPwm1Regs.TBCTL.bit.PRDLD = TB_IMMEDIATE; // Set immediate load
EPwm1Regs.TBPRD = period; // PWM frequency = 1 / perio
这两句是讲epwm文档上的103页的两句。
如果把这两句颠倒 那么先前配置的TBPRD就会清0 ,为什么会这样?配置也要讲先后顺序?
user5860441:
回复 Susan Yang:
不知道你试过没有,我觉得和顺序也没关系,用的别的处理器没遇到过。
EPwm1Regs.TBCTL.bit.PRDLD = TB_IMMEDIATE; // Set immediate load
EPwm1Regs.TBPRD = period; // PWM frequency = 1 / perio
这两句是讲epwm文档上的103页的两句。
如果把这两句颠倒 那么先前配置的TBPRD就会清0 ,为什么会这样?配置也要讲先后顺序?
user5860441:
回复 Susan Yang:
现在使用立即模式,而不是阴影模式。
EPwm1Regs.TBCTL.bit.PRDLD = TB_IMMEDIATE; // Set immediate load
EPwm1Regs.TBPRD = period; // PWM frequency = 1 / perio
这两句是讲epwm文档上的103页的两句。
如果把这两句颠倒 那么先前配置的TBPRD就会清0 ,为什么会这样?配置也要讲先后顺序?
user5860441:
回复 mangui zhang:
我在一个项目中要跟踪电网的工频,虽然是50hz,但是实际还是有微小的波动,所以要用立即模式,来不断改周期寄存器TBPRD的值,并且我想在计数器值为0时发生中断,结果进了中断就出不来,仿真时发现,当配置立即模式这句话后TBPRD就为0了。
EPwm1Regs.TBCTL.bit.PRDLD = TB_IMMEDIATE; // Set immediate load
EPwm1Regs.TBPRD = period; // PWM frequency = 1 / perio
这两句是讲epwm文档上的103页的两句。
如果把这两句颠倒 那么先前配置的TBPRD就会清0 ,为什么会这样?配置也要讲先后顺序?
user5805327:
回复 user5860441:
请问,你跟踪电网频率采用的什么方法?怎么检测实现的?