3190|3

13

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

C2000 如何調整佔空比 [复制链接]

各位前輩們
正在學習怎麼使用DSP
這個範例程式裡
Example_2806xEPwmUpDownAQ
C2000 如何調整佔空比呢??
我去調整CMPA,但怎麼調佔空比還是50幾%而已??如何把佔空比調到95%呢??
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

__interrupt void epwm3_isr(void)
{

   // Update the CMPA and CMPB values
//   update_compare(&epwm3_info);

   // Clear INT flag for this timer
   EPwm3Regs.ETCLR.bit.INT = 1;

   // Acknowledge this interrupt to receive more interrupts from group 3
   PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
}


#define EPWM3_TIMER_TBPRD  2000 // Period register 2000
#define EPWM3_MAX_CMPA     1800
#define EPWM3_MIN_CMPA     200
#define EPWM3_MAX_CMPB     1950
#define EPWM3_MIN_CMPB     50


void InitEPwm3Example(void)
{


   // Setup TBCLK
   EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;// Count up/down
   EPwm3Regs.TBPRD = EPWM3_TIMER_TBPRD;          // Set timer period
   EPwm3Regs.TBCTL.bit.PHSEN = TB_DISABLE;       // Disable phase loading
   EPwm3Regs.TBPHS.half.TBPHS = 0x0000;          // Phase is 0
   EPwm3Regs.TBCTR = 0x0000;                     // Clear counter
   EPwm3Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;      // Clock ratio to SYSCLKOUT
   EPwm3Regs.TBCTL.bit.CLKDIV = 7;//TB_DIV1;

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

  // Set Compare values
   EPwm3Regs.CMPA.half.CMPA = EPWM3_MIN_CMPA;    // Set compare A value
   EPwm3Regs.CMPB = EPWM3_MAX_CMPB;              // Set Compare B value

   // Set Actions
   EPwm3Regs.AQCTLA.bit.PRD = AQ_SET;            // Set PWM3A on period
   EPwm3Regs.AQCTLA.bit.CBD = AQ_CLEAR;          // Clear PWM3A on event B, down count

   EPwm3Regs.AQCTLB.bit.PRD = AQ_CLEAR;          // Clear PWM3A on period
   EPwm3Regs.AQCTLB.bit.CAU = AQ_SET;            // Set PWM3A on event A, up count

   // Interrupt where we will change the Compare Values
   EPwm3Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;     // Select INT on Zero event
   EPwm3Regs.ETSEL.bit.INTEN = 1;                // Enable INT
   EPwm3Regs.ETPS.bit.INTPRD = ET_3RD;           // Generate INT on 3rd event



   // Information this example uses to keep track
   // of the direction the CMPA/CMPB values are
   // moving, the min and max allowed values and
   // a pointer to the correct ePWM registers
   epwm3_info.EPwm_CMPA_Direction = EPWM_CMP_UP;   // Start by increasing CMPA &
   epwm3_info.EPwm_CMPB_Direction = EPWM_CMP_DOWN; // decreasing CMPB
   epwm3_info.EPwmTimerIntCount = 0;               // Zero the interrupt counter
   epwm3_info.EPwmRegHandle = &EPwm3Regs;          // Set the pointer to the ePWM module
   epwm3_info.EPwmMaxCMPA = EPWM3_MAX_CMPA;        // Setup min/max CMPA/CMPB values
   epwm3_info.EPwmMinCMPA = EPWM3_MIN_CMPA;      
   epwm3_info.EPwmMaxCMPB = EPWM3_MAX_CMPB;   
   epwm3_info.EPwmMinCMPB = EPWM3_MIN_CMPB;  
}

void update_compare(EPWM_INFO *epwm_info)
{


   // Every 10'th interrupt, change the CMPA/CMPB values
   if(epwm_info->EPwmTimerIntCount == 1)
   {
       epwm_info->EPwmTimerIntCount = 0;

       // If we were increasing CMPA, check to see if
       // we reached the max value.  If not, increase CMPA
       // else, change directions and decrease CMPA
           if(epwm_info->EPwm_CMPA_Direction == EPWM_CMP_UP)
           {
               if(epwm_info->EPwmRegHandle->CMPA.half.CMPA < epwm_info->EPwmMaxCMPA)
               {
                  epwm_info->EPwmRegHandle->CMPA.half.CMPA++;
               }
               else
               {
                  epwm_info->EPwm_CMPA_Direction = EPWM_CMP_DOWN;
              epwm_info->EPwmRegHandle->CMPA.half.CMPA--;
               }
           }

           // If we were decreasing CMPA, check to see if
       // we reached the min value.  If not, decrease CMPA
       // else, change directions and increase CMPA
           else
           {
               if(epwm_info->EPwmRegHandle->CMPA.half.CMPA == epwm_info->EPwmMinCMPA)
               {
                  epwm_info->EPwm_CMPA_Direction = EPWM_CMP_UP;
                  epwm_info->EPwmRegHandle->CMPA.half.CMPA++;
               }
               else
               {
                  epwm_info->EPwmRegHandle->CMPA.half.CMPA--;
               }
           }

           // If we were increasing CMPB, check to see if
       // we reached the max value.  If not, increase CMPB
       // else, change directions and decrease CMPB
           if(epwm_info->EPwm_CMPB_Direction == EPWM_CMP_UP)
           {
               if(epwm_info->EPwmRegHandle->CMPB < epwm_info->EPwmMaxCMPB)
               {
                  epwm_info->EPwmRegHandle->CMPB++;
               }
               else
               {
                  epwm_info->EPwm_CMPB_Direction = EPWM_CMP_DOWN;
                  epwm_info->EPwmRegHandle->CMPB--;
               }
           }

           // If we were decreasing CMPB, check to see if
       // we reached the min value.  If not, decrease CMPB
       // else, change directions and increase CMPB


           else
           {
               if(epwm_info->EPwmRegHandle->CMPB == epwm_info->EPwmMinCMPB)
               {
                  epwm_info->EPwm_CMPB_Direction = EPWM_CMP_UP;
                  epwm_info->EPwmRegHandle->CMPB++;
               }
               else
               {
                  epwm_info->EPwmRegHandle->CMPB--;
               }
           }
   }
   else
   {
      epwm_info->EPwmTimerIntCount++;
   }

   return;
}

最新回复

95%占空比应该是指正占空比,95%的高电平吧。这个跟其他设置有关,比如计数器的计数值等于比较寄存器cmpa或者cmpb的数值时是高还是低,这个比较的状态不是io的状态,是epwm内部的信号,这个信号还要经过其他模块比,看下图,所以还要设置其他寄存器,比如DB模块里面DBCTL寄存器的INMODE和OUTMODE设置是直接影响到逻辑关系的。你好好看看手册,然后看官方的例程。[attach]345093[/attach] [attach]345094[/attach] [attach]345095[/attach]   详情 回复 发表于 2018-2-23 23:49
点赞 关注
 

回复
举报

2700

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 
EPwm3Regs.TBPRD是周期寄存器
EPwm3Regs.CMPA.half.CMPA和 EPwm3Regs.CMPB分别是A/B两个比较器的比较值,这个调解占空比。
个人签名作为一个水军,就是尽量的多回帖,因为懂的技术少,所以回帖水分大,见谅!
EEWORLD开发板置换群:309018200,——电工们免费装β的天堂,商家勿入!加群暗号:喵
 
 

回复

13

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
elvike 发表于 2018-2-22 21:33
EPwm3Regs.TBPRD是周期寄存器
EPwm3Regs.CMPA.half.CMPA和 EPwm3Regs.CMPB分别是A/B两个比较器的比较值, ...

您好~
那我應該把EPwm3Regs.CMPA.half.CMPA和 EPwm3Regs.CMPB分別寫入多少??
我才可以在示波器看到佔空比為95%呢??

可以教我嗎??謝謝

点评

95%占空比应该是指正占空比,95%的高电平吧。这个跟其他设置有关,比如计数器的计数值等于比较寄存器cmpa或者cmpb的数值时是高还是低,这个比较的状态不是io的状态,是epwm内部的信号,这个信号还要经过其他模块比,  详情 回复 发表于 2018-2-23 23:49
 
 
 

回复

2700

帖子

0

TA的资源

五彩晶圆(初级)

4
 
youkevin 发表于 2018-2-23 09:05
您好~
那我應該把EPwm3Regs.CMPA.half.CMPA和 EPwm3Regs.CMPB分別寫入多少??
我才可以在示波器看到佔空 ...

95%占空比应该是指正占空比,95%的高电平吧。这个跟其他设置有关,比如计数器的计数值等于比较寄存器cmpa或者cmpb的数值时是高还是低,这个比较的状态不是io的状态,是epwm内部的信号,这个信号还要经过其他模块比,看下图,所以还要设置其他寄存器,比如DB模块里面DBCTL寄存器的INMODE和OUTMODE设置是直接影响到逻辑关系的。你好好看看手册,然后看官方的例程。


个人签名作为一个水军,就是尽量的多回帖,因为懂的技术少,所以回帖水分大,见谅!
EEWORLD开发板置换群:309018200,——电工们免费装β的天堂,商家勿入!加群暗号:喵
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表