Съдържание:

Още един тестер за капацитет на батерията: 6 стъпки
Още един тестер за капацитет на батерията: 6 стъпки

Видео: Още един тестер за капацитет на батерията: 6 стъпки

Видео: Още един тестер за капацитет на батерията: 6 стъпки
Видео: Review of 18650 4 channel Lithium Battery Capacity Tester, Charger and Discharge | WattHour 2024, Ноември
Anonim
Още един тестер за капацитет на батерията
Още един тестер за капацитет на батерията
Още един тестер за капацитет на батерията
Още един тестер за капацитет на батерията

Защо още един тестер за капацитет

Прочетох много различни инструкции за изграждане на тестер, но никой от тях не отговаря на моите нужди. Исках да мога да тествам и повече от просто да пея NiCd/NiMH или Lion клетки. Исках да мога да тествам батерията на електроинструмента, без първо да я разделя. Така че реших да разгледам по -отблизо въпроса и да проектирам свой собствен. Едно нещо води до друго и най -накрая реших сам да напиша инструкция. Също така реших да не навлизам във всички подробности за това как всъщност да се изгради тестера, защото всеки може да вземе решение за определени избори, като например какъв размер резистор да използва или дали е необходима печатна платка или е достатъчно Veroboard, а има и тон на инструкции как да инсталирайте орел или как да направите печатна платка. С други думи, ще се концентрирам върху схемите и кода и как да калибрирам тестера.

Стъпка 1: История - Версия 1

История - Версия 1
История - Версия 1

По -горе е първата версия с добавената по -долу над 10V входна поддръжка (R12 & R17 & Q11 & Q12).

Първата версия беше горе -долу взета от инструктаж от deba168 (за съжаление не мога да намеря инструкциите му да предостави връзка). Бяха направени само някои малки промени. В тази версия имах един 10 омов резистор за натоварване, управляван от MOSFET. Това обаче донесе някои проблеми. При тестване на една NiCd или NiMH клетка необходимото време лесно се измерва в часове, ако не и в дни. 1500mAh батерия отне повече от 12 часа (токът беше само 120mA). От друга страна, първата версия може да тества само батерии под 10V. А напълно заредената батерия от 9,6 V всъщност може да бъде до 11,2 V, което не може да бъде тествано поради ограничението от 10 V. Трябваше да се направи нещо. Първо, просто добавих няколко MOSFET и резистори, за да направя разделителите на напрежението, за да могат да позволят повече от 10V. Но това, от друга страна, породи друг проблем. 14.4V батерия, напълно заредена, може да има tp 16.8V, което с 10 ома резистор означаваше 1.68A ток и разбира се разсейване на мощността от натоварващия резистор от почти 30W. Така че, при ниско напрежение твърде дълго време на изпитване и при високо напрежение твърде висок ток. Очевидно това не е адекватно решение и е необходимо по -нататъшно развитие.

Стъпка 2: Версия 2

Исках решение, при което токът да остане в определени граници, независимо от напрежението на батерията. Едно решение би било да се използва PWM и само един резистор, но аз предпочетох да имам решение без пулсиращ ток или да имам нужда да разсейвам MOSFET топлината. По този начин създадох решение с 10 слота за напрежение, всеки с ширина 2V, като използвах 10 3.3ohm резистора и MOSFET за всеки резистор.

Стъпка 3: Ето как се оказа

Ето как се оказа
Ето как се оказа

Коментари за веригата Може да се твърди, че загубата на напрежение върху MOSFET е пренебрежимо малка, тъй като съпротивлението на MOSFET е толкова ниско, но оставих избора на MOSFET на читателя и по този начин съпротивлението може да премине дори над 1 ом, където започва материя. Във версия 1 изборът на правилен MOSFET би премахнал необходимостта от измерване на долната точка, но във версия 2 реших да измервам напрежението само върху един резистор, което след това прави важно действително да има две точки за измерване. Причината за избора беше простотата в свързването на Veroboard. Това добавя известна грешка в точността, тъй като измереното напрежение на един резистор е значително по -малко от измерването на всички резистори. При избора на компоненти реших да използвам това, което или вече съм имал под ръка, или това, което лесно мога да получа. Това доведе до следната спецификация:

  • Arduino Pro Mini 5V! ВАЖНО! Използвах 5V версия и всичко се основава на нея
  • 128x64 I2C OLED дисплей
  • 10 x 5W 3.3 Ohm резистори
  • 3 x 2n7000 MOSFET устройства
  • 10 x МОСФЕТА IRFZ34N
  • Резистори 6 x 10 kOhm
  • 2 x 5 kOhm резистора
  • 16V 680uF кондензатор
  • 1 стар вентилатор на процесора

Не съм добавил следното в схемите

  • издърпващи резистори на I2C линии, които забелязах, че направиха дисплея по -стабилен
  • електропроводи
  • кондензатор в 5V линия, който също стабилизира дисплея

Докато тествах, забелязах, че натоварващите резистори ще се нагрят доста, особено ако всички те се използват. Температурата се повишава до над 100 градуса по Целзий (което е над 212 градуса по Фаренхайт) и ако цялата система трябва да се затвори в кутия, трябва да се осигури някакъв вид охлаждане. Резисторите, които използвах, са 3.3 ома / 5W и максималният ток трябва да възникне с около 2V на резистор, давайки 2V / 3.3 = 0.61A, което води до 1.21W. В крайна сметка добавих прост вентилатор в кутията. Най -вече защото имах около себе си някакъв стар вентилатор на процесора.

Схематична функционалност

Това е доста ясно и обяснително. Батерията, която ще се тества, е свързана към поредицата от резистори и маса. Точките за измерване на напрежението са връзката на батерията и първият резистор. Делителите на напрежение се използват след това за понижаване на напрежението до ниво, което по -добре отговаря на Arduino. Един цифров изход се използва за избор на 10V или 20V обхват на разделителите. Всеки резистор в товара може индивидуално да бъде заземен с помощта на MOSFET, които се задвижват директно от Arduino. И накрая, дисплеят е свързан с щифтове на Arduino I2C. Не е много да се каже за схематичното J

Стъпка 4: Кодът

Кодът
Кодът

По -горе може да се види грубата функционалност на кода. Нека тогава разгледаме по -отблизо кода (файловете arduino ino са приложени). Има редица функции и след това основният цикъл.

Основен контур

Когато измерването е готово, резултатите се показват и изпълнението приключва там. Ако измерването все още не е направено, първо се проверява кой тип батерия е избран и след това напрежението на входа. Ако напрежението надвишава 0,1 V, трябва да е свързана поне някаква батерия. В този случай се извиква подпрограма, която се опитва да разбере колко клетки има в батерията, за да реши как да тества. Броят на клетките е повече или по -малко информация, която би могла да се използва по -добре, но в тази версия тя се отчита само чрез сериен интерфейс. Ако всичко е наред, процесът на разреждане започва и на всеки кръг от главния контур се изчислява капацитетът на батерията. В края на основния цикъл дисплеят се попълва с известни стойности.

Процедура за показване на резултатите

Функцията showResults просто задава редовете, които да се показват на дисплея, а също и низът, който да се изпраща към сериен интерфейс.

Процедура за измерване на напрежения

В началото на функцията се измерва Vcc на Arduino. Необходимо е да можете да изчислявате напреженията, измерени с помощта на аналогови входове. След това напрежението на батерията се измерва с обхват 20V, за да може да се реши кой диапазон да се използва. След това се изчислява както напрежението на акумулатора, така и напрежението на резистора. Измерванията на напрежението на батерията се възползват от клас DividerInput, който има методи за отчитане и напрежение, за да даде суровото отчитане или изчисленото напрежение на въпросния аналогов вход.

Процедура за избор на използвани стойности

В функцията selectUsedValues броят на клетките се отчита, а горните и долните граници за батерията са настроени да се използват с процедурата за разреждане. Също така измерването е маркирано като започнато. Границите за тази процедура са зададени в началото на като глобални променливи. Въпреки че биха могли да бъдат постоянни и могат да бъдат дефинирани вътре в процедурата, тъй като не се използват глобално. Но хей, винаги има какво да се подобри:)

Процедура за изчисляване на капацитета на батерията

Функцията за разреждане се грижи за действителното преброяване на капацитета на батерията. Той получава като параметри ниските и високите граници на напреженията за тестваната батерия. Високата стойност не се използва в тази версия, но ниската се използва за решаване кога да спрете тестването. В началото на функцията броят на резисторите, които трябва да се използват, се установява с помощта на функция, създадена за тази цел. Функцията връща номера на резистора и в същото време стартира разреждането и нулира брояча. След това напреженията се измерват и използват заедно с известната стойност на резистора за изчисляване на тока. Сега, когато знаем напрежението и тока и времето от тях от последното измерване, можем да изчислим капацитета. В края на процеса на разреждане напрежението на акумулатора се сравнява с долната граница и ако е спаднало границата, фазата на разреждане спира, MOSF се затварят и измерването се маркира като готово.

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

Във функцията selectNumOfResistors се прави просто сравнение на напрежението с предварително зададените стойности и в резултат се определя броят на резисторите, които да се използват. Съответният MOSFET се отваря, за да пропусне някои от резисторите. Слотовете за напрежение са избрани така, че максималният ток по всяко време по време на разреждането да остане малко над 600mA (2V/3.3Ohm = 606mA). Функцията връща броя на използваните резистори. Тъй като вентилаторът се задвижва от същата линия като първия MOSFET, той трябва винаги да се отваря, когато тече разряд.

Стъпка 5: Калибриране на измервателния уред

Калибриране на измервателния уред
Калибриране на измервателния уред

За да калибрирам глюкомера, създадох друго приложение (прикачено). Той използва същия хардуер. В началото всички стойности на разделителя за корекции са зададени на 1000.

const int divCorrectionB10V = 1000; // делител на корекция множител в диапазон 10V const int divCorrectionR10V = 1000; // делител на корекция множител в диапазон 10V const int divCorrectionB20V = 1000; // делител на корекция множител в диапазон 20V const int divCorrectionR20V = 1000; // делител на корекция множител в диапазон 20V

във функцията readVcc () полученото напрежение Vcc зависи от настройката на стойността в последния ред на функцията преди връщане. Обикновено можете да намерите в интернет стойност 1126400L, която да се използва при изчисление. Забелязах, че резултатът не е правилен.

Процес на калибриране:

  1. Заредете приложението за измерване в Arduino.
  2. Можете да видите в Arduino (и в серийния изход и дали вентилаторът се върти) дали зареждането е включено. Ако е така, завъртете превключвателя за избор на тип батерия.
  3. Регулирайте стойността в readuVCC (), за да получите правилен резултат. Вземете стойността, която функцията дава (която е в миливолта) и разделете дългата стойност с нея. Ще получите суровата стойност на вътрешната препратка. Сега измерете действителното захранващо напрежение в миливолта с мултицет и го умножете с предварително изчислената стойност и ще получите новата коригирана дълга стойност. В моя случай функцията върна 5288mV, когато действителният Vcc беше 5.14V. Изчисляване на 1126400/5288*5140 = 1094874, което прецизирах чрез проба. Поставете новата стойност в кода и я качете отново в Arduino.
  4. Регулирането на стойностите за коригиране на разделителя на аналоговия входен резистор става чрез използване на регулируем източник на захранване, който се използва за захранване на входа на глюкомера. Най -простото е да се използват напрежения от 1V до 20V с 1V стъпки и записване на резултатите в електронна таблица. В електронната таблица се приема средната стойност. Коригираните стойности се изчисляват по следната формула: „raw_value*диапазон*Vcc/Vin“, където raw_value е стойността в 10VdivB, 10VdivR, 20VdivB или 20VdivR в зависимост от това коя корекция трябва да се изчисли.

Вижте електронната таблица как изглеждаше за мен. Средните стойности се изчисляват само от стойностите, които трябва да бъдат в диапазона и тези стойности след това се задават в действителното приложение за измерване.

Като този

const int divCorrectionB10V = 998; // разделител за корекция на разделител в диапазон 10V const int divCorrectionR10V = 1022; // разделител за корекция на разделител в диапазон 10V const int divCorrectionB20V = 1044; // разделител за корекция на разделител в обхват 20V const int divCorrectionR20V = 1045; // делител за корекция на разделител в диапазон 20V

Регулирането на стойността на резистора може да стане чрез осигуряване на известно напрежение към входа (т.е. 2V), превключване на превключвателя от типа на прилеп (за да се натоварва) и измерване на влизащия ток и напрежението през първия резистор и разделяне на напрежението с тока. За мен 2V даде 607mA, което дава 2/0.607 = 3.2948 ома, което закръглих до 3.295 ома. Така че сега калибрирането е направено.

Стъпка 6: Последна ЗАБЕЛЕЖКА

Една важна забележка тук. Наложително е всички връзки да са в отлично състояние от батерията към резисторите. Имах една лоша връзка и се чудех защо получих 0.3V по -малко волта в резисторната мрежа, отколкото на батерията. Това означаваше, че процесът на измерване завърши почти веднага с 1.2V NiCd клетки, тъй като долната граница от 0.95V беше достигната бързо.

Препоръчано: