EV:ePWM+eCAP


具体移步:http://bbs.21ic.com/icview-767440-1-1.html


这里写图片描述

这里写图片描述

这里写图片描述

一.ePWM模块

void ePWM2_config()
{
    EALLOW;
    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=0;
    EDIS;

    /*-------------------------------------------------
     STEP1:设置TB,为输出PWM产生始终基准TBCLK,配置PWM的时钟基准计数器TBCTR,
     设置计数器的计数模式,配置硬件或软件同步时钟基准计数器,确定ePWM同步信号输出源;
     -------------------------------------------------*/
    EPwm2Regs.TBPRD=6000;
    EPwm2Regs.TBCTR=0;
    EPwm2Regs.TBCTL.bit.CTRMODE=TB_COUNT_UPDOWN;

    EPwm2Regs.TBPHS.half.TBPHS=0;
    EPwm2Regs.TBCTL.bit.PHSEN=TB_DISABLE;
    /*----------------------------------------------
    注1:相位寄存器TBPHS和TBCTL.bit.PHSEN+PHSDIR连用,表示在同步输入信号SWFSYNC有效时,
    在下一个时钟沿,TBCTR自动装入TBPHS的内容,并按照PHSDIR计数方式继续。
    -----------------------------------------------*/

    EPwm2Regs.TBCTL.bit.HSPCLKDIV=TB_DIV4;
    EPwm2Regs.TBCTL.bit.CLKDIV=TB_DIV4;
    //以上两个共同决定TBCLK频率

    /*-------------------------------------------------
    STEP2:设置CC和AQ,确定PWM占空比,以及ePWM输出高低电平切换时间;
         确定计数器和比较寄存器匹配时产生动作,即ePWM 高低电平的切换;
     -------------------------------------------------*/
    EPwm2Regs.CMPA.half.CMPA=3000;

    EPwm2Regs.AQCTLA.bit.CAU=AQ_SET;
    EPwm2Regs.AQCTLA.bit.CAD=AQ_CLEAR;
    EPwm2Regs.AQCTLB.bit.CAU=AQ_CLEAR;
    EPwm2Regs.AQCTLB.bit.CAD=AQ_SET;
    /*------------------------------------------------
    注2:CAU和CAD用于规定增计数和减计数过程中TBCTR=CMPA时输出的动作.
    CBU和CBD用于规定增计数和减计数过程中TBCTR=CMPB时输出的动作.
    AQCTLA和AQCTLB用于规定事件发生时ePWMxA和ePWMxB的动作.

    这里面两路都和CMPA相比较,因而可输出两路互补的波形.
    当然,在非互补时,CMPA和CMPB不同,因而有一定的时间延迟(可转换成角度).
     -------------------------------------------------*/

    /*-------------------------------------------------
    STEP3:设置DB,为了使互补信号电平转换(边沿)时刻,上下两个器件不能同时导通,
    必须保证二者的开启时间不能重叠,因此要插入波形上升沿或下降沿延时时间
    -------------------------------------------------*/

    EPwm2Regs.DBCTL.bit.OUT_MODE=DB_FULL_ENABLE;    //死区使能
    EPwm2Regs.DBCTL.bit.POLSEL=DB_ACTV_HIC;         //极性选择,两路延时后输出均不反向
    EPwm2Regs.DBRED=20;
    EPwm2Regs.DBFED=20;                             //死区时间

    /*-------------------------------------------------
    STEP4:设置 EZ,使能ePWM中断,使能ePWM触发ADC采样,
    以及确定事件产生触发的速度和清除相关事件标志位。
    -------------------------------------------------*/

    EPwm2Regs.ETSEL.bit.INTSEL=ET_CTR_ZERO;
    EPwm2Regs.ETSEL.bit.INTEN=1;                    //INTEN+INTSEL(ePWM_INT)类型,本次为下溢中断
    EPwm2Regs.ETPS.bit.INTPRD=ET_3RD;               //ETPS选择触发或中断周期,本次为每3个事件触发一次中断

    // 注3:进入中断后别忘了 EPwm2Regs.ETCLR.bit.INT=1清除中断

    EALLOW;
    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=1;
    EDIS;
}

二.eCAP模块
可用于检测脉冲周期和占空比,本次为检测捕获输入引脚上发生的电平跳变。
注:引脚设置和中断设置,略

void eCap1——config(void)
{
  ECap1Regs.ECCTL1.bit.CAP1POL = EC_RISING;
  ECap1Regs.ECCTL1.bit.CAP2POL = EC_RISING;
  ECap1Regs.ECCTL1.bit.CAP3POL = EC_RISING;
  ECap1Regs.ECCTL1.bit.CAP4POL = EC_RISING;
  ECap1Regs.ECCTL1.bit.CTRRST1 = EC_ABS_MODE;
  ECap1Regs.ECCTL1.bit.CTRRST2 = EC_ABS_MODE;
  ECap1Regs.ECCTL1.bit.CTRRST3 = EC_ABS_MODE;
  ECap1Regs.ECCTL1.bit.CTRRST4 = EC_ABS_MODE;
  ECap1Regs.ECCTL1.bit.CAPLDEN = EC_ENABLE;
  ECap1Regs.ECCTL1.bit.PRESCALE = EC_DIV1;
  ECap1Regs.ECCTL2.bit.CAP_APWM = EC_CAP_MODE;
  ECap1Regs.ECCTL2.bit.CONT_ONESHT = EC_CONTINUOUS;
  ECap1Regs.ECCTL2.bit.SYNCO_SEL = EC_SYNCO_DIS;
  ECap1Regs.ECCTL2.bit.SYNCI_EN = EC_DISABLE;
  ECap1Regs.ECEINT.all=0x0000;//stop all interrupt
  ECap1Regs.ECCLR.all=0xFFFF;//clare all flag
  ECap1Regs.ECCTL2.bit.TSCTRSTOP = EC_RUN;// 启动
  ECap1Regs.ECEINT.bit.CEVT4=1;// Enable cevt4 interrupt
}


void eCap2——config(void)
{
  ECap2Regs.ECCTL1.bit.CAP1POL = EC_FALLING;
  ECap2Regs.ECCTL1.bit.CAP2POL = EC_FALLING;
  ECap2Regs.ECCTL1.bit.CAP3POL = EC_FALLING;
  ECap2Regs.ECCTL1.bit.CAP4POL = EC_FALLING;
  ECap2Regs.ECCTL1.bit.CTRRST1 = EC_ABS_MODE;
  ECap2Regs.ECCTL1.bit.CTRRST2 = EC_ABS_MODE;
  ECap2Regs.ECCTL1.bit.CTRRST3 = EC_ABS_MODE;
  ECap2Regs.ECCTL1.bit.CTRRST4 = EC_ABS_MODE;
  ECap2Regs.ECCTL1.bit.CAPLDEN = EC_ENABLE;
  ECap2Regs.ECCTL1.bit.PRESCALE = EC_DIV1;
  ECap2Regs.ECCTL2.bit.CAP_APWM = EC_CAP_MODE;
  ECap2Regs.ECCTL2.bit.CONT_ONESHT = EC_CONTINUOUS;
  ECap2Regs.ECCTL2.bit.SYNCO_SEL = EC_SYNCO_DIS;
  ECap2Regs.ECCTL2.bit.SYNCI_EN = EC_DISABLE;
  ECap2Regs.ECEINT.all=0x0000;//stop all interrupt
  ECap2Regs.ECCLR.all=0xFFFF;//clare all flag
  ECap2Regs.ECCTL2.bit.TSCTRSTOP = EC_RUN;// 启动
  ECap2Regs.ECEINT.bit.CEVT4=1;// Enable cevt4 interrupt
}

interrupt void ISRCap1(void)
{
   // Acknowledge this interrupt to receive more interrupts from group 1
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP4;
    ECap1Regs.ECCLR.all=0xFFFF;//clare all flag
    t1= ECap1Regs.CAP1;
    t2= ECap1Regs.CAP2;
    t3= ECap1Regs.CAP3;
    t4= ECap1Regs.CAP4;  
    T1=t2-t1;T2=t4-t3;

}
interrupt void ISRCap2(void)
{


   // Acknowledge this interrupt to receive more interrupts from group 1
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP4;
    ECap2Regs.ECCLR.all=0xFFFF;//clare all flag
    t5= ECap2Regs.CAP1;
    t6= ECap2Regs.CAP2;
    t7= ECap2Regs.CAP3;
    t8= ECap2Regs.CAP4;  
    T3=t6-t5;T4=t8-t7;

}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值