dsp吧 关注:10,425贴子:16,892
  • 3回复贴,共1

关于2812控制两路PWM波的程序

只看楼主收藏回复

LZ最近做实验,
需要到产生2对PWM波形,
没对对称,
第二对滞后第一对90°相位角。
然后,
卤煮照着例程,
把ev和gpio模块改好了,
无奈延时不会设置。。。
求大佬指点
可有偿。。。


1楼2017-03-06 15:27回复
    void InitEv(void)
    {
    //EVA模块
    EvaRegs.T1CON.bit.TMODE=2; //连续增模式
    EvaRegs.T1CON.bit.TPS=0; //T1CLK=HSPCLK=75M
    EvaRegs.T1CON.bit.TENABLE=0; //暂时禁止T1计数
    EvaRegs.T1CON.bit.TCLKS10=0; //使用内部时钟,T1CLK
    EvaRegs.T1CON.bit.TECMPR=1; //使能定时器比较操作
    EvaRegs.T2CON.bit.TMODE=2; //连续增模式
    EvaRegs.T2CON.bit.TPS=0; //T2CLK=HSPCLK=75M
    EvaRegs.T2CON.bit.TENABLE=0; //暂时禁止T2计数
    EvaRegs.T2CON.bit.TCLKS10=0; //使用内部时钟,T2CLK
    EvaRegs.T2CON.bit.TECMPR=1; //使能定时器比较操作
    EvaRegs.GPTCONA.bit.TCOMPOE=1; //定时器比较输出T1PWM_T1CMPR和T2PWM_T2CMPR由各自的定时器比较逻辑驱动
    EvaRegs.GPTCONA.bit.T1PIN=2; //低电平有效
    EvaRegs.GPTCONA.bit.T2PIN=2; //低电平有效
    EvaRegs.T1PR=750; //95KHz的PWM,周期为10.526us,750
    EvaRegs.T1CMPR=375; //占空比为50%,高电平有效375
    EvaRegs.T1CNT=0;
    EvaRegs.T2PR=0x02EE; //100KHz的PWM,周期为10us,749
    EvaRegs.T2CMPR=0x0177; //占空比为50%,高电平有效375
    EvaRegs.T2CNT=0;
    EvaRegs.COMCONA.bit.CENABLE=1; //使能比较单元的比较操作
    EvaRegs.COMCONA.bit.FCOMPOE=1; //全比较输出,PWM1-6引脚均由相应的比较逻辑驱动
    EvaRegs.COMCONA.bit.CLD=2; //定时器比较寄存器重载条件:立即
    //死区时间为: DBT/Tdb=370ns
    EvaRegs.DBTCONA.bit.DBT=7; //死区定时器周期,4位最大值为15
    EvaRegs.DBTCONA.bit.EDBT1=1; //死区定时器1使能位
    EvaRegs.DBTCONA.bit.EDBT2=1; //死区定时器2使能位
    EvaRegs.DBTCONA.bit.EDBT3=1; //死区定时器3使能位
    EvaRegs.DBTCONA.bit.DBTPS=2, //死区定时器预定标因子 Tdb=75M/4=18.75M
    EvaRegs.ACTR.all=0x0999; //设定引脚PWM1-PWM6的动作属性
    EvaRegs.CMPR1=375; //PWM1占空比为50% , 375
    EvaRegs.CMPR2=375; //PWM3占空比为50% , 375
    EvaRegs.CMPR3=375; //PWM5占空比为50% , 375
    //EVB模块
    EvbRegs.T3CON.bit.TMODE=2; //连续增模式
    EvbRegs.T3CON.bit.TPS=0; //T3CLK=HSPCLK=75M
    EvbRegs.T3CON.bit.TENABLE=0; //暂时禁止T3计数
    EvbRegs.T3CON.bit.TCLKS10=0; //使用内部时钟,T3CLK
    EvbRegs.T3CON.bit.TECMPR=1; //使能定时器比较操作
    EvbRegs.T4CON.bit.TMODE=2; //连续增模式
    EvbRegs.T4CON.bit.TPS=0; //T4CLK=HSPCLK=75M
    EvbRegs.T4CON.bit.TENABLE=0; //暂时禁止T4计数
    EvbRegs.T4CON.bit.TCLKS10=0; //使用内部时钟,T4CLK
    EvbRegs.T4CON.bit.TECMPR=1; //使能定时器比较操作
    EvbRegs.GPTCONB.bit.TCOMPOE=1; //定时器比较输出T3PWM_T3CMPR和T4PWM_T4CMPR由各自的定时器比较逻辑驱动
    EvbRegs.GPTCONB.bit.T3PIN=2; //高电平有效
    EvbRegs.GPTCONB.bit.T4PIN=2; //高电平有效
    EvbRegs.T3PR=0x02EE; //100KHz的PWM,周期为10us,749
    EvbRegs.T3CMPR=0x0177; //占空比为50%,高电平有效375
    EvbRegs.T3CNT=0;
    EvbRegs.T4PR=0x02EE; //100KHz的PWM,周期为10us,749
    EvbRegs.T4CMPR=0x0177; //占空比为50%,高电平有效375
    EvbRegs.T4CNT=0;
    EvbRegs.COMCONB.bit.CENABLE=1; //使能比较单元的比较操作
    EvbRegs.COMCONB.bit.FCOMPOE=1; //全比较输出,PWM7-12引脚均由相应的比较逻辑驱动
    EvbRegs.COMCONB.bit.CLD=2; //定时器比较寄存器重载条件:立即
    //死区时间为:0.2us
    EvbRegs.DBTCONB.bit.DBT=10; //死区定时器周期,m=10
    EvbRegs.DBTCONB.bit.EDBT1=1; //死区定时器1使能位
    EvbRegs.DBTCONB.bit.EDBT2=1; //死区定时器2使能位
    EvbRegs.DBTCONB.bit.EDBT3=1; //死区定时器3使能位
    EvbRegs.DBTCONB.bit.DBTPS=1, //死区定时器预定标因子 Tdb=75M/2=37.5M
    EvbRegs.ACTRB.all=0x0999; //设定引脚PWM7-PWM12的动作属性
    EvbRegs.CMPR4=0x0177; //PWM7占空比为50% , 375
    EvbRegs.CMPR5=0x0177; //PWM9占空比为50% , 375
    EvbRegs.CMPR6=0x0177; //PWM11占空比为50% , 375


    2楼2017-03-06 15:28
    回复
      2025-07-19 21:01:08
      广告
      ev模块如二楼
      师兄叫我在ev里加延时。。。
      具体怎么做也没讲


      3楼2017-03-06 15:29
      收起回复