普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 702|回复: 1

epwm增减计数模式下的占空比

[复制链接]

1

主题

2

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2023-8-8 16:04:37 | 显示全部楼层 |阅读模式
1金钱
这是我的初始化程序,检查了很多次,分频后是75M. 按理论上讲 EPwm1Regs.TBPRD = 3750的话频率应该是10K.     EPwm1Regs.CMPA.half.CMPA = EPwm1Regs.TBPRD *0.5;输出的pwm的占空比应该是50%。但是示波器显示的占空比并不是50%
void EPWM1_Init(void)
{

    /********使能外设ePWM1的时钟,失能时基模块时钟(只要使用到某个外设,那么首先打开外设时钟且失能时基模块,因为要保证时基信号的同步;等所有配置完成后再打开时基时钟)********/
    EALLOW;
    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;   // Disable TBCLK within the ePWM
    SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1;  // ePWM1
    EDIS;

    /*******开启ePWM对应的GPIO的时钟及初始化配置******/
    InitEPwm1Gpio();



    /**********初始化时基模块,即配置TB相关寄存器*******/
    EPwm1Regs.TBPRD = 3750;                                         //计数器周期
    EPwm1Regs.TBPHS.half.TBPHS = 0;                                 //PWM1自身相位从0开始
    EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;                  // 增减计数模式
    EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;                       
    EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;                     //当计数器CTR=0时,进行生成同步脉冲给EPWM1
    //EPwm1Regs.TBCTR = 0x0000;                                      //

    EPwm1Regs.TBCTL.bit.PRDLD=TB_SHADOW;              //

    EPwm1Regs.TBCTL.bit.HSPCLKDIV=TB_DIV2;
    EPwm1Regs.TBCTL.bit.CLKDIV=TB_DIV1;      //2分频,150M/2=75M   



    /*********初始化比较模块,即配置CC相关寄存器值*******/
    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;
    /******设置比较值********/
    EPwm1Regs.CMPA.half.CMPA = EPwm1Regs.TBPRD *0.5;    // Set compare A value
    //EPwm1Regs.CMPB = 0;              // Set Compare B value


    /********初始化动作限定模块,即配置AQ相关寄存器********/
    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


    /********初始化事件触发(中断)模块,即配置ET相关寄存器*******/
//    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


    /******初始化死区模块、斩波模块,即配置DB、PC相关寄存器*******/
    EPwm1Regs.DBCTL.bit.IN_MODE = DBA_ALL; // enable Dead-band module
    EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; // Active low complementary (ALC) mode. EPWMxA is inverted.
    EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; //低电平有效,互补输出
    EPwm1Regs.DBFED = 10; // FED = 20 * TBCLKs   这里2分频后TBCLK=1/75M秒
    EPwm1Regs.DBRED = 10; // RED = 20 TBCLKs


    /******使能时基时钟*******/
    EALLOW;
    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;         // Start all the timers synced
    EDIS;
}


我知道答案 本帖寻求最佳答案回答被采纳后将获得系统奖励10 金钱 , 目前已有1人回答

附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册
回复

使用道具 举报

1

主题

2

帖子

13

积分

新手上路

Rank: 1

积分
13
 楼主| 发表于 2023-8-9 14:23:30 | 显示全部楼层
解决了,还是不仔细。这样就可以了
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;               
EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;           
EPwm1Regs.AQCTLB.bit.CAU = AQ_SET;               
EPwm1Regs.AQCTLB.bit.CAD = AQ_CLEAR;  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-4-27 23:14 , Processed in 0.090686 second(s), 31 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表