Зарядное для свинцовых аккумуляторов на базе ардуино

Тема в разделе "Технологии радиолюбителя", создана пользователем Ardu, 20 июл 2015.

  1. Ardu

    Ardu Нуб

    Спасибо, буду знать! Но в моём случае активные действия продолжаются практически непрерывно. Подумываю сделать индикацию на светодиодах. Твердотельное реле мне необходимо для снижения шума и увеличения силы допустимого тока.
     
  2. jambose

    jambose Нуб

    Как с зарядкой обстоят дела? Что-то тема остоновилась.
     
  3. ostrov

    ostrov Гуру

    Не первый случай, когда дело начинается мощным фанатизмом и заканчивается скромной тишиной.
     
  4. Vad33

    Vad33 Капитан-оригинал

    Бензин кончился. :(
     
  5. Влерий

    Влерий Нуб

    В принципиальной схеме ошибка...
    А именно надо диодный мост повернуть на 180 градусов.
     
  6. alp69

    alp69 Гик

    Да и конденсатор на 20000 мкф вызывает сомнение. Реле непонятно какие цепи коммутирует.
     
  7. Aliotr

    Aliotr Нерд

    Что не понравилось:
    1. 16 вольт не выдадут 30 ампер
    2. Напряжение заряда сглажено большим конденсатором. От него будут искры при подключении. Для чего он нужен?
    3. Питание ардуино от той же обмотки что и нагрузка.
    4. Нет фильтров от импульсных помех.
    5. Твердотельное реле на коммутацию постоянного тока (нет регулировки, но есть коммутация)
    6. Зачем здесь ардуино, не понятно вообще, может для случайных сбоев и зависаний зимой?
    7. Очень дорогостоящий проект.
    Думаю:
    зарядное должно быть недорогим, простым и надежным устройством, работающем в жару, холод, влажность с одинаковой стабильностью. Может быть не очень мощным (до 4А) переносным (не тяжелым) или стационарным в гараже ( под потолок его, чтобы не мешался)).
    Регулировку и коммутацию дешевле и проще делать на тиристорах, это старая аксиома.

    Ну а задумка имеет право на жизнь, ждем результата, может и мнение сменю ))
     
  8. Leone

    Leone Нерд

    Немного код подправил проверьте может есть замечания

    Код (C++):
    int voltPin =0; //напряжение с аккумулятора через делитель
    int chargePin = 13; //выход на реле подачи зарядного импульса с выпрямителя





    void setup()
    {
      Serial.begin(9600);
      pinMode(chargePin, OUTPUT); //назначаем пин выходом
      pinMode(voltPin, INPUT);    //Задаємо вхід для сканування напруги
    }


           

    void loop()
    {    int voltage;

       label: /// Просканувати величину напруги та та почати зарядку або відмінити її

           
             voltage = voltage_1(); //читаємо напругу
             Serial.println("Voltage");
             Serial.println(voltage);              
       if(voltage < 13.5) //если напряжение меньше 13.5 Вольта, то подаем импульс
           {
              voltage = voltage_1();  //читаємо напругу
               Serial.println("__________Reading___________");
               Serial.println("Voltage");
               Serial.println(voltage); //Надрукувати значення напруги
           
                digitalWrite(chargePin, HIGH); //Включити зарядку
             
         label_1: //Заряджання не вийшло за межі тому продовжуємо цикл    

     
                delay(500);
                voltage = voltage_1(); //читаємо напругу
                Serial.println("Cikl_po4ato");
                Serial.println("Voltage");
                Serial.println(voltage); //Надрукувати значення напруги
                if(voltage < 14.5)  //Якщо напруга меньше тоді виконуємо
                {
                    digitalWrite(chargePin, HIGH); //Включити зарядку
                    Serial.println("VOLTAGE<14.5 Charge_1");
                    delay(2000);
                }
                else   //Якщо ні то зупиняємо зарядку та переходемо на початок і чекаємо падіння напруги до заданої
                {
                    digitalWrite(chargePin, LOW); //Зупинити зарядку
                    Serial.println("Kasanie>14.5 na 1 SEC");
                    goto label;
                }
                voltage = voltage_1(); //читаємо напругу
             
                Serial.println(voltage);
                if(voltage < 14.5)  //Якщо напруга меньше тоді виконуємо
                {
                    digitalWrite(chargePin, HIGH);  //Включити зарядку
                    Serial.println("VOLTAGE<14.5 Charge_2");
                    delay(2000);
                }
                else   //Якщо ні то зупиняємо зарядку та переходемо на початок і чекаємо падіння напруги до заданої
                {
                    digitalWrite(chargePin, LOW);     //Зупинити зарядку
                    Serial.println("Kasanie14.5 na 2 SEC");
                    goto label;
                }
                voltage = voltage_1(); //читаємо напругу
                Serial.println(voltage);
                if(voltage < 14.5)  //Якщо напруга меньше тоді виконуємо
                {
                    digitalWrite(chargePin, HIGH);  //Включити зарядку
                    Serial.println("VOLTAGE<14.5 Charge_3");
                    delay(2000);
                }
                else   //Якщо ні то зупиняємо зарядку та переходемо на початок і чекаємо падіння напруги до заданої
                {
                    digitalWrite(chargePin, LOW);    //Зупинити зарядку
                    Serial.println("Kasanie14.5 na_3_SEC");
                    goto label;
                }
                voltage = voltage_1(); //читаємо напругу
                Serial.println(voltage);
                if(voltage < 14.5)  //Якщо напруга меньше тоді виконуємо
                {
                    digitalWrite(chargePin, HIGH);   //Включити зарядку
                    Serial.println("VOLTAGE<14.5 Charge_4");
                    delay(2000);
                    Serial.println("CIKL_ZAVERHENO");
                    digitalWrite(chargePin, LOW);    //Зупинити зарядку
                }
                else   //Якщо ні то зупиняємо зарядку та переходемо на початок і чекаємо падіння напруги до заданої
                {
                    digitalWrite(chargePin, LOW);    //Зупинити зарядку
                    Serial.println("Kasanie<14.7_5_SEC");
                 
                    goto label;
                }
             
            }
       
        else  //Очікуємо заданий час та перевіряємо чи напруга зменшилась для надання дозволу зарядки
        {
        Serial.println("Voltage>14.5V");
        digitalWrite(chargePin, LOW);    //Зупинити зарядку
        Serial.println("full_charge_WAIT");
        delay(10000);
        goto label;
        }
    delay(6000); //Затримка між циклами зарядки
    goto label_1;  
       
       
       
    }

                             
                  int voltage_1 ()
                  {
                  int ReadVolt;
                  int ReadVolt_2;
                    ReadVolt = analogRead(voltPin);
                    delay(200);
                    ReadVolt_2 = analogRead(voltPin);
                  int voltage_1 = ((ReadVolt+ReadVolt_2)/2) * (18.9 / 1023.0);
                  return voltage_1;
             
                   }
     
    Последнее редактирование: 6 мар 2017
  9. Unixon

    Unixon Оракул

    @Leone, отредактируйте пост. Используйте тэг [ code ] [ /code ].
     
  10. alp69

    alp69 Гик

    Есть. Они здесь.
     
  11. Leone

    Leone Нерд

    Сори первий раз тут!
     
    alp69 нравится это.
  12. mcureenab

    mcureenab Гуру

    Дешевле в магазине зарядное устройство купить. Отечественные под маркой Орион весьма достойные. И с цифровым управлением есть. Только подделок много. Нужно или непосредственно с сайта завода заказывать или у дилера по ссылке.

    Использовать для зарядника трансформатор на 600ватт это жесть по нынешним импульсным временам.
     
  13. Промах

    Промах Нерд

    Соглашусь на все 100 , может конечно ТС хотел "надёжности" добавить применив т-р , но меня 6 лет устраивает орион ( была поломка , кондер пленочный разорвало , поменял пару - проблемм нет ), он и блок питания до 18А и зарядник всепогодный . И подделки с АТХ блоком внутри повидал .
     
  14. Leone

    Leone Нерд

    Вот пример на два режима 6-12в таймерами можете подогнать под себя как источник питания БП-ПК (разогнаний до 16в) все поместилось в корпус плюс вольтметр и амперметр реле ииспользовал только на розряд и то для сохранения места так как радиатор транзисторов занимают много места на заряд использовал мощьныэ транзистори при 6А ели теплыэ!
    Код (C++):
    #define voltPin A0 //напряжение с аккумулятора через делитель
    #define chargePin  13 //выход на реле подачи зарядного импульса с выпрямителя
    #define switcherPin  10 //перемикач режиму заряду
    #define Led_6V  2 //Вихід на світлодіод зарядки в режимі 6в
    #define Led_12V  3 //Вихід на світлодіод зарядки в режимі 12в
    #define Disherge  4 //вихід на реле розряду

    void setup()
    {
        Serial.begin(9600);
        pinMode(chargePin, OUTPUT); //назначаем пин выходом
      pinMode(voltPin, INPUT);    //Задаємо вхід для сканування напруги
      pinMode(switcherPin, INPUT_PULLUP);
      pinMode(Led_6V, OUTPUT);
      pinMode(Led_12V, OUTPUT);
      pinMode(Disherge, OUTPUT);
    }

    void loop()
    {

      Serial.println(digitalRead(switcherPin));
      if(!digitalRead(switcherPin))
      {
        Serial.println("12V charging mode!");
        digitalWrite(Led_6V, LOW);
        digitalWrite(Led_12V, HIGH);
          if(CheckCapacity12V()) Charged12V();
          else Charging12V();
     

      }
      else
      {
        Serial.println("6V charging mode!");
        digitalWrite(Led_12V, LOW);
        digitalWrite(Led_6V, HIGH);
        if(CheckCapacity6V()) Charged6V();
        else Charging6V();
     

      }
    }



    void Charged6V()
    {
        Serial.println("6V battery is fullcharged!");
        Serial.print("Voltage: ");
        Serial.println(voltage());
      digitalWrite(chargePin, LOW);
        delay(10000);
     
    }

    void Charging6V()
    {
      Serial.println("6V charging!");
        while(voltage()<6.47)
    {
            Serial.print("Voltage: ");
            Serial.println(voltage());
        digitalWrite(chargePin, HIGH);
        digitalWrite(Disherge, LOW);
        delay(3000);
        digitalWrite(chargePin, LOW);
        digitalWrite(Disherge, HIGH);
        delay(500);
        if (digitalRead(switcherPin)!=1) return;
    }
    }


    bool CheckCapacity6V()
    {
        if(voltage()>6.39)
    {
       
          Serial.print("Voltage: ");
          Serial.println(voltage());
        return  true;
    }
     
        else
      {
         

          Serial.print("Voltage: ");
          Serial.println(voltage());
        return  false;
        }

    }

    void Charged12V()
    {
      Serial.println("12V battery is fullcharged!");
      Serial.print("Voltage: ");
      Serial.println(voltage());
      digitalWrite(chargePin, LOW);
      delay(10000);

    }

    void Charging12V()
    {
      Serial.println("12V charging!");

      while(voltage()<12.94)
    {
        Serial.print("Voltage: ");
        Serial.println(voltage());
        digitalWrite(chargePin, HIGH);
        digitalWrite(Disherge, LOW);
        delay(3000);
        digitalWrite(chargePin, LOW);
        digitalWrite(Disherge, HIGH);
        delay(500);
        if (digitalRead(switcherPin)!=0) return;
    }
    }


    bool CheckCapacity12V()
    {
      if(voltage()>12.80)
    {
     
        Serial.print("Voltage: ");
        Serial.println(voltage());
        return  true;
    }

      else
      {
     

        Serial.print("Voltage: ");
        Serial.println(voltage());
        return  false;
        }

    }


    float voltage()
    {
        float ReadVolt;
        float ReadVolt_2;
        ReadVolt = analogRead(voltPin);
        delay(200);
        ReadVolt_2 = analogRead(voltPin);
        float voltage_1 = ((ReadVolt+ReadVolt_2)/2) * (18.9 / 1023.0);
        return voltage_1;
    }
     
     
  15. Промах

    Промах Нерд

    Схему подключения обвязки к ардуине в студию, с номиналами деталей , особенно интересно как замер тока происходит .
     
  16. Leone

    Leone Нерд

    Ампераж замеряю цифровим амперметром вне схеми вольтаж тоже есть цифровой но и ардуинка его видит через делитель вот схема
     

    Вложения:

  17. Промах

    Промах Нерд

    Не , это неправильно , при таком раскладе есть шанс взорвать аком с замкнутой банкой ( или если замкнёт в процессе) , по любому надо как то задавать диаппазон возможных напряжений , ограничивать ток , особенно при глубоком разряде .
    У меня китайский IMAX B6 на 128 атмеге, замечательная штука , заряжает что угодно . Может есть где то в сети исходники , там и по току и по напряжению контроль, и защиты . Ценник на неё от 1000 до ..... , я брал за 1080 р .той весной.
     
    Leone нравится это.
  18. Leone

    Leone Нерд

    Согласен но пока так!