在调试F28069的AD时,使用的是软件触方式,在ADC转换完产生ADCINT1标志,
AdcRegs.ADCSOC12CTL.bit.TRIGSEL = 0; //软件触发转换
AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1; // ADCINT1 trips after AdcResults latch
AdcRegs.INTSEL1N2.bit.INT1E = 1; /*Enable ADCINT1 */
AdcRegs.INTSEL1N2.bit.INT1CONT = 0; /*Disable ADCINT1 Continuous mode */
AdcRegs.INTSEL1N2.bit.INT1SEL = 12; /*setup EOC2 to trigger ADCINT1 to fire */
在PWM的中断开始使用用软件触发AD转换
并查询ADCINT1FLG得到结果
__interrupt void IsrEpwm(void) //当计数值为0的时候触发中断
{
AdcRegs.ADCSOCFRC1.all = 0x1000;
while(AdcRegs.ADCINTFLG.bit.ADCINT1 == 0); //Wait for ADCINT1
AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //Clear ADCINT1
if(i<50)
{
Result[i++] = (Uint16)(AdcResult.ADCRESULT12 & 0xFFF); //get ADC Result V相电流
}
BLDCPWM2_MACRO(Epwm1);//给PWM
}
使用以上程序对AD的结果进行测试,发现得到的电流值要在第四个PWM中断才能得到准确的电流值。
使用示波器测试PWM和AD管脚的电流波形,发现在第三个PWM开始电流波形就发生改变了。AD采样值比实际晚了一次。不知是何原因?