2808EPWM产生PWM配置方式

void InitEPwm1Example(){// Set timer period,PWM// Phase is 0// Clear counterEPwm1Regs.TBPRD = 500;的频率为 100KHZ=(6.25X1000000)/(2X6000) EPwm1Regs.TBPHS.half.TBPHS = 0x0000; EPwm1Regs.TBCTR = 0x0000;// Setup TBCLKEPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // 上下计数方式; Count up and down, 因为计数方式有三种,就是 up,down,up and down,EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Disable phase loadingEPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to SYSCLKOUTEPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;// 频 率 计 算 公 式 =SYSCLKOUT/TB_DIV4/TB_DIV4=100/1/1=100M , 从而计算出 PWM 的频率为 521HZ=(100X1000000)/(2X500)EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; // Load registers every ZEROEPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;// Setup compareEPwm1Regs.CMPA.half.CMPA = 300//这个值用于确定占空比 300/500// Set actionsEPwm1Regs.AQCTLA.bit.CAU = AQ_SET; 〃P43 当从 TBCTR->CMPA,上升(up) 也就是从0->3000,输出1,高电平, Set PWM1A on ZeroEPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;〃当从 TBCTR->CMPA,下降(down) 也就是从 6000->3000,输出为 0,低电平。
可以看出产生的波占空比为 60%EPwm1Regs.AQCTLB.bit.CAU = AQ_CLEAR; // Set PWM1A on ZeroEPwm1Regs.AQCTLB.bit.CAD = AQ_SET;〃这两句没有用,上面没有定义 CMPB, 下面也是只用了 EPWM1A,没有用EPWM1B// Active Low PWMs - Setup DeadbandEPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;〃 输出模式使能延迟设 置也就是 S1=1,S0=1;EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_LO;〃极性都反,S2=0,S3=0;EPwm1Regs.DBCTL.bit.lN_MODE = DBA_ALL;〃默认设置(S4=0,S5=0)把输入 信号EPWM1A in既通过上升延迟,也通过下降延迟,仅不过下面设置的上升下 降延迟时间都是 0EPwm1Regs.DBRED = EPWM1_MIN_DB;〃 死区上升沿延迟时间 Dead-Ba ndRising Edge Delay Count RegisterEPwm1Regs.DBFED = EPWM1_MIN_DB;// 死区下降沿延迟时间 Dead-Band Falling Edge Delay Count RegisterEPwm1_DB_Direction = DB_UP;// Interrupt where we will change the Deadband EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; EPwm1Regs.ETSEL.bit.INTEN = 1;EPwm1Regs.ETPS.bit.INTPRD = ET_3RD;// Select INT on Zero event// Enable INT// Generate INT on 3rdeventTBPRD 就来产生对应的周期,分别计算方法如下图冒For Up Count and Down CdutTrwli = i T B P R D i-〜:,e Tjbc l卜 Fpwli= (Tpwu)然后在把三角波变成方波。