AD12转换结果的研究!

楼主
AD12转换结果的研究!
[IMG=0,absmiddle]http://hiphotos.baidu.com/dzzxq/pic/item/9fc7ec502c1f5a498735246c.jpg[/IMG]
项目中打算用149的三个通道来测,现在实验结果如下:

一、当没有任何输入时,三个通道的显示分别为0.9388,0.9242,0.9212。最后两位跳动厉害

二、当只给第一路输入电压0.33V时,三个通道的显示分别为0.2853(最后一位数字跳动),0.6460,0.8575,最后两位跳动。
  当只给第二路输入电压0.33V时,三个通道的显示分别为0.8322,0.2875(最后一位数字跳动),0.6670,其余后两位数字跳动。
  当只给第三路输入电压0.33V时,三个通道的显示分别为0.6560,0.8370,0.2890(最后一位数字跳动),其余后两位数字跳动。
  当三路同时输入电压0.33V时,三个通道的显示分别为0.2850,0.2861,0.2872,前两个数据只是最后一个数字跳动,最后一个数据后两位都会跳动。

附部分主要程序
AD12设置
void Init_ADC()
{
  P6SEL|=BIT0;
  P6SEL|=BIT1;
  P6SEL|=BIT2;
  ADC12CTL0&=~ENC;  
  ADC12CTL0=REFON+SHT0_2+MSC+ADC12ON;
  ADC12CTL0&=~REF2_5V;//1.5V基准源
  ADC12MCTL0=INCH_0+SREF_1;  
  ADC12MCTL1=INCH_1+SREF_1;  
  ADC12MCTL2=INCH_2+SREF_1+EOS;
  ADC12CTL1=SHP+CONSEQ_1;//多通道,单次转换
  ADC12CTL0|=ENC;
}
查询方式采样1024次取平均
    Voltage_Temp[0]=0;
    Voltage_Temp[1]=0;
    Voltage_Temp[2]=0;
    for(i=0;i<1024;i++)
    {
      ADC12CTL0|=ADC12SC;     
      while(!(ADC12IFG&BIT0));
      result[0]=ADC12MEM0;
      Voltage_Temp[0]+=result[0];
     
      while(!(ADC12IFG&BIT1));
      result[1]=ADC12MEM1;
      Voltage_Temp[1]+=result[1];
     
      while(!(ADC12IFG&BIT2));
      result[2]=ADC12MEM2;
      Voltage_Temp[2]+=result[2];

    }
    result[0]=Voltage_Temp[0]>>10;
    Voltage[0]=result[0]/(float)4095*1.5;
    result[1]=Voltage_Temp[1]>>10;
    Voltage[1]=result[1]/(float)4095*1.5;    
    result[2]=Voltage_Temp[2]>>10;
    Voltage[2]=result[2]/(float)4095*1.5;  

[COLOR=#F70968][SIZE=2][b]探讨问题:
1、没有输入时,能不能不显示这么大的数据
2、为什么第三路跳动最大呢[/b][/COLOR][/SIZE]

结果补充:又加了一路通道,进行实验,这样我用了四个通道,结果显示,前两路通道稳定,后两路通道数据跳动较大。不知道什么原因呢?
1楼
我现在用12通道多次转换,出现不接任何输入,都显示一个不断跳动的大输出,希望能在这找到解决问题的方法
2楼
楼主这种做法我初步估计应该是人为操作误用所致。
首先应该以空无输入的方法来做任何的对比、输入空着得到的数据无意义。
其次,建议不要多个输入端直接接输入同一个信号源,以免这种并接互相影响到测量的效果。更好的做法是每路能够单独接一个缓冲器。以保证每路测量的独立性。
3楼
1、没有输入时,能不能不显示这么大的数据

你这个方法得到这个值没有意义 如果要测零值 应该将输入短路
4楼
楼上的没明白楼主的意思,楼主的意思是开路的时候应该显示0,而不是为了要测0
5楼
管脚不接时,外部干扰能影响AD采样值,它的值跟你板子上管脚附近的元器件和走线有关!

电脑版 Page created in 0.0625 seconds width 2 queries.