讲解一下ADC的配置,对新手有点帮助,老手跳过哈。
我们直接上代码看配置:
void Adc_Config(void) { EALLOW; AdcRegs.ADCCTL1.bit.INTPULSEPOS = 0; //ADC begins conversion,Set Eoc2 ADC interrupt; //ADCINT1 trips after AdcResults latch AdcRegs.ADCSAMPLEMODE.bit.SIMULEN0 = 1; //ADCINA0 and ADCINB0 Sampling simulatence AdcRegs.ADCSOC0CTL.bit.CHSEL = 0; //set SOC0 channel select to ADCINA1,ADCINB1 AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 5; //Soft Triger ADCSOC0 For Phase A and B Zero Current Detection AdcRegs.ADCSOC0CTL.bit.ACQPS = 20; //set SOC0 S/H Window to 7 ADC Clock Cycles, (6 ACQPS plus 1) AdcRegs.ADCSAMPLEMODE.bit.SIMULEN2 = 1; AdcRegs.ADCSOC2CTL.bit.CHSEL = 0; AdcRegs.ADCSOC2CTL.bit.TRIGSEL = 5; AdcRegs.ADCSOC2CTL.bit.ACQPS = 20; AdcRegs.ADCSAMPLEMODE.bit.SIMULEN4 = 1; AdcRegs.ADCSOC4CTL.bit.CHSEL = 1; AdcRegs.ADCSOC4CTL.bit.TRIGSEL = 5; AdcRegs.ADCSOC4CTL.bit.ACQPS = 10; AdcRegs.INTSEL1N2.bit.INT1E = 1; AdcRegs.INTSEL1N2.bit.INT1CONT = 0; AdcRegs.INTSEL1N2.bit.INT1SEL = 2; EDIS; }
初学者一头雾水,我几句话给你搞清楚:
1、SOC=Source of convertion,就是转换源,有16个,因为有CHA0~A7,CHB0~B7共16个通道,但不是一一对应的,每个SOC的通道可以随意选。
2、SIMULENx表示是否同步采样,如果是,则对应SOCx同时采CHSELx(Ax,Bx),比如SIMULEN2=1,CHSEL=0,就会同时采A0 B0。
由于SOC的CHSEL可以随意选,那么两个SOC设置同样的CHSEL会怎么样?比如:
SIMULEN0=1;SOC0.CHSEL=0; SIMULEN2=1;SOC2.CHSEL=0;
很简单,他们都是采样的A0 B0,那么你就会得到2个一样数据,加起来除于2数据就会准一点络。
同步采呢只能是偶数的SOC(0-2-4。。。),奇数(1-3-7。。。)是无效的。
3、ADC结果,也有16个,ADCRESULT0~15。单个采那就单个读,同步采就不是这样了,是挨着读了。比如上面的:
RESULT0=A0,RESULT1=B0;
RESULT2=A0,RESULT3=B0;//(因为都是采的0通道)
那么实际的A0通道可以这样得到:(RESULT0 + RESULT2)/2,牛逼吧?
4、最复杂的同步采说完了,就是其他触发采样了,以后再说!