Mündəricat:

Başqa bir Batareya Ölçmə Cihazı: 6 addım
Başqa bir Batareya Ölçmə Cihazı: 6 addım

Video: Başqa bir Batareya Ölçmə Cihazı: 6 addım

Video: Başqa bir Batareya Ölçmə Cihazı: 6 addım
Video: Linptech ES1 - микроволновый датчик присутствия для mihome, интеграция Home Assistant Gateway 3 2024, Iyul
Anonim
Başqa bir Batareya Ölçmə Cihazı
Başqa bir Batareya Ölçmə Cihazı
Başqa bir Batareya Ölçmə Cihazı
Başqa bir Batareya Ölçmə Cihazı

Niyə daha bir güc test cihazı

Bir çox fərqli test qurma təlimatlarını oxudum, amma heç biri ehtiyaclarıma uyğun gəlmir. NiCd/NiMH və ya Lion hüceyrələrini tək sınamaqdan daha çox test etmək istədim. Elektrik alətinin batareyasını birinci hissəyə götürmədən sınamaq istəyirdim. Buna görə də, bu mövzuya daha yaxından baxmağa və özümə məxsus bir dizayn hazırlamağa qərar verdim. Bir şey digərinə gətirib çıxarır və nəhayət özüm öyrədici yazmağa qərar verdim. Test cihazının necə qurulacağına dair bütün detallara girməmək qərarına gəldim, çünki hər kəs hansı ölçü rezistorundan istifadə ediləcəyi və ya bir PCB lazım olub -olmaması və ya kifayət qədər Veroboard olması kimi müəyyən seçimlərə qərar verə bilər. kartal qurmaq və ya bir PCB necə etmək. Başqa sözlə, sxemlərə və koda və test cihazının necə kalibr olunacağına diqqət yetirəcəyəm.

Addım 1: Tarix - Versiya 1

Tarix - Versiya 1
Tarix - Versiya 1

Yuxarıda, aşağıda göstərilən 10V -dən çox giriş dəstəyi (R12 & R17 & Q11 & Q12) əlavə olunan ilk versiya.

İlk versiya az -çox deba168 tərəfindən öyrədiləndən götürülmüşdür (təəssüf ki, bir keçid təmin etmək üçün təlimatlandırıcı tapa bilmirəm). Yalnız bəzi kiçik dəyişikliklər edildi. Bu versiyada bir mosfet tərəfindən idarə olunan bir 10 ohm yük müqavimətçim var idi. Bu da bəzi problemlər gətirdi. Bir NiCd və ya NiMH hüceyrəsini sınayarkən lazım olan vaxt günlərlə deyil, saatlarla asanlıqla ölçülürdü. 1500mAh batareya 12 saatdan çox çəkdi (cərəyan yalnız 120mA idi). Digər tərəfdən, ilk versiya yalnız 10V -dən aşağı batareyaları sınaya bilərdi. Tam doldurulmuş 9.6V batareya, əslində 10V həddi səbəbindən sınaqdan keçirilə bilməyən 11.2V -ə qədər ola bilər. Bir şey etmək lazım idi. Birincisi, gərginlik bölücülərinin 10V -dan çox icazə verə bilməsi üçün bir neçə mosfet və rezistor əlavə etdim. Ancaq bu digər tərəfdən başqa bir problem ortaya çıxardı. Tam yüklənmiş 14.4V batareya, 16 ohm -a qədər gücə malik ola bilər ki, bu da 10 ohm müqavimətlə 1.68A cərəyan deməkdir və əlbəttə ki, 30W yük müqavimətindən güc itkisi deməkdir. Beləliklə, aşağı gərginliklə çox uzun sınaq müddəti və yüksək gərginliklə çox yüksək cərəyanla. Aydındır ki, bu adekvat bir həll deyildi və əlavə inkişafa ehtiyac var idi.

Addım 2: Versiya 2

Batareyanın gərginliyindən asılı olmayaraq cərəyanın müəyyən həddə qalacağı bir həll istədim. Bir həll PWM və yalnız bir rezistor istifadə etmək olardı, amma pulsasiya etməyən bir həll almağı və ya mosfet istiliyinin yayılmasına ehtiyac duymağı üstün tutdum. Beləliklə, hər biri 2V olan 10 3.3ohm rezistor və hər bir rezistor üçün mosfet istifadə edərək 10 gərginlik yuvası olan bir həll yaratdım.

Addım 3: Bu necə oldu

Bu Necə Oldu
Bu Necə Oldu

Biri, mosfetin müqaviməti çox aşağı olduğu üçün mosfet üzərindəki gərginlik itkisinin əhəmiyyətsiz olduğunu iddia edə bilər, ancaq oxucuya mosfet seçimini buraxmışam və buna görə də müqavimət başladığı yerdə 1 ohm -dan yuxarı gedə bilər. məsələ. Düzgün bir mosfet seçmək, aşağı nöqtəli ölçmə ehtiyacını aradan qaldıracaq, ancaq 2 -ci versiyada gərginliyi yalnız bir rezistor üzərində ölçmək qərarına gəldim ki, bu da həqiqətən iki ölçü nöqtəsinin olmasını vacib edir. Və seçimin səbəbi Veroboard -ın naqillərindəki sadəlik idi. Bir rezistordakı ölçülmüş gərginlik bütün rezistorlar üzərində ölçməkdən xeyli kiçik olduğu üçün bu, bəzi dəqiqlik səhvləri əlavə edir. Komponent seçimində əlimdə olanları və ya asanlıqla əldə edə biləcəyimi istifadə etməyə qərar verdim. Bu, aşağıdakı BOM -a səbəb oldu:

  • Arduino Pro Mini 5V! Vacib! 5V versiyasını istifadə etdim və hamısı buna əsaslanır
  • 128x64 I2C OLED ekran
  • 10 x 5W 3.3 Ohm rezistorlar
  • 3 x 2n7000 mosfets
  • 10 x IRFZ34N mosfets
  • 6 x 10 kOhm rezistorlar
  • 2 x 5 kOhm rezistorlar
  • 16V 680 uF kondansatör
  • 1 köhnə CPU fanatı

Aşağıdakıları sxemlərə əlavə etməmişəm

  • I2C xətlərindəki çəkmə rezistorları, ekranı daha sabit hala gətirdi
  • elektrik xətləri
  • Ekranı sabitləşdirən 5V xəttindəki kondansatör

Test edərkən yük rezistorlarının, xüsusən də hamısı istifadədə olsaydı, olduqca istiləşəcəyini gördüm. Temperatur 100 dərəcədən yuxarı (212 dərəcə Fahrenheit) və bütün sistem bir qutuda bağlanacaqsa, bir növ soyutma təmin edilməlidir. İstifadə etdiyim rezistorlar 3.3 ohm / 5W -dir və maksimum cərəyan 1Vt ilə nəticələnən 2V / 3.3 = 0.61A verən rezistor başına təxminən 2V ilə baş verməlidir. Qutuya sadə bir fan əlavə etməklə sona çatdım. Əsasən ətrafımda köhnə bir CPU fanatı olduğum üçün.

Şematik funksionallıq

Olduqca düzdür və özünü izah edir. Test ediləcək batareya, rezistorlar və topraklama seriyasına bağlıdır. Gərginlik ölçmə nöqtələri batareya bağlantısı və ilk müqavimətdir. Gərginliyi ayırıcılar daha sonra gərginliyi Arduino -ya daha uyğun bir səviyyəyə endirmək üçün istifadə olunur. Bölücülərin 10V və ya 20V aralığını seçmək üçün bir rəqəmsal çıxış istifadə olunur. Yükdəki hər bir müqavimət, birbaşa Arduino tərəfindən idarə olunan mosfets istifadə edərək ayrı -ayrılıqda əsaslandırıla bilər. Və nəhayət, ekran Arduino I2C pinlərinə qoşulur. Şematik J haqqında çox şey söyləmək olmaz

Addım 4: Kod

Kod
Kod

Kodun kobud funksionallığını yuxarıda görmək olar. Kodu daha yaxından nəzərdən keçirək (arduino ino faylları əlavə olunur). Bir sıra funksiyalar və sonra əsas döngə var.

Əsas döngə

Ölçmə hazır olduqda nəticələr göstərilir və icra orada bitir. Ölçmə hələ bitməyibsə, əvvəlcə hansı batareya növünün seçildiyini və sonra girişdəki gərginliyi yoxlayın. Gərginlik 0,1V -dən çox olarsa, ən azı bir növ batareya bağlanmalıdır. Bu vəziyyətdə, test etməyi qərara almaq üçün batareyada neçə hüceyrə olduğunu anlamağa çalışmaq üçün bir alt proqram çağırılır. Hüceyrələrin sayı daha yaxşı istifadə edilə bilən az və ya çox məlumatdır, lakin bu versiyada yalnız serial interfeysi vasitəsilə bildirilir. Hər şey yaxşı olarsa, boşaltma prosesi başlayır və əsas döngənin hər turunda batareyanın tutumu hesablanır. Əsas döngənin sonunda ekran bilinən dəyərlərlə doldurulur.

Nəticələrin göstərilməsi qaydası

ShowResults funksiyası sadəcə ekranda göstəriləcək sətirləri və serial interfeysinə göndəriləcək sətri təyin edir.

Gərginliyin ölçülməsi qaydası

İşin əvvəlində Arduino Vcc ölçülür. Analoq girişlərdən istifadə edərək ölçülmüş gərginliyi hesablaya bilmək lazımdır. Sonra batareyanın gərginliyi 20V aralığından istifadə edilməklə hansı aralığın istifadə olunacağına qərar verə bilər. Sonra həm batareya gərginliyi, həm də rezistor gərginliyi hesablanır. Batareya gərginliyinin ölçülməsi, oxunuş və gərginliyin analoji girişin hesablanmış gərginliyini vermək üçün oxu və gərginliyə malik olan DividerInput sinifindən istifadə edir.

İstifadə olunan dəyərlərin seçilməsi qaydası

SelectUsedValues funksiyasında hüceyrələrin sayı təxmin edilir və batareya üçün yüksək və aşağı həddlər boşalma proseduru ilə istifadə ediləcək. Ölçmə də başlanğıc olaraq qeyd olunur, bu prosedurun məhdudiyyətləri əvvəlində qlobal dəyişənlər olaraq təyin olunur. Sabit ola bilsələr də və qlobal miqyasda istifadə edilmədikləri üçün prosedur daxilində də təyin edilə bilər. Ancaq hey, hər zaman yaxşılaşdırılacaq bir şey var:)

Batareya tutumunun hesablanması qaydası

Boşaltma funksiyası, həqiqətən, batareyanın tutumunun sayılması ilə məşğul olur. Test edilən batareya üçün aşağı və yüksək gərginlik həddini parametr olaraq alır. Bu versiyada yüksək dəyər istifadə edilmir, lakin aşağı dəyər testin nə vaxt dayandırılacağına qərar vermək üçün istifadə olunur. Funksiyanın əvvəlində bu məqsədlə yaradılan funksiyadan istifadə etməklə rezistorların sayı müəyyən edilir. Funksiya rezistor sayını qaytarır və eyni zamanda deşarjı başladır və sayğacı sıfırlayır. Sonra gərginliklər ölçülür və cərəyanı hesablamaq üçün məlum rezistor dəyəri ilə birlikdə istifadə olunur. İndi gərginliyi və cərəyanı bildiyimizdən və son ölçmədən bəri keçən vaxtdan sonra tutumu hesablaya bilərik. Boşaltma prosesinin sonunda batareya gərginliyi aşağı həddlə müqayisə edilir və hədddən aşağı düşmüşsə, boşaltma fazası dayanır, mosfets bağlanır və ölçmə hazır olaraq qeyd olunur.

İstifadə ediləcək rezistorların sayını tapmaq qaydası

SelectNumOfResistors funksiyasında gərginliyin əvvəlcədən təyin edilmiş dəyərlərlə sadə bir müqayisəsi aparılır və nəticədə istifadə ediləcək rezistorların sayına qərar verilir. Müvafiq mosfet bəzi rezistorları atlamaq üçün açılır. Gərginlik yuvaları, axıdılması zamanı istənilən vaxt maksimum cərəyanın 600mA (2V/3.3Ohm = 606mA) üzərində qalması üçün seçilir. Funksiya istifadə olunan rezistorların sayını qaytarır. Fan axıdılması zamanı həmişə açılması lazım olan ilk mosfet ilə eyni xətdən idarə olunur.

Addım 5: Ölçmə cihazının kalibrlənməsi

Ölçmə cihazının kalibrlənməsi
Ölçmə cihazının kalibrlənməsi

Sayğacın kalibrlənməsi üçün başqa bir tətbiq yaratdım (əlavə olunur). Eyni aparatdan istifadə edir. Başlanğıcda düzəliş bölücü dəyərlərin hamısı 1000 -ə təyin olunur.

const int divCorrectionB10V = 1000; // aralığında bölücü düzəliş çarpan 10V const int divCorrectionR10V = 1000; // aralığında bölücü düzəliş çarpan 10V const int divCorrectionB20V = 1000; // 20V aralığında bölücü düzəliş çarpan const int divCorrectionR20V = 1000; // 20V aralığında bölücü düzəliş çarpan

readVcc () funksiyasında yaranan Vcc gərginliyi, geri dönməzdən əvvəl funksiyanın son sətrindəki dəyərin təyin edilməsindən asılıdır. Adətən internetdə hesablamada istifadə ediləcək 1126400L dəyər tapa bilərsiniz. Nəticənin düzgün olmadığını gördüm.

Kalibrləmə prosesi:

  1. Ölçmə tətbiqini Arduinoya yükləyin.
  2. Yükün açıq olduğunu Arduinoda (və serial çıxışında və fan fırlanırsa) görə bilərsiniz. Əgər belədirsə, batareyanın növünü seçin.
  3. Düzgün nəticə əldə etmək üçün readuVCC () dəyərini tənzimləyin. Funksiyanın verdiyi dəyəri (millivoltda) götürün və uzun dəyəri onunla bölün. Daxili istinadın xam dəyərini alacaqsınız. İndi faktiki təchizatı gərginliyini bir multimetrlə millivoltla ölçün və əvvəllər hesablanmış dəyərlə vurun və yeni düzəldilmiş uzun dəyəri əldə edin. Mənim vəziyyətimdə, funksiya VC 5.14V olduqda 5288mV döndü. Sınaqla bitirdiyim 1126400/5288*5140 = 1094874 hesablanır. Yeni dəyəri kodu daxil edin və yenidən Arduinoya yükləyin.
  4. Analog giriş müqavimətinin bölücü düzəliş dəyərlərinin tənzimlənməsi, sayğacın girişini qidalandırmaq üçün istifadə olunan tənzimlənən enerji mənbəyindən istifadə etməklə baş verir. Ən sadə, 1V -dən 20V -a qədər olan gərginlikləri 1V addımlarla istifadə etmək və nəticələri elektron tabloya yazmaqdır. Cədvəldə orta hesablanır. Düzəldilmiş dəyərlər aşağıdakı düsturla hesablanır: "raw_value*diapazonu*Vcc/Vin", burada raw_value hansı düzəlişin hesablanacağından asılı olaraq 10VdivB, 10VdivR, 20VdivB və ya 20VdivR dəyərləridir.

Cədvəlin mənim üçün necə göründüyünə baxın. Ortalamalar yalnız aralığa daxil olan dəyərlərdən hesablanır və bu dəyərlər faktiki sayğac tətbiqində təyin olunur.

Bunun kimi

const int divCorrectionB10V = 998; // aralığında bölücü düzəliş bölücü 10V const int divCorrectionR10V = 1022; // aralığında bölücü düzəliş bölücü 10V const int divCorrectionB20V = 1044; // 20V aralığında bölücü düzəliş bölücü const int divCorrectionR20V = 1045; // 20V aralığında bölücü düzəliş bölücü

Rezistor dəyərinin tənzimlənməsi, girişə bir qədər gərginlik verərək (yəni 2V), yarasa tipli açarı dəyişdirərək (yüklənmək üçün) və daxil olan cərəyanı və birinci rezistordakı gərginliyi ölçmək və gərginliyi cərəyana bölməklə edilə bilər.. Mənim üçün 2V 607mA verdi, bu da 2/0.607 = 3.2948 ohm verir, onu 3.295 ohm -a yuvarlaqlaşdırdım. Beləliklə, indi kalibrləmə aparılır.

Addım 6: Son Qeyd

Burada vacib bir qeyd. Batareyadan rezistorlara qədər bütün əlaqələrin əla vəziyyətdə olması vacibdir. Bir pis əlaqəm var idi və niyə batareyaya nisbətən rezistor şəbəkəsində 0.3V daha az volt aldığımı düşünürdüm. Bu, 0.95V aşağı həddinə tez çatıldığı üçün ölçmə prosesinin demək olar ki, dərhal 1.2V NiCd hüceyrələri ilə başa çatması demək idi.

Tövsiyə: