avatar_UriBas

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

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

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

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

UriBas

Цитата: Necromant от 20 Фев. 2018 в 21:30а вы еще и цепь ООС разомкните, вообще диссертацию захочется написать, как в широко известной в узких кругах притче про таракана в СВЧ волноводе 
ОС - обратная связь,  а ООС это что?  Притчу о таракане не слышал,  я еще видно не дорос до "узких кругов"..  Вот сегодня наткнулся на тему о зарядке, которая использует алгоритм "4П"..  реализованная в ЗУ Т-1051 http://avtoelektrika.ru/t1051.php.  форум http://forum.ixbt.com/post.cgi?id=print:70:4775&page=7
Спойлер
Устройство зарядное Т-1051, прибор пригоден для всех типов кислотных 12В аккумуляторов с емкостью от 0,1 до 240 А/ч, работает в автоматическом режиме по алгоритму «4П» (процедура последовательных пропорциональных приращений)
Применение алгоритма 4П обеспечивает зарядному устройству следующие свойства:
- величина тока на всех этапах заряда, удерживается на оптимальном уровне;
- процесс заряда сопровождается пониженным газовыделением и нагревом аккумулятора;
- автоматически учитывается температура аккумулятора в процессе заряда;
- упорядочивается электрохимическая структура и снижается ток саморазряда аккумулятора;
- увеличивается начальный пусковой ток (в первые секунды запуска двигателя, падение напряжения на аккумуляторе оказывается меньше обычного);
- исключается воздействие чрезмерных токов на неисправный аккумулятор с закороченными банками.
и он мне сильно напоминает тот алгоритм, который мы тут пытаемся внедрить, у [user]Dunkel[/user] уже есть реализация одного из вариантов, надо форсировать.. ну а потом даст Бог - можно и с частотами поиграться если что..
Восточная мудрость - "Шакал воет - караван идет"  Эл.вел. 350Вт.   Верую в Иисуса Христа, НЛО.  тема "продвинутой моргалки" https://electrotransport.ru/index.php?msg=1669651

Necromant

Цитата: UriBas от 20 Фев. 2018 в 21:56а ООС это что?
обратная отрицательная

Добавлено 20 Фев. 2018 в 22:01

Цитата: UriBas от 20 Фев. 2018 в 21:56ЗУ Т-1051
кипятильник с термометром

UriBas

#884
Цитата: Necromant от 20 Фев. 2018 в 21:45в двух словах: раскачка, зарядка, добивка, все с адаптивными паузами. Все напряжения в мВ, чтобы работать с целыми числами.
Раскачка подача 1сек при 10в до 2 сек при 12,  до 12В с адаптивной паузой до скорости падения 5мВ за 2 сек.
В режиме зарядки от 12 до14,4 время подачи рассчитывается от паузы по экспоненте, чем выше заряд тем короче подача, пауза она сама по-себе, до скорости падения меньше 1 мВ за 2 сек.  Подача с контролем 14,4В после первого касания 14,4 переходим к добивке
Добивка: подача до касания 14,4 но не мене 0,5 сек, далее адаптивная пауза как при основном заряде.
Вольтметр с усреднением и отсеиванием промахов по ГОСТ 8.207-76
Подача с самого начала, т.е. с "раскачки" и до конца, я так понял, идет без ограничения тока?  (Просто ограничивается длительностью 1 и 2 сек?)
"время подачи рассчитывается от паузы по экспоненте"  - тут не совсем ясно.. по формуле? Можно поподробнее?
С добивкой более менее ясно..  пауза у Вас что в основном, что в добивке одинаково формируется - 1мВ/2сек  ..  Интересно было бы взглянуть на график заряда, а лучше посмотреть ЛОГ.
Цитата: Necromant от 20 Фев. 2018 в 21:59Т-1051 кипятильник с термометром
??!  .. Откуда такие выводы?
Восточная мудрость - "Шакал воет - караван идет"  Эл.вел. 350Вт.   Верую в Иисуса Христа, НЛО.  тема "продвинутой моргалки" https://electrotransport.ru/index.php?msg=1669651

Necromant

без контроля тока, там средний ток от 1/3 до 1/2 от максимального будет.

время вот в этой строчке ChargePeriod = int(pow(2.72, (13200. - U1) / 1000) * Timer + ChargeTime);

ChargeTime - 0,5 сек, защитный период

из практики заряда моргалкой: недавно заряжал 63Ач исправный аккумулятор с НРЦ 12,2В
радиатор диодного моста горячий, прямо огонь, аккумулятор холодный на протяжении всего цикла
ранее при зарядке без моргалки в аналогичной ситуации радиатор был теплым и основной заряд длился раза в 2 дальше

KIE

ТТреле или тиристор\симистор в сетевом проводе как первая конструкция вполне логично. Нет опыта, с паяльником подружиться надо.
Но зачем развивать "путь в никуда", создавать препятствия себе и затем их ударно преодолевать? Притом, что этот путь еще и дороже получается.

UriBas

Цитата: KIE от 20 Фев. 2018 в 23:09ТТреле или тиристор\симистор в сетевом проводе как первая конструкция вполне логично. Нет опыта, с паяльником подружиться надо.  Но зачем развивать "путь в никуда", создавать препятствия себе и затем их ударно преодолевать? Притом, что этот путь еще и дороже получается.
Вот у меня уже есть несколько готовых трансформаторных ЗУ, включая долбилку.. правда в долбилке нет транса, но ей тоже можно управлять через вкл/выкл сеть.. причем там проще, чем с трансом..  так почему бы их не использовать, у знакомых тоже почти все ЗУ на трансе - самый дешевый и быстрый, надежный вариант модернизации под умное ЗУ..  ну да, будет уступать полноценной, но это же уже ого го!.. не сравнить с обычным ЗУ на трансе!  А то ли еще будет..
Восточная мудрость - "Шакал воет - караван идет"  Эл.вел. 350Вт.   Верую в Иисуса Христа, НЛО.  тема "продвинутой моргалки" https://electrotransport.ru/index.php?msg=1669651

KIE

Цитата: UriBas от 20 Фев. 2018 в 23:55А то ли еще будет..
В своих конструкция мне приходится применять управление по высокой стороне. Если бы я смог (пытаюсь, но пока результат не совсем положительный) управлять большим током (500-2000А) по низкой стороне я бы с огромным удовольствием и пользой для конструкции выбросил и тиристоры и схему слежением за фазой итд итп.  Т. что я в теме.
Как бы вы не пытались делать, но управление питанием ИБП или транс-ра это не правильно и с большими ограничениями. Ключ на пол.транз.+ оптопара будет работать лучше, надежнее, с бОльшими возможностями, чем ключ на симисторе + оптопара.
Единственное отличие, что коробочку самому надо сделать и небольшую платку. Вот и вся разница.
А трансф-ный блок, ИБП это без разницы.

KIE


Alex_N

У меня баня с электропечкой управляется тиристорами. Тв.реле у меня тогда не было. Вот там им и самое место. В тиристорной долбилке тоже.
А в нормальной зарядке как раз нужно управлять выходом из БП. Иначе про адаптивные алгоритмы можно забыть.

Alex_N

Вообще эти обсуждения нужно вести на ветке Анализ процессов... , но там кроме ругани уже давно нет никакого обсуждения ( спасибо модератору ).
Да и ветка похоже из за этого умерла.

Яков93

#892
Цитата: Alex_N от 21 Фев. 2018 в 12:15
Вообще эти обсуждения нужно вести на ветке Анализ процессов...
Вас кто-то туда не пускает? Я совершенно согласен, что обсуждать алгоритмы лучше в теме про "Алгоритмы", здесь это оффтоп за который по хорошему надо уже наказывать.

p.s. Для особо непонятливых еще раз объясняю - вопросы поиска "правильного" алгоритме заряда обсуждайте здесь

Necromant

Цитата: Alex_N от 21 Фев. 2018 в 06:58А в нормальной зарядке как раз нужно управлять выходом из БП. Иначе про адаптивные алгоритмы можно забыть.
В нормальной зарядке надо управлять непосредственно самим БП. Что рано или поздно я сделаю.

Добавлено 21 Фев. 2018 в 13:36

Цитата: UriBas от 20 Фев. 2018 в 22:24Интересно было бы взглянуть на график заряда, а лучше посмотреть ЛОГ.
Логгера нет, но закажу

Alex_N

Цитата: Яков93 от 21 Фев. 2018 в 12:32Вас кто-то туда не пускает?
Ветка умерла, надо новую создавать.
Necromant, я согласен, что на скорую руку пойдет и Тв. реле.
А вообще сама идея меня шокировала нетрадиционным подходом. Я в восхищении.

Necromant

Добавил защиту от обратной полярности:
Спойлер
#define maxV 18650   //  R1=10.00 kOhm  R2=1.52 kOhm
#define U0 1033
#define UpLimit 14400
#define dU 1
#define dUDrop 10
#define DropU 12000
#define DropTime 1000
#define ChargeTime 500
#define RelaxTime 2000
#define MeasureCount 4
#define VoltmeterPin A7
#define ChargeRelayPin 2
#define InternalLedPin 13

// Переменные
uint16_t U1;
boolean Flag14V4 = false;
//Функции
uint16_t ReadU (uint8_t Pin)
{
  uint32_t S = 0,
           SumU = 0;
  uint8_t j = 0;
  struct MeasuredValue
  {
    uint16_t Value;
    int16_t Delta;
  } U[MeasureCount];
  for (uint8_t i = 0; i <= (MeasureCount - 1); i++)// Считаем среднее арифметическое
  {
    U[i].Value = analogRead_16bits(Pin);
    SumU += U[i].Value;
  }
  SumU = SumU / MeasureCount;
  for (uint8_t i = 0; i <= (MeasureCount - 1); i++)// Считаем среднеквадратическую погрешность
  {
    U[i].Delta = SumU - U[i].Value;
    S +=  sq(U[i].Delta);
  }
  S = sqrt( S / (MeasureCount - 1));
  SumU = 0;
  for (uint8_t i = 0; i <= (MeasureCount - 1); i++)// Отсеиваем промахи
  {
    if (abs(U[i].Delta) <=  3 * S)
    {
      SumU += U[i].Value;
      j++;
    }
  }
  SumU = SumU / j;
  SumU = map(SumU, U0, 65535, 0, maxV);
  return SumU;
}
//Процедуры
void relax(uint16_t Delta)
{
  uint16_t U2;
  do
  {
    U1 = ReadU(VoltmeterPin);
    delay (RelaxTime);
    U2 = ReadU(VoltmeterPin);
  }
  while ((U1 - U2) >= Delta);
  //Serial.println (U1);Serial.println (U2);Serial.println (U1-U2);Serial.println ();
}
void relayON()
{
  digitalWrite(ChargeRelayPin, HIGH);
  digitalWrite(InternalLedPin, LOW);
}
void relayOFF()
{
  digitalWrite(ChargeRelayPin, LOW);
  digitalWrite(InternalLedPin, HIGH);
}
//Инициализация
void setup()
{
  analogReference(INTERNAL2V56);
  pinMode(ChargeRelayPin, OUTPUT);   //SSR-10DA
  pinMode(InternalLedPin, OUTPUT);  //LED
  pinMode(VoltmeterPin, INPUT);    //Voltmeter
  do                //защита от обратной полярности
  {
    U1 = analogRead_16bits(VoltmeterPin);
    digitalToggle(InternalLedPin);
    delay(250);
  }
  while (U1 == 0);

  delay(500);

  //Serial.begin(9600);
}
//Цикл
void loop()
{
  U1 = ReadU(VoltmeterPin);
  while (U1 <= DropU) // Капельница до 12В снизу
  {
    U1 = constrain(U1, 10000, DropU);
    relayON();
    delay (map(U1, 10000, DropU, DropTime, 2000));
    relayOFF();
    relax(dUDrop);
    U1 = ReadU(VoltmeterPin);
  }
  if (!Flag14V4)  // Заряд по Вудбриджу до касания 14,4В сверху
  {
    while (U1 <= UpLimit)
    {
      uint32_t Timer, ChargePeriod;
      Timer = millis();
      relax(dU);
      Timer = millis() - Timer;
      relayON();
      Timer = constrain(Timer, 1000, 600000);
      ChargePeriod = int(pow(2.72, (13200. - U1) / 1000) * Timer + ChargeTime);
      Timer = millis();
      while ((U1 <= UpLimit) && ((millis() - Timer) <= ChargePeriod) )
      {
        U1 = ReadU(VoltmeterPin);
      }
      relayOFF();
    }
  }
  Flag14V4 = true;
  if (U1 >= UpLimit)   // Добивка
  {
    relayOFF();
    relax(dU);
  }
  else
  {
    relayON();
    delay (ChargeTime);
    while (U1 <= UpLimit)
    {
      U1 = ReadU(VoltmeterPin);
    }
  }
}
светодиод моргает 2 раза в секунду при неправильном подключении

ИС-Х

[user]Necromant[/user], а аппаратно как реализована эта защита?
Моя первая моргалка: https://electrotransport.ru/index.php?msg=588520
Вторая моргалка: https://electrotransport.ru/index.php?topic=31184.0
Третья моргалка: https://electrotransport.ru/index.php?msg=1130718
Еще в багажнике валяется BL1204 на всякий пожарный...

Necromant

Хоть производитель и пишет, что подтягивающие резисторы отключены по умолчанию, но видимо некоторая подтяжка остается. Поэтому при 0В на входе в моем экземпляре МК АЦП выдает 1033 попугая. При подаче отрицательного напряжения на выходе АЦП 0 попугаев. Вот это и используем.
Я включил защиту только при старте, т.к. подразумеваю, что аккумулятор подключается при отключенном питании приставки. Может стоить включить защиту в цикле?

ИС-Х

Цитата: Necromant от 22 Фев. 2018 в 10:14Я включил защиту только при старте, т.к. подразумеваю, что аккумулятор подключается при отключенном питании приставки.
Ааааа.... ну это половинчатая защита. Если питание приставки уже включено, да еще пока софт увидит нулевое АЦП - может уже поздно будет.
Моя первая моргалка: https://electrotransport.ru/index.php?msg=588520
Вторая моргалка: https://electrotransport.ru/index.php?topic=31184.0
Третья моргалка: https://electrotransport.ru/index.php?msg=1130718
Еще в багажнике валяется BL1204 на всякий пожарный...

Necromant