采用的是TI官方的controlCard,我自己做的底板。
程序流程如下:先采样64次获得各个通道的固定偏置(电路上约为1.5V),然后在后续读取寄存器时减去这些偏置。
理论上,去掉偏置后,后续的读数应在0附近。ADCC和ADCD这两个ADC的结果都是正确,波动仅有2个LSB。主要问题是ADCA,减去偏置后,读数分别在[-7,-6,-5,-3,-4,-4]左右波动2个LSB。ADCB的第二个通道也有这样的问题。
我的疑问是:如果是因为外部电路不正确,那这个波动为什么还会有一个直流量?例如ADCA的第一个通道,如果它是在±7LSB范围内波动,我会怀疑是外部电路噪声过大,但现在是-7±2LSB,这个-7到底是怎么来的?
ADC的配置代码如下:
EALLOW;
AdcaRegs.ADCCTL2.bit.PRESCALE = 6; //50MHz
AdcSetMode(ADC_ADCA, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE); //ADC_A 12位/单端模式
AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1; //转换结束产生中断
AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1; //上电
AdcbRegs.ADCCTL2.bit.PRESCALE = 6; //50MHz
AdcSetMode(ADC_ADCB, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE); //ADC_A 12位/单端模式
AdcbRegs.ADCCTL1.bit.INTPULSEPOS = 1; //转换结束产生中断
AdcbRegs.ADCCTL1.bit.ADCPWDNZ = 1; //上电
AdccRegs.ADCCTL2.bit.PRESCALE = 6; //50MHz
AdcSetMode(ADC_ADCC, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE); //ADC_A 12位/单端模式
AdccRegs.ADCCTL1.bit.INTPULSEPOS = 1; //转换结束产生中断
AdccRegs.ADCCTL1.bit.ADCPWDNZ = 1; //上电
AdcdRegs.ADCCTL2.bit.PRESCALE = 6; //50MHz
AdcSetMode(ADC_ADCD, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE); //ADC_A 12位/单端模式
AdcdRegs.ADCCTL1.bit.INTPULSEPOS = 1; //转换结束产生中断
AdcdRegs.ADCCTL1.bit.ADCPWDNZ = 1; //上电
DELAY_US(1000); //延时1ms
AdcaRegs.ADCSOC0CTL.bit.CHSEL = 0; //SOC0 will convert pin ADCA0(板子上为AD1)
AdcaRegs.ADCSOC1CTL.bit.CHSEL = 1; //SOC1 will convert pin ADCA1(板子上为AD2)
AdcaRegs.ADCSOC2CTL.bit.CHSEL = 2; //SOC2 will convert pin ADCA2(板子上为AD3)
AdcaRegs.ADCSOC3CTL.bit.CHSEL = 3; //SOC3 will convert pin ADCA3(板子上为AD4)
AdcaRegs.ADCSOC4CTL.bit.CHSEL = 4; //SOC4 will convert pin ADCA4(板子上为AD5)
AdcaRegs.ADCSOC5CTL.bit.CHSEL = 5; //SOC5 will convert pin ADCA5(板子上为AD6)
AdcaRegs.ADCSOC6CTL.bit.CHSEL = 5; //SOC6 will convert pin ADCA5(板子上为AD6)
AdcaRegs.ADCSOC7CTL.bit.CHSEL = 4; //SOC7 will convert pin ADCA4(板子上为AD5)
AdcaRegs.ADCSOC8CTL.bit.CHSEL = 3; //SOC8 will convert pin ADCA3(板子上为AD4)
AdcaRegs.ADCSOC9CTL.bit.CHSEL = 2; //SOC9 will convert pin ADCA2(板子上为AD3)
AdcaRegs.ADCSOC10CTL.bit.CHSEL = 1; //SOC10 will convert pin ADCA1(板子上为AD2)
AdcaRegs.ADCSOC11CTL.bit.CHSEL = 0; //SOC11 will convert pin ADCA0(板子上为AD1)
AdcaRegs.ADCSOC0CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcaRegs.ADCSOC1CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcaRegs.ADCSOC2CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcaRegs.ADCSOC3CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcaRegs.ADCSOC4CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcaRegs.ADCSOC5CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcaRegs.ADCSOC6CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcaRegs.ADCSOC7CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcaRegs.ADCSOC8CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcaRegs.ADCSOC9CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcaRegs.ADCSOC10CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcaRegs.ADCSOC11CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcaRegs.ADCSOC1CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcaRegs.ADCSOC2CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcaRegs.ADCSOC3CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcaRegs.ADCSOC4CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcaRegs.ADCSOC5CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcaRegs.ADCSOC6CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcaRegs.ADCSOC7CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcaRegs.ADCSOC8CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcaRegs.ADCSOC9CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcaRegs.ADCSOC10CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcaRegs.ADCSOC11CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcbRegs.ADCSOC0CTL.bit.CHSEL = 0; //SOC0 will convert pin ADCB0(板子上为AD7)
AdcbRegs.ADCSOC1CTL.bit.CHSEL = 1; //SOC1 will convert pin ADCB1(板子上为AD8)
AdcbRegs.ADCSOC2CTL.bit.CHSEL = 2; //SOC2 will convert pin ADCB2(板子上为AD9)
AdcbRegs.ADCSOC3CTL.bit.CHSEL = 3; //SOC3 will convert pin ADCB3(板子上为AD10)
AdcbRegs.ADCSOC4CTL.bit.CHSEL = 4; //SOC4 will convert pin ADCB4(板子上为AD11)
AdcbRegs.ADCSOC5CTL.bit.CHSEL = 5; //SOC5 will convert pin ADCB5(板子上为AD12)
AdcbRegs.ADCSOC6CTL.bit.CHSEL = 5; //SOC6 will convert pin ADCB5(板子上为AD12)
AdcbRegs.ADCSOC7CTL.bit.CHSEL = 4; //SOC7 will convert pin ADCB4(板子上为AD11)
AdcbRegs.ADCSOC8CTL.bit.CHSEL = 3; //SOC8 will convert pin ADCB3(板子上为AD10)
AdcbRegs.ADCSOC9CTL.bit.CHSEL = 2; //SOC9 will convert pin ADCB2(板子上为AD9)
AdcbRegs.ADCSOC10CTL.bit.CHSEL = 1; //SOC10 will convert pin ADCB1(板子上为AD8)
AdcbRegs.ADCSOC11CTL.bit.CHSEL = 0; //SOC11 will convert pin ADCB0(板子上为AD7)
AdcbRegs.ADCSOC0CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcbRegs.ADCSOC1CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcbRegs.ADCSOC2CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcbRegs.ADCSOC3CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcbRegs.ADCSOC4CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcbRegs.ADCSOC5CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcbRegs.ADCSOC6CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcbRegs.ADCSOC7CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcbRegs.ADCSOC8CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcbRegs.ADCSOC9CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcbRegs.ADCSOC10CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcbRegs.ADCSOC11CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcbRegs.ADCSOC0CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcbRegs.ADCSOC1CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcbRegs.ADCSOC2CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcbRegs.ADCSOC3CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcbRegs.ADCSOC4CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcbRegs.ADCSOC5CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcbRegs.ADCSOC6CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcbRegs.ADCSOC7CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcbRegs.ADCSOC8CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcbRegs.ADCSOC9CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcbRegs.ADCSOC10CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcbRegs.ADCSOC11CTL.bit.TRIGSEL = ADCTRIGSEL;
AdccRegs.ADCSOC0CTL.bit.CHSEL = 14; //SOC0 will convert pin ADCIN14(板子上为AD13)
AdccRegs.ADCSOC1CTL.bit.CHSEL = 15; //SOC1 will convert pin ADCIN15(板子上为AD14)
AdccRegs.ADCSOC2CTL.bit.CHSEL = 2; //SOC2 will convert pin ADCC2(板子上为AD15)
AdccRegs.ADCSOC3CTL.bit.CHSEL = 3; //SOC3 will convert pin ADCC3(板子上为AD16)
AdccRegs.ADCSOC4CTL.bit.CHSEL = 4; //SOC4 will convert pin ADCC4(板子上为AD17)
AdccRegs.ADCSOC5CTL.bit.CHSEL = 5; //SOC5 will convert pin ADCC5(板子上为AD18)
AdccRegs.ADCSOC6CTL.bit.CHSEL = 5; //SOC6 will convert pin ADCC5(板子上为AD18)
AdccRegs.ADCSOC7CTL.bit.CHSEL = 4; //SOC7 will convert pin ADCC4(板子上为AD17)
AdccRegs.ADCSOC8CTL.bit.CHSEL = 3; //SOC8 will convert pin ADCC3(板子上为AD16)
AdccRegs.ADCSOC9CTL.bit.CHSEL = 2; //SOC9 will convert pin ADCC2(板子上为AD15)
AdccRegs.ADCSOC10CTL.bit.CHSEL = 15; //SOC10 will convert pin ADCIN15(板子上为AD14)
AdccRegs.ADCSOC11CTL.bit.CHSEL = 14; //SOC11 will convert pin ADCIN14(板子上为AD13)
AdccRegs.ADCSOC0CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdccRegs.ADCSOC1CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdccRegs.ADCSOC2CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdccRegs.ADCSOC3CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdccRegs.ADCSOC4CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdccRegs.ADCSOC5CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdccRegs.ADCSOC6CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdccRegs.ADCSOC7CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdccRegs.ADCSOC8CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdccRegs.ADCSOC9CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdccRegs.ADCSOC10CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdccRegs.ADCSOC11CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdccRegs.ADCSOC0CTL.bit.TRIGSEL = ADCTRIGSEL;
AdccRegs.ADCSOC1CTL.bit.TRIGSEL = ADCTRIGSEL;
AdccRegs.ADCSOC2CTL.bit.TRIGSEL = ADCTRIGSEL;
AdccRegs.ADCSOC3CTL.bit.TRIGSEL = ADCTRIGSEL;
AdccRegs.ADCSOC4CTL.bit.TRIGSEL = ADCTRIGSEL;
AdccRegs.ADCSOC5CTL.bit.TRIGSEL = ADCTRIGSEL;
AdccRegs.ADCSOC6CTL.bit.TRIGSEL = ADCTRIGSEL;
AdccRegs.ADCSOC7CTL.bit.TRIGSEL = ADCTRIGSEL;
AdccRegs.ADCSOC8CTL.bit.TRIGSEL = ADCTRIGSEL;
AdccRegs.ADCSOC9CTL.bit.TRIGSEL = ADCTRIGSEL;
AdccRegs.ADCSOC10CTL.bit.TRIGSEL = ADCTRIGSEL;
AdccRegs.ADCSOC11CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcdRegs.ADCSOC0CTL.bit.CHSEL = 0; //SOC0 will convert pin ADCD0(板子上为AD19)
AdcdRegs.ADCSOC1CTL.bit.CHSEL = 1; //SOC1 will convert pin ADCD1(板子上为AD20)
AdcdRegs.ADCSOC2CTL.bit.CHSEL = 2; //SOC2 will convert pin ADCD2(板子上为AD21)
AdcdRegs.ADCSOC3CTL.bit.CHSEL = 3; //SOC3 will convert pin ADCD3(板子上为AD22)
AdcdRegs.ADCSOC4CTL.bit.CHSEL = 4; //SOC4 will convert pin ADCD4(板子上为AD23)
AdcdRegs.ADCSOC5CTL.bit.CHSEL = 5; //SOC5 will convert pin ADCD5(板子上为AD24)
AdcdRegs.ADCSOC6CTL.bit.CHSEL = 5; //SOC6 will convert pin ADCD5(板子上为AD24)
AdcdRegs.ADCSOC7CTL.bit.CHSEL = 4; //SOC7 will convert pin ADCD4(板子上为AD23)
AdcdRegs.ADCSOC8CTL.bit.CHSEL = 3; //SOC8 will convert pin ADCD3(板子上为AD22)
AdcdRegs.ADCSOC9CTL.bit.CHSEL = 2; //SOC9 will convert pin ADCD2(板子上为AD21)
AdcdRegs.ADCSOC10CTL.bit.CHSEL = 1; //SOC10 will convert pin ADCD1(板子上为AD20)
AdcdRegs.ADCSOC11CTL.bit.CHSEL = 0; //SOC11 will convert pin ADCD0(板子上为AD19)
AdcdRegs.ADCSOC0CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcdRegs.ADCSOC1CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcdRegs.ADCSOC2CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcdRegs.ADCSOC3CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcdRegs.ADCSOC4CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcdRegs.ADCSOC5CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcdRegs.ADCSOC6CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcdRegs.ADCSOC7CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcdRegs.ADCSOC8CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcdRegs.ADCSOC9CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcdRegs.ADCSOC10CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcdRegs.ADCSOC11CTL.bit.ACQPS = ADCCQPS; //sample window is 100 SYSCLK cycles
AdcdRegs.ADCSOC0CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcdRegs.ADCSOC1CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcdRegs.ADCSOC2CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcdRegs.ADCSOC3CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcdRegs.ADCSOC4CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcdRegs.ADCSOC5CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcdRegs.ADCSOC6CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcdRegs.ADCSOC7CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcdRegs.ADCSOC8CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcdRegs.ADCSOC9CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcdRegs.ADCSOC10CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcdRegs.ADCSOC11CTL.bit.TRIGSEL = ADCTRIGSEL;
//ADCA/B/C/D均产生中断标志位,但只有ADCA在PIE中断向量表中使能
AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 11; //end of SOC11 will set INT1 flag //SOC11产生中断 //转换12次
AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1; //enable INT1 flag
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //make sure INT1 flag is cleared //每次转换结束都要清零
AdcbRegs.ADCINTSEL1N2.bit.INT1SEL = 11; //end of SOC11 will set INT1 flag //SOC11产生中断 //转换12次
AdcbRegs.ADCINTSEL1N2.bit.INT1E = 1; //enable INT1 flag
AdcbRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //make sure INT1 flag is cleared //每次转换结束都要清零
AdccRegs.ADCINTSEL1N2.bit.INT1SEL = 11; //end of SOC11 will set INT1 flag //SOC11产生中断 //转换12次
AdccRegs.ADCINTSEL1N2.bit.INT1E = 1; //enable INT1 flag
AdccRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //make sure INT1 flag is cleared //每次转换结束都要清零
AdcdRegs.ADCINTSEL1N2.bit.INT1SEL = 11; //end of SOC11 will set INT1 flag //SOC11产生中断 //转换12次
AdcdRegs.ADCINTSEL1N2.bit.INT1E = 1; //enable INT1 flag
AdcdRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //make sure INT1 flag is cleared //每次转换结束都要清零
//EPWM1作为触发源
EPwm1Regs.ETSEL.bit.SOCAEN = 0; // Disable SOC on A group
EPwm1Regs.ETSEL.bit.SOCASEL = 3; // 周期值和0值时均产生SOCA
EPwm1Regs.ETPS.bit.SOCAPRD = 1; // Generate pulse on 1st event
// EPwm1Regs.ETSEL.bit.SOCAEN = 1; // 允许SOCA产生 //在启用EPWM后允许中断
EDIS;
校准ADC的偏置程序如下(其中KADCA等均为1):
Uint16 i = 0;
for(i=0;i<6;i++) //先清零
{
ADCABias[i] = 0.0;
ADCBBias[i] = 0.0;
ADCCBias[i] = 0.0;
ADCDBias[i] = 0.0;
}
for(i=0;i<ADCCorrectCounter;i++)
{
AdcaRegs.ADCSOCFRC1.all = 0x0FFF; //SOC0-SOC11全部转换
AdcbRegs.ADCSOCFRC1.all = 0x0FFF; //SOC0-SOC11全部转换
AdccRegs.ADCSOCFRC1.all = 0x0FFF; //SOC0-SOC11全部转换
AdcdRegs.ADCSOCFRC1.all = 0x0FFF; //SOC0-SOC11全部转换
while(AdcaRegs.ADCINTFLG.bit.ADCINT1 == 0); //等待ADCA转换完成
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
while(AdcbRegs.ADCINTFLG.bit.ADCINT1 == 0); //等待ADCB转换完成
AdcbRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
while(AdccRegs.ADCINTFLG.bit.ADCINT1 == 0); //等待ADCC转换完成
AdccRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
while(AdcdRegs.ADCINTFLG.bit.ADCINT1 == 0); //等待ADCD转换完成
AdcdRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
ADCABias[0] += (float32)(AdcaResultRegs.ADCRESULT0+AdcaResultRegs.ADCRESULT11);
ADCABias[1] += (float32)(AdcaResultRegs.ADCRESULT1+AdcaResultRegs.ADCRESULT10);
ADCABias[2] += (float32)(AdcaResultRegs.ADCRESULT2+AdcaResultRegs.ADCRESULT9);
ADCABias[3] += (float32)(AdcaResultRegs.ADCRESULT3+AdcaResultRegs.ADCRESULT8);
ADCABias[4] += (float32)(AdcaResultRegs.ADCRESULT4+AdcaResultRegs.ADCRESULT7);
ADCABias[5] += (float32)(AdcaResultRegs.ADCRESULT5+AdcaResultRegs.ADCRESULT6);
ADCBBias[0] += (float32)(AdcbResultRegs.ADCRESULT0+AdcbResultRegs.ADCRESULT11);
ADCBBias[1] += (float32)(AdcbResultRegs.ADCRESULT1+AdcbResultRegs.ADCRESULT10);
ADCBBias[2] += (float32)(AdcbResultRegs.ADCRESULT2+AdcbResultRegs.ADCRESULT9);
ADCBBias[3] += (float32)(AdcbResultRegs.ADCRESULT3+AdcbResultRegs.ADCRESULT8);
ADCBBias[4] += (float32)(AdcbResultRegs.ADCRESULT4+AdcbResultRegs.ADCRESULT7);
ADCBBias[5] += (float32)(AdcbResultRegs.ADCRESULT5+AdcbResultRegs.ADCRESULT6);
ADCCBias[0] += (float32)(AdccResultRegs.ADCRESULT0+AdccResultRegs.ADCRESULT11);
ADCCBias[1] += (float32)(AdccResultRegs.ADCRESULT1+AdccResultRegs.ADCRESULT10);
ADCCBias[2] += (float32)(AdccResultRegs.ADCRESULT2+AdccResultRegs.ADCRESULT9);
ADCCBias[3] += (float32)(AdccResultRegs.ADCRESULT3+AdccResultRegs.ADCRESULT8);
ADCCBias[4] += (float32)(AdccResultRegs.ADCRESULT4+AdccResultRegs.ADCRESULT7);
ADCCBias[5] += (float32)(AdccResultRegs.ADCRESULT5+AdccResultRegs.ADCRESULT6);
ADCDBias[0] += (float32)(AdcdResultRegs.ADCRESULT0+AdcdResultRegs.ADCRESULT11);
ADCDBias[1] += (float32)(AdcdResultRegs.ADCRESULT1+AdcdResultRegs.ADCRESULT10);
ADCDBias[2] += (float32)(AdcdResultRegs.ADCRESULT2+AdcdResultRegs.ADCRESULT9);
ADCDBias[3] += (float32)(AdcdResultRegs.ADCRESULT3+AdcdResultRegs.ADCRESULT8);
ADCDBias[4] += (float32)(AdcdResultRegs.ADCRESULT4+AdcdResultRegs.ADCRESULT7);
ADCDBias[5] += (float32)(AdcdResultRegs.ADCRESULT5+AdcdResultRegs.ADCRESULT6);
}
for(i=0;i<6;i++)
{
ADCABias[i] = ADCABias[i]*(0.5/ADCCorrectCounter)*KADCA[i];
ADCBBias[i] = ADCBBias[i]*(0.5/ADCCorrectCounter)*KADCB[i];
ADCCBias[i] = ADCCBias[i]*(0.5/ADCCorrectCounter)*KADCC[i];
ADCDBias[i] = ADCDBias[i]*(0.5/ADCCorrectCounter)*KADCD[i];
}
读取ADC的程序如下:
while(AdcaRegs.ADCINTFLG.bit.ADCINT1 == 0); //等待ADCA转换完成
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
while(AdcbRegs.ADCINTFLG.bit.ADCINT1 == 0); //等待ADCB转换完成
AdcbRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
while(AdccRegs.ADCINTFLG.bit.ADCINT1 == 0); //等待ADCC转换完成
AdccRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
while(AdcdRegs.ADCINTFLG.bit.ADCINT1 == 0); //等待ADCD转换完成
AdcdRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
ADCAResults[0] = (float32)(AdcaResultRegs.ADCRESULT0+AdcaResultRegs.ADCRESULT11)*0.5*KADCA[0]-ADCABias[0];
ADCAResults[1] = (float32)(AdcaResultRegs.ADCRESULT1+AdcaResultRegs.ADCRESULT10)*0.5*KADCA[1]-ADCABias[1];
ADCAResults[2] = (float32)(AdcaResultRegs.ADCRESULT2+AdcaResultRegs.ADCRESULT9)*0.5*KADCA[2]-ADCABias[2];
ADCAResults[3] = (float32)(AdcaResultRegs.ADCRESULT3+AdcaResultRegs.ADCRESULT8)*0.5*KADCA[3]-ADCABias[3];
ADCAResults[4] = (float32)(AdcaResultRegs.ADCRESULT4+AdcaResultRegs.ADCRESULT7)*0.5*KADCA[4]-ADCABias[4];
ADCAResults[5] = (float32)(AdcaResultRegs.ADCRESULT5+AdcaResultRegs.ADCRESULT6)*0.5*KADCA[5]-ADCABias[5];
ADCBResults[0] = (float32)(AdcbResultRegs.ADCRESULT0+AdcbResultRegs.ADCRESULT11)*0.5*KADCB[0]-ADCBBias[0];
ADCBResults[1] = (float32)(AdcbResultRegs.ADCRESULT1+AdcbResultRegs.ADCRESULT10)*0.5*KADCB[1]-ADCBBias[1];
ADCBResults[2] = (float32)(AdcbResultRegs.ADCRESULT2+AdcbResultRegs.ADCRESULT9)*0.5*KADCB[2]-ADCBBias[2];
ADCBResults[3] = (float32)(AdcbResultRegs.ADCRESULT3+AdcbResultRegs.ADCRESULT8)*0.5*KADCB[3]-ADCBBias[3];
ADCBResults[4] = (float32)(AdcbResultRegs.ADCRESULT4+AdcbResultRegs.ADCRESULT7)*0.5*KADCB[4]-ADCBBias[4];
ADCBResults[5] = (float32)(AdcbResultRegs.ADCRESULT5+AdcbResultRegs.ADCRESULT6)*0.5*KADCB[5]-ADCBBias[5];
ADCCResults[0] = (float32)(AdccResultRegs.ADCRESULT0+AdccResultRegs.ADCRESULT11)*0.5*KADCC[0]-ADCCBias[0];
ADCCResults[1] = (float32)(AdccResultRegs.ADCRESULT1+AdccResultRegs.ADCRESULT10)*0.5*KADCC[1]-ADCCBias[1];
ADCCResults[2] = (float32)(AdccResultRegs.ADCRESULT2+AdccResultRegs.ADCRESULT9)*0.5*KADCC[2]-ADCCBias[2];
ADCCResults[3] = (float32)(AdccResultRegs.ADCRESULT3+AdccResultRegs.ADCRESULT8)*0.5*KADCC[3]-ADCCBias[3];
ADCCResults[4] = (float32)(AdccResultRegs.ADCRESULT4+AdccResultRegs.ADCRESULT7)*0.5*KADCC[4]-ADCCBias[4];
ADCCResults[5] = (float32)(AdccResultRegs.ADCRESULT5+AdccResultRegs.ADCRESULT6)*0.5*KADCC[5]-ADCCBias[5];
ADCDResults[0] = (float32)(AdcdResultRegs.ADCRESULT0+AdcdResultRegs.ADCRESULT11)*0.5*KADCD[0]-ADCDBias[0];
ADCDResults[1] = (float32)(AdcdResultRegs.ADCRESULT1+AdcdResultRegs.ADCRESULT10)*0.5*KADCD[1]-ADCDBias[1];
ADCDResults[2] = (float32)(AdcdResultRegs.ADCRESULT2+AdcdResultRegs.ADCRESULT9)*0.5*KADCD[2]-ADCDBias[2];
ADCDResults[3] = (float32)(AdcdResultRegs.ADCRESULT3+AdcdResultRegs.ADCRESULT8)*0.5*KADCD[3]-ADCDBias[3];
ADCDResults[4] = (float32)(AdcdResultRegs.ADCRESULT4+AdcdResultRegs.ADCRESULT7)*0.5*KADCD[4]-ADCDBias[4];
ADCDResults[5] = (float32)(AdcdResultRegs.ADCRESULT5+AdcdResultRegs.ADCRESULT6)*0.5*KADCD[5]-ADCDBias[5];