Привтствую знатоков, нужна помощь вот в каком вопросе: Делаю автоматическую зарядку для Ni-Ca, будут датчики тока, напряжения и температуры. Только вот чем регулировать ток/напряжение на аккумуляторе? MOSFET-ы и реле не годятся, там же только открыто/закрыто. Если я правильно помню, нужен биполярный транзистор. А вот только не нахожу я такого модуля. Нужен некий ЦАП с силовым ключем, такое существует? Спасибо.
Подключите ШИМ с Ардуино к транзистору, конденсатор на землю в качестве фильтра, дальше меряйте напряжение и ток. Ток зарядки можно измерять на низкоомном резисторе задействовав два входа АЦП (до и после резистора). Разность напряжений делим на сопротивление и получаем ток. Ток регулируем ШИМ-ом увеличивая или уменьшая напряжение.
Чего то я затормозил, меня смутило что с ШИМ-ом зарядка будет идти импульсами, а вот сечас вспомнил, что простейшие зарядники (на одним диоде) как раз и заряжают полупериодами. Но ШИМ он же не уменьшает напряжение, а так сказать, уменьшает время воздействия, вопрос как ортеагирует аккумулятор на такую регулеровку? Насколько он инерцеонен? Думаю я сам себе надумал трудностей. Скоро пришлют детали и сразу доложу, что и как сильно горело
Все современные DC-DC преобразователи работают на таком же принципе, но в основе все равно лежит ШИМ с частотами от 50 до 300 кГц. Короткие импульсы сглаживаются конденсатором и на выходе получается постоянное напряжение амплитуда которого зависит от скважности импульсов.
Нда, не выходит каменный цветок, а какая идея была собрать из готовых кусков Заткнулся на измерителе тока, обычный модуль на 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; }
Так и есть, немного уходит ноль (не 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"); }