ipoqing 发表于 2013-2-18 14:28:40

mega128模数转换,得出的数值浮动太大,请大侠帮忙

如果用满量程为1024的话,那么几乎取样得出的数据波动会在200+以上,请问造成这样大的波动的因素是什么呢?采样通道上的数据值是比较稳定的,就是ad转换后,显示的数据波动太厉害了。


/********************************************************************
* 名称 : read_adc(void)
* 功能 : 采集adc0和adc1通道上的值
* 输入 : 无
* 输出 : 无
***********************************************************************/
void read_adc(void)
{   
    uchar i,j;


    ADCSRA=0x00;//清零
    delay_ms(10);
    ADMUX=0x00;//选择外部参考电压,通道0
    delay_us(5);
    ADCSRA|=(1<<ADEN)|(1<<ADSC)|0x07; //使能ad转换,128分频
    delay_ms(100);   //延时等待转换完成
    adc0_l=ADCL;//取出数据低八位
    delay_us(5);
    adc0_h=ADCH;
    delay_us(500);
    adc0_data=((adc0_h<<8)|adc0_l);
    delay_ms(100);

    table_adc0=adc0_data/1000;//处理ad采样值,以便进行显示
    delay_us(5);
    table_adc0=adc0_data%1000/100;
    delay_us(5);
    table_adc0=adc0_data%100/10;
    delay_us(5);
    table_adc0=adc0_data%10;
    delay_ms(100);      
    set_address(3,1);//设定显示的地址
    delay_us(20);//延时不可取消
    for(i=0;i<4;i++)
    {
      write_data(table_adc0+0x30);//将ad0采样值在液晶上显示出来
      delay_us(5);//必须加延时
    }
   


    delay_ms(100);

    ADCSRA=0x00; //清零
    delay_ms(10);
    ADMUX=0x01;//选择外部参考电压,通道1
    delay_us(5);
        ADCSRA|=(1<<ADEN)|(1<<ADSC)|0x07;   //ad使能,128分频
    delay_ms(100);   
    adc1_l=ADCL;
    delay_us(5);   
    adc1_h=ADCH;   
    delay_us(500);
    adc1_data=((adc1_h<<8)|adc1_l);//可以进行修正
    delay_ms(100);

    table_adc1=adc1_data/1000;//处理ad1数据
    delay_us(5);
    table_adc1=adc1_data%1000/100;
    delay_us(5);
    table_adc1=adc1_data%100/10;
    delay_us(5);
    table_adc1=adc1_data%10;
    delay_ms(100);
   
    set_address(3,2);//设定显示地址
    delay_us(20);

    for(j=0;j<4;j++)
    {
      write_data(table_adc1+0x30);//显示通道1上的采样值
      delay_us(5);
    }
    delay_ms(100);
}

ipoqing 发表于 2013-2-18 17:12:47

而且还有个怪现象就是通道1采样的值比通道2采样的值的波动要小很多,不知道各位有没有遇到过。以前用51采样几乎很少波动的撒

shuishuo615 发表于 2013-2-18 20:25:39

是不是相应的IO口要设置城浮空输入

shuishuo615 发表于 2013-2-18 21:33:56

还有,你附近有没有干扰源?数字量?开关量?

ipoqing 发表于 2013-2-19 08:22:27

shuishuo615 发表于 2013-2-18 20:25 static/image/common/back.gif
是不是相应的IO口要设置城浮空输入

DDRF=0xf0;//设置为输入
PORTF=0xf0;//拉低(这个不管是上拉还是拉低,我调试的结果都是一样的)

不知道大侠说的拉低是不是指的这个?

ipoqing 发表于 2013-2-19 08:24:26

shuishuo615 发表于 2013-2-18 21:33 static/image/common/back.gif
还有,你附近有没有干扰源?数字量?开关量?

干扰源原本是有的,原先用的是贴片的lmv358,最后发下性能不好,就改用直插LMV358就没有干扰了。

AVRTDK 发表于 2013-2-19 08:26:56

多次测量求平均值

ipoqing 发表于 2013-2-19 08:30:15

AVRTDK 发表于 2013-2-19 08:26 static/image/common/back.gif
多次测量求平均值

其中通道一检测时波动是从0v对应的数值开始波动,这样求平均值也会误差较大的

kite2006 发表于 2013-2-19 08:59:19

我遇到过,找不到原因,
强力滤波吧,简单办法就是软件平均,还能对付

ipoqing 发表于 2013-2-19 09:26:50

kite2006 发表于 2013-2-19 08:59 static/image/common/back.gif
我遇到过,找不到原因,
强力滤波吧,简单办法就是软件平均,还能对付

之前用51+ad0804采集的数据都是很稳定的了。现在用这个avr调试好久了,如果要是单独用通道1的话,数值波动比较小,但是一旦用通道0就会出现很大的波动。还得慢慢调试啊!

shuishuo615 发表于 2013-2-18 14:28:41

ipoqing 发表于 2013-2-19 08:22 static/image/common/back.gif
DDRF=0xf0;//设置为输入
PORTF=0xf0;//拉低(这个不管是上拉还是拉低,我调试的结果都是一样的)



我没用过avr的mcu,没有floatinog input这种模式吗?

你用示波器看看
1 采样信号不连接mcu时候,有没有抖动

2 采样信号连接MCU后,的波形情况

小赵zyong 发表于 2013-2-19 14:14:43

一般是硬件问题 你先用单片机采一下稳压源的电压 ,看输出是否稳定。

ipoqing 发表于 2013-2-19 17:38:22

多谢各位的热心解答,问题已经基本弄明白了,还是放大后有高次谐波干扰造成的,在采集的数据终端又加了滤波电路,结果有明显改善

ipoqing 发表于 2013-2-19 17:39:10

小赵zyong 发表于 2013-2-19 14:14 static/image/common/back.gif
一般是硬件问题 你先用单片机采一下稳压源的电压 ,看输出是否稳定。

谢谢,确实是硬件的问题

ipoqing 发表于 2013-2-19 17:40:11

shuishuo615 发表于 2013-2-19 11:55 static/image/common/back.gif
我没用过avr的mcu,没有floatinog input这种模式吗?

你用示波器看看


谢谢,是硬件电路的问题,我在数据终端加了滤波电路就有明显的改善

chxaitz 发表于 2013-2-21 10:21:49

嗯,可能会遇到,Mark一下~
页: [1]
查看完整版本: mega128模数转换,得出的数值浮动太大,请大侠帮忙