请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F28379D 大家好、
我的 F28379的 ADC 有问题。 我尝试使用 ePWM1-SOCA 信号同时读取 ADCINA2-A3-A4、B2-B3-B4、C2-C3、C4和 D2-D3-D4。 ADC 执行转换、但问题出在 AdcResult 寄存器。 我在不同的 adcresult 寄存器中看到一次转换的结果。 例如、我使用 SOC0转换 ADCINB2信号。 因此、我期望从 AdcbResultRegs.ADCRESULT0获取结果。 但结果有时可能是 ADCRESULT1或 ADCRESULT1 2。 我知道我缺少一些东西。 但我找不到它。 我们将感谢您的任何帮助。
这是我的 ADC 的初始化代码。 请注意、我在另一个函数中初始化 ePWM1 SOCA 信号。 此外、我确信我会给 ADC 充足的时间来执行转换。 因此、采集窗口大小不是问题。
void InitializeADCs()
{
EALLOW;
//设置分频器以确定 ADC 的 ADCCLK
AdcaRegs.ADCCTL2.bit.prescale = 0;//将 ADCCLK 分频器设置为/1
AdcbRegs.ADCCTL2.bit.prescale = 0;//将 ADCCLK 分频器设置为/1
AdccRegs.ADCCTL2.bit.prescale = 0;//将 ADCCLK 分频器设置为/1
AdcdRegs.ADCCTL2.bit.prescale = 0;//将 ADCCLK 分频器设置为/1
//设置 ADC 的分辨率和信号模式
AdcSetMode (ADC_ADCA、ADC_resolution_12位、ADC_SIGNALMODE_SINGLE);
AdcSetMode (ADC_ADCB、ADC_Resolution、12位、ADC_SIGNALMODE_SINGLE);
AdcSetMode (ADC_ADCC、ADC_Resolution、12位、ADC_SIGNALMODE_SINGLE);
AdcSetMode (ADC_ADCD、ADC_Resolution、12位、ADC_SIGNALMODE_SINGLE);
//为 ADC 加电
AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;
AdcbRegs.ADCCTL1.bit.ADCPWDNZ = 1;
AdccRegs.ADCCTL1.bit.ADCPWDNZ = 1;
AdcdRegs.ADCCTL1.bit.ADCPWDNZ = 1;
//延迟1ms 以允许 ADC 加电时间
DELAY_US (1000);
AdcaRegs.ADCSOC0CTL.bit.CHSEL = 2;//SOC0将转换引脚 A2
AdcbRegs.ADCSOC0CTL.bit.CHSEL = 2; //SOC0将转换引脚 B2
AdccRegs.ADCSOC0CTL.bit.CHSEL = 2; //SOC0将转换引脚 C2
AdcdRegs.ADCSOC0CTL.bit.CHSEL = 2; //SOC0将转换引脚 D2
AdcaRegs.ADCSOC1CTL.bit.CHSEL = 3; //SOC1将转换引脚 A3
AdcbRegs.ADCSOC1CTL.bit.CHSEL = 3; //SOC1将转换引脚 B3
AdccRegs.ADCSOC1CTL.bit.CHSEL = 3; //SOC1将转换引脚 C3
AdcdRegs.ADCSOC1CTL.bit.CHSEL = 3; //SOC1将转换引脚 D3
AdcaRegs.ADCSOC2CTL.bit.CHSEL = 4; //SOC2将转换引脚 A4
AdcbRegs.ADCSOC2CTL.bit.CHSEL = 4; //SOC2将转换引脚 B4
AdccRegs.ADCSOC2CTL.bit.CHSEL = 4; //SOC2将转换引脚 C4
AdcdRegs.ADCSOC2CTL.bit.CHSEL = 4; //SOC2将转换引脚 D4
uint16 AcquionWindowRegValue = 28;
AdcaRegs.ADCSOC0CTL.bit.ACQPS = AcquiionWindowRegValue;
AdcbRegs.ADCSOC0CTL.bit.ACQPS = AcquisionWindowRegValue;
AdccRegs.ADCSOC0CTL.bit.ACQPS = AcquiionWindowRegValue;
AdcdRegs.ADCSOC0CTL.bit.ACQPS = AcquiionWindowRegValue;
AdcaRegs.ADCSOC1CTL.bit.ACQPS = AcquiionWindowRegValue;
AdcbRegs.ADCSOC1CTL.bit.ACQPS = AcquisionWindowRegValue;
AdccRegs.ADCSOC1CTL.bit.ACQPS = AcquiionWindowRegValue;
AdcdRegs.ADCSOC1CTL.bit.ACQPS = AcquiionWindowRegValue;
AdcaRegs.ADCSOC2CTL.bit.ACQPS = AcquiionWindowRegValue;
AdcbRegs.ADCSOC2CTL.bit.ACQPS = AcquisionWindowRegValue;
AdccRegs.ADCSOC2CTL.bit.ACQPS = AcquiionWindowRegValue;
AdcdRegs.ADCSOC2CTL.bit.ACQPS = AcquiionWindowRegValue;
// ePWM1 SOCA 将触发 SOC0
AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 5;
AdcbRegs.ADCSOC0CTL.bit.TRIGSEL = 5;
AdccRegs.ADCSOC0CTL.bit.TRIGSEL = 5;
AdcdRegs.ADCSOC0CTL.bit.TRIGSEL = 5;
// ePWM1 SOCA 将触发 SOC1
AdcaRegs.ADCSOC1CTL.bit.TRIGSEL = 5;
AdcbRegs.ADCSOC1CTL.bit.TRIGSEL = 5;
AdccRegs.ADCSOC1CTL.bit.TRIGSEL = 5;
AdcdRegs.ADCSOC1CTL.bit.TRIGSEL = 5;
// ePWM1 SOCA 将触发 SOC1
AdcaRegs.ADCSOC2CTL.bit.TRIGSEL = 5;
AdcbRegs.ADCSOC2CTL.bit.TRIGSEL = 5;
AdccRegs.ADCSOC2CTL.bit.TRIGSEL = 5;
AdcdRegs.ADCSOC2CTL.bit.TRIGSEL = 5;
AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;// 1 =转换结束时的 INT
AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1;// 1 =启用 ADC 中断1
AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 2;// 2 = INT SOURCE:EOC2
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;// 1 =清除 INT 标志
EDIS;
}