atmega16单片机AD转化误差太大,技术手册上说AD转换有10位精度,
可以推出: 如果测量范围是:0~5.03V,那么按照10位精度来说,5.03/1024=4.9mV,也就是可以测量到5mV
但是,实际测量精度是:只能正确的测量到V级别,就别提精确测量到5mV级别了.
我想问:1,如何提高AD转化精度?
2,测量效果这么差,是由于我硬件有问题呢, 还是我的软件有问题?
硬件图纸如下:
软件部分程序如下:开发环境是:iar embedded workbench IDE
void InitADC(void)
{
ADCH &= 0X03;
ADCSRA = 0X00;
ADMUX = 0x41; //选择通道A1,AVCC作为参考电压,转化结果右对齐
ACSR = 0X80; //模拟比较器关闭
SFIOR &= 0x1F;
SFIOR |= 0x80; //自动触发源选择:定时器0溢出
ADCSRA = 0XAF; //使能ADC和自动触发,128分频中断使能,16us
ADCSRA |= DB7; //开始转换
}
void T0Init(void)
{
TCCR0 = 0X05; //1024分频,晶振8MHz,128us
TCNT0 = 0xb1; //10ms
//TIMSK &= 0xfe; //停止定时溢出中断使能
TIMSK |= 0x01; //定时溢出中断使能
}
#pragma vector=ADC_vect
__interrupt void adc_isr(void)
{
ADC_cnt++;
ADCSRA &= 0x7F; //停止转换
ADCSRA = 0X00;
if(ADC_cnt>1)
{
ADC_cnt = 0;
ADC_value += ADCL;
ADC_value += (ADCH*256);
voltage = (((float)ADC_value)*0.004921);//4.921875
ADC_value = 0;
}
ADCH &= 0X03;
ADCSRA = 0XA8; //使能ADC和自动触发,128分频中断使能,16us
ADCSRA |= DB7; //开始转换
ADC_finish_flag = 1;
}
应该是硬件方面的问题.
追答AD输入波动大?还是单片机电源电压波动大?如果电源波动大那就用基准电压源TL431之类的。