fxk1220 发表于 2012-10-31 09:48:56

MSP430F5418A AD转换结果问题

本帖最后由 fxk1220 于 2012-10-31 09:50 编辑

ADC12转换结果跳动大,而且经常出现511这个数值。用内部参考电压2.5V 时,特别不稳定,AD转换结果很不理想,当用VCC做参考电压时,跳动范围大,但总体来说稍微好一点,输出结果相对线性些。哪位用过ADC遇到过类似的问题吗,求解,谢谢

初始化程序如下:
static void ADC_init(void)
{
        UINT16 i;
        P6DIR &=~(BIT3 +BIT4+BIT5);   //P6.3--P6.5dir set input status;
        P6SEL |= BIT3 +BIT4 +BIT5;       // ADC enable;
        REFCTL0&= ~REFMSTR;
        ADC12CTL0 = 0;   
        ADC12CTL0 = ADC12ON + ADC12MSC + ADC12SHT0_12 + ADC12REFON + ADC12REF2_5V;//AD采样保持周期为1024个时钟
   ADC12CTL1 = ADC12SHP + ADC12CONSEQ_3 +ADC12SSEL_3;                           // 选择转换模式    SMCLK   
   ADC12CTL2 = ADC12RES_1 +ADC12TCOFF +ADC12REFOUT;   //10 bit ,and shut down Temperature Sensor
   // REFmodule enable;Vref output 2.5V
   //REFCTL0= REFMSTR + REFVSEL_2 + REFTCOFF + REFON + REFOUT;

        ADC12MCTL0 |= ADC12SREF_1 + ADC12INCH_3;                     //通道 4
        ADC12MCTL1 |= ADC12SREF_1 + ADC12INCH_4;                     //通道 5
        ADC12MCTL2 |= ADC12SREF_1 + ADC12INCH_5 +ADC12EOS;             //通道 6
       
        for (i=0; i<0xFFFF; i++);                                       // 等待基准电压建立                     
        UCSCTL8 |= SMCLKREQEN;
        ADC12CTL0 |= ADC12ENC;                                       // Enable conversions
}

后面取值部分:

for(sample = 0; sample < Temp_CT; sample++)
   {
         ADC12CTL0 |= ADC12SC;                   // Start conversion
                delay_us(150);
         while (!(ADC12IFG & BIT2));
                delay_us(30);
         measure_value.tmp = ADC12MEM0;
         measure_value.tmp = ADC12MEM1;
         measure_value.tmp = ADC12MEM2;
               
                delay_us(100);
         ADC12CTL0 &= ~ADC12SC;                                // Stop conversion
                delay_us(100);
   }

fxk1220 发表于 2012-11-8 10:17:34

并电容了。没有用中断是中断太多了,另外测量值后面的的有一些复杂的运算等。在中断里处理不方便。不过现在改用VCC做参考电压就好多了,
页: [1]
查看完整版本: MSP430F5418A AD转换结果问题