DSP TMS320F2803x、TMS320F2806x ePWM开发笔记(代码基于TMS320F28069)

本文详细介绍了如何在德州仪器(TI)的TMS320F28069微控制器上使用ePWM模块配置相移全桥(ZVSFB)的PWM波形,其中epwm2的波形相对于epwm1相移90度,并且每三个PWM周期触发一次ADC采样。代码示例中展示了初始化ePWM模块、配置ePWM1和ePWM2的具体步骤,包括时基、计数器比较、动作限定、死区产生和事件触发等模块的设置。
摘要由CSDN通过智能技术生成

详解DSP F28069的ePWM模块,及代码讲解(适用于2802x、2803x、2805x、2806x 型号)

熟悉ePWM模块

请到此文章了解ePWM模块详情

代码讲解

  • 使用ePWM模块产生相移全桥(ZVSFB)的PWM波形,epwm2的波形在epwm1基础上相移了90°。并且各三个PWM周期触发一次ADC采样。
  • 硬件电路如下:
    硬件电路
  • 波形图如下:
    波形图
  • ePWM.h 头文件
    由于此代码ADC的采样值用串口打印出来,所以PWM的频率设置为10HZ,比较低。这样方便观察现象。PWM频率可以根据实际情况修改。
/*
 * ePWM.h
 *
 *  Created on: 2023年2月28日
 *      Author: chends
 */

#ifndef EPWM_H_
#define EPWM_H_

#include "DSP28x_Project.h"

void ePWM_init(void);
void ZVSFB_ePWM1Config(void);
void ZVSFB_ePWM2Config(void);


#endif /* EPWM_H_ */
  • ePWM.c C文件
/*
 * ePWM.c
 *
 *  Created on: 2023年2月28日
 *      Author: chends
 */

#include "ePWM.h"



/*
 * 初始化化ePWM模块
 *  使能时钟,时基时钟同步,配置GPIO脚等
 */
void ePWM_init(void)
{
    EALLOW;

    //gpio口配置:禁用所选输出引脚的内部上拉降低功耗;设置为ePWM输出引脚
    GpioCtrlRegs.GPAPUD.bit.GPIO0 = 1;    // Disable pull-up on GPIO0 (EPWM1A)
    GpioCtrlRegs.GPAPUD.bit.GPIO1 = 1;    // Disable pull-up on GPIO1 (EPWM1B)
    GpioCtrlRegs.GPAPUD.bit.GPIO2 = 1;    // Disable pull-up on GPIO2 (EPWM2A)
    GpioCtrlRegs.GPAPUD.bit.GPIO3 = 1;    // Disable pull-up on GPIO3 (EPWM2B)

    GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;   // Configure GPIO0 as EPWM1A
    GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1;   // Configure GPIO1 as EPWM1B
    GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 1;   // Configure GPIO2 as EPWM2A
    GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 1;   // Configure GPIO3 as EPWM2B



    SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK=1;   //使能ePWM1的时钟
    SysCtrlRegs.PCLKCR1.bit.EPWM2ENCLK=1;   //使能ePWM2的时钟

    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=0;    //停止ePWM模块的TB时钟;

    ZVSFB_ePWM1Config();//配置预定标的值和ePWM1模块;
    ZVSFB_ePWM2Config();//配置预定标的值和ePWM2模块;

    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=1;    //打开ePWM模块的TB时钟;
    EDIS;

}


/*
 * 配置预定标的值和ePWM1模块
 */
void ZVSFB_ePWM1Config(void)
{
    /************************<<EPWM1配置 start>>***************************/
    /***********************时基模块配置*********************************/
    //TBCLK = SYSCLKOUT / (HSPCLKDIV × CLKDIV)=90MHz/(128 * 14)=50.233KHz
    EPwm1Regs.TBCTL.bit.CLKDIV=7;       //分频值128
    EPwm1Regs.TBCTL.bit.HSPCLKDIV=7;    //分频值14
    EPwm1Regs.TBPRD=5000;             //周期值  输出频率为f=TBCLK/TBPRD=50.233KHz/5000=10Hz

    EPwm1Regs.TBCTL.bit.PHSDIR=1;       //相位方向位。0-在同步事件之后向下计数;1-在同步事件之后向上计数

    //EPwm1Regs.TBCTL.bit.SWFSYNC=1;    //软件强制同步脉冲,置1时,生成一次同步脉冲

    //同步输出选择。这些位选择EPWMxSYNCO信号的源。
    //0- EPWMxSYNC; 1- CTR=0,时间基准计数器等于零;2- CTR=CMPB;3- 关闭EPWMxSYNCO信号。
    EPwm1Regs.TBCTL.bit.SYNCOSEL=1;     //CTR=0时产生输出同步信号

    EPwm1Regs.TBCTL.bit.PRDLD=0;        //0-使用影子寄存器模式;1-立即加载TBPRD寄存器,而不使用影子寄存器。
    EPwm1Regs.TBCTL.bit.PHSEN=0;        //0-不使用同步信号

    //计数器模式位
    //0-向上计数模式;1-向下计数模式;2-向上向下计数模式;3-停止-冻结计数器操作(默认为复位)
    EPwm1Regs.TBCTL.bit.CTRMODE=0;

    EPwm1Regs.TBPHS.half.TBPHS=0;       //设置相位寄存器为0
    EPwm1Regs.TBCTR=0;                  //清除计数值


    /****************************计数器比较模块(CC)配置*****************************/
    EPwm1Regs.CMPCTL.bit.SHDWAMODE=0;   //0-影子模式;1-立即加载模式
    EPwm1Regs.CMPCTL.bit.SHDWBMODE=0;   //0-影子模式;1-立即加载模式

    //从影子寄存器加载到活动寄存器模式选择
    //0- CTR=0时加载;1- CTR=PRD时加载;2- CTR=0或PRD时,加载;3- 不加载(冻结)。
    EPwm1Regs.CMPCTL.bit.LOADAMODE = 0;
    EPwm1Regs.CMPCTL.bit.LOADBMODE = 0;

    EPwm1Regs.CMPA.half.CMPA=2500;
    EPwm1Regs.CMPB =1250;


    /****************************动作限定模块(AQ)配置***************************/
    //当计数器等于活动的CMPA寄存器并且计数器在递增时进行操作。
    //0-无动作;1-强制EPWMxA输出低;2-强制EPWMxA输出高;3-翻转EPWMxA输出
    EPwm1Regs.AQCTLA.bit.CAU=1;

    //计数器等于零时的动作
    //0-无动作;1-强制EPWMxA输出低;2-强制EPWMxA输出高;3-翻转EPWMxA输出
    EPwm1Regs.AQCTLA.bit.ZRO=2;


    /*************************死区产生模块(DB)配置*****************************/
    EPwm1Regs.DBCTL.bit.HALFCYCLE=0;//半周期时钟使能位。0-启用全周期时钟;1-启用半周期时钟

    /*死区输入模式控制(bit5 bit4)
    *00- EPWMxA In(来自动作限定模块)是下降边缘和上升边缘延迟的来源
    *01- EPWMxB输入上升沿延时器,EPWMxA输入下降沿延时器
    *10- EPWMxA输入上升沿延时器,EPWMxB输入下降沿延时器
    *11- EPWMxB In(来自动作限定模块)是下降边缘和上升边缘延迟的来源
    */EPwm1Regs.DBCTL.bit.IN_MODE=0;

    /* 上升沿延时器输出(EPWMxA)和下降沿输出(EPWMxB)的信号极性选择控制(bit3 bit2)
    * 00- EPWMxA和EPWMxB都不反向,AH模式
    * 01- EPWMxA反向,EPWMxB不反向。ALC模式
    * 10- EPWMxB反向,EPWMxA不反向。AHC模式
    * 11- EPWMxA和EPWMxB都反向,AL模式
    */EPwm1Regs.DBCTL.bit.POLSEL=2;

    /*死区输出模式控制(bit1 bit0)
    * 00-两个输出信号都绕过了死带生成器。在这种模式下,动作限定器的EPWMxA和EPWMxB输出信号都直接传递给PWM斩波模块。在这种模式下,POLSEL和IN_MODE位不起作用。
    * 01-禁用上升边缘延迟器。动作限定器符的EPWMxA信号直接传递给PWM斩波子模块的EPWMxA输入。下降沿延时器的信号经过极性选择后传递给PWM斩波子模块的EPWMxB输入
    * 10-禁用下降边缘延迟器。动作限定器符的EPWMxB信号直接传递给PWM斩波子模块的EPWMxB输入。上升沿延时器的信号经过极性选择后传递给PWM斩波子模块的EPWMxA输入
    * 11-上升沿延时器的信号经过极性选择后传递给PWM斩波子模块的EPWMxA输入,下降沿延时器的信号经过极性选择后传递给PWM斩波子模块的EPWMxB输入。
    */EPwm1Regs.DBCTL.bit.OUT_MODE=11;

    //上升沿延迟计数。10位计数器。(全周期模式)RED=DBRED*T(TBCLK);(半周期模式)RED=DBRED*T(TBCLK)/2
    EPwm1Regs.DBRED=292;
    //下降边缘延迟计数。10位计数器 (全周期模式)FED=DBFED*T(TBCLK);(半周期模式)FED=DBFED*T(TBCLK)/2
    EPwm1Regs.DBFED=208;


    /************************* PWM 斩波(PC)模块配置*****************************/
    EPwm1Regs.PCCTL.bit.CHPEN=0;//0-禁用PWM斩波模块;1-启用PWM斩波模块


    /************************* 错误联防(TZ)模块配置*****************************/
    EPwm1Regs.TZSEL.all=0;  //禁用所有的TZ模块的CBC和OSHT触发源
    EPwm1Regs.TZDCSEL.all=0;    //禁用所有的数字比较输出事件

    /*数字比较输出A事件1对EPWMxA的动作:
     * 0- EPWMxA=高阻抗状态
     * 1- 强制EPWMxA进入高电平。
     * 2- 强制EPWMxA进入低电平。
     * 3- 不动作,禁用
     */EPwm1Regs.TZCTL.bit.DCAEVT1=3;
     EPwm1Regs.TZCTL.bit.DCAEVT2=3;//同上解释
     EPwm1Regs.TZCTL.bit.DCBEVT1=3;
     EPwm1Regs.TZCTL.bit.DCBEVT2=3;
     EPwm1Regs.TZCTL.bit.TZA=3;
     EPwm1Regs.TZCTL.bit.TZB=3;

     EPwm1Regs.TZEINT.bit.CBC=0;    //禁用CBC事件中断
     EPwm1Regs.TZEINT.bit.DCAEVT1=0;//禁用DCAEVT1中断
     EPwm1Regs.TZEINT.bit.DCAEVT2=0;//禁用DCAEVT2中断
     EPwm1Regs.TZEINT.bit.DCBEVT1=0;//禁用DCBEVT1中断
     EPwm1Regs.TZEINT.bit.DCBEVT2=0;//禁用DCBEVT2中断
     EPwm1Regs.TZEINT.bit.OST=0;//禁用OST中断

     //清除TZFLG的所有标志位
     EPwm1Regs.TZCLR.all=0X7F;
     //1-对TZFRC相应位写入1强制相应事件触发条件并设置TZFLG相应位 。0-不使用。
     EPwm1Regs.TZFRC.all=0;



     /************************* 事件触发(ET)模块配置*****************************/
     EPwm1Regs.ETSEL.bit.SOCBEN=0;//0-禁止产生EPWMxSOCB脉冲去触发ADC转换
     EPwm1Regs.ETSEL.bit.SOCBSEL=0;//由于SOCB禁用,此处无用

     EPwm1Regs.ETSEL.bit.SOCAEN=1;//1-允许产生EPWMxSOCA脉冲去触发ADC转换

     /*EPWMxSOCA脉冲产生的选择选项
      * 0-允许DCAEVT1.soc事件触发产生
      * 1-允许TBCTR=0时触发产生
      * 2-允许TBCTR=TBPRD时触发产生
      * 3-允许TBCTR=0或TBCTR=TBPRD时触发产生
      * 4-允许向上计数模式下TBCTR=CMPA时触发产生
      * 5-允许向下计数模式下TBCTR=CMPA时触发产生
      * 6-允许向上计数模式下TBCTR=CMPB时触发产生
      * 7-允许向下计数模式下TBCTR=CMPB时触发产生
      */EPwm1Regs.ETSEL.bit.SOCASEL=6;

      EPwm1Regs.ETSEL.bit.INTEN=0;//0-禁止EPWMx_INT生成
      EPwm1Regs.ETSEL.bit.INTSEL=0;//由于EPWMx_INT禁用,此处无用

      EPwm1Regs.ETPS.bit.SOCBPRD=0;//关闭SOCB事件计数器。不会产生EPWMxSOCB脉冲

      /*ePWM ADC转换触发A事件(EPWMxSOCA)周期选择
       * 0-禁用SOCA事件计数器。不会产生EPWMxSOCA脉冲
       * 1-在第一个事件上生成EPWMxSOCA脉冲:ETPS[SOCACNT] =1
       * 2-在第二个事件上生成EPWMxSOCA脉冲:ETPS[SOCACNT] =2
       * 3-在第三个事件上生成EPWMxSOCA脉冲:ETPS[SOCACNT] =3
       */EPwm1Regs.ETPS.bit.SOCAPRD=3;

       EPwm1Regs.ETPS.bit.INTPRD=0;//禁用中断事件计数器。不会产生中断,ETFRC[INT]将被忽略。

       EPwm1Regs.ETCLR.bit.INT=1;//ePWM中断(EPWMx_INT)标志清除位:写1时清除ETFLG[INT]标志位,并允许生成进一步的中断脉冲(由于禁用中断,此处无用)
       EPwm1Regs.ETCLR.bit.SOCA=1;//ePWM ADC转换触发A(EPWMxSOCA)标志清除位:写1清除ETFLG[SOCA]标志位
       EPwm1Regs.ETCLR.bit.SOCB=1;//ePWM ADC转换触发B(EPWMxSOCB)标志清除位:写1清除ETFLG[SOCB]标志位(由于禁用SOCB,此处无用)

       EPwm1Regs.ETFRC.bit.SOCA=0;//EPWMxSOCA软件强制触发位:写1-在EPWMxSOCA上生成脉冲并设置SOCBFLG位。此位用于测试目的。(只有需要启用EPWMxSOCA脉冲时才有用,即ETSEL.SOCAEN=1)
       EPwm1Regs.ETFRC.bit.SOCB=0;//EPWMxSOCA软件强制触发位:写1-在EPWMxSOCB上生成脉冲并设置SOCBFLG位。此位用于测试目的。(只有需要启用EPWMxSOCB脉冲时才有用,即ETSEL.SOCBEN=1)
       EPwm1Regs.ETFRC.bit.INT=0;//EPWMxINT软件强制触发位:写1-在EPWMxINT上生成一个中断,并设置INT标志位。此位用于测试目的(只有需要启用EPWMx_INT脉冲时才有用,即ETSEL.INTEN=1)

       /************************* 数字比较(DC)模块配置*****************************/
       //暂无使用

       /************************<<EPWM1配置 end>>***************************/

}


/*
 * 配置预定标的值和ePWM2模块
 */
void ZVSFB_ePWM2Config(void)
{
    /************************<<EPWM2配置 start>>***************************/
    /***********************时基模块配置*********************************/
    //TBCLK = SYSCLKOUT / (HSPCLKDIV × CLKDIV)=90MHz/(128 * 14)=50.233KHz
    EPwm2Regs.TBCTL.bit.CLKDIV=7;       //分频值128
    EPwm2Regs.TBCTL.bit.HSPCLKDIV=7;    //分频值14
    EPwm2Regs.TBPRD=5000;             //周期值  输出频率为f=TBCLK/TBPRD=50.233KHz/5000=10Hz

    EPwm2Regs.TBCTL.bit.PHSDIR=1;       //相位方向位。0-在同步事件之后向下计数;1-在同步事件之后向上计数

    //EPwm1Regs.TBCTL.bit.SWFSYNC=1;    //软件强制同步脉冲,置1时,生成一次同步脉冲

    //同步输出选择。这些位选择EPWMxSYNCO信号的源。
    //0- EPWMxSYNC; 1- CTR=0,时间基准计数器等于零;2- CTR=CMPB;3- 关闭EPWMxSYNCO信号。
    EPwm2Regs.TBCTL.bit.SYNCOSEL=3;     //关闭EPWMxSYNCO信号

    EPwm2Regs.TBCTL.bit.PRDLD=0;        //0-使用影子寄存器模式;1-立即加载TBPRD寄存器,而不使用影子寄存器。
    EPwm2Regs.TBCTL.bit.PHSEN=1;        //1-使能同步信号输入,触发移相

    //计数器模式位
    //0-向上计数模式;1-向下计数模式;2-向上向下计数模式;3-停止-冻结计数器操作(默认为复位)
    EPwm2Regs.TBCTL.bit.CTRMODE=0;

    EPwm2Regs.TBPHS.half.TBPHS=5000-1250;       //设置相位寄存器为0
    EPwm2Regs.TBCTR=0;                  //清除计数值


    /****************************计数器比较模块(CC)配置*****************************/
    EPwm2Regs.CMPCTL.bit.SHDWAMODE=0;   //0-影子模式;1-立即加载模式
    EPwm2Regs.CMPCTL.bit.SHDWBMODE=0;   //0-影子模式;1-立即加载模式

    //从影子寄存器加载到活动寄存器模式选择
    //0- CTR=0时加载;1- CTR=PRD时加载;2- CTR=0或PRD时,加载;3- 不加载(冻结)。
    EPwm2Regs.CMPCTL.bit.LOADAMODE = 0;
    EPwm2Regs.CMPCTL.bit.LOADBMODE = 0;

    EPwm2Regs.CMPA.half.CMPA=2500;
    EPwm2Regs.CMPB =1250;


    /****************************动作限定模块(AQ)配置***************************/
    //当计数器等于活动的CMPA寄存器并且计数器在递增时进行操作。
    //0-无动作;1-强制EPWMxA输出低;2-强制EPWMxA输出高;3-翻转EPWMxA输出
    EPwm2Regs.AQCTLA.bit.CAU=1;

    //计数器等于零时的动作
    //0-无动作;1-强制EPWMxA输出低;2-强制EPWMxA输出高;3-翻转EPWMxA输出
    EPwm2Regs.AQCTLA.bit.ZRO=2;


    /*************************死区产生模块(DB)配置*****************************/
    EPwm2Regs.DBCTL.bit.HALFCYCLE=0;//半周期时钟使能位。0-启用全周期时钟;1-启用半周期时钟

    /*死区输入模式控制(bit5 bit4)
    *00- EPWMxA In(来自动作限定模块)是下降边缘和上升边缘延迟的来源
    *01- EPWMxB输入上升沿延时器,EPWMxA输入下降沿延时器
    *10- EPWMxA输入上升沿延时器,EPWMxB输入下降沿延时器
    *11- EPWMxB In(来自动作限定模块)是下降边缘和上升边缘延迟的来源
    */EPwm2Regs.DBCTL.bit.IN_MODE=0;

    /* 上升沿延时器输出(EPWMxA)和下降沿输出(EPWMxB)的信号极性选择控制(bit3 bit2)
    * 00- EPWMxA和EPWMxB都不反向,AH模式
    * 01- EPWMxA反向,EPWMxB不反向。ALC模式
    * 10- EPWMxB反向,EPWMxA不反向。AHC模式
    * 11- EPWMxA和EPWMxB都反向,AL模式
    */EPwm2Regs.DBCTL.bit.POLSEL=2;

    /*死区输出模式控制(bit1 bit0)
    * 00-两个输出信号都绕过了死带生成器。在这种模式下,动作限定器的EPWMxA和EPWMxB输出信号都直接传递给PWM斩波模块。在这种模式下,POLSEL和IN_MODE位不起作用。
    * 01-禁用上升边缘延迟器。动作限定器符的EPWMxA信号直接传递给PWM斩波子模块的EPWMxA输入。下降沿延时器的信号经过极性选择后传递给PWM斩波子模块的EPWMxB输入
    * 10-禁用下降边缘延迟器。动作限定器符的EPWMxB信号直接传递给PWM斩波子模块的EPWMxB输入。上升沿延时器的信号经过极性选择后传递给PWM斩波子模块的EPWMxA输入
    * 11-上升沿延时器的信号经过极性选择后传递给PWM斩波子模块的EPWMxA输入,下降沿延时器的信号经过极性选择后传递给PWM斩波子模块的EPWMxB输入。
    */EPwm2Regs.DBCTL.bit.OUT_MODE=11;

    //上升沿延迟计数。10位计数器。(全周期模式)RED=DBRED*T(TBCLK);(半周期模式)RED=DBRED*T(TBCLK)/2
    EPwm2Regs.DBRED=292;
    //下降边缘延迟计数。10位计数器 (全周期模式)FED=DBFED*T(TBCLK);(半周期模式)FED=DBFED*T(TBCLK)/2
    EPwm2Regs.DBFED=208;


    /************************* PWM 斩波(PC)模块配置*****************************/
    EPwm2Regs.PCCTL.bit.CHPEN=0;//0-禁用PWM斩波模块;1-启用PWM斩波模块


    /************************* 错误联防(TZ)模块配置*****************************/
    EPwm2Regs.TZSEL.all=0;  //禁用所有的TZ模块的CBC和OSHT触发源
    EPwm2Regs.TZDCSEL.all=0;    //禁用所有的数字比较输出事件

    /*数字比较输出A事件1对EPWMxA的动作:
     * 0- EPWMxA=高阻抗状态
     * 1- 强制EPWMxA进入高电平。
     * 2- 强制EPWMxA进入低电平。
     * 3- 不动作,禁用
     */EPwm2Regs.TZCTL.bit.DCAEVT1=3;
     EPwm2Regs.TZCTL.bit.DCAEVT2=3;//同上解释
     EPwm2Regs.TZCTL.bit.DCBEVT1=3;
     EPwm2Regs.TZCTL.bit.DCBEVT2=3;
     EPwm2Regs.TZCTL.bit.TZA=3;
     EPwm2Regs.TZCTL.bit.TZB=3;

     EPwm2Regs.TZEINT.bit.CBC=0;    //禁用CBC事件中断
     EPwm2Regs.TZEINT.bit.DCAEVT1=0;//禁用DCAEVT1中断
     EPwm2Regs.TZEINT.bit.DCAEVT2=0;//禁用DCAEVT2中断
     EPwm2Regs.TZEINT.bit.DCBEVT1=0;//禁用DCBEVT1中断
     EPwm2Regs.TZEINT.bit.DCBEVT2=0;//禁用DCBEVT2中断
     EPwm2Regs.TZEINT.bit.OST=0;//禁用OST中断

     //清除TZFLG的所有标志位
     EPwm2Regs.TZCLR.all=0X7F;
     //1-对TZFRC相应位写入1强制相应事件触发条件并设置TZFLG相应位 。0-不使用。
     EPwm2Regs.TZFRC.all=0;



     /************************* 事件触发(ET)模块配置*****************************/
     EPwm2Regs.ETSEL.bit.SOCBEN=0;//0-禁止产生EPWMxSOCB脉冲去触发ADC转换
     EPwm2Regs.ETSEL.bit.SOCBSEL=0;//由于SOCB禁用,此处无用

     EPwm2Regs.ETSEL.bit.SOCAEN=0;//0-禁止产生EPWMxSOCA脉冲去触发ADC转换;1-允许产生EPWMxSOCA脉冲去触发ADC转换

     /*EPWMxSOCA脉冲产生的选择选项
      * 0-允许DCAEVT1.soc事件触发产生
      * 1-允许TBCTR=0时触发产生
      * 2-允许TBCTR=TBPRD时触发产生
      * 3-允许TBCTR=0或TBCTR=TBPRD时触发产生
      * 4-允许向上计数模式下TBCTR=CMPA时触发产生
      * 5-允许向下计数模式下TBCTR=CMPA时触发产生
      * 6-允许向上计数模式下TBCTR=CMPB时触发产生
      * 7-允许向下计数模式下TBCTR=CMPB时触发产生
      */EPwm2Regs.ETSEL.bit.SOCASEL=6;

      EPwm2Regs.ETSEL.bit.INTEN=0;//0-禁止EPWMx_INT生成
      EPwm2Regs.ETSEL.bit.INTSEL=0;//由于EPWMx_INT禁用,此处无用

      EPwm2Regs.ETPS.bit.SOCBPRD=0;//关闭SOCB事件计数器。不会产生EPWMxSOCB脉冲

      /*ePWM ADC转换触发A事件(EPWMxSOCA)周期选择
       * 0-禁用SOCA事件计数器。不会产生EPWMxSOCA脉冲
       * 1-在第一个事件上生成EPWMxSOCA脉冲:ETPS[SOCACNT] =1
       * 2-在第二个事件上生成EPWMxSOCA脉冲:ETPS[SOCACNT] =2
       * 3-在第三个事件上生成EPWMxSOCA脉冲:ETPS[SOCACNT] =3
       */EPwm2Regs.ETPS.bit.SOCAPRD=3;

       EPwm2Regs.ETPS.bit.INTPRD=0;//禁用中断事件计数器。不会产生中断,ETFRC[INT]将被忽略。

       EPwm2Regs.ETCLR.bit.INT=1;//ePWM中断(EPWMx_INT)标志清除位:写1时清除ETFLG[INT]标志位,并允许生成进一步的中断脉冲(由于禁用中断,此处无用)
       EPwm2Regs.ETCLR.bit.SOCA=1;//ePWM ADC转换触发A(EPWMxSOCA)标志清除位:写1清除ETFLG[SOCA]标志位
       EPwm2Regs.ETCLR.bit.SOCB=1;//ePWM ADC转换触发B(EPWMxSOCB)标志清除位:写1清除ETFLG[SOCB]标志位(由于禁用SOCB,此处无用)

       EPwm2Regs.ETFRC.bit.SOCA=0;//EPWMxSOCA软件强制触发位:写1-在EPWMxSOCA上生成脉冲并设置SOCBFLG位。此位用于测试目的。(只有需要启用EPWMxSOCA脉冲时才有用,即ETSEL.SOCAEN=1)
       EPwm2Regs.ETFRC.bit.SOCB=0;//EPWMxSOCA软件强制触发位:写1-在EPWMxSOCB上生成脉冲并设置SOCBFLG位。此位用于测试目的。(只有需要启用EPWMxSOCB脉冲时才有用,即ETSEL.SOCBEN=1)
       EPwm2Regs.ETFRC.bit.INT=0;//EPWMxINT软件强制触发位:写1-在EPWMxINT上生成一个中断,并设置INT标志位。此位用于测试目的(只有需要启用EPWMx_INT脉冲时才有用,即ETSEL.INTEN=1)

       /************************* 数字比较(DC)模块配置*****************************/
       //暂无使用

       /************************<<EPWM2配置 end>>***************************/

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木龠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值