Транзисторный ключ для зарядника

Тема в разделе "Посоветуйте детальки", создана пользователем Karabas, 13 окт 2015.

  1. Karabas

    Karabas Гик

    Привтствую знатоков, нужна помощь вот в каком вопросе:
    Делаю автоматическую зарядку для Ni-Ca, будут датчики тока, напряжения и температуры.
    Только вот чем регулировать ток/напряжение на аккумуляторе? MOSFET-ы и реле не годятся, там же только открыто/закрыто. Если я правильно помню, нужен биполярный транзистор. А вот только не нахожу я такого модуля. Нужен некий ЦАП с силовым ключем, такое существует?
    Спасибо.
     
  2. Radius

    Radius Гик

    Подключите ШИМ с Ардуино к транзистору, конденсатор на землю в качестве фильтра, дальше меряйте напряжение и ток. Ток зарядки можно измерять на низкоомном резисторе задействовав два входа АЦП (до и после резистора). Разность напряжений делим на сопротивление и получаем ток. Ток регулируем ШИМ-ом увеличивая или уменьшая напряжение.
     
  3. Karabas

    Karabas Гик

    Чего то я затормозил, меня смутило что с ШИМ-ом зарядка будет идти импульсами, а вот сечас вспомнил, что простейшие зарядники (на одним диоде) как раз и заряжают полупериодами.
    Но ШИМ он же не уменьшает напряжение, а так сказать, уменьшает время воздействия, вопрос как ортеагирует аккумулятор на такую регулеровку? Насколько он инерцеонен?
    Думаю я сам себе надумал трудностей.
    Скоро пришлют детали и сразу доложу, что и как сильно горело :D
     
  4. Radius

    Radius Гик

    Все современные DC-DC преобразователи работают на таком же принципе, но в основе все равно лежит ШИМ с частотами от 50 до 300 кГц. Короткие импульсы сглаживаются конденсатором и на выходе получается постоянное напряжение амплитуда которого зависит от скважности импульсов.
     
  5. Karabas

    Karabas Гик

    Нда, не выходит каменный цветок, а какая идея была собрать из готовых кусков :)
    Заткнулся на измерителе тока, обычный модуль на 5А ACS712, но почему то с нулевым током он выдает 2.3В (вместо 2.5), цифровое значение около 500 (хотя вроде как должно быть 512). Но вот в чем дело, когда меряю ток, показания около 150-200 мА, хотя нагрузка ровно 0.5 А. В какой то момент в мониторе побежали цифры 470-500 мА, но радость была не долгой. Теребил контакты, менял БП, пробовал другой модуль, все то-же :(

    double current = 0;
    int currTmp;
    void setup() {
    Serial.begin(9600);
    }
    void loop() {
    for(int i=0; i<100; i++) // усредняем замеры
    {
    currTmp = analogRead(A1);
    if (currTmp<512) currTmp=512; // избавляемся от отрцательных показаний
    current += currTmp;
    }
    current=(current/100);
    Serial.print((current-512)*9.765); // отображение в мА
    Serial.print("\n");
    delay(100);
    current = 0;
    }
     
  6. Unixon

    Unixon Оракул Модератор

    ACS712 с 0 током выдает Vcc/2. 1) проверьте его питание. 2) откалибруйте 0.
     
    Karabas нравится это.
  7. Karabas

    Karabas Гик

    Так и есть, немного уходит ноль (не 2.5), у тому же только у Уно все более-менее, у Нано питание падает до 4.6В, может контакты, незнаю.
    Плюс, что самое главное, у этого датчика изменение 185 мВ на ампер, что дает нам общий рост при 5А меньше вольта. Точность так себе, плюс-минус лапоть. Я-то думал но во весь размах будет мерять.

    Вот скетч, который дает нормальные результаты, если кому интересно мерять ток
    //===========================================
    float setUp;
    float offSet;

    void setup()
    {
    delay(100);
    setUp = 0;
    for (int i = 0; i < 100; i++) //Калибровка
    {
    setUp = setUp + analogRead(A1);
    }
    setUp = setUp / 100; //Усредненое значение
    offSet = 512 - setUp;//Насколько "уходит" ноль
    Serial.begin(9600);
    //Serial.print("offSet = ");
    //Serial.println(offSet);
    //Serial.print("setUp = ");
    //Serial.println(setUp);
    //Serial.print("Raw data= ");
    //Serial.println(analogRead(A1));
    }

    void loop()
    {
    float average = 0;
    for(int i = 0; i < 1000; i++) //Усреднение показаний
    {
    average = average + (.0264 * (analogRead(A1) + offSet) -13.51);//Расчет и отображение в миллиамперах
    delay(1);
    }
    Serial.print(average);
    Serial.println("mA");
    }