Шум АЦП arduino и atmega8 ?

tran
Offline
Зарегистрирован: 20.10.2012

Здравствуйте! Решил собрать вольтметр. Схема простая - делитель напряжения на резисторах. Приснятии показаний с делителя наблюдается сдедущая картина: напряжение на входе постоянное(мультметр вроде не врет, показания не скачут), при преобразовании в цифру и вывод на экран, напряжение начинает "скакать" на младших разрядах. Т.е. на входе 9,65 В, а ардуино говорит что либо 9.65В ,либо 9,73В, или 9,54В. Как избавиться? 

#include <LiquidCrystalRus.h>

LiquidCrystalRus lcd(12, 11, 5, 4, 3, 2);
    
 int analogInputVolts = A5;
 float vout = 0.0;
 float vin = 0.0;
 float v_select = 0.0;
 float amps = 0.0;
 int v_reg = 0;
  
 float R1 = 10200.0;        // resistance of R1 
 float R2 = 2040.0;        // resistance of R2
 float V5 = 5.00; // Arduino supply

int readVoltsADC = 0;

void setup(){
   lcd.begin(16, 2);
   pinMode(analogInputVolts, INPUT);
     
                       // 9600, 14,400, 19,200 or 38,400 available on the ByVac LCD.
                                         // Arduino recommend no higher than 9600.
                       // Send 'CR' for the LCD to establish the speed.

}
 
float fmap(float x, float in_min, float in_max, float out_min, float out_max) {
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
 
void loop() {
   readVoltsADC = analogRead(analogInputVolts);
   readVoltsADC = readVoltsADC + analogRead(analogInputVolts);
   readVoltsADC = readVoltsADC / 2;
   vout = (readVoltsADC * V5) / 1023.0;
   vin = vout / (R2/(R1+R2));
   
     lcd.setCursor(0, 0); 
     lcd.print("Voltage  "); 
     lcd.setCursor(9, 0);   
     lcd.print(vin); 
     delay(500);
     lcd.clear();
     i=0;
   }
   

}

 

tran
Offline
Зарегистрирован: 20.10.2012

Прочитал, что может быть виновато опорное напряжение. Или на вход АЦП ставить конденсаторы?

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

У меня такой  же делитель работает нормально. Как то вы данные пребразуете не так.

5/1024*входящее значение* коэффициент деления внешнего делителя.

maksim
Offline
Зарегистрирован: 12.02.2012

Мультиметр усредняет побольше, а у вас всего по двум значениям усредняется. Сделайте по 10 зачениям.
И естественно, VCC скачет + к тому же у вас наверняка и дисплей подключен к +5V. Поставьте резистор R2 меньшего номинала и включите внутренний источник опорного напряжения 1,1 вольта. Либо нужно подключать внешний ИОН.

step962
Offline
Зарегистрирован: 23.05.2011

maksim пишет:

Поставьте резистор R2 меньшего номинала и включите внутренний источник опорного напряжения 1,1 вольта.

Atmel гарантирует попадание внутреннего опорного напряжения в диапазон 1.0 - 1.2 В - и не более того (таблица 28-7 даташита, Internal Voltage Reference Min-Typ-Max). Т.е. в подобном варианте необходимо считаться с возможностью погрешности до 10%. В случае топикстартера это +/- 1 В.

maksim
Offline
Зарегистрирован: 12.02.2012

Тогда, остается только внешний ИОН.

Immortal
Offline
Зарегистрирован: 28.12.2013

Столкнулся с проблеммой выбора внешнего ИОН.

Посоветуйте ИОН до 2-3 баксов за штуку, что то вроде MC1403 с Output Voltage: 2.5 V 25 mV или лучше.

Напряжение нужно от 2.5В до 5В

a5021
Offline
Зарегистрирован: 07.07.2013

Под эти требования попадает и старый добрый TL431A с точностью 1%.  Стоит он вообще копейки. Если хочется чего-то позабористей, то я бы посмотрел на LM4040. С буквой "А" у него точность 0.1%.

Immortal
Offline
Зарегистрирован: 28.12.2013

TL431A уже есть, хочется что то поточнее. Спасибо, попробую LM4040A.

Тем временем я провел небольшое исследование:

Mикросхемы опорного напряжения:
Наименование Напряжение Допуск
LT1021DCN 5 +-0.05%
LH0070 10.000 -+0.02%
ICL8069 1.2 +-0.01%

LM9140BYZ 2.5 +-0.5%
LM9140BYZ 5 +-0.5%
REF02CN8 5 +-0.3%
TL431C 2.5-36 +-1% 30ppm/C
LT1431CZ 5 +-1%
LM336 2.5 +-1%
LM336 5 +-1%
ZN404 2.45 +-3%

А какие будут рекоммендации по тестированию разных МС ИОН?

Я встречал в правильных устройствах на всех цифровых портах микроконтроллера висели между выводом и внешней нагрузкой резисторы 100-240 Ом - специально чтобы уменьшить токи при переключении состояния вывода и таким образом уменьшить ВЧ помехи, ну и естественно, тактовая частота была минимально возможная.

Я думаю на время теста вообще все входы (кроме одного аналогового) не использовать и посадить на землю, а МК запитать от литиевой батарейки 18650 4.2В, отсчеты записать в ОЗУ и уже после завершения теста подключать последовательный порт и передать их на компьютер

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Immortal, помнится я тоже собирался прикупить какой-то дорогой ион, кажется max6225a , и использовать его для калибровки изготавливаемых девайсов, но потом купил такую штуку, и успокоился) С ней даже удобнее, несколько напряжений на выбор.