avatar_UriBas

Моргалка на Arduino. Этюды для начинающих.

Автор UriBas, 08 Март 2017 в 16:08

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

iwizard7

Цитата: Dunkel от 05 Нояб. 2017 в 10:12
Цитата: iwizard7 от 05 Нояб. 2017 в 10:08

Не подключал блок питания не при калибровке ни про залитии скетча. Даже USB порт не менял.
Это то меня и удивило.

Не подключал БП в розетку или к моргалке?
К моргалке. У меня подключено так : Моргалка подключена к АКБ и к USB to TTL - от него и питается ардуина все время. Как откалибровал подключил к БП и заряд пошел нормально.

Dunkel

[user]iwizard7[/user],  тогда не знаю, у меня БП постоянно подключен к моргалке.  Даже если БП не подключен в розетку, напряжение на АКБ действительно увеличивается при включении моргалки - конденсаторы БП разряжаются.  Через пару минут напряжение уменьшается.
Многофункциональная облачная моргалка/логгер:
https://morgalka78.wordpress.com/

iwizard7

В принципе не особо критично, раз откалибровал в рабочем скетче под этот конкретный делитель и забыл.

UriBas

#417
Цитата: Dunkel от 05 Нояб. 2017 в 09:38..А вот совершенствование алгоритма работы самой моргалки было бы действительно интересно. 
Это точно.  Чтобы по простому, попробуйте сделать пачки и паузы между пачками -  регулируемые по длительности.  Напряжение мерить надо еще и в импульсах, чтобы отслеживать отсечку в 14,4В.  а напряжение в конце паузы будет показывать степень заряженности. 

К примеру, вначале устанавливаем пачки длит = 40сек.  а паузы между пачками в 5-7 сек.  В процессе заряда отслеживаем напряжение в импульсе и напряжение в паузе (а также отслеживаем на каком времени импульс достиг 14,4В).    Как только напр в импульсе коснулось 14,4В  импульс обрывается, таким образом длительность импульса будет регулироваться- с каждым разом уменьшаться при достижении 14,4В, а паузы будут более эффективны.    Затем, как только пачка импульсов достигла длит 1сек.  начинаем увеличивать паузу на одну секунду..  В результате паузы будут увеличиваться и тем самым достигаться эффект "качелей" ..   а зарядное можно оставлять под зарядом до бесконечности, без ущерба для АКБ.

П.С.  Надо заметить, что эффективность этого алгоритма,  во многом зависит от правильности подбора зарядных токов, как вначале заряда, в середине, так и в конце.
Восточная мудрость - "Шакал воет - караван идет"  Эл.вел. 350Вт.   Верую в Иисуса Христа, НЛО.  тема "продвинутой моргалки" https://electrotransport.ru/index.php?msg=1669651

Dunkel

Цитата: UriBas от 05 Нояб. 2017 в 13:16
Цитата: Dunkel от 05 Нояб. 2017 в 09:38..А вот совершенствование алгоритма работы самой моргалки было бы действительно интересно. 
Это точно.  Чтобы по простому, попробуйте сделать пачки и паузы между пачками -  регулируемые по длительности.  Напряжение мерить надо еще и в импульсах, чтобы отслеживать отсечку в 14,4В.  а напряжение в конце паузы будет показывать степень заряженности. 

К примеру, вначале устанавливаем пачки длит = 40сек.  а паузы между пачками в 5-7 сек.  В процессе заряда отслеживаем напряжение в импульсе и напряжение в паузе (а также отслеживаем на каком времени импульс достиг 14,4В).    Как только напр в импульсе коснулось 14,4В  импульс обрывается, таким образом длительность импульса будет регулироваться- с каждым разом уменьшаться при достижении 14,4В, а паузы будут более эффективны.    Затем, как только пачка импульсов достигла длит 1сек.  начинаем увеличивать паузу на одну секунду..  В результате паузы будут увеличиваться и тем самым достигаться эффект "качелей" ..   а зарядное можно оставлять под зарядом до бесконечности, без ущерба для АКБ.

П.С.  Надо заметить, что эффективность этого алгоритма,  во многом зависит от правильности подбора зарядных токов, как вначале заряда, в середине, так и в конце.

Опишу действующий алгоритм.

Начальные параметры:
Пачка импульсов длительностью 30с.
Пауза между пачками 10с.
Импульсы в пачке длительностью 14мс.
Паузы между импульсами 14мс.

1. Измеряем Контрольный НРЦ, если превышает 14,4В  - делаем паузу 10с. (не допускаем перезаряд)
2. Начинаем пачку импульсов. После каждого импульса измеряем НРЦ. Если было касание 14,4В - прекращаем пачку импульсов, увеличиваем паузу между пачками на 0,1с.
3. Начинаем паузу между пачками. Каждые 100мс измеряем НРЦ. Если НРЦ упал до Контрольного и было касание 14,4В - прекращаем паузу между пачками, переходим к п.1.

Таким образом, по мере заряда, пачки импульсов становятся короче и в конце превращаются в одиночные импульсы.

Не совсем понял Ваше предложение по измерению в импульсе.  Это уже будет не НРЦ, а напряжение БП. Какой смысл его измерять? Может все-таки идет речь об измерении между импульсами?
Увеличивать паузы между пачками на 1сек я пробовал, не понравилось. Весь процесс слишком затягивался.
А вот идея изменения зарядного тока очень интересна. Т.е. по аналогии с CC-CV сначала заряжаем максимальным током, а в конце снижаем до минимума?
Правда тут есть сложность в реализации, единственное решение, которое приходит в голову, запараллелить несколько моргалок, и подключать их по мере необходимости:




Многофункциональная облачная моргалка/логгер:
https://morgalka78.wordpress.com/

Яков93

Цитата: Dunkel от 06 Нояб. 2017 в 14:07
Не совсем понял Ваше предложение по измерению в импульсе.  Это уже будет не НРЦ, а напряжение БП. Какой смысл его измерять? Может все-таки идет речь об измерении между импульсами?
А какой смысл измерять напряжение только  во время паузы? Во время импульса его тоже желательно измерять чтобы напряжение на АКБ не поднималось выше допустимых, скажем, 15 В. Хотя у Вас паузы короткие, всего 14 мс, за это время напряжение на АКБ  в принципе не должно сильно сваливаться, т.е. по идее приближены к тем, что существуют при импульсе.

А что при подключении БП к АКБ на выходе БП и на входе АКБ разные напряжения? Напряжения там одинаковые, так что измерив напряжение БП получите и напряжение АКБ во время импульса.

UriBas

#420
Цитата: Dunkel от 06 Нояб. 2017 в 14:07
Опишу действующий алгоритм.  Начальные параметры:
Спойлер
Пачка импульсов длительностью 30с.
Пауза между пачками 10с.
Импульсы в пачке длительностью 14мс.
Паузы между импульсами 14мс.

1. Измеряем Контрольный НРЦ, если превышает 14,4В  - делаем паузу 10с. (не допускаем перезаряд)
2. Начинаем пачку импульсов. После каждого импульса измеряем НРЦ. Если было касание 14,4В - прекращаем пачку импульсов, увеличиваем паузу между пачками на 0,1с.
3. Начинаем паузу между пачками. Каждые 100мс измеряем НРЦ. Если НРЦ упал до Контрольного и было касание 14,4В - прекращаем паузу между пачками, переходим к п.1.
Таким образом, по мере заряда, пачки импульсов становятся короче и в конце превращаются в одиночные импульсы.
Начальная пауза в 10 секунд многовата, - 7 секунд "за глаза"..  для того чтобы заряд не был слишком "тормознутым".  То, что в конце одиночные импульсы - это нормально, так работают "качели"..  Регулируя током заряда, можно либо увеличить длит имп. заряда и уменьшить паузу, либо наоборот. 
Цитата: Dunkel от 06 Нояб. 2017 в 14:07Не совсем понял Ваше предложение по измерению в импульсе.  Это уже будет не НРЦ, а напряжение БП. Какой смысл его измерять? Может все-таки идет речь об измерении между импульсами?
Абсолютно согласен с Яков93 НА АКБ ТОЖЕ МОЖЕТ БЫТЬ НАПРЯЖЕНИЕ = БП.  Нам важно, чтобы напряжение на АКБ во время заряда (а не в паузе) не превысило 14,4В, потому что АКБ кипит именно под действием этого напряжения.. и не важно, какой там у нее действительный НРЦ..  НРЦ само по себе, а зарядное напр на АКБ - само по себе.  НРЦ = 14,4В если и бывает, то это скорее исключение, чем правило.  Потом.. одно дело мерить в паузе, которая 0,1сек и одно дело мерить НРЦ в паузе 7 сек.   От делея" конечно надо избавляться..
Цитата: Dunkel от 06 Нояб. 2017 в 14:07А вот идея изменения зарядного тока очень интересна. Т.е. по аналогии с CC-CV сначала заряжаем максимальным током, а в конце снижаем до минимума? Правда тут есть сложность в реализации, единственное решение, которое приходит в голову, запараллелить несколько моргалок, и подключать их по мере необходимости:
Один мощный мосфет, может заряжать довольно большим током.   Причем можно регулировать ток, вернее величину энергии за единицу времени, -  длинной пачек,   еще можно регулировать коэф. заполнения 35 Гц импульсов.. или даже менять частоту заполняющих импульсов,  еще можно делать обратную связь с БП - регулятор напр.   Но это все удел продвинутых ЗУ и конечно, реализуемо в этом проекте..  даст Бог.    Надо сперва разобраться, на каких этапах и как регулировать ток заряда.   

Например, есть табличка, где показывается зависимость ХИТ брать заряд..  я ее на память накидаю (примерно!) так что надо будет уточнять, но главное понять суть.
1 фаза от 10,8 до 11,3В-12,0В  5-20% Емкости
2 фаза   .. до 13,6В   70-80% Емкости
3 фаза ..  до 14,4В   5-20% Емкости
Здесь видно, что непрерывный ток заряда наиболее эффективен во 2 фазе.  Поэтому,  надо либо отслеживать эти этапы, либо делать умный алгоритм, который бы мог сам отслеживать способность ХИТ брать ток,  чтобы АКБ эффективно заряжался.  (после этого, следущим этапом будет уже и умные алгоритмы, но там и уже другие требования к скорости и точности замера напряжений и к оптимизации алгоритма)
Восточная мудрость - "Шакал воет - караван идет"  Эл.вел. 350Вт.   Верую в Иисуса Христа, НЛО.  тема "продвинутой моргалки" https://electrotransport.ru/index.php?msg=1669651

Dunkel

#421
По совету коллег внес некоторые изменения. Теперь напряжение измеряется все время - и в паузе и в импульсе. В импульсе измерение происходит с точностью 10-бит, каждую 1мс.
В паузе между пачками импульсов точность 16-бит, измерения каждые 100мс - вычисляется скорость изменения напряжения в мВ/с.
Использовал нестандартный Ардуино с 16-битным АЦП:
https://www.aliexpress.com/item/MassDuino-UNO-LC-MD-328D-R3-5V-3-3V-Development-Board-for-Arduino-Compatible-Low-Cost/32655296623.html

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

Алгоритм:

Начальные параметры:
Пачка импульсов длительностью 30с.
Пауза между пачками 10с.
Импульсы в пачке длительностью 14мс.
Паузы между импульсами 14мс.

1. Измеряем Контрольный НРЦ, если превышает 14,2В  - делаем паузу 10с. (не допускаем перезаряд)
2. Начинаем пачку импульсов. В импульсе каждую 1мс измеряем напряжение. Если было касание 14,4В или напряжение (дельта) превысило на 0,4-0,6В Контрольный НРЦ  - прекращаем пачку импульсов, увеличиваем паузу между пачками на 1с.
3. Начинаем паузу между пачками. Каждую секунду вычисляем скорость уменьшения напряжения, если меньше 2-4мВ/с - уменьшаем паузу между пачками на 1сек, переходим к п.1.

В процессе заряда, сначала паузы сокращаются до минимума (1сек.) без изменения длительности пачки импульсов, а затем по достижению дельты 0,4-0,6В сокращается импульс до минимальных 0,1сек., а пауза начинает увеличиваться.

Несколько иллюстраций:

Спойлер



Многофункциональная облачная моргалка/логгер:
https://morgalka78.wordpress.com/

iwizard7

#422
Спойлер
Цитата: Dunkel от 17 Нояб. 2017 в 15:26
По совету коллег внес некоторые изменения. Теперь напряжение измеряется все время - и в паузе и в импульсе. В импульсе измерение происходит с точностью 10-бит, каждую 1мс.
В паузе между пачками импульсов точность 16-бит, измерения каждые 100мс - вычисляется скорость изменения напряжения в мВ/с.
Использовал нестандартный Ардуино с 16-битным АЦП:
https://www.aliexpress.com/item/MassDuino-UNO-LC-MD-328D-R3-5V-3-3V-Development-Board-for-Arduino-Compatible-Low-Cost/32655296623.html

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

Алгоритм:

Начальные параметры:
Пачка импульсов длительностью 30с.
Пауза между пачками 10с.
Импульсы в пачке длительностью 14мс.
Паузы между импульсами 14мс.

1. Измеряем Контрольный НРЦ, если превышает 14,2В  - делаем паузу 10с. (не допускаем перезаряд)
2. Начинаем пачку импульсов. В импульсе каждую 1мс измеряем напряжение. Если было касание 14,4В или напряжение (дельта) превысило на 0,4-0,6В Контрольный НРЦ  - прекращаем пачку импульсов, увеличиваем паузу между пачками на 1с.
3. Начинаем паузу между пачками. Каждую секунду вычисляем скорость уменьшения напряжения, если меньше 2-4мВ/с - уменьшаем паузу между пачками на 1сек, переходим к п.1.

В процессе заряда, сначала паузы сокращаются до минимума (1сек.) без изменения длительности пачки импульсов, а затем по достижению дельты 0,4-0,6В сокращается импульс до минимальных 0,1сек., а пауза начинает увеличиваться.

Несколько иллюстраций:

Спойлер




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

Dunkel

#423
Цитата: iwizard7 от 18 Нояб. 2017 в 09:10
Интересно попробовать, выложите скетч пожалуйста, как раз стоят два аккума для тестов

Скетч еще сыроват, но попробовать можно:
Спойлер

// 12/11/2017
// (c)dunkel
// PRO MINI, питание стаб. 5V
// Pin13 - заряд, на затвор мосфета
// PinА0 - напряжение с делителя АКБ 510/2k

unsigned long time;
int zar = 30 ; //Пачка импульсов в сек
int raz = 10 ; //Пауза между пачками в сек
int imp = 14 ; //Импульс в мсек
int pause = 14 ; //Пауза в мсек
int n = zar*1000 / (imp + pause) ; //Кол-во импульсов в пачке
float U14=14.4; // Напряжение отсечки 14.4В
float UK=0; //Контрольное напряжение перед зарядом (НРЦ)
float U0=0; //Напряжение АКБ


void setup() { 
  Serial.begin(115200);             
  pinMode(13, OUTPUT); // - на затвор мосфета
  digitalWrite(13, LOW);
}

void loop() {
  time = millis();
  U0 = readU016();
  UK = U0; // Напряжение НРЦ
  Serial.println(UK,4);  //  график
  if (UK >= U14-0.2) delay(10000) ; //Если НРЦ превысит 14,2 - пауза 10с

//Начало пачки импульсов

int flag = 0;
for (int i=1; i <= n; i++) { //Пачка импульсов длительностью zar

//Начало импульса

  digitalWrite(13, HIGH);
  for (int j=1; j <= imp; j++) { //Импульс длительностью imp
  U0 = readU0();
if (U0 > U14 || (U0-UK) > 0.6 ) { //Касание 14,4В или превышение НРЦ на 0,6В
      Serial.println(U0,4);  //  график
      j = imp; i = n;  //Выходим из цикла - прерываем пачку импульсов
      raz = raz + 1; //Увеличиваем счетчик касаний 14,4В - увеличиваем паузу между пачками импульсов
      flag = 1;
  }
  }
 
//Конец импульса, Начало паузы

if ( (millis()-time) >= 1000 ) {  // Выводим значение каждую сек.
Serial.println(U0,4);  //  график
time = millis();
}

  digitalWrite(13, LOW);
  for (int j=1; j <= pause; j++) { //Пауза длительностью pause
  U0 = readU0();
  }           

   }

   
//Конец пачки импульсов, Начало паузы между пачками

  Serial.println(U0,4);  // график

  float dU0K = readU016();
   
  for (int h=1; h <= raz; h++) { //Пачка импульсов - пауза длительностью raz

  U0 = readU016();
  U0 = readU016();
  U0 = readU016();
  U0 = readU016();
  U0 = readU016();
  U0 = readU016();
  U0 = readU016();
  U0 = readU016();
  U0 = readU016();
  U0 = readU016();  //1c
  float dU0= (dU0K-U0)*1000; //mV
  dU0K = U0;
 
Serial.print(U0,4);
Serial.print("    ,0,0,   ");
Serial.println(dU0,4);  //  график

  if (dU0 <= 4) raz = raz - 1 ;// Если скорость падения напряжения ниже 4мВ - уменьшаем паузу
}

//Конец паузы между пачками
   
}

// Измерение U0, длительность 1мс
float readU0() {
  byte u;
  float result = 0.0;
  float K0 = K0=0.003031; // Коэффициент делителя
delayMicroseconds(90);
for (u = 1; u <= 8; u++) {
    result += analogRead(A0);   
}

  result = result * K0;
  return result;
}


// Измерение U0 16-bit, длительность 100мс

float readU016() {
  byte u;
  float result = 0.0;
  long V=0;
  float K0 = K0=0.0001894; // Коэффициент делителя
delay(86);
for (u = 1; u <= 128; u++) {
    V += analogRead(A0);   
}

  result = V * K0;
  return result;
}


Там в конце два коэффициента на разное число измерений, их нужно откалибровать.
И питание должно быть стабилизированным 5В на Vcc.
От ЮСБ питание НЕ подавать.

Многофункциональная облачная моргалка/логгер:
https://morgalka78.wordpress.com/

iwizard7

Цитата: Dunkel от 18 Нояб. 2017 в 09:56
Цитата: iwizard7 от 18 Нояб. 2017 в 09:10
Интересно попробовать, выложите скетч пожалуйста, как раз стоят два аккума для тестов

Скетч еще сыроват, но попробовать можно:
Спойлер

// 12/11/2017
// (c)dunkel
// PRO MINI, питание стаб. 5V
// Pin13 - заряд, на затвор мосфета
// PinА0 - напряжение с делителя АКБ 510/2k

unsigned long time;
int zar = 30 ; //Пачка импульсов в сек
int raz = 10 ; //Пауза между пачками в сек
int imp = 14 ; //Импульс в мсек
int pause = 14 ; //Пауза в мсек
int n = zar*1000 / (imp + pause) ; //Кол-во импульсов в пачке
float U14=14.4; // Напряжение отсечки 14.4В
float UK=0; //Контрольное напряжение перед зарядом (НРЦ)
float U0=0; //Напряжение АКБ


void setup() { 
  Serial.begin(115200);             
  pinMode(13, OUTPUT); // - на затвор мосфета
  digitalWrite(13, LOW);
}

void loop() {
  time = millis();
  U0 = readU016();
  UK = U0; // Напряжение НРЦ
  Serial.println(UK,4);  //  график
  if (UK >= U14-0.2) delay(10000) ; //Если НРЦ превысит 14,2 - пауза 10с

//Начало пачки импульсов

int flag = 0;
for (int i=1; i <= n; i++) { //Пачка импульсов длительностью zar

//Начало импульса

  digitalWrite(13, HIGH);
  for (int j=1; j <= imp; j++) { //Импульс длительностью imp
  U0 = readU0();
if (U0 > U14 || (U0-UK) > 0.6 ) { //Касание 14,4В или превышение НРЦ на 0,6В
      Serial.println(U0,4);  //  график
      j = imp; i = n;  //Выходим из цикла - прерываем пачку импульсов
      raz = raz + 1; //Увеличиваем счетчик касаний 14,4В - увеличиваем паузу между пачками импульсов
      flag = 1;
  }
  }
 
//Конец импульса, Начало паузы

if ( (millis()-time) >= 1000 ) {  // Выводим значение каждую сек.
Serial.println(U0,4);  //  график
time = millis();
}

  digitalWrite(13, LOW);
  for (int j=1; j <= pause; j++) { //Пауза длительностью pause
  U0 = readU0();
  }           

   }

   
//Конец пачки импульсов, Начало паузы между пачками

  Serial.println(U0,4);  // график

  float dU0K = readU016();
   
  for (int h=1; h <= raz; h++) { //Пачка импульсов - пауза длительностью raz

  U0 = readU016();
  U0 = readU016();
  U0 = readU016();
  U0 = readU016();
  U0 = readU016();
  U0 = readU016();
  U0 = readU016();
  U0 = readU016();
  U0 = readU016();
  U0 = readU016();  //1c
  float dU0= (dU0K-U0)*1000; //mV
  dU0K = U0;
 
Serial.print(U0,4);
Serial.print("    ,0,0,   ");
Serial.println(dU0,4);  //  график

  if (dU0 <= 4) raz = raz - 1 ;// Если скорость падения напряжения ниже 4мВ - уменьшаем паузу
}

//Конец паузы между пачками
   
}

// Измерение U0, длительность 1мс
float readU0() {
  byte u;
  float result = 0.0;
  float K0 = K0=0.003031; // Коэффициент делителя
delayMicroseconds(90);
for (u = 1; u <= 8; u++) {
    result += analogRead(A0);   
}

  result = result * K0;
  return result;
}


// Измерение U0 16-bit, длительность 100мс

float readU016() {
  byte u;
  float result = 0.0;
  long V=0;
  float K0 = K0=0.0001894; // Коэффициент делителя
delay(86);
for (u = 1; u <= 128; u++) {
    V += analogRead(A0);   
}

  result = V * K0;
  return result;
}


Там в конце два коэффициента на разное число измерений, их нужно откалибровать.
И питание должно быть стабилизированным 5В на Vcc.
От ЮСБ питание НЕ подавать.

Можно поподробней про коэффициенты? почему они разные , и как их откалибровать? Скетчем калибровки я нашел коэффициент делителя еще в прошлый раз.

Dunkel

Цитата: iwizard7 от 18 Нояб. 2017 в 15:20

Можно поподробней про коэффициенты? почему они разные , и как их откалибровать? Скетчем калибровки я нашел коэффициент делителя еще в прошлый раз.

Коэффициенты разные, потому что разное число измерений. В конце скетча две процедуры - на 8 и 128 измерений, а раньше было 10.
Откалибровать их очень просто - взять соответствующую процедуру :

  byte u;
  float result = 0.0;
  long V=0;
  float K0 = K0=0.0001894; // Коэффициент делителя
delay(86);
for (u = 1; u <= 128; u++) {
    V += analogRead(A0);   
}

  result = V * K0;

И добавить в конце
serial.println(result);

Получиться скетч для калибровки.
Многофункциональная облачная моргалка/логгер:
https://morgalka78.wordpress.com/

Яков93

[user]Dunkel[/user], ПМСМ забыли еще деление result на 128.

Любопытно конечно измерять напряжение от 0 до 15(?)В 16-битным АЦП. Разрядность конечно сумасшедшая 0.0001894 В, но как насчет точности? Насколько в реальности цифры пляшут? особенно с учетом того, что Вы пользуетесть дефолтным референсным напряжением от вывода VCC, пусть там и стабилизированное напряжение, но оно все равно хоть немного но изменяется в зависимости от работы МК.

Dunkel

Цитата: Яков93 от 18 Нояб. 2017 в 16:01
[user]Dunkel[/user], ПМСМ забыли еще деление result на 128.

Любопытно конечно измерять напряжение от 0 до 15(?)В 16-битным АЦП. Разрядность конечно сумасшедшая 0.0001894 В, но как насчет точности? Насколько в реальности цифры пляшут? особенно с учетом того, что Вы пользуетесть дефолтным референсным напряжением от вывода VCC, пусть там и стабилизированное напряжение, но оно все равно хоть немного но изменяется в зависимости от работы МК.

Деление на 128 уже учтено в коэффициенте.
Этот скетч для обычной Pro mini с 10-битным АЦП, поэтому и 128 измерений. Цифры конечно пляшут, но мне нужен не абсолютный результат, а относительный - скорость изменения. Там все выглядит вполне правдоподобно.
Вот сейчас заряжается АКБ:
Спойлер




В терминале правая колонка - скорость изменения в мВ/с. Хорошо заметна повторяемость результатов от импульса к импульсу.
Многофункциональная облачная моргалка/логгер:
https://morgalka78.wordpress.com/

Яков93

Цитата: Dunkel от 18 Нояб. 2017 в 16:25
[
Деление на 128 уже учтено в коэффициенте.
Этот скетч для обычной Pro mini с 10-битным АЦП, поэтому и 128 измерений.
Не понял. Коэффициент 0.0001894, если это уже результат деления на 128 то в одном разряде АЦП у Вас получается 0,02424 В (0.0001894 * 128). Если АЦП 10-битный то измеряется максимум 0,02424 * 1024 = 24,825 В.  Для чего делать такой огромный диапазон измерений и в результате загрублять показания - от 0В до 25В если заряжаете всегда только АКБ на 12В? Тут бы наоборот стремиться к сужению измеряемого диапазона например от 7В до 15В.

Dunkel

Цитата: Яков93 от 18 Нояб. 2017 в 17:10
Не понял. Коэффициент 0.0001894, если это уже результат деления на 128 то в одном разряде АЦП у Вас получается 0,02424 В (0.0001894 * 128). Если АЦП 10-битный то измеряется максимум 0,02424 * 1024 = 24,825 В.  Для чего делать такой огромный диапазон измерений и в результате загрублять показания - от 0В до 25В если заряжаете всегда только АКБ на 12В? Тут бы наоборот стремиться к сужению измеряемого диапазона например от 7В до 15В.

Да я просто с этим не заморачивался, хватило точности - и ладно.  Но, в перспективе конечно надо будет заняться, особенно для работы с отдельными банками.
Многофункциональная облачная моргалка/логгер:
https://morgalka78.wordpress.com/

UriBas

[user]Dunkel[/user], Ну вот, это уже больше похоже на адаптивный заряд, а не на «моргалку-дубалку» типа как на 555 таймере!  Есть «дельта» -адаптивный имп. и есть адаптивная пауза..  от слова «адаптация» или другими словами подстройка заряда под особенности АКБ!  По идее, такой заряд должен оптимально подбирать импульс заряда и паузу, практически под любой АКБ..   кроме уж совсем каких-то замерзших или убитых и прочих экстремальных случаев.   

Преимущества очевидны  - 1)  в довольно таки безопасном заряде на всех этапах - подбор оптимального заряда , 2) значительное увеличение десульфатирующего действия по сравнению с обычным зарядом..  3) почти полная автоматизация и универсализация.
Думаю, что теперь «моргалка-Ардуинка» существенно выросла и даже может смотреть свысока на некоторые брендовые ЗУ за неплохие деньги!  Конечно, есть еще над чем работать..
Восточная мудрость - "Шакал воет - караван идет"  Эл.вел. 350Вт.   Верую в Иисуса Христа, НЛО.  тема "продвинутой моргалки" https://electrotransport.ru/index.php?msg=1669651

Alex_Soroka

Цитата: UriBas от 18 Нояб. 2017 в 19:20
существенно выросла и даже может смотреть свысока на некоторые брендовые ЗУ за неплохие деньги!
;-D ну-ну...
может еще тест покажете, в котором посорувнуемся в скорости удаления белого налета с банок АКБ ?
...мечтатели...