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);
}
而且还有个怪现象就是通道1采样的值比通道2采样的值的波动要小很多,不知道各位有没有遇到过。以前用51采样几乎很少波动的撒 是不是相应的IO口要设置城浮空输入 还有,你附近有没有干扰源?数字量?开关量? shuishuo615 发表于 2013-2-18 20:25 static/image/common/back.gif
是不是相应的IO口要设置城浮空输入
DDRF=0xf0;//设置为输入
PORTF=0xf0;//拉低(这个不管是上拉还是拉低,我调试的结果都是一样的)
不知道大侠说的拉低是不是指的这个? shuishuo615 发表于 2013-2-18 21:33 static/image/common/back.gif
还有,你附近有没有干扰源?数字量?开关量?
干扰源原本是有的,原先用的是贴片的lmv358,最后发下性能不好,就改用直插LMV358就没有干扰了。 多次测量求平均值 AVRTDK 发表于 2013-2-19 08:26 static/image/common/back.gif
多次测量求平均值
其中通道一检测时波动是从0v对应的数值开始波动,这样求平均值也会误差较大的 我遇到过,找不到原因,
强力滤波吧,简单办法就是软件平均,还能对付 kite2006 发表于 2013-2-19 08:59 static/image/common/back.gif
我遇到过,找不到原因,
强力滤波吧,简单办法就是软件平均,还能对付
之前用51+ad0804采集的数据都是很稳定的了。现在用这个avr调试好久了,如果要是单独用通道1的话,数值波动比较小,但是一旦用通道0就会出现很大的波动。还得慢慢调试啊! 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 static/image/common/back.gif
一般是硬件问题 你先用单片机采一下稳压源的电压 ,看输出是否稳定。
谢谢,确实是硬件的问题 shuishuo615 发表于 2013-2-19 11:55 static/image/common/back.gif
我没用过avr的mcu,没有floatinog input这种模式吗?
你用示波器看看
谢谢,是硬件电路的问题,我在数据终端加了滤波电路就有明显的改善 嗯,可能会遇到,Mark一下~
页:
[1]