PWM контреллер заряда на Attiny13

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

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

Поначалу спросил в гугла, гугл неохотно отвечает на "контроллер заряда своими руками" что-то есть но это ниочём.

Так как хоть какой-то опыт в этом деле уже имею решил взяться, вроде бы все на первый взгляд просто, при достижении напряжения в 13.8 для герметизированы свинцово-кислотных АКБ или 14.4 для автомобильных, тут пока неразберуха с этим делом, так пот при достижении заданного напряжения уменьшаем ток заряда при помощи ШИМ.

Вот на паре страдал фигнёй, нарисовал как-то примерно схемку:

Светодиод будет иметь несколько режимов интенсивности мигания или же вообще просто светится в зависимости от уровня заряда АКБ.
Транзистор/транзисторы(подключены в параллель) подбирается под панель, будь то 0.2 А или же 30 А... да хоть 100 А, звучит неплохо да?

Всё что я напаяю или же на моделирую я буду выкладывать здесь взамен я прошу конструктивную критику, ладно просто критику, так как я не силён ни в программировании ни в электротехнике, но хочу что-то делать, получать опыт от процесса.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

это самый простой

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

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

как вы будете контролировать напряжение на батарее? всегда или периодически?

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

прочитайте эту статью чтобы больше ориентироваться в режимах зарядки свинцовых аккумуляторв

http://at-systems.ru/quest/new-quest/battery-charging.shtml

удачи в вашем проекте

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

p.s. в схеме полевик затвором подключается к средней точке (эмиттеры транзиторов)

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

Это "на первый взгляд" все просто... На второй выясняется, что есть напряжение заряда, а есть напряжение буферизации. Это не считая всяких там операций по выравниванию заряда в банках (Equalization), которые умные контроллеры умеют сами периодически запускать. Кроме того, есть у контроллера еще и функция отсечки потребителей при снижении напряжения батареи до 11.1В.

Т.е., цикл заряда должен выглядеть примерно так: заряжаем максимальным током до напряжения 14.2-14.6 (для разных типов батарей), держим это напряжение некоторое время (десяток минут - пара часов), после чего переходим в режим буферизации - 13.6-13.8 вольта.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

в свинцовых обычно не выравнивают заряды в банках. это делают в литиевых батареях.

отсечку делает конроллер батареии. но его не в свинцовых аккумуляторах. поэтому нужен будет делать его к тому же. количество пинов тиньки уже может не хватить, да и памяти врядли хватит если не писать на чистом си. поэтому лучше перейти на мегу 8 например

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

jeka_tm пишет:

в свинцовых обычно не выравнивают заряды в банках.

Не пишите то, о чем не знаете. Можно было бы ознакомиться хотя бы с общими характеристиками контроллера из первого сообщения (http://www.solnechnye.ru/controllery-zaryada/Epsolar-ViewStar-VS4024N-40...)

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

"как вы будете контролировать напряжение на батарее? всегда или периодически?"

Алгоритм заряда буду черпать из этой картинки:

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

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

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

"p.s. в схеме полевик затвором подключается к средней точке (эмиттеры транзиторов)"

Так как буду делать из того что есть, а есть старая материнка, то не требуется усложнять ничего.

"Это "на первый взгляд" все просто... На второй выясняется, что есть напряжение заряда, а есть напряжение буферизации. Это не считая всяких там операций по выравниванию заряда в банках (Equalization), которые умные контроллеры умеют сами периодически запускать. Кроме того, есть у контроллера еще и функция отсечки потребителей при снижении напряжения батареи до 11.1В."
Насколько мне извесно напряжение выравнивается если заряжать малым током аккумулятор который уже почти полный. Пока что только буду контролировать заряд, разряд позже, но обязательно будет. 

Есть ещё идея всё делать с авто определением 12/24 В но тут есть некоторые сложности, да и транзисторы которые я выпаял из материнки держат напряжение только до 25 В.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Andrey_Y_Ostanovsky пишет:

jeka_tm пишет:

в свинцовых обычно не выравнивают заряды в банках.

Не пишите то, о чем не знаете. Можно было бы ознакомиться хотя бы с общими характеристиками контроллера из первого сообщения (http://www.solnechnye.ru/controllery-zaryada/Epsolar-ViewStar-VS4024N-40A-12-24V.htm)

в свинцовых не выравнивают как литиевых. в свинцовых даже выводов нет отдельных банок как в литиевых

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

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

 

 

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

jeka_tm пишет:

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

Я не зря выше привел английское название процедуры - Equalization. Наберите в гугле и посмотрите - как и что там с помощью этого режима выравнивают, там достаточно много с графиками и картинками.

Авто или упсы - просто не имеют данного функционала, т.е. в лучшем случае после фазы Bulk переходят в режим буферизации, а вот контроллеры заряда (не все) или "умные" зарядки для кислотных аккумуляторов - делят заряд на 4 и более фазы (http://electrotransport.ru/ussr/index.php?topic=9511.0).

Да, и в литиевых аккумуляторах - это называется "балансировка". :)

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

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

Пока мне рановато что-то подобное кодить, для начала просто сделаю при достижении 14.4 В опускать напряжение до 13.8 путём уменьшения тока, и так почти до нуля ампер, точней до нескольких десятков миллиампер... иными словами заряжаем аккумулятор по самое не хочу и держим его заряженным...

ЗЫ тут говорилось про конденсатор в качестве фильтра, а разве аккумулятор не есть большой конденсатор?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

в упсах например батареи живут кажется 3 года, не усложняя процесс зарядки. алгоритм описанный в статье сложен. 

автор хочет простое зарядное устройство. но если Andrey_Y_Ostan напишет программу никто против не будет

но честно сказать не нашел в статье про выравнивание заряда на отдельных ячейках

за ссылку спасибо. буду знать насколько сложен алгоритм зарядки в автобусах

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

jeka_tm пишет:

автор хочет простое зарядное устройство. но если Andrey_Y_Ostan напишет программу никто против не будет

Не, не напишу. С одной стороны - я не настолько хорошо умею кодировать, с другой - у меня уже есть два контроллера заводской сборки: один с mppt, второй - попроще, с pwm, с третьей - когда у меня не было контроллеров, но была солнечная панель - я обходился DC-DC Step-down преобразователем. Так что, как ни крути - никакой мотивации. :)

Тут, правда, есть другая тема: у меня, например, аккумуляторы достаточно быстро заряжаются с утра, и дальше, весь день, стоят в буферном режиме. Чтобы "добро не пропадало" - у меня сейчас ардуина, по достижении некоего порога, включает дополнительную нагрузку. Контроллеры с таким функционалом - стоят достаточно дорого, и вот такие вещи имеет смысл ваять самому. Для остального например у Linear Technologies есть даже специализированные чипы с mppt функционалом.

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

А дополнительная нагрузка это реостаты

 

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

HWman пишет:

А дополнительная нагрузка это реостаты

Не обязательно, но можно и воздух/воду в бойлере греть, например...

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Кстати, намечается у меня ещё один проектик, нужно сделать автоматику для СБ, а именно сделать устройство которое бы при достижении одного напряжения которое задаётся подстроечным резистором включало реле а при достижении другого которое тоже задаётся другим подстроечним резистором, благо научился использовать не только 3-ю ногу как АЦП а и две других, напряжение отключения. 

Конкретнее, есть СБ на 24 В, конечно не у меня, и нужно сделать такой себе регулятор отключения/включения нагрузки, ну или чегото ещё. Я буду делять регулировку по включению на напряжение от 20В до 25 В и оключение 25-30, точные цифры задаются подстроечниками при настройке платки.

Вот что-то похожее на схемку:

Может такую буду делать и для 12 В, там нужно будет изменить резисторы в делителе и значение АЦП подправить.

Это другой проектик, неимеющий никакого отношения к этому, так вот вопрос, стоит ли он отдельной темы в этом разделе?

 

 

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

Зачем мосфетом включать реле??? :) На сильнотоковых нагрузках контакты реле будут быстро изнашиваться - это Вам не переменный ток, тут проблема "погасить искру при размыкании" не решается маленьким керамическим конденсатором. Либо мосфеты параллельно, либо оптронная развязка и опять мосфеты параллельно, если коммутируете разные напряжения.

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

Ну и, как частное мнение: зачем нужны мозги, если настройки у Вас делаются потенциометрами? :) Делайте, тогда уж, на операционниках.

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

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

Насчёт напряжения на ХХ это я вроде учёл, тинька будет питаться от аккумуляторов, тоесть напряжение от 20 до 30 В что терпимо для стабилизатора 7805.

Почему тинька а не ОУ? Ну тут всё просто, не дпружу я с ОУ так сильно как с тинькой, ну и в будущем вполне возможно буду добавлять всякие фитчи, есть ещё целая нога свободная...

Вот набросал код быстренько:







int Uon = 0; // ручная установка напр. вкл 
int Uoff = 0; // ручная установка напр. выкл 
int volts = 0; // Вольтметр, 0.04 В на одну единицу в переменной
int UonVolts = 0; // промежная переменная 1
int UoffVolts = 0; // промежная переменная 2

void setup() { // установка портов на вход/выход
  pinMode(0, OUTPUT); // реле     
  pinMode(A1, INPUT); // настройка напряжение включения
  pinMode(A2, INPUT); // делитель напряжение(вольтметр)
  pinMode(A3, INPUT); // настройка нарпяжение отключения
}

void loop(){ // начинаем бесконечный цикл
  Uon = analogRead(A3); // счтитоваем установленое напряжение включения
  volts = analogRead(A2); // счтитоваем напряжение на аккумуляторе
  Uoff = analogRead(A1); // счтитоваем установленое напряжение выключения

  if(volts >= 501 && volts <= 628) // если напряжение 20...25В то:
  {  
    UonVolts = (volts - 501); // UonVolt от 0...127
    if(UonVolts = (Uon / 8))  // Uon от 0...127, задаётся в ручну подстр. рез. 1
    {
      digitalWrite(0, HIGH); // включаем реле 
    }
  }

  if(volts >= 629 && volts <= 756) // если напряжение 25...30В то:
  {  
    UoffVolts = (volts - 629); // UoffVolt от 0...127
    if(UoffVolts = (Uoff / 8)) // Uoff от 0...127, задаётся в ручну подстр. рез. 2 
    {
      digitalWrite(0, LOW); // отключаем реле
    }
  }
  delay(500); 
  /*else 
  {
    digitalWrite(0, LOW); 
  }*/
}

 

Но почему то неработает как надо, робит вот так:

http://www.youtube.com/watch?v=_6x-VeFK9GM

Все файлы по этом тут.

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

HWman пишет:

Реле основная просьба человека которому это делаю

Ставьте Solid State Relay - они управляются прямо с ноги ардуины. Выбирать надо "для DC" а то есть SSR и для переменного тока, которые закрываются на переходе через ноль.

HWman пишет:

Но почему то неработает как надо, робит вот так:

У меня нет протеуса, а так - я бы разделил задачу на две части:

1. срабатывает ли мосфет при подаче HIGH с ноги контроллера,

2. появляется ли этот самый HIGH на ноге при измерениях.

Граблей - масса что с одной стороны, что с другой. Начиная от отсутствия буковки L в маркировке мосфета. :) Да и измерения надо усреднять хотя бы по десятку чтений с интервалом времени...

  for (int count =0; count < 10; count++) {

    reperValue = reperValue + constrain(analogRead(sensorPin),0,1023);
    delay(3);

  }
    // усредняем значения эталона
    reperValue =  reperValue / 10;

 

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

А с кодом всё нормально? Ну если я доделаю усреднённое значение конечно же.

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

HWman пишет:

А с кодом всё нормально? Ну если я доделаю усреднённое значение конечно же.

Ну, смотря чего Вы хотите добиться...

Например, операция присваивания в выражении if(UonVolts = (Uon / 8)) - будет "OK" при любых значениях Uon, а если Вы хотите сравнивать - надо два значка = ставить...

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

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

Вот, кстати, товарищ clawham рассказывает об алгоритме правильной зарядки в комментариях:

Цитата:
Для нормального режима зарядки нужно:

Подать ток зарядный допустим 20 ампер и смотреть сразу же форму напряжения в первые 10-20 миллисекунд: что там произойдет — там появится вначале кривая заряда первичной емкости образованной пластинами, потом оно немного подсядет — началась диффузия и к межпластинному расстоянию подтянулся свежий электролит.

Следующий этап — падение прекратилось — начался рост — скорости дифузии мало и снова пошла на зарядку емкость пластин… вот тут то и надо отключить зарядный ток, при этом напруга падает лавинообразно до напруги проседания(вторая фаза после подачи зарядного тока) потом идет плато(впитывание электролита) и потом проседание — подоспела свежая порция электролита: вот тут то и снова надо подать ток… и снова контролировать все эти фазы.

При приближении к концу заряда — проседать будет все меньше, время после проседания до повторного подъёма будет короче а по снимании тока плато после первого падения будет укорачиваться…

ВОООТ так работает аккумулятор Стартерный Кислотный!

Десульфатация, по сути, то же самое только проваливаться после снимания напруги нужно помогать внешней нагрузкой(лампа из фары — самое оно) при этом конечно следить за ватт-балансом чтоб лампа не сажала больше чем получается вдуть циклом зарядки

Любые попытки вдувать ток после второго подьема напруги из плато заряда — это кипячение ибо электролит уже насыщен и деваться ему некуда и около пластин он кипит, и да… кипение перемешивает электролит и КАГБЭ аккум заряжаелтся… вот только намазка пластин пористая и микровзрывы у неё внутри её разрушают (в электролите появляется черный порошок-осадок который мало того что больше не участвует в энергообмене так ещё и осаждаясь строит мостики которые рано или поздно убьют банку в ноль если не в КЗ вообще…

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Ну вот, что-то уже похожое:

А вот и код:





int Uon = 0; // ручная установка напр. вкл 
int Uoff = 0; // ручная установка напр. выкл 
int Volts = 0; // Вольтметр, 0.04 В на одну единицу в переменной
int Freq = 210; // частота бипера

void setup() { // установка портов на вход/выход
  /*pinMode(0, OUTPUT); // реле 
   DDRB |= (1<<1);  // бипер 
   pinMode(A1, INPUT); // настройка напряжение включения
   pinMode(A2, INPUT); // делитель напряжение(вольтметр)
   pinMode(A3, INPUT); // настройка нарпяжение отключения
   */
  DDRB = 0b00011;
  delay(1000);
  for(byte i = 0; i < 200; i++) // сигнал запуска тоесть пик
  {
    digitalWrite(1, HIGH);  
    delayMicroseconds(Freq);             
    digitalWrite(1, LOW); 
    delayMicroseconds(Freq);       
  }
}

void loop(){ // начинаем бесконечный цикл
  Uon = (648 + (analogRead(A1) / 10)); // счтитоваем установленое напряжение включения
  Volts = analogRead(A2); // счтитоваем напряжение на аккумуляторе
  Uoff = (498 + (analogRead(A3) / 10)); // счтитоваем установленое напряжение выключения
  if(Volts >= 490  && Volts <= 765)
  {
    if(Volts >= (Uon)) // если напряжение 25...30В то:
    {  
      digitalWrite(0, HIGH); // включаем реле 
      /*
      for(int i = 0; i < 500; i++){
       digitalWrite(1, HIGH);
       delayMicroseconds(Freq);
       digitalWrite(1, LOW);
       delayMicroseconds(Freq);
       }*/
    }

    if(Volts <= (Uoff)){ // если напряжение 20...25В то:

      digitalWrite(0, LOW); // отключаем реле
      /*
      for(int i = 0; i < 50; i++){
       digitalWrite(1, HIGH);
       delayMicroseconds(Freq);
       digitalWrite(1, LOW);
       delayMicroseconds(Freq);
       }*/
    }

    delay(500); // пускай покурит немного
  } 
  else { 

    for(int i = 0; i < 500; i++){ // сигнализация
      digitalWrite(1, HIGH);  
      delayMicroseconds(Freq);             
      digitalWrite(1, LOW); 
      delayMicroseconds(Freq);       
    } 

    if(Volts >= 785){ // защита от резких скачков напряжения
      digitalWrite(0, LOW); // при повышении отключаем реле
      digitalWrite(0, LOW); // при понижении отключаем реле
      for(int i = 0; i < 5000; i++){ // сигнализация, интервал 5 сек
        digitalWrite(1, HIGH);  
        delayMicroseconds(Freq);             
        digitalWrite(1, LOW); 
        delayMicroseconds(Freq);       
      }
    }
    if(Volts <= 485){
      digitalWrite(0, LOW); // при понижении отключаем реле
      for(int i = 0; i < 5000; i++){ 
        digitalWrite(1, HIGH);  
        delayMicroseconds(Freq);             
        digitalWrite(1, LOW); 
        delayMicroseconds(Freq);       
      } 
    }
  }
  delay(200);
}

Робит вот так:

http://www.youtube.com/watch?v=wprWkoEL26Q

Тоесть так как надо было, а именно при достижении напряжения в скажем 28В реле включает нагрузку, напряжение падает до 22 В реле откольчается. Регулировка значений включения/отключения нагрузки почти в диапазоне откл - 20-24В. вкл - 26-30В. Чуть позже доработаю схему(изменю делитель напряжения) под 12 В систему, тоесть регулировка выкл - 10-12В, вкл 13-15В, удобно для грид инверторов как бонус, чего неумеют ОУ, добавил звуковую сигнализацию по завышению и понижении напряжения, тоесть если напруга на батарее ниже 20 В или же высше 30-ти В кричим!

Всё файлы тут.

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

Я бы не отключал нагрузку по превышению, а подсаживал ее на реостаты, например. На панелях такого, обычно, не бывает, а вот ветряки "отпускать" нельзя ни в коем случае... Для этого достаточно взять сигнал из цепи питания реле "над" мосфетом и подать его на затвор другого N-мосфета (защитив его стабилитроном). Тогда при "отключении реле" на нем будет "плюс" через обмотку и второй мосфет откроется.

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Итак, прикинул на пальцах - для 12 В системы нужно поменять резисторы R1 и R2 с 2,1 кОм и 15 кОм на 3.3 кОм и 10 кОм соответственно, в идеале лучше 3.3 заменить на 3 К + подстроечный резистор на 400 Ом и для 24В системы 2К + 200 Ом.
Лично у меня нету пока возможности собрать, если кто-то попробует потестить буду очень признателен.

Всхеме нету цепочки питания микроконтроллера, тут всё стандартно - 78l05, по входу стабилизатора защитный диод, по выходу электролитический кондёр на 20-100 мкФ.

Может кто чего в коде заметил, говорите, исправлю или доделаю. 

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

PS транзистор при 12 В системе желательно заменить на любой н-канальный мосфет расчитаный на ток в 0.5 А и напряжение до 25 В.

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Итак спаял опытний образец и сразу нашёл ошибку, схема по первом посте, запитывать МК нужно от аккумулятора а не от солнечной панели потому что именно её напряжение мониторит МК...

Замерял напряжение на порту при таком варианте как в первом посте - 5.* В относительно входа, относительно выхода 2.* В это получилось что напряжение на входе и выходе сложилось или как...

Благо делитель на 25 В рассчитывал, обошлось...

 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

вот ссылочку нашел.

http://www.freechargecontroller.org/

там даже есть шаг за шагом как собирать...

нужна будет помощ с переводом, обращайтесь...

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Если много картинок то я думаю справлюсь   спасибо.

Итак, вернулся в каменный век, пока что работает как контроллер релейного типа, а именно, при достижении напряжения 13.8 В транзистор закрывается, тоесть логический ноль, когда напряжение падает до 13.5 транзистор открывается... Зато робит, можно хоть сейчас к панели подключать, ну сейчас это я уже загнул у меня пол одинадцатого ночи.

Вообщем процесс пошёл, есть идея объединить ту идею что выше с регулировкой включения и выключения с контроллером, портов вроде хватит...

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

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

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Стаб почему-то умер и за собой тиньку забрал... :(

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

HWman пишет:

Стаб почему-то умер и за собой тиньку забрал... :(

А Вы ему вход-выход диодом не зашунтировали? Ну и конденсатор на входе - тоже надо было-бы поставить...

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

Puhlyaviy пишет:

нужна будет помощ с переводом, обращайтесь...

Ага, там надо очень вдумчиво переваривать схему, т.к. распиновка той же LTC6101 в схеме - не соответствует даташиту.

Ну и отличие предложенной схемы от реализации того же фукнционала на микроконтроллере - очевидны.

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

 

Andrey_Y_Ostanovsky пишет:

А Вы ему вход-выход диодом не зашунтировали? Ну и конденсатор на входе - тоже надо было-бы поставить...

Диод на обязательно или же можно обойтись без? Просто диод сильно зависим от температуры, полупроводник же, я когда делал защиту от глубокого разряда тестил на обратную полярность схему, вроде всё работало норм, а там небыло никакого диода.

Насчёт конденсатора - согласен, нужен, проверено на практике.

Всё мучаю гугл вопросами что да как, ну и он мне подкинул несколько интересных картинок, вот первая:

В целом буду придерживаться такого варианта, только мосфеты будут n-канальные, ну и кондёры на подстроечных резисторах по моему лишние.

Вот зачем на схеме стабилитрон ZD1 понять не могу... хотя догадываюсь, это то о чём говорил Andrey_Y_Ostanovsky 

Но пока на тестовой, "голой" плате буду набивать руку так сказать в плане ПО для МК.

Вот ещё интересная картинка которая заслуживает внимания:

Наличие дросселя и диода означает что это контролируемый МК DC-DC понижающий преобразователь, ещё есть амперметр, так что скорей всего это контроллер МРРТ типа, может когда-то доросту в плане компетенции и тоже такой сделаю... Но пока тини.

 

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

HWman пишет:

Диод на обязательно или же можно обойтись без?

Можно и без, но, как Вы уже заметили, иногда горит. Собственно, про это в даташите на lm7805 написано:

Цитата:
reverse-bias protection
Occasionally, the input voltage to the regulator can collapse faster than the output voltage. This can occur, for
example, when the input supply is crowbarred during an output overvoltage condition. If the output voltage is
greater than approximately 7 V, the emitter-base junction of the series-pass element (internal or external) could
break down and be damaged. To prevent this, a diode shunt can be used as shown in Figure 7.

А стабилитрон на делителе, это, как я понимаю, защита входа GP2 от превышения напряжения. Штука нужная, обычно про нее всегда забывают.

 

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Я так понимаю тут одним if else не обойтись, я думаю что этого будет достаточно для реализации даyного алгоритма:

А нет я уже вторую неделю бьюсь лбом об стену, прошу помощи форумчан с написанием кода.

Итак, кратко о схеме, на 0 пине у меня транзистор при помощи ШИМ регулируется ток заряда.
На пине 2 АЦП где 14.4 В это 670, 13.8 - 642.

На пине 3 есть ещё потенциометр которым можно поднять немного напряжение поддержания напряжения на аккуме.

Алгоритм роботы:

Держим пин 0 в HIGH(или же 255 для ШИМ) пока на АЦП(пин 2) не примет значение 670 что соответствует напряжению 14.4 В, когда примет тогда на пине 0 уменьшаем значение ШИМ пока напряжение на АЦП не достигнет 642(13.8) и держим на этом уровне постепенно уменьшая ШИМ вплоть до 0. Если же напряжение ниже 642 (13.8В) то на порт 0 подаём HIGH(или же 255 для ШИМ) пока напряжение не достигнет 670(14,4В). Если отключить батарею и потом подключить, припустим поставил другую то нужно также её зарядить до 14.4 а потом уже дозарядить до полна, тоесть держать напряжение в 13.8(642) и уменьшать ток заряда средствами ШИМ вплоть до 0.

Вот моя заготовка:



int U = 0;  // АЦП 670 - 14.4В, 13.8В - 642
int Pot = 0; // потенциометр для фитч, пока ненужен
unsigned char pwm = 0;
void setup() {
  DDRB = 0b00011; // пины 0 и 1 на выход, все остальные на вход
}

void loop() {
 U = analogRead(A1);
 Pot = analogRead(A2); 
 pwm =  analogWrite(0); 
 
}

 

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Итак, вышло солнишко и поигрался немного, вот схема того что собрал:

Вот код:







int Volts = 0; // Вольтметр
int Pot = 0;
int Uon = 0;
int Uoff = 0;
void setup() {
  DDRB = 0b00011;  // установка портов на вход/выход, 0 и 1 выходи, другие входы
}

void loop(){
  Volts = analogRead(A1); // считываемым напряжение на аккумуляторе
  Pot = analogRead(A2) / 30; // чуть подправим неточности резисторов
  Uon = 595 + Pot; // нижняя граница - 13, 7 В
  Uoff = 620 + Pot ; // верх - 14,5 В
  if(Volts >= Uoff){
    digitalWrite(0, LOW);    
  } 
  if(Volts <= Uon)
  {
    digitalWrite(0, HIGH); 
  }
  delay(500);
}

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

Где же я сделал ошибку?

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

HWman пишет:

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

Где же я сделал ошибку?

Какое напряжение на затворе, когда транзистор "должен быть закрыт"? "Закрывающий" резистор должен соединяться с source, а у Вас - с drain.

Еще могли перепутать source и drain, тогда ток в закрытом состоянии течет через паразитный диод мосфета.

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Вполне возножно что изза подтягивающего резистора всё идёт нетак, спасибо, буду пробовать завтра.

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

https://www.youtube.com/watch?v=TMYHvWNpnh0 - это же почти то что и я буду делать, только индикацию делать небуду, её можно сделать отлельно. Вот только понять зачем там оптопара понять немогу.

Пробовал проверять транзистор, почему-то немогу его никак открыть, наверное полутруп, изза того и пробивался... наверное.

Буду копировать вот эту схему:

Всё какбы внорме и как нужно, понравилась защита на стабилитроне, никогда бы недодумался :)

Илья73
Offline
Зарегистрирован: 06.09.2013

После того как пропал мой контроллер с Ebay, реши повторно не заказывать, а собрать сам. Продолжить решил в этой теме, что бы не плодить подобных.

Программу пока не писал. Пока накидал схемку. Сам ни когда схем не составлял, это моя первая.

Смысл такой, в гараже у меня света нет. А так как возвращаюсь с работы и уже темно хотелось бы иметь небольшое освещение по прибытию в темное время суток. Батарею собрал из обломков элементов с Ebay. Вырезал из обломков примерно одинаковые прямоугольники, соединил , наклеил (подобие неразмокаемой фанеры ) сверху стекло и обмазка герметиком, в общем получил небольшую батарею 36 элементов, и ток кз 400мА.

Аккумулятор от УПСА  б/у.

По схеме. Транзистор IRFZ44 для открытия поставил кт201, то что нашел в гараже. Проверил подключение на UNO, срабатывает отлично. Напряжение на затворе при логической единице 11в. Я думаю его будет достаточно для коммутации нагрузки в максимум 3А.

IRLML2502 , будет заряжать батарею. Диод от батареи Шотки на 3А, чтобы ночью напряжение с АК не утекало в солнечную батарею

Делитель сделал один. С него буду читать все значения. Если не получится программно, то добавлю еще один, но вроде должно получиться.

У меня просьба, если вдруг по схеме накосячил прошу поправить.

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Дозаряжать будешь ШИМом? ведь если тупо отключать зарядку при 14.4 В это неполный заряд.

Идеальный алгоритм - сначала заряжаем до 14.4 потом держым напряжение на уровне 13.8 при этом уменьшаем ток как только ток достигнет такого-то значения(как правило очень мизерное, 10 мА) тогда отклбчаем заряд вообще, он и так сыт. Ну и ждём пока напряжение упадёт до 13 В тогда повторяем.

Илья73
Offline
Зарегистрирован: 06.09.2013

Аккумулятор необслуживаемый. Буду заряжать до 13.8 в., потом отключение. Ждем пока просядет до 13.2в. , потом опять включаем заряд до 13.8в и так по циклу. Читал на форуме электротраспорта что для свинца это правильный режим заряда. Шимом не хочу, это кипятильник для свинца, что вроде не очень полезно.

Была мысль заряжать кондер и потом коротким импульсом пускать ток в аккумулятор, как тут описано выше. Но решил не усложнять.

 

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Илья73 пишет:

Аккумулятор необслуживаемый. Буду заряжать до 13.8 в., потом отключение. Ждем пока просядет до 13.2в. , потом опять включаем заряд до 13.8в и так по циклу. Читал на форуме электротраспорта что для свинца это правильный режим заряда. 

В принципе алгоритм прост, главное со схемотехникой разобраться, как по мне так всё норм в схеме, но я не профи, и даже не любитель в этом деле... тоесть моё мнение далеко не авторитетное.

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

 

Илья73
Offline
Зарегистрирован: 06.09.2013

За програмку спасибо! Очень удобно!

Немного напутал с цифрами. Режим будет такой

Если на аккуме ниже 12.7В - то подаем на полевик единичку и ждем пока напряжение не станет 14.4В. При достижении 14.4В - отключаем полевик  и ждем пока напряжение упадет ниже 12.7В. повторяем цикл. Получаются "качели". При напряжении 11.4v отключаем батарею от нагрузки.

Вчера спаял на макетке схему, настроил делитель.Померял напряжение на выходе 78L05 получил 5.05v, от него и буду плясать.Сегодня попробую написать код.

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

я бы выставил 13.2В вместо 12.7В. но это ИМХО.

Кстати навскидку, может пригодится.

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Могу кинуто мой код, но конечно он не айс, хоть что-то и делал.

Илья73
Offline
Зарегистрирован: 06.09.2013

Код написал, получился сильно простой. Позже выложу.Написал чисто на ардуиновском языке, не ставил задачи облегчить по весу. Все вроде работает, но вот схема...., работает наооборот. При появлении единицы на транзистор и далее на полевик что оключает батарею - транзистор запирается ..., повесил резистор на базу транзика и землю, получилось что при единице транзистор запирается. а при нуле открывается и открывает полевик. т.е все наооборот. Поставил потом п - н - п транзик и стало нормально, но открывается медленно и с ростом напряжения все сильнее и сильнее, мне это не понравилось. Вообщем косяк какой то...

При этом на уно эта схема связка транзистор и полевой работала отлично и как надо. В общем буду сегодня что то мудрить искать, только непонятно где пес покапался...

 

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Тот полевик что на панели у тебя норм открывается и закрывается? у меня почему-то ток через него шел, потом понял что сток исток перепутал местами, но пока пересобрать желания нет, тем более я уже из контроллера сделал "драйер" для велосипедного фонарика.

Илья73
Offline
Зарегистрирован: 06.09.2013

А схема окончательная осталась?

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

HWman
HWman аватар
Offline
Зарегистрирован: 26.02.2013

Илья73 пишет:

А схема окончательная осталась?

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

Схема то есть но она не работает как надо.
Вот рекомендую к прочтению, ато у твоей схемы есть явные недочёты, и кстати, довольно таки интересный сайт, постоянно туда возвращаюсь.

Илья73
Offline
Зарегистрирован: 06.09.2013

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

На сегодня схема такая. Поставил вместо кт201 полевой транзик. Открывается хорошо как тумблером включает нагрузку на мощном мосфете. Только мистика случилась при единице все закрывается в ноль, при нуле открывается )))), пока забил на этот момент, просто в коде поменял местами ноль с единицей.

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

Я представляю как ржут элетронщики если читают этот пост ))). Я бы и сам поржал если бы такие перлы отпускали в той профессии где я работаю))) Лучше бы подсказали))

Я бы и дальше продолжил опыты, только паяльник сгорел )))), может оно и к лучшему, пойду лучше почитаю про электронику, может мысль какая придет )))))

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

может чуть попроще нарисовать схему.  а то не сразу понятно как работает