Ошибка вольтметра

Skayl
Offline
Зарегистрирован: 26.01.2014

Доброшо времени суток! Помогите разобраться с проблемой. Есть скетч в котором используется измерение напряжения аккумулятора. Все работает нормально, а вот напругу меряет как то по хитрому, цыфры, показывающие вольты меняются как попало. А у меня прога привязана к этим напряжениям, т.е. по достижении определенного напряжения произойдет вкл. или откл.

Думал что ошибка где то в программе, загрузил скетч обычного вольтметра, тот же результат.

Ссыль на видео, думаю так будет понятнее. http://youtu.be/kjL1jIU9l0c

 

com
Offline
Зарегистрирован: 06.09.2013

ардуино работает от измеряемого аккумулятора?

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

Skayl, девиация в 10 мв у вас  - типовой шум оцифровки. Тема борьбы явлением с этим уже многократно обсуждалось, хотя бы тут недавно: http://arduino.ru/forum/programmirovanie/usrednenie-znachenii-s-potentsi...

com
Offline
Зарегистрирован: 06.09.2013

dimax пишет:

Skayl, девиация в 10 мв у вас  - типовой шум оцифровки. Тема борьбы явлением с этим уже многократно обсуждалось, хотя бы тут недавно: http://arduino.ru/forum/programmirovanie/usrednenie-znachenii-s-potentsi...

там не 10 мв, а почти в 10 раз больше

Skayl
Offline
Зарегистрирован: 26.01.2014

com пишет:

ардуино работает от измеряемого аккумулятора?

Да, тока через стабилизатор напряжения в 5В, а измеряю аккум

dimax пишет:

Skayl, девиация в 10 мв у вас  - типовой шум оцифровки. Тема борьбы явлением с этим уже многократно обсуждалось, хотя бы тут недавно: http://arduino.ru/forum/programmirovanie/usrednenie-znachenii-s-potentsiometra

Спасибо конечно, но я пока что слаб в программировании и понять эту тему чтоб использовать ее под себя не смогу

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

Skayl, как уточнил COM я несколько ошибся в разрядности, у вас  девиация зашкаливает все мыслимые нормы. Очевидный аппаратный косяк. В чём именно сказать сложно,  по вашему видео не разобрать что и куда включено. Что за DIP8 микруха там?

 

Skayl
Offline
Зарегистрирован: 26.01.2014

dimax ДИП это стабилизатор 5В LM2671. Напряжение меряется на аккуме через делитель 5К и 100К подключены к А0. Плата NANO V3. Пробовал на другой такой же, тот же косяк. Индикатор менял на ЖК - тоже самое. 

Мозг кипит, выручайте кто может

com
Offline
Зарегистрирован: 06.09.2013

Skayl пишет:

com пишет:

ардуино работает от измеряемого аккумулятора?

Да, тока через стабилизатор напряжения в 5В, а измеряю аккум

попробуйте измерить на любом другом, от которого ничего не запитано

Skayl
Offline
Зарегистрирован: 26.01.2014

com пишет:

попробуйте измерить на любом другом, от которого ничего не запитано

Пробовал измерять на кроне, тоже самое, запитывал ардуино от КРЕН5 - тоже самое.

Мыслей больше у меня нет

 

 

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

Простой опыт: соединяем последовательно две - три батарейки по 1.5 вольта (чтобы их общее напряжение не превысило 5 вольт), и подключаем к измерительному пину. Если показание так же прыгает - разбираемся с ардуиной, если не прыгает - тогда виноват делитель.

com
Offline
Зарегистрирован: 06.09.2013

Skayl пишет:

Мыслей больше у меня нет

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

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

Skayl, на время экспериментов уберите ваш преобразователь, запитайте ардуину от хорошего БП. Посадите выход AREF через ёмкость 10..100н на минус. Не делайте делитель напряжения с гигантским запасом, этим вы уменьшаете эффективную разрядность АЦП. Если больше 15 вольт у вас не может быть, то и поставьте делитель 5к/10к

ales2k
Offline
Зарегистрирован: 25.02.2013

Возможно линейный стаб шумит и вы меряете пиковые значения этого шума.

Попробуйте без него от батарейки.

Skayl
Offline
Зарегистрирован: 26.01.2014

Подключил через КРЕН5, измеряем 2 батарейки АА.

Вот видео http://youtu.be/Hmh_05bwbzA

Отцепил КРЕН, питание через USB, измеряем 2 батарейки АА.

Видео http://youtu.be/vO-peDILJ0I

Другого питания у меня нет...

Делитель выбран специально такой, напряжение в будущем планируется порядка 60В

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

Skayl пишет:

Делитель выбран специально такой, напряжение в будущем планируется порядка 60В

Нет, сначала сделайте нормальный делитель на 15 вольт. У вас сейчас вся шкала где-то под 100 вольт (если референс=5 вольт). Соответственно минимальный отсчёт = 100/1023 ~ 100 милливольт.  Поскольку нормальная девиация +/- 2 единицы, то у вас 12-вольтовое напряжение может законно прыгать от 11,8 до 12, 2 вольта! Вы же наверняка не хотели такой погрешности? Что-бы измерять бОльшие напряжения нужно делать автоматическое переключение диапазонов. Потребуется один полевик и пара тройка резисторов. Но это отдельная тема для обсуждения программно-аппратного решения автодиапазона.

Skayl
Offline
Зарегистрирован: 26.01.2014

dimax, спасибо, попробую, но чуть позже, сейчас неисчего собрать делитель

Skayl
Offline
Зарегистрирован: 26.01.2014

Делители поменял, поставил чтобы можно было мерить 50В и 15В. Стало лучше, спасибо dimax за идею. При установке индикатора ЖК, немного еще видно изменение в разряде сотых вольта, но это не критично.

А вот при установке индикатора OLED, показания прыгают как и прежде. Скорее всего у него очень большое быстродействие и он успеват выхватывать все изменения и тут же их отображать. Вот как с этим бороться?

ales2k
Offline
Зарегистрирован: 25.02.2013

Усреднять программно или поставить небольшой конденсатор на делитель - тогда изменения будут плавнее и отставать от реальности на время разряда емкости на дельту напряжения.

ales2k
Offline
Зарегистрирован: 25.02.2013

Если мерять на самом микроконтроллере, то можно использовать внутренний вольтметр ну или свериться с ним он довольно точный

int getBandgap(void) // Returns actual value of Vcc (x 100)
{
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
     // For mega boards
     const long InternalReferenceVoltage = 1115L;  // Adjust this value to your boards specific internal BG voltage x1000
        // REFS1 REFS0          --> 0 1, AVcc internal ref. -Selects AVcc reference
        // MUX4 MUX3 MUX2 MUX1 MUX0  --> 11110 1.1V (VBG)         -Selects channel 30, bandgap voltage, to measure
     ADMUX = (0<<REFS1) | (1<<REFS0) | (0<<ADLAR)| (0<<MUX5) | (1<<MUX4) | (1<<MUX3) | (1<<MUX2) | (1<<MUX1) | (0<<MUX0);
#else
     // For 168/328 boards
     const long InternalReferenceVoltage = 1056L;  // Adjust this value to your boards specific internal BG voltage x1000
        // REFS1 REFS0          --> 0 1, AVcc internal ref. -Selects AVcc external reference
        // MUX3 MUX2 MUX1 MUX0  --> 1110 1.1V (VBG)         -Selects channel 14, bandgap voltage, to measure
     ADMUX = (0<<REFS1) | (1<<REFS0) | (0<<ADLAR) | (1<<MUX3) | (1<<MUX2) | (1<<MUX1) | (0<<MUX0);
#endif
     delay(20);  // Let mux settle a little to get a more stable A/D conversion
        // Start a conversion  
     ADCSRA |= _BV( ADSC );
        // Wait for it to complete
     while( ( (ADCSRA & (1<<ADSC)) != 0 ) );
        // Scale the value
     int results = (((InternalReferenceVoltage * 1023L) / ADC) + 5L) / 10L; // calculates for straight line value 
     return results;
}

 

Skayl
Offline
Зарегистрирован: 26.01.2014

alex2k, теперь возникает другой вопрос: куда в мою программу и что вставить? Не силен в программировании.

#include <LiquidCrystalRus.h>
LiquidCrystalRus lcd(7, 6, 5, 4, 3, 2);
int va=0;
int vc=0;
void setup() 
 {
  lcd.begin(8, 2);
 }
void loop()
{
va = analogRead(14);
vc = analogRead(15);

lcd.setCursor(0,0);
lcd.print(5.0/1024*va*4);

lcd.setCursor(0,1);
lcd.print(5.0/1024*vc*11,2);
}