器件型号:LAUNCHXL-F28377S
工具/软件:Code Composer Studio
您好!
我的 PWM 输出电压电平随着比较值 CMPA 的增加而变化。 电压波形中会出现偏移、如所附视频所示。 是否预计会发生这种情况? 如何删除此项?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
器件型号:LAUNCHXL-F28377S
工具/软件:Code Composer Studio
您好!
我的 PWM 输出电压电平随着比较值 CMPA 的增加而变化。 电压波形中会出现偏移、如所附视频所示。 是否预计会发生这种情况? 如何删除此项?
你(们)好、Kris。 感谢您的回答。
没有任何元件连接到引脚、我只是测量它的电压。
我使用 PWM2A 运行 ePWM_updown_AQ_cpu01.c 示例、因此输出为引脚80。 我对 AQCTLA 寄存器进行了如下配置:
EPwm2Regs.AQCTLA.bit.CAD = AQ_SET;
EPwm2Regs.AQCTLA.bit.CAU = AQ_CLEAR;
仅使用 CMPA。 PWM 频率为10kHz。 我正在扩大和减少 epwm2中断中的 CMPA 值。 我没有使用 update_compare 函数。
中断代码如下:
(FLAG 是用于在增加和减少 CMPA 之间交替的变量。 我在此中断内设置 TBPRD、以便可以在运行时更改 PWM 频率。)
_interrupt void epwm2_ISR (void)
{
如果(标志= 0)
{
COUNTER++;
如果(计数器= meu_TBPRD)标志= 1;
Duty_cycle =(float)计数器/meu_TBPRD;
MEU_CMPA = Duty_cycle*meu_TBPRD;
EPwm2Regs.CMPA.bit.CMPA = meu_CMPA; //设置比较 A 值
EPwm2Regs.TBPRD = meu_TBPRD; //设置定时器周期
//
//清除此计时器的 INT 标志
//
EPwm2Regs.ETCLR.bit.INT = 1;
//
//确认此中断以接收来自组3的更多中断
//
PieCtrlRegs.PIEACX.ALL = PIEACK_Group3;
}
其他
{
计数器-;
如果(计数器=0)标志=0;
Duty_cycle =(float)计数器/meu_TBPRD;
MEU_CMPA = Duty_cycle*meu_TBPRD;
EPwm2Regs.CMPA.bit.CMPA = meu_CMPA; //设置比较 A 值
EPwm2Regs.TBPRD = meu_TBPRD; //设置定时器周期
//
//清除此计时器的 INT 标志
//
EPwm2Regs.ETCLR.bit.INT = 1;
//
//确认此中断以接收来自组3的更多中断
//
PieCtrlRegs.PIEACX.ALL = PIEACK_Group3;
}
}
C 代码是复用的。 感谢 again.e2e.ti.com/.../epwm_5F00_updown_5F00_aq_5F00_cpu01_5F00_CHANGED.c