Вопрос по аналоговым входам

Poluekt
Offline
Зарегистрирован: 14.11.2011

 Здравствуйте.
Есть Arduino Mega2560 и LiPo аккумулятор, состоящий из трёх элементов. Отдельный элемент не рекомендуется разряжать ниже 3 В, поэтому нужно контролировать напряжение на каждом элементе. У аккумулятора есть разъём с 4-мя контактами: 1-общий, 2-выход с первого элемента (4,2 В), 3-выход с первого и второго элементов (8,4 В), 4-выход с трёх элементов (12,6 В). Для 3 и 4 контакта сделал делители: 1 к 2 (по 1 МОм) и 1 к 3 (1 2 МОм), 2 оставил так (напряжение не превышает 5 В). При подключении к аналоговым входам Ардуино даже в отсутствии внешнего питания Ардуино запускается. Выяснил, что это происходит з-за 2 контакта аккума. Сделал к нему тоже делитель как и к 3-му (1 к 2). Ардуно запускаться перестал. Но обнаружилась другая проблема. Вот значения AnalogRead для 3 элементов (напряженя с делителей):
1: 388 (первый замер после включения) 447 442 436 447 451 423 444 442 432 (реальное значение - 1,74 В)
2: 689 690 689 690 690 665 690 690 689 690 (3,49 В)
3: 727 726 726 726 725 726 726 726 726 726 (3,31 В)

Собственно вопросов несколько: почему запускалась Ардуно, почему так скачут значения одного элемента, в то время как 2 других достаточно стабильны.
Буду благодарен за любые подсказки.

Adessit
Adessit аватар
Offline
Зарегистрирован: 12.04.2011

Помоему, нельзя  мерять напряжение источника от которого и сама ардуина питается. Но не факт. Потому что знаком такой факт, что если мультиметром простым китайским мерять напряжение кроны, которая стоит внутри самого мультиметра, то он глючит, а может и отключится.

whoim
Offline
Зарегистрирован: 03.11.2011

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

Poluekt
Offline
Зарегистрирован: 14.11.2011

 Попробовал с другими аналоговыми входами - результат тот же. Интересно, что при отключенном питании Ардуины, на выходах делителей, воткнутых в аналоговые входы напряжение порядка 0,5 В. При включении питания напряжение становится нормальным. Похоже на какие-то диоды, может защитные. Но вопрос так и остаётся: почему одно напряжение так скачет?

whoim
Offline
Зарегистрирован: 03.11.2011

если не найдешь как победить - попробуй через один аналоговый вход с мультиплексором cd4051

Poluekt
Offline
Зарегистрирован: 14.11.2011

 Победил :) Поскольку первый выход с делителя заведомо меньше 2,5 В, использовал встроенное в Мегу опорное напряжение 2,56 В - analogReference(INTERNAL2V56). Значения стали стабильными. Так же вычитал в руководстве Атмеги, что первое считанное с аналогового входа значение неверное (после любых манипуляций с ним, в частности после выбора опорного напряжения), поэтому его не использую. Теперь всё работает как надо. 

flying
Offline
Зарегистрирован: 12.11.2011

 Здравствуйте, а можно поподробнее у меня такая же проблема с замером напряжения.

Poluekt
Offline
Зарегистрирован: 14.11.2011

 Ну я использовал встроенную возможность Меги - опорное напряжение 2,56 В (с помощью команды analogReference(INTERNAL2V56). Скачки пропали, почему не очень понятно. Странность была в том, что скачки был только на одном входе, где напряжение около 1,8 В. На других входах с напряжением около 3,5 В всё стабльно было.

Я, правда, до сих пор не понял, почему стартовала Ардуина с отключённым питанием, когда на аналоговый вход попадало напряжение порядка 4 В. Мстика :)

flying
Offline
Зарегистрирован: 12.11.2011

 Спасибо, разобрался. Начал дальше мучать ардуину.

Mastar
Offline
Зарегистрирован: 09.09.2011

Poluekt пишет:

Я, правда, до сих пор не понял, почему стартовала Ардуина с отключённым питанием, когда на аналоговый вход попадало напряжение порядка 4 В. Мстика :)

При прямом подключении вашего питания на аналоговый вход происходит запитка контроллера через внутренний защитный диод. 

Mastar
Offline
Зарегистрирован: 09.09.2011

Poluekt пишет:
 Отдельный элемент не рекомендуется разряжать ниже 3 В

Падение напряжения до 3 вольта на банку, это только при токах до 1С. А вообще, если хотите долгой жизни батареи, то ниже 3,4-3,5 не допускайте

Poluekt
Offline
Зарегистрирован: 14.11.2011

Mastar пишет:

При прямом подключении вашего питания на аналоговый вход происходит запитка контроллера через внутренний защитный диод. 

Ага, я что-то подобное предположил, когда получил 0,5 В на входах вместо 1,8 - 3.6 В.

Mastar пишет:

Падение напряжения до 3 вольта на банку, это только при токах до 1С. А вообще, если хотите долгой жизни батареи, то ниже 3,4-3,5 не допускайте.

Спасибо за предупреждение! Я сейчас поставил ограничение на 3.3 В, значит нужно будет чуть поднять.

ЮриБас
Offline
Зарегистрирован: 13.01.2012

Приветствую форумчан Arduino.ru! Пару недель назад приобрел Arduino Mega1280, давно хотел приобрести такую вещь, сделать зарядное с контролем всего что можно.. и на сколько можно каналов.. и всего что можно заряжать, и всем управлять!  (ведь "она" все это может)  Захотел в первую очередь померить напр на батарейке..  Доселе я лишь макросы в Екселе делал.. Поэтому сразу столкнулся с проблемой - как вынуть данные из проги Ардуино и посмотреть их в компе..  и конечно в Екселе, чтобы с графиками и пр.  там это удобно (на мой взгляд). Несколько дней (ночей) лазил по инету все скачивал, но так и не смог что-нибудь толком запустить кроме voltmeter.exe ..  )))  Правда, после многих изощрений по инсталляции всяких библиотек,  пару раз запустился Ексель с одной программой http://ingenegros.com.ar/Microcontroladores/graficar-con-el-excel-mediciones-tomadas-por-arduino.html  и напряжение тоже скакало от 0 до 5 в на каждом канале.. (мерил по двум аналоговым каналам 0 и 1 прога называется "два потециометра")  Потом все завалилось и то работает как попало, то Ардуино отказывается реагировать..

В общем, если можно, покажите код прораммы как там вставлять эту analogReference(INTERNAL2V56) и куда, ну и как это все посмотреть (и сохранить данные) доступно в компе с исходным кодом, чтобы можно было потом разобраться что к чему..  Благодарен за ответ.

ЮриБас
Offline
Зарегистрирован: 13.01.2012

 Ага, вроде нашел как http://wiring.org.co/reference/analogReference_.html  

Код

int inpin = 0;
int val = 0;

void setup() {
// set the analog reference as built-in 2.56Volts
analogReference(INTERNAL2V56);
Serial.begin(9600);
}

void loop() {
val = analogRead(inpin); // read the value of analog pin 0
Serial.println(val); // write the value to the serial port
}

Теперь надо узнать как в Екселе посмотреть...
 

Update от Администратора: чтобы код был отформатирован как сейчас, пользуйтесь кнопкой вставки кода - вторая кнопка над окном редактирования сообщений, красные скобочки с подписью code.