18941790981 发表于 2023-4-18 12:30:17

EPWM实验代码如下,请问为什么只能由epwm6呼吸,epwm1无效啊。

/*
* epwm_up.c
*
*Created on: 2023年4月8日
*      Author: Zihanwei
*/

#include "epwm_up.h"
#include "leds.h"


//void EPWM1_Init(Uint16 tbprd)
//{
//    EALLOW;
//    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;   // Disable TBCLK within the ePWM
//    SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1;// ePWM1
//    EDIS;
//
//    InitEPwm1Gpio();
//
////    EALLOW;
////    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;      // Stop all the TB clocks
////    EDIS;
//
//    // Setup Sync
//    EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;// Pass through
//    // Allow each timer to be sync'ed
//    EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;
//    EPwm1Regs.TBPHS.half.TBPHS = 0;
//    EPwm1Regs.TBCTR = 0x0000;                  // Clear counter
//    EPwm1Regs.TBPRD = tbprd;
//    EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;    // Count up
//    EPwm1Regs.TBCTL.bit.HSPCLKDIV=TB_DIV1;
//    EPwm1Regs.TBCTL.bit.CLKDIV=TB_DIV1;
//
//    // Setup shadow register load on ZERO
//    EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
//    EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
//    EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
//    EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
//
//    // Set Compare values
//    EPwm1Regs.CMPA.half.CMPA = 0;    // Set compare A value
//    EPwm1Regs.CMPB = 0;            // Set Compare B value
//
//    // Set actions
//    EPwm1Regs.AQCTLA.bit.ZRO = AQ_CLEAR;            // Set PWM1A on Zero
//    EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;          // Clear PWM1A on event A, up count
//    EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET;            // Set PWM1B on Zero
//    EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR;          // Clear PWM1B on event B, up count
//
//    EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;   // Select INT on Zero event
//    EPwm1Regs.ETSEL.bit.INTEN = 1;// Enable INT
//    EPwm1Regs.ETPS.bit.INTPRD = ET_1ST;         // Generate INT on 1st event
//
//    EALLOW;
//    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;         // Start all the timers synced
//    EDIS;
//}

//void EPwm1A_SetCompare(Uint16 val)
//{
//    EPwm1Regs.CMPA.half.CMPA = val;//设置占空比
//}
//void EPwm1B_SetCompare(Uint16 val)
//{
//    EPwm1Regs.CMPB = val;//设置占空比
//}

void EPWM1_Init(Uint16 tbprd)
{
    EALLOW;
    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;   // Disable TBCLK within the ePWM
    SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1;// ePWM6
    EDIS;

    InitEPwm1Gpio();

    // Setup Sync
    EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;// Pass through
    // Allow each timer to be sync'ed
    EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;
    EPwm1Regs.TBPHS.half.TBPHS = 0;
    EPwm1Regs.TBCTR = 0x0000;                  // Clear counter
    EPwm1Regs.TBPRD = tbprd;
    EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;    // Count up
    EPwm1Regs.TBCTL.bit.HSPCLKDIV=TB_DIV1;
    EPwm1Regs.TBCTL.bit.CLKDIV=TB_DIV1;

    // Setup shadow register load on ZERO
    EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
    EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
    EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
    EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

    // Set Compare values
    EPwm1Regs.CMPA.half.CMPA = 0;    // Set compare A value
    EPwm1Regs.CMPB = 0;            // Set Compare B value

    // Set actions
    EPwm1Regs.AQCTLA.bit.ZRO = AQ_CLEAR;            // Set PWM1A on Zero
    EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;          // Clear PWM1A on event A, up count
    EPwm1Regs.AQCTLB.bit.ZRO = AQ_CLEAR;            // Set PWM1B on Zero
    EPwm1Regs.AQCTLB.bit.CBU = AQ_SET;          // Clear PWM1B on event B, up count

    EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;   // Select INT on Zero event
    EPwm1Regs.ETSEL.bit.INTEN = 1;// Enable INT
    EPwm1Regs.ETPS.bit.INTPRD = ET_1ST;         // Generate INT on 1st event

    EALLOW;
    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;         // Start all the timers synced
    EDIS;
}

void EPwm1A_SetCompare(Uint16 val)
{
    EPwm1Regs.CMPA.half.CMPA = val;//设置占空比
}
void EPwm1B_SetCompare(Uint16 val)
{
    EPwm1Regs.CMPB = val;//设置占空比
}




void EPWM6_Init(Uint16 tbprd)
{
    EALLOW;
    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;   // Disable TBCLK within the ePWM
    SysCtrlRegs.PCLKCR1.bit.EPWM6ENCLK = 1;// ePWM6
    EDIS;

    InitEPwm6Gpio();

    // Setup Sync
    EPwm6Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;// Pass through
    // Allow each timer to be sync'ed
    EPwm6Regs.TBCTL.bit.PHSEN = TB_DISABLE;
    EPwm6Regs.TBPHS.half.TBPHS = 0;
    EPwm6Regs.TBCTR = 0x0000;                  // Clear counter
    EPwm6Regs.TBPRD = tbprd;
    EPwm6Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;    // Count up
    EPwm6Regs.TBCTL.bit.HSPCLKDIV=TB_DIV1;
    EPwm6Regs.TBCTL.bit.CLKDIV=TB_DIV1;

    // Setup shadow register load on ZERO
    EPwm6Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
    EPwm6Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
    EPwm6Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
    EPwm6Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

    // Set Compare values
    EPwm6Regs.CMPA.half.CMPA = 0;    // Set compare A value
    EPwm6Regs.CMPB = 0;            // Set Compare B value

    // Set actions
    EPwm6Regs.AQCTLA.bit.ZRO = AQ_CLEAR;            // Set PWM1A on Zero
    EPwm6Regs.AQCTLA.bit.CAU = AQ_SET;          // Clear PWM1A on event A, up count
    EPwm6Regs.AQCTLB.bit.ZRO = AQ_CLEAR;            // Set PWM1B on Zero
    EPwm6Regs.AQCTLB.bit.CBU = AQ_SET;          // Clear PWM1B on event B, up count

    EPwm6Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;   // Select INT on Zero event
    EPwm6Regs.ETSEL.bit.INTEN = 1;// Enable INT
    EPwm6Regs.ETPS.bit.INTPRD = ET_1ST;         // Generate INT on 1st event

    EALLOW;
    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;         // Start all the timers synced
    EDIS;
}

void EPwm6A_SetCompare(Uint16 val)
{
    EPwm6Regs.CMPA.half.CMPA = val;//设置占空比
}
void EPwm6B_SetCompare(Uint16 val)
{
    EPwm6Regs.CMPB = val;//设置占空比
}

/*
* epwm_up.h
*
*Created on: 2023年4月8日
*      Author: Zihanwei
*/

#ifndef APP_EPWM_UP_EPWM_UP_H_
#define APP_EPWM_UP_EPWM_UP_H_



#include "DSP2833x_Device.h"   // DSP2833x 头文件
#include "DSP2833x_Examples.h"   // DSP2833x 例子相关头文件


void EPWM1_Init(Uint16 tbprd);
void EPwm1A_SetCompare(Uint16 val);
void EPwm1B_SetCompare(Uint16 val);

void EPWM6_Init(Uint16 tbprd);
void EPwm6A_SetCompare(Uint16 val);
void EPwm6B_SetCompare(Uint16 val);




#endif /* APP_EPWM_UP_EPWM_UP_H_ */



/*
* main.c
*
*Created on: 2023年3月23日
*      Author: Zihanwei
*/


#include "DSP2833x_Device.h"   // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h"   // DSP2833x Examples Include File

#include "leds.h"
#include "time.h"
#include "epwm_up.h"


/*******************************************************************************
* 函 数 名         : main
* 函数功能         : 主函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void main()
{
    int i=0;
    unsigned char fx=0;

    InitSysCtrl();

    InitPieCtrl();
    IER = 0x0000;
    IFR = 0x0000;
    InitPieVectTable();

//LED_Init();
    EPWM1_Init(500);
    EPWM6_Init(500);
    while(1)
    {
      if(fx==0)
      {
            i++;
            if(i==300)
            {
                fx=1;
            }
      }
      else
      {
            i--;
            if(i==0)
            {
                fx=0;
            }
      }
      EPwm1A_SetCompare(i);//i值最大可以取499,因为ARR最大值是499.
      EPwm1B_SetCompare(300-i);//i值最大可以取499,因为ARR最大值是499.
      EPwm6A_SetCompare(i);//i值最大可以取499,因为ARR最大值是499.
      EPwm6B_SetCompare(300-i);//i值最大可以取499,因为ARR最大值是499.
      DELAY_US(10*1000);
    }
}

触摸天空 发表于 2023-9-18 13:48:18

你去看一下普中的28335原理图,只有EPWM6是跟LED小灯接着。剩下的EPWM都没接灯。怎么可能能亮?
页: [1]
查看完整版本: EPWM实验代码如下,请问为什么只能由epwm6呼吸,epwm1无效啊。