我的问题是这样的:
EPWM已经全部用作PWM的发生单元,还有两路PWM打算使用ECAP的APWM功能。
这两部分PWM频率是一样的,现在想问下他们之间的相位是怎样的?
我知道EPWM内部是可以调节之间的相位关系,APWM内也可以 调节互相的相位关系,但是EPWM和APWM可以调节相位关系吗?
或者我不做设置时,EPWM和APWM是自动同相的吗?
期待高手解疑,在线等。
非常感谢!
feng chen1:
好的,非常感谢!
我的问题是这样的:
EPWM已经全部用作PWM的发生单元,还有两路PWM打算使用ECAP的APWM功能。
这两部分PWM频率是一样的,现在想问下他们之间的相位是怎样的?
我知道EPWM内部是可以调节之间的相位关系,APWM内也可以 调节互相的相位关系,但是EPWM和APWM可以调节相位关系吗?
或者我不做设置时,EPWM和APWM是自动同相的吗?
期待高手解疑,在线等。
非常感谢!
JING JI:
回复 Eric Ma:
我按照您说的 把SYNCI置一 但是EPWM和APWM还是不能同步您能再具体讲下 还有什么地方需要设置吗 谢谢 我真的调了好久了 一直两个就是不同步
我的问题是这样的:
EPWM已经全部用作PWM的发生单元,还有两路PWM打算使用ECAP的APWM功能。
这两部分PWM频率是一样的,现在想问下他们之间的相位是怎样的?
我知道EPWM内部是可以调节之间的相位关系,APWM内也可以 调节互相的相位关系,但是EPWM和APWM可以调节相位关系吗?
或者我不做设置时,EPWM和APWM是自动同相的吗?
期待高手解疑,在线等。
非常感谢!
囧:
回复 JING JI:
你C2000哪个系列产品,EPWM通道几要和APWM同步?EPWM的同步拓扑在目前的几个系列中有区别,比如F28035就是完全从上到下串联,然后ECAP1并联在PWM1模块上的
我的问题是这样的:
EPWM已经全部用作PWM的发生单元,还有两路PWM打算使用ECAP的APWM功能。
这两部分PWM频率是一样的,现在想问下他们之间的相位是怎样的?
我知道EPWM内部是可以调节之间的相位关系,APWM内也可以 调节互相的相位关系,但是EPWM和APWM可以调节相位关系吗?
或者我不做设置时,EPWM和APWM是自动同相的吗?
期待高手解疑,在线等。
非常感谢!
JING JI:
回复 囧:
谢谢 用的是28335 我想让所有的EPWM和ecap产生的pwm同步 怎么做呢?
我的问题是这样的:
EPWM已经全部用作PWM的发生单元,还有两路PWM打算使用ECAP的APWM功能。
这两部分PWM频率是一样的,现在想问下他们之间的相位是怎样的?
我知道EPWM内部是可以调节之间的相位关系,APWM内也可以 调节互相的相位关系,但是EPWM和APWM可以调节相位关系吗?
或者我不做设置时,EPWM和APWM是自动同相的吗?
期待高手解疑,在线等。
非常感谢!
囧:
回复 JING JI:
那你要把所有PWM的PHASE ENABLE打开,并且除了PWM1的同步信号输出设置为0点,其他都设置为SYNCIN,ECAP模块也是
我的问题是这样的:
EPWM已经全部用作PWM的发生单元,还有两路PWM打算使用ECAP的APWM功能。
这两部分PWM频率是一样的,现在想问下他们之间的相位是怎样的?
我知道EPWM内部是可以调节之间的相位关系,APWM内也可以 调节互相的相位关系,但是EPWM和APWM可以调节相位关系吗?
或者我不做设置时,EPWM和APWM是自动同相的吗?
期待高手解疑,在线等。
非常感谢!
JING JI:
回复 囧:
谢谢您 但是我改了下 EPWM还是和APWM有一个250ns的延迟,下面是我的程序 您看下 哪里写的不对 麻烦了
void SetupAPWM(void)//ecap产生APWM{
ECap1Regs.CAP1 = 0x5DC; // Set Period value按照150M计算的ECap1Regs.CTRPHS=0x1; //相位控制寄存器ECap1Regs.ECCTL2.bit.CAP_APWM = 1; // Enable APWM modeECap1Regs.ECCTL2.bit.APWMPOL=0;//1:输出为低电平有效 0:高电平ECap1Regs.ECCTL2.bit.SYNCI_EN=1;//同步信号选择ECap1Regs.CAP2 = 0x2EE; // Set Compare value50%处ECap1Regs.ECCLR.all = 0x0FF; // Clear pending interruptsECap1Regs.ECEINT.bit.CTR_EQ_CMP = 1; // enable Compare Equal Int
ECap3Regs.CAP1 = 0x5DC; // Set Period value按照150M计算的ECap3Regs.CTRPHS=0x1; //相位控制寄存器ECap3Regs.ECCTL2.bit.CAP_APWM = 1; // Enable APWM modeECap3Regs.ECCTL2.bit.APWMPOL=0;//1:输出为低电平有效 0:高电平ECap3Regs.ECCTL2.bit.SYNCI_EN=1;//同步信号选择ECap3Regs.CAP2 = 0x2EE; // Set Compare value50%处ECap3Regs.ECCLR.all = 0x0FF; // Clear pending interruptsECap3Regs.ECEINT.bit.CTR_EQ_CMP = 1; // enable Compare Equal Int
ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1;ECap3Regs.ECCTL2.bit.TSCTRSTOP = 1;
}
void SetupEPwmAB_A1A2(void) //byJJ 上下桥臂50% 完全互补{//setup TimeBase(TB)EPwm1Regs.TBPRD = 1500; //Tpwm=TBPRD*Ttbclk Set PWM period 10us 100kHzEPwm1Regs.TBPHS.half.TBPHS = 1; // Phase is 0EPwm1Regs.TBCTR = 0x0000; // Clear counter
// Setup TBCTLEPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // updown count modeEPwm1Regs.TBCTL.bit.PHSEN = TB_ENABLE; // 不使用移相方式EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW; //变化TBPRD时,使用shadow寄存器(即当计数器为0时才更新)EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // 计数到0时输出同步清零信号EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to SYSCLKOUT150MHzEPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1; //两个均直通,即计数器时钟为系统时钟
// Setup CMPCTLEPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;//CC_IMMEDIATE;//CC_SHADOW; // Load registers every ZEROEPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;//CC_IMMEDIATE;//CC_SHADOW;EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
// Setup CMPEPwm1Regs.CMPA.half.CMPA =750;
// Set actions// Set PWM1A ///EPwm1Regs.AQCTLA.bit.CAU=AQ_SET; //计数器(增加时)=比较器A时,输出highEPwm1Regs.AQCTLA.bit.ZRO=AQ_CLEAR; //计数器(递减时)=比较器B时,输出low
//set DeadbandEPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; //启用死区发生器,EPwmxa和EPwmxb均使用EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; //A:刚得到的波形反向 B刚得到的波形 所以保证了phaseAB_A就是对角桥臂的移相角 这样比较直观EPwm1Regs.DBCTL.bit.IN_MODE = DBA_ALL;//D BA_ALL 这种模式实际上只需要epwmxa作为输入,即可产生带死区的两路xa,xb输出了EPwm1Regs.DBRED = EPWM_MIN_DB; //上升沿延时EPwm1Regs.DBFED = EPWM_MIN_DB; //下降沿延时
}
void SetupEPwmAB_A3A4(void) //byJJ 上下桥臂50% 完全互补{//setup TimeBase(TB)EPwm2Regs.TBPRD = 1500; //Tpwm=TBPRD*Ttbclk Set PWM period 10us 100kHzEPwm2Regs.TBPHS.half.TBPHS = 1; // Phase is 0EPwm2Regs.TBCTR = 0x0000; // Clear counter
// Setup TBCTLEPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // updown count modeEPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE; // 不使用移相方式EPwm2Regs.TBCTL.bit.PRDLD = TB_SHADOW; //变化TBPRD时,使用shadow寄存器(即当计数器为0时才更新)EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // 同步信号与epwm1一致EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to SYSCLKOUTEPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1; //两个均直通,即计数器时钟为系统时钟
// Setup CMPCTLEPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;//CC_IMMEDIATE;//CC_SHADOW; // Load registers every ZEROEPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;//CC_IMMEDIATE;//CC_SHADOW;EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
EPwm2Regs.CMPA.half.CMPA=750;
EPwm2Regs.AQCTLA.bit.CAU=AQ_CLEAR; //计数器(增加时)=比较器A时,输出lowEPwm2Regs.AQCTLA.bit.ZRO=AQ_SET; //计数器(递减时)=比较器B时,输出high
//set Deadband// Active High Com plementary PWMs – Setup Deadband 使用了死区模块,这里设置为输入只用了EPwmxA,因此输出一定是互补的了EPwm2Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; //启用死区发生器,EPwmxa和EPwmxb均使用EPwm2Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; //A:刚得到的波形反向 B刚得到的波形 所以保证了phaseAB_A就是对角桥臂的移相角 这样比较直观EPwm2Regs.DBCTL.bit.IN_MODE = DBA_ALL;//D BA_ALL 这种模式实际上只需要epwmxa作为输入,即可产生带死区的两路xa,xb输出了EPwm2Regs.DBRED = EPWM_MIN_DB; //上升沿延时EPwm2Regs.DBFED = EPWM_MIN_DB; //下降沿延时}
我的问题是这样的:
EPWM已经全部用作PWM的发生单元,还有两路PWM打算使用ECAP的APWM功能。
这两部分PWM频率是一样的,现在想问下他们之间的相位是怎样的?
我知道EPWM内部是可以调节之间的相位关系,APWM内也可以 调节互相的相位关系,但是EPWM和APWM可以调节相位关系吗?
或者我不做设置时,EPWM和APWM是自动同相的吗?
期待高手解疑,在线等。
非常感谢!
JING JI:
回复 囧:
您好 这句话我有点不知道怎么设置 PWM1的同步信号输出设置为0点,其他都设置为SYNCIN
是用寄存器SYNCOSEL吗?将PWM1设置成0 那其余的怎么设置呢 哪个寄存器是SYNCIN的呢?谢谢
我的问题是这样的:
EPWM已经全部用作PWM的发生单元,还有两路PWM打算使用ECAP的APWM功能。
这两部分PWM频率是一样的,现在想问下他们之间的相位是怎样的?
我知道EPWM内部是可以调节之间的相位关系,APWM内也可以 调节互相的相位关系,但是EPWM和APWM可以调节相位关系吗?
或者我不做设置时,EPWM和APWM是自动同相的吗?
期待高手解疑,在线等。
非常感谢!
囧:
回复 JING JI:
//setup TimeBase(TB)EPwm1Regs.TBPRD = 1500; //Tpwm=TBPRD*Ttbclk Set PWM period 10us 100kHzEPwm1Regs.TBPHS.half.TBPHS = 1; // Phase is 0EPwm1Regs.TBCTR = 0x0000; // Clear counter
// Setup TBCTLEPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // updown count modeEPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // 不使用移相方式EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW; //变化TBPRD时,使用shadow寄存器(即当计数器为0时才更新)EPwm1Regs.TBCTL.bit.SYNCOSEL = 1 // 计数到0时输出同步清零信号EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to SYSCLKOUT150MHzEPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1; //两个均直通,即计数器时钟为系统时钟
// Setup CMPCTLEPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;//CC_IMMEDIATE;//CC_SHADOW; // Load registers every ZEROEPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;//CC_IMMEDIATE;//CC_SHADOW;EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
// Setup CMPEPwm1Regs.CMPA.half.CMPA =750;
// Set actions// Set PWM1A ///EPwm1Regs.AQCTLA.bit.CAU=AQ_SET; //计数器(增加时)=比较器A时,输出highEPwm1Regs.AQCTLA.bit.ZRO=AQ_CLEAR; //计数器(递减时)=比较器B时,输出low
//set DeadbandEPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; //启用死区发生器,EPwmxa和EPwmxb均使用EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; //A:刚得到的波形反向 B刚得到的波形 所以保证了phaseAB_A就是对角桥臂的移相角 这样比较直观EPwm1Regs.DBCTL.bit.IN_MODE = DBA_ALL;//D BA_ALL 这种模式实际上只需要epwmxa作为输入,即可产生带死区的两路xa,xb输出了EPwm1Regs.DBRED = EPWM_MIN_DB; //上升沿延时EPwm1Regs.DBFED = EPWM_MIN_DB; //下降沿延时
}
void SetupEPwmAB_A3A4(void) //byJJ 上下桥臂50% 完全互补{//setup TimeBase(TB)EPwm2Regs.TBPRD = 1500; //Tpwm=TBPRD*Ttbclk Set PWM period 10us 100kHzEPwm2Regs.TBPHS.half.TBPHS = 1; // Phase is 0EPwm2Regs.TBCTR = 0x0000; // Clear counter
// Setup TBCTLEPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // updown count modeEPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE; // 不使用移相方式EPwm2Regs.TBCTL.bit.PRDLD = TB_SHADOW; //变化TBPRD时,使用shadow寄存器(即当计数器为0时才更新)EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // 同步信号与epwm1一致EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to SYSCLKOUTEPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1; //两个均直通,即计数器时钟为系统时钟
// Setup CMPCTLEPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;//CC_IMMEDIATE;//CC_SHADOW; // Load registers every ZEROEPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;//CC_IMMEDIATE;//CC_SHADOW;EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
EPwm2Regs.CMPA.half.CMPA=750;
EPwm2Regs.AQCTLA.bit.CAU=AQ_CLEAR; //计数器(增加时)=比较器A时,输出lowEPwm2Regs.AQCTLA.bit.ZRO=AQ_SET; //计数器(递减时)=比较器B时,输出high
//set Deadband// Active High Com plementary PWMs – Setup Deadband 使用了死区模块,这里设置为输入只用了EPwmxA,因此输出一定是互补的了EPwm2Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; //启用死区发生器,EPwmxa和EPwmxb均使用EPwm2Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; //A:刚得到的波形反向 B刚得到的波形 所以保证了phaseAB_A就是对角桥臂的移相角 这样比较直观EPwm2Regs.DBCTL.bit.IN_MODE = DBA_ALL;//D BA_ALL 这种模式实际上只需要epwmxa作为输入,即可产生带死区的两路xa,xb输出了EPwm2Regs.DBRED = EPWM_MIN_DB; //上升沿延时EPwm2Regs.DBFED = EPWM_MIN_DB; //下降沿延时
PWM1和PWM2红色的地方注意。其他PWM和PWM2一样
我的问题是这样的:
EPWM已经全部用作PWM的发生单元,还有两路PWM打算使用ECAP的APWM功能。
这两部分PWM频率是一样的,现在想问下他们之间的相位是怎样的?
我知道EPWM内部是可以调节之间的相位关系,APWM内也可以 调节互相的相位关系,但是EPWM和APWM可以调节相位关系吗?
或者我不做设置时,EPWM和APWM是自动同相的吗?
期待高手解疑,在线等。
非常感谢!
囧:
回复 JING JI:
ECap1Regs.CAP1 = 0x5DC; // Set Period value按照150M计算的ECap1Regs.CTRPHS=0x1; //相位控制寄存器ECap1Regs.ECCTL2.bit.CAP_APWM = 1; // Enable APWM modeECap1Regs.ECCTL2.bit.APWMPOL=0;//1:输出为低电平有效 0:高电平ECap1Regs.ECCTL2.bit.SYNCI_EN=1;//同步信号选择ECap1Regs.CAP2 = 0x2EE; // Set Compare value50%处ECap1Regs.ECCLR.all = 0x0FF; // Clear pending interruptsECap1Regs.ECEINT.bit.CTR_EQ_CMP = 1; // enable Compare Equal Int
ECap3Regs.CAP1 = 0x5DC; // Set Period value按照150M计算的ECap3Regs.CTRPHS=0x1; //相位控制寄存器ECap3Regs.ECCTL2.bit.CAP_APWM = 1; // Enable APWM modeECap3Regs.ECCTL2.bit.APWMPOL=0;//1:输出为低电平有效 0:高电平ECap3Regs.ECCTL2.bit.SYNCI_EN=1;//同步信号选择ECap3Regs.CAP2 = 0x2EE; // Set Compare value50%处ECap3Regs.ECCLR.all = 0x0FF; // Clear pending interruptsECap3Regs.ECEINT.bit.CTR_EQ_CMP = 1; // enable Compare Equal Int
ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1;ECap3Regs.ECCTL2.bit.TSCTRSTOP = 1;
}
ECAP注意红色的地方设置时对的就没问题