工具/软件:Code Composer Studio
大家好、
我正在尝试实现峰值电流模式控制器、并希望在 EPWM1B 下降沿创建 ADC 中断。
请参阅:
当我运行下面的代码时、GPIO 触发时间比 EPWM1B 的上升沿晚1us。
我想在下降沿运行它、是否知道为什么会出现这个问题?
空 InitEPwm1()
{
//
//启用 TZ1和 TZ2作为单次触发源
//
EALLOW;
//EPwm1Regs.TBPHS = 0;//将相位寄存器设置为零
EPwm1Regs.TBPRD = 449;//周期= 300 TBCLK 计数//(200KHz @ 60MHz 时钟)
EPwm1Regs.CMPA.half.CMPA = 449;
EPwm1Regs.CMPB = 228;//比较 B = 400 TBCLK 计数
EPwm1Regs.TBPHS.Half.TBPHS = 0;//将相位寄存器设置为零
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;//非对称模式
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;//相位加载被禁用
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//时钟与 SYSCLKOUT 的比率
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm1Regs.TBCTR = 0;//清除 TB 计数器
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;// TBCTR 上的负载=零
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;// TBCTR 上的负载= 0
EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;//将 PWM1A 设置为零
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;
EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET;
EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR;
//定义事件(DCA
EDIS;
}
void ADC_init (void)
{
ePWM1B 上具有中断的/* ADC */
EALLOW;
AdcRegs.ADCCTL1.bit.ADCBGPWD = 1;//电源 ADC BG
AdcRegs.ADCCTL1.bit.ADCREFPWD = 1;//电源基准
AdcRegs.ADCCTL1.bit.ADCPWDN = 1;//电源 ADC
AdcRegs.ADCCTL1.bit.ADCENABLE = 1;//启用 ADC
AdcRegs.ADCCTL1.bit.ADCREFSEL = 0;//选择内部 BG
AdcRegs.ADCCTL2.bit.ADCNONOVERLAP = 1;//启用非重叠模式/CLA
AdcRegs.ADCCTL2.bit.CLKDIV2EN = 1;//启用非重叠模式/CLA
AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1;// ADCINT1在 AdcResults 锁存后跳闸
AdcRegs.INTSEL1N2.bit.INT1E = 1;//启用 ADCINT1
AdcRegs.INTSEL1N2.bit.INT1CONT = 0;//禁用 ADCINT1连续模式
AdcRegs.INTSEL1N2.bit.INT1SEL = 1;//设置 EOC1以触发 ADCINT1触发
AdcRegs.ADCSOC0CTL.bit.ACQPS = 6;
AdcRegs.ADCSOC1CTL.bit.ACQPS = 6;
AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 6;
AdcRegs.ADCSOC1CTL.bit.TRIGSEL = 6;
AdcRegs.ADCSOC0CTL.bit.CHSEL = 9;// Vout B1
AdcRegs.ADCSOC1CTL.bit.CHSEL = 10;// Vout B2
EPwm1Regs.ETSEL.bit.SOCBEN = 1;
EPwm1Regs.ETSEL.bit.SOCBSEL = 6;// 6.
EPwm1Regs.ETPS.bit.SOCBPRD = 1;
EDIS;
}
void GPIO_init (void)
{
EALLOW;
//通用输入/输出
GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0;
GpioCtrlRegs.GPBMUX1.bit.GPIO39 = 0;
GpioCtrlRegs.GPAMUX2.bit.GPIO19=0;
// GPIO 作为输出
GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1;
GpioCtrlRegs.GPBDIR.bit.GPIO39 = 1;
GpioCtrlRegs.GPADIR.bit.GPIO19 = 1;
// GPIO 关闭/打开(1 =关闭、0为打开)
GpioDataRegs.GPBSET.BIO34 = 1;
GpioDataRegs.GPBSET.bit.GPIO39 = 0;
//GpioDataRegs.GPASET.bit.GPIO19=1;
EDIS;
}