TI中文支持网
TI专业的中文技术问题搜集分享网站

28335 apwm使用

现问题描述:

同时使用ECAP1、ECAP5、ECAP6作为APMW输出,各通道独立;

频率全部配置为10k,仅占空比不同;

配置方式完全一样;

用示波器观察,仅ECAP1的输出复合程序预期,频率和占空比都对;ECAP5、ECAP6波形一致,但频率为9.几k一直在变,占空比也不是我发的那个值;

求指正!!!

配置如下:
//辅助PWM输出初始化                                                   
void  APWM_init(void)
{
    
   //设定ECAP5/6/1作为辅助PWM1/2/3输出
   //设定APWM3    
   // Setup APWM mode on CAP1, set period and compare registers
   InitECap1Gpio();
   ECap1Regs.ECCTL2.bit.CAP_APWM = 1;    // Enable APWM mode
   ECap1Regs.CTRPHS = 0x0;                 // make phase zero
   ECap1Regs.ECCTL2.bit.APWMPOL = APWM_POL;    // 0:Active high
   ECap1Regs.CAP1 = APWM_PRD;            // Set Period value
   ECap1Regs.CAP2 = APWM_CMP_INIT;        // Set Compare value
   ECap1Regs.ECCLR.all = 0x0FF;            // Clear pending interrupts
   //ECap1Regs.ECEINT.bit.CTR_EQ_CMP = 1; // enable Compare Equal Int
    //设定APWM1
   // Setup APWM mode on CAP5, set period and compare registers
   InitECap5Gpio();
   ECap5Regs.ECCTL2.bit.CAP_APWM = 1;    // Enable APWM mode
   ECap5Regs.CTRPHS = 0x0;                 // make phase zero
   ECap5Regs.ECCTL2.bit.APWMPOL = APWM_POL;    // 0:Active high
   ECap5Regs.CAP1 = APWM_PRD;            // Set Period value
   ECap5Regs.CAP2 = APWM_CMP_INIT;        // Set Compare value
   ECap5Regs.ECCLR.all = 0x0FF;            // Clear pending interrupts
   //ECap1Regs.ECEINT.bit.CTR_EQ_CMP = 1; // enable Compare Equal Int

   //设定APWM2
   // Setup APWM mode on CAP6, set period and compare registers
   InitECap6Gpio();
   ECap6Regs.ECCTL2.bit.CAP_APWM = 1;    // Enable APWM mode
   ECap6Regs.CTRPHS = 0x0;                 // make phase zero
   ECap6Regs.ECCTL2.bit.APWMPOL = APWM_POL;    // 0:Active high
   ECap6Regs.CAP1 = APWM_PRD;            // Set Period value
   ECap6Regs.CAP2 = APWM_CMP_INIT;        // Set Compare value
   ECap6Regs.ECCLR.all = 0x0FF;            // Clear pending interrupts
   //ECap1Regs.ECEINT.bit.CTR_EQ_CMP = 1; // enable Compare Equal Int

   // Start counters
   ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1; // 1:Allow TSCTR to run, start counters
   ECap5Regs.ECCTL2.bit.TSCTRSTOP = 1; // 1:Allow TSCTR to run, start counters
   ECap6Regs.ECCTL2.bit.TSCTRSTOP = 1; // 1:Allow TSCTR to run, start counters

}
改变占空比函数:

//设定APWM的有效占空比,输入为PWM编号(1-3),以及Q15的有效占空比
void  APWM_duty_set(long pwm_num,long r)
{
    switch ( pwm_num )
    {
      //下一周期生效
      case 1: //APWM1,对应ECAP5
            ECap5Regs.CAP4 = IQmpy(APWM_PRD,r,15)    ; // Set Compare value
            break;      
      case 2: //APWM2, 对应ECAP6
            ECap6Regs.CAP4 = IQmpy(APWM_PRD,r,15)  ; // Set Compare value
            break;
      case 3: //APMW3, 对应ECAP1
            ECap1Regs.CAP4 = IQmpy(APWM_PRD,r,15)   ; // Set Compare value
            break;
      default:
            break;
    }
    return;
}

囧:

如果单独使能每个APWM发信号会有这种情况吗?先一个个测试看看

现问题描述:

同时使用ECAP1、ECAP5、ECAP6作为APMW输出,各通道独立;

频率全部配置为10k,仅占空比不同;

配置方式完全一样;

用示波器观察,仅ECAP1的输出复合程序预期,频率和占空比都对;ECAP5、ECAP6波形一致,但频率为9.几k一直在变,占空比也不是我发的那个值;

求指正!!!

配置如下:
//辅助PWM输出初始化                                                   
void  APWM_init(void)
{
    
   //设定ECAP5/6/1作为辅助PWM1/2/3输出
   //设定APWM3    
   // Setup APWM mode on CAP1, set period and compare registers
   InitECap1Gpio();
   ECap1Regs.ECCTL2.bit.CAP_APWM = 1;    // Enable APWM mode
   ECap1Regs.CTRPHS = 0x0;                 // make phase zero
   ECap1Regs.ECCTL2.bit.APWMPOL = APWM_POL;    // 0:Active high
   ECap1Regs.CAP1 = APWM_PRD;            // Set Period value
   ECap1Regs.CAP2 = APWM_CMP_INIT;        // Set Compare value
   ECap1Regs.ECCLR.all = 0x0FF;            // Clear pending interrupts
   //ECap1Regs.ECEINT.bit.CTR_EQ_CMP = 1; // enable Compare Equal Int
    //设定APWM1
   // Setup APWM mode on CAP5, set period and compare registers
   InitECap5Gpio();
   ECap5Regs.ECCTL2.bit.CAP_APWM = 1;    // Enable APWM mode
   ECap5Regs.CTRPHS = 0x0;                 // make phase zero
   ECap5Regs.ECCTL2.bit.APWMPOL = APWM_POL;    // 0:Active high
   ECap5Regs.CAP1 = APWM_PRD;            // Set Period value
   ECap5Regs.CAP2 = APWM_CMP_INIT;        // Set Compare value
   ECap5Regs.ECCLR.all = 0x0FF;            // Clear pending interrupts
   //ECap1Regs.ECEINT.bit.CTR_EQ_CMP = 1; // enable Compare Equal Int

   //设定APWM2
   // Setup APWM mode on CAP6, set period and compare registers
   InitECap6Gpio();
   ECap6Regs.ECCTL2.bit.CAP_APWM = 1;    // Enable APWM mode
   ECap6Regs.CTRPHS = 0x0;                 // make phase zero
   ECap6Regs.ECCTL2.bit.APWMPOL = APWM_POL;    // 0:Active high
   ECap6Regs.CAP1 = APWM_PRD;            // Set Period value
   ECap6Regs.CAP2 = APWM_CMP_INIT;        // Set Compare value
   ECap6Regs.ECCLR.all = 0x0FF;            // Clear pending interrupts
   //ECap1Regs.ECEINT.bit.CTR_EQ_CMP = 1; // enable Compare Equal Int

   // Start counters
   ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1; // 1:Allow TSCTR to run, start counters
   ECap5Regs.ECCTL2.bit.TSCTRSTOP = 1; // 1:Allow TSCTR to run, start counters
   ECap6Regs.ECCTL2.bit.TSCTRSTOP = 1; // 1:Allow TSCTR to run, start counters

}
改变占空比函数:

//设定APWM的有效占空比,输入为PWM编号(1-3),以及Q15的有效占空比
void  APWM_duty_set(long pwm_num,long r)
{
    switch ( pwm_num )
    {
      //下一周期生效
      case 1: //APWM1,对应ECAP5
            ECap5Regs.CAP4 = IQmpy(APWM_PRD,r,15)    ; // Set Compare value
            break;      
      case 2: //APWM2, 对应ECAP6
            ECap6Regs.CAP4 = IQmpy(APWM_PRD,r,15)  ; // Set Compare value
            break;
      case 3: //APMW3, 对应ECAP1
            ECap1Regs.CAP4 = IQmpy(APWM_PRD,r,15)   ; // Set Compare value
            break;
      default:
            break;
    }
    return;
}

jianhua sun:

回复 囧:

请问我的配置有问题吗?这个问题很奇怪,找不到语句修改了周期和占空比,但波形确实发生了改变。而且不正常的波形都是一样的。

现问题描述:

同时使用ECAP1、ECAP5、ECAP6作为APMW输出,各通道独立;

频率全部配置为10k,仅占空比不同;

配置方式完全一样;

用示波器观察,仅ECAP1的输出复合程序预期,频率和占空比都对;ECAP5、ECAP6波形一致,但频率为9.几k一直在变,占空比也不是我发的那个值;

求指正!!!

配置如下:
//辅助PWM输出初始化                                                   
void  APWM_init(void)
{
    
   //设定ECAP5/6/1作为辅助PWM1/2/3输出
   //设定APWM3    
   // Setup APWM mode on CAP1, set period and compare registers
   InitECap1Gpio();
   ECap1Regs.ECCTL2.bit.CAP_APWM = 1;    // Enable APWM mode
   ECap1Regs.CTRPHS = 0x0;                 // make phase zero
   ECap1Regs.ECCTL2.bit.APWMPOL = APWM_POL;    // 0:Active high
   ECap1Regs.CAP1 = APWM_PRD;            // Set Period value
   ECap1Regs.CAP2 = APWM_CMP_INIT;        // Set Compare value
   ECap1Regs.ECCLR.all = 0x0FF;            // Clear pending interrupts
   //ECap1Regs.ECEINT.bit.CTR_EQ_CMP = 1; // enable Compare Equal Int
    //设定APWM1
   // Setup APWM mode on CAP5, set period and compare registers
   InitECap5Gpio();
   ECap5Regs.ECCTL2.bit.CAP_APWM = 1;    // Enable APWM mode
   ECap5Regs.CTRPHS = 0x0;                 // make phase zero
   ECap5Regs.ECCTL2.bit.APWMPOL = APWM_POL;    // 0:Active high
   ECap5Regs.CAP1 = APWM_PRD;            // Set Period value
   ECap5Regs.CAP2 = APWM_CMP_INIT;        // Set Compare value
   ECap5Regs.ECCLR.all = 0x0FF;            // Clear pending interrupts
   //ECap1Regs.ECEINT.bit.CTR_EQ_CMP = 1; // enable Compare Equal Int

   //设定APWM2
   // Setup APWM mode on CAP6, set period and compare registers
   InitECap6Gpio();
   ECap6Regs.ECCTL2.bit.CAP_APWM = 1;    // Enable APWM mode
   ECap6Regs.CTRPHS = 0x0;                 // make phase zero
   ECap6Regs.ECCTL2.bit.APWMPOL = APWM_POL;    // 0:Active high
   ECap6Regs.CAP1 = APWM_PRD;            // Set Period value
   ECap6Regs.CAP2 = APWM_CMP_INIT;        // Set Compare value
   ECap6Regs.ECCLR.all = 0x0FF;            // Clear pending interrupts
   //ECap1Regs.ECEINT.bit.CTR_EQ_CMP = 1; // enable Compare Equal Int

   // Start counters
   ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1; // 1:Allow TSCTR to run, start counters
   ECap5Regs.ECCTL2.bit.TSCTRSTOP = 1; // 1:Allow TSCTR to run, start counters
   ECap6Regs.ECCTL2.bit.TSCTRSTOP = 1; // 1:Allow TSCTR to run, start counters

}
改变占空比函数:

//设定APWM的有效占空比,输入为PWM编号(1-3),以及Q15的有效占空比
void  APWM_duty_set(long pwm_num,long r)
{
    switch ( pwm_num )
    {
      //下一周期生效
      case 1: //APWM1,对应ECAP5
            ECap5Regs.CAP4 = IQmpy(APWM_PRD,r,15)    ; // Set Compare value
            break;      
      case 2: //APWM2, 对应ECAP6
            ECap6Regs.CAP4 = IQmpy(APWM_PRD,r,15)  ; // Set Compare value
            break;
      case 3: //APMW3, 对应ECAP1
            ECap1Regs.CAP4 = IQmpy(APWM_PRD,r,15)   ; // Set Compare value
            break;
      default:
            break;
    }
    return;
}

囧:

回复 jianhua sun:

初始化语句没有特别的问题,还有一个,可能是你示波器的trigger点设置由问题, 你试着单独挂一个探头到后面两个引脚,都挂着通道1上

现问题描述:

同时使用ECAP1、ECAP5、ECAP6作为APMW输出,各通道独立;

频率全部配置为10k,仅占空比不同;

配置方式完全一样;

用示波器观察,仅ECAP1的输出复合程序预期,频率和占空比都对;ECAP5、ECAP6波形一致,但频率为9.几k一直在变,占空比也不是我发的那个值;

求指正!!!

配置如下:
//辅助PWM输出初始化                                                   
void  APWM_init(void)
{
    
   //设定ECAP5/6/1作为辅助PWM1/2/3输出
   //设定APWM3    
   // Setup APWM mode on CAP1, set period and compare registers
   InitECap1Gpio();
   ECap1Regs.ECCTL2.bit.CAP_APWM = 1;    // Enable APWM mode
   ECap1Regs.CTRPHS = 0x0;                 // make phase zero
   ECap1Regs.ECCTL2.bit.APWMPOL = APWM_POL;    // 0:Active high
   ECap1Regs.CAP1 = APWM_PRD;            // Set Period value
   ECap1Regs.CAP2 = APWM_CMP_INIT;        // Set Compare value
   ECap1Regs.ECCLR.all = 0x0FF;            // Clear pending interrupts
   //ECap1Regs.ECEINT.bit.CTR_EQ_CMP = 1; // enable Compare Equal Int
    //设定APWM1
   // Setup APWM mode on CAP5, set period and compare registers
   InitECap5Gpio();
   ECap5Regs.ECCTL2.bit.CAP_APWM = 1;    // Enable APWM mode
   ECap5Regs.CTRPHS = 0x0;                 // make phase zero
   ECap5Regs.ECCTL2.bit.APWMPOL = APWM_POL;    // 0:Active high
   ECap5Regs.CAP1 = APWM_PRD;            // Set Period value
   ECap5Regs.CAP2 = APWM_CMP_INIT;        // Set Compare value
   ECap5Regs.ECCLR.all = 0x0FF;            // Clear pending interrupts
   //ECap1Regs.ECEINT.bit.CTR_EQ_CMP = 1; // enable Compare Equal Int

   //设定APWM2
   // Setup APWM mode on CAP6, set period and compare registers
   InitECap6Gpio();
   ECap6Regs.ECCTL2.bit.CAP_APWM = 1;    // Enable APWM mode
   ECap6Regs.CTRPHS = 0x0;                 // make phase zero
   ECap6Regs.ECCTL2.bit.APWMPOL = APWM_POL;    // 0:Active high
   ECap6Regs.CAP1 = APWM_PRD;            // Set Period value
   ECap6Regs.CAP2 = APWM_CMP_INIT;        // Set Compare value
   ECap6Regs.ECCLR.all = 0x0FF;            // Clear pending interrupts
   //ECap1Regs.ECEINT.bit.CTR_EQ_CMP = 1; // enable Compare Equal Int

   // Start counters
   ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1; // 1:Allow TSCTR to run, start counters
   ECap5Regs.ECCTL2.bit.TSCTRSTOP = 1; // 1:Allow TSCTR to run, start counters
   ECap6Regs.ECCTL2.bit.TSCTRSTOP = 1; // 1:Allow TSCTR to run, start counters

}
改变占空比函数:

//设定APWM的有效占空比,输入为PWM编号(1-3),以及Q15的有效占空比
void  APWM_duty_set(long pwm_num,long r)
{
    switch ( pwm_num )
    {
      //下一周期生效
      case 1: //APWM1,对应ECAP5
            ECap5Regs.CAP4 = IQmpy(APWM_PRD,r,15)    ; // Set Compare value
            break;      
      case 2: //APWM2, 对应ECAP6
            ECap6Regs.CAP4 = IQmpy(APWM_PRD,r,15)  ; // Set Compare value
            break;
      case 3: //APMW3, 对应ECAP1
            ECap1Regs.CAP4 = IQmpy(APWM_PRD,r,15)   ; // Set Compare value
            break;
      default:
            break;
    }
    return;
}

jianhua sun:

回复 囧:

找到原因了。配置没有错误,用示波器测量时,没接负载,空间感应到的别处的发波波形叠加过来造成的。谢谢!接入负载再测试就正常了。

赞(0)
未经允许不得转载:TI中文支持网 » 28335 apwm使用
分享到: 更多 (0)