Mündəricat:

ATTiny85 kondansatör sayğacı: 4 addım
ATTiny85 kondansatör sayğacı: 4 addım

Video: ATTiny85 kondansatör sayğacı: 4 addım

Video: ATTiny85 kondansatör sayğacı: 4 addım
Video: Как сделать бесконтактную проверку линии переменного тока/ДЕТЕКТОР НАПРЯЖЕНИЯ #схема #ne555#attiny85 2024, Iyul
Anonim
ATTiny85 kondansatör sayğacı
ATTiny85 kondansatör sayğacı
ATTiny85 kondansatör sayğacı
ATTiny85 kondansatör sayğacı

Bu təlimat, ATTiny85 -ə əsaslanan aşağıdakı xüsusiyyətlərə malik bir kondansatör sayğacı üçündür.

  • ATTiny85 (DigiStamp) əsasında
  • SSD1306 0.96 "OLED Ekranı
  • 555 osilatör istifadə edərək 1pF - 1uF aşağı dəyərli kondansatörlər üçün tezlik ölçümü
  • 1uF - 50000uF yüksək dəyərli kondansatörlər üçün şarj müddətinin ölçülməsi
  • Stary kapasitansı minimuma endirmək üsulları üçün 2 ayrı port istifadə olunur
  • Böyük kondansatörlərin vaxtını minimuma endirmək üçün Şarj müddəti üçün iki cərəyan dəyəri istifadə olunur
  • 555 metodu sıfırları işə saldıqda, düymə ilə yenidən sıfırlana bilər
  • Hər bir ölçmə dövrü üçün hansı metodun istifadə olunacağını seçmək üçün istifadə olunan sürətli test.
  • Şarj vaxtı metodunun dəqiqliyi OSCVAL saat tezliyi tənzimlənməsi dəstəyi ilə artırıla bilər

Addım 1: Şematik və nəzəriyyə

Şematik və nəzəriyyə
Şematik və nəzəriyyə

Şematik olaraq ATTiny, SSD1306 OLED ekranı I2C interfeysi ilə idarə edir. Birbaşa LiOn 300mAh batareyadan işləyir və LiOn uyğun xarici şarj cihazı ilə istifadə edilə bilən bir şarj nöqtəsi daxildir.

İlk ölçmə metodu 555 sərbəst işləyən osilatorun tezliyini ölçməyə əsaslanır. Rezistorlar tərəfindən təyin olunan bir əsas tezliyə və ölçmələrin düzgünlüyünü təyin etdiyi üçün yüksək dəqiqliyə malik bir kondansatörə malikdir. Sahib olduğum 820pF 1% polistirol kondansatördən istifadə etdim, amma 1nF ətrafındakı digər dəyərlər istifadə edilə bilər. Dəyər, hər hansı bir sahibsiz tutumun (~ 20pF) təxminləri ilə birlikdə proqrama daxil edilməlidir. Bu, 16 KHz ətrafında bir əsas tezlik verdi. 555 -in çıxışı, aparat sayğacı olaraq proqramlaşdırılmış ATTiny -in PB2 -nə verilir. Təxminən 1 saniyə ərzində sayını ölçməklə tezliyi təyin etmək olar. Bu, əsas tezliyi təyin etmək üçün başlanğıcda edilir. Baza kondansatörünə paralel olaraq sınaqdan keçirilən bir kondansatör əlavə edildikdə, tezlik aşağı salınır və bu ölçüldükdə və baz tezliyi ilə müqayisə edildikdə əlavə tutumun dəyəri hesablana bilər.

Bu metodun gözəl xüsusiyyəti hesablanmış dəyərin yalnız əsas kondansatörün düzgünlüyündən asılı olmasıdır. Ölçmə müddətinin əhəmiyyəti yoxdur. Çözünürlük olduqca yüksək olan tezlik ölçmələrinin qətiyyətindən asılıdır, buna görə də çox kiçik əlavə tutum ölçmək mümkündür. Məhdudlaşdırıcı amil 555 osilatörün 'frekans səs -küyü' kimi görünür ki, bu da mənim üçün təxminən 0.3pF -ə bərabərdir.

Metod layiqli bir diapazonda istifadə edilə bilər. Aralığı yaxşılaşdırmaq üçün gələn impulsların kənarlarını aşkar etmək üçün ölçmə müddətini sinxronlaşdırıram. Bu o deməkdir ki, hətta 12Hz (1uF kondansatörlü) kimi aşağı tezlikli salınımlar da dəqiq ölçülür.

Daha böyük kondansatörler üçün dövrə bir şarj zamanlama metodundan istifadə etməklə tənzimlənir. Bu vəziyyətdə, sınaqdan keçirilmiş kondansatör 0 -dan başlamasını təmin etmək üçün boşaldılır və sonra təchizat gərginliyindən bilinən bir müqavimətlə doldurulur. ATTiny85 -dəki bir ADC, kondansatörün gərginliyini izləmək üçün istifadə olunur və şarjın 0% -dən 50% -ə qədər keçmə müddəti ölçülür. Bu tutumu hesablamaq üçün istifadə edilə bilər. ADC üçün istinad da təchizat gərginliyidir, bu da ölçməyə təsir etmir. Bununla birlikdə, alınan vaxtın mütləq ölçüsü ATTiny85 saat tezliyindən asılıdır və bu dəyişikliklər nəticəni təsir edir. ATTiny85 -də bir tənzimləmə qeydindən istifadə edərək bu saatın dəqiqliyini artırmaq üçün bir prosedurdan istifadə edilə bilər və bu daha sonra təsvir ediləcəkdir.

Kondansatörü 0V-ə boşaltmaq üçün boşaltma cərəyanını məhdudlaşdırmaq üçün aşağı dəyərli bir rezistorla birlikdə n kanallı MOSFET istifadə olunur. Bu o deməkdir ki, hətta böyük dəyərli kondansatörlər də sürətlə boşaldıla bilər.

Kondansatörü doldurmaq üçün şarj müqavimətinin 2 dəyəri istifadə olunur. Baza dəyəri, kondansatörlər üçün 1uF -dən təxminən 50uF -ə qədər ağlabatan şarj müddəti verir. Daha yüksək dəyərli kondansatörlərin ağlabatan bir müddətdə ölçülməsinə imkan vermək üçün daha aşağı bir rezistora paralel olaraq bir p-kanallı MOSFET istifadə olunur. Seçilmiş dəyərlər, 2200 uF -ə qədər olan kondansatörlər üçün təxminən 1 saniyə, daha böyük dəyərlər üçün isə nisbi olaraq daha uzun bir ölçmə müddəti verir. Dəyərin aşağı ucunda, kifayət qədər dəqiqliklə ediləcək 50% -lik eşikdən keçidin təyin olunmasına imkan vermək üçün ölçmə müddəti kifayət qədər uzun saxlanılmalıdır. ADC -nin nümunə götürmə sürəti təxminən 25uSec -dir, buna görə minimum 22mSec dövrü ağlabatan dəqiqlik verir.

ATTiny -nin məhdud IO (6 pin) olduğu üçün bu mənbənin ayrılması diqqətlə aparılmalıdır. Ekran üçün 2 pin, taymer girişi üçün 1, ADC üçün 1, boşalma nəzarəti üçün 1 və şarj dərəcəsi nəzarəti üçün 1 pin lazımdır. İstənilən nöqtədə yenidən sıfırlanmasını təmin etmək üçün bir düyməni idarə etmək istədim. Bu, I2C SCL xəttini hi-jacking etməklə edilir. I2C siqnalları açıq drenaj olduğu üçün düyməni bu xətti aşağı çəkməsinə icazə verməklə heç bir elektrik toqquşması yoxdur. Ekran düyməni basıldıqda işləməyi dayandıracaq, ancaq düymə buraxıldıqda davam etdiyi üçün bunun heç bir nəticəsi yoxdur.

Addım 2: Tikinti

Tikinti
Tikinti
Tikinti
Tikinti
Tikinti
Tikinti

Bunu 55 mm x 55 mm ölçülü kiçik çaplı bir qutuya düzəltdim. 4 əsas komponenti tutmaq üçün hazırlanmışdır; ATTiny85 DigiStamp lövhəsi, SSD1306 displeyi, LiOn batareyası və 55 taymer və şarj nəzarət elektronikasını tutan kiçik bir prototip lövhəsi.

Https://www.thingiverse.com/thing:4638901 ünvanına daxil olun

Ehtiyac duyulan hissələr

  • ATTiny85 DigiStamp lövhəsi. Firmware yükləmək üçün istifadə olunan microUSB konnektoru olan bir versiyadan istifadə etdim.
  • SSD1306 I2C OLED Ekranı
  • 300 mAh LiOn batareya
  • Kiçik prototip lövhəsi
  • CMOS 555 taymer çipi (TLC555)
  • n-Kanal MOSFET AO3400
  • p-Kanal MOSFET AO3401
  • Rezistorlar 4R7, 470R, 22K, 2x33K
  • Kondansatörler 4u7, 220u
  • Həssas Kondansatör 820pF 1%
  • Miniatür sürüşmə açarı
  • Şarj portu və ölçü portları üçün 2 x 3 pinli başlıqlar
  • Düyməni basın
  • Mühafizə
  • Tel bağlayın

Lazımi alətlər

  • İncə nöqtəli lehimləmə dəmiri
  • Cımbız

Əvvəlcə prototip lövhəsindəki 555 taymer dövrəsini və şarj komponentlərini düzəldin. Xarici əlaqələr üçün uçan uclar əlavə edin. Sürüşmə açarını və şarj nöqtəsini və ölçmə portunu korpusa yapışdırın. Batareyanı bağlayın və əsas elektrik kabelini şarj nöqtəsinə, sürüşdürmə düyməsinə bağlayın. Düyməni basmaq üçün yerə qoşun. ATTiny85 -i yerə yapışdırın və bağlamanı tamamlayın.

ATTiny lövhəsinə quraşdırmadan əvvəl cərəyanı bir qədər azaldaraq və batareyanın ömrünü uzadacaq bəzi enerji qənaət modifikasiyaları edə bilərsiniz.

www.instructables.com/Reducing-Sleep-Curre…

İstifadə edilmədikdə sayğacı söndürmək üçün bir güc açarı olduğu üçün bu vacib deyil.

Addım 3: Proqram təminatı

Bu kondansatör sayğacının proqram təminatını burada tapa bilərsiniz

github.com/roberttidey/CapacitorMeter

Bu Arduino əsaslı eskizdir. Ekran və I2C üçün kitabxanalara ehtiyac var

github.com/roberttidey/ssd1306BB

github.com/roberttidey/I2CTinyBB

Bunlar minimum yaddaş tutmaq üçün ATTiny üçün optimallaşdırılmışdır. I2C kitabxanası, hər hansı bir 2 pin istifadə etməyə imkan verən yüksək sürətli bit bang metodudur. Serial portu istifadə edən I2C metodları, 555 tezliyini ölçmək üçün lazım olan taymer/sayğac girişinin istifadəsi ilə ziddiyyət təşkil edən PB2 istifadə etdiyi üçün vacibdir.

Proqram, ölçüləri bir vəziyyət dövrü boyunca aparan bir dövlət maşını ətrafında qurulmuşdur. Bir ISR, 8 bitlik cihazı genişləndirmək üçün taymer sayğacından daşqını dəstəkləyir. İkinci ISR davamlı rejimdə işləyən ADC -ni dəstəkləyir. Bu, şarj dövrünün eşikdən keçməsinə ən sürətli cavabı verir.

Hər bir ölçmə dövrünün əvvəlində bir getMeasureMode funksiyası hər bir ölçü üçün hansı metodun ən uyğun olduğunu təyin edir.

555 metodu istifadə edildikdə sayma vaxtı yalnız sayğac dəyişdikdə başlayır. Eyni şəkildə, zamanlama yalnız nominal ölçmə aralığından sonra və bir kənar aşkar edildikdə dayandırılır. Bu sinxronizasiya, hətta aşağı tezliklərdə belə tezliyi dəqiq hesablamağa imkan verir.

Proqram başladıqda, ilk 7 ölçmə, heç bir kondansatör olmadan 555 -in baz tezliyini təyin etmək üçün istifadə olunan 'kalibrləmə dövrləri' dir. Son 4 dövr ortalamadır.

Saat tənzimlənməsi üçün OSCAL reyestrinin tənzimlənməsi üçün dəstək var. Əvvəlcə eskizin yuxarı hissəsində OSCCAL_VAL -ı 0 olaraq təyin etməyi təklif edirəm. Bu, tənzimləmə yerinə yetirilənə qədər zavodun kalibrlənməsindən istifadə ediləcəyi deməkdir.

555 əsas kondansatörün dəyərinin tənzimlənməsi lazımdır. Sahibsizliyə görə təxmini bir məbləğ də əlavə edirəm.

Şarj metodları üçün fərqli rezistorlar istifadə olunarsa, proqramdakı CHARGE_RCLOW və CHARGE_RCHIGH dəyərlərinin də dəyişdirilməsi lazım olacaq.

Proqramı qurmaq üçün proqramı yükləmək və istədikdə USB portunu bağlamaq üçün normal digistamp metodundan istifadə edin. Güc açarını söndürülmüş vəziyyətdə qoyun, çünki bu əməliyyat üçün USB tərəfindən enerji verilir.

Addım 4: Əməliyyat və Ətraflı Kalibrləmə

Əməliyyat çox sadədir.

Cihazı işə saldıqdan və sıfırın kalibrlənməsini gözlədikdən sonra sınaqdan keçirilən kondansatörü iki ölçmə limanından birinə bağlayın. Aşağı dəyərli <1uF kondansatörler üçün 555 portu və daha yüksək dəyərli kondansatörlər üçün şarj portunu istifadə edin. Elektrolitik kondansatörler üçün mənfi terminali ümumi torpaq nöqtəsinə bağlayın. Test zamanı kondansatör təxminən 2V -ə qədər şarj ediləcək.

555 portu, düyməni təxminən 1 saniyə basıb buraxaraq yenidən sıfırlana bilər. Bunun üçün 555 portuna heç bir şeyin bağlı olmadığından əmin olun.

Ətraflı kalibrləmə

Şarj metodu vaxtı ölçmək üçün ATTiny85 -in mütləq saat tezliyinə əsaslanır. Saat, nominal 8MHz bir saat vermək üçün təşkil edilmiş daxili RC osilatorundan istifadə edir. Osilatörün stabilliyi gərginlik və temperatur dəyişikliyi üçün olduqca yaxşı olsa da, zavodda kalibrlənməsinə baxmayaraq tezliyi bir neçə faiz az ola bilər. Bu kalibrləmə, OSCCAL reyestrini işə salanda təyin edir. Zavodun kalibrlənməsi, tezliyi yoxlamaq və müəyyən bir ATTiny85 lövhəsinə uyğun olaraq OSCCAL dəyərini daha optimal şəkildə təyin etməklə təkmilləşdirilə bilər.

Firmware -yə daha avtomatik bir üsula uyğunlaşa bilmədim, buna görə aşağıdakı əl prosedurundan istifadə edirəm. Hansı xarici ölçülərin mövcudluğundan asılı olaraq iki dəyişiklik mümkündür; ya 555 portundakı üçbucaqlı dalğa formasının tezliyini ölçə bilən bir tezlik ölçən və ya bilinən tezliyin kvadrat dalğa mənbəyi. 10KHz, 555 portuna qoşula bilən və bu tezliyi sayğaca məcbur etmək üçün dalğa formasını ləğv edə bilən 0V/3.3V səviyyələri ilə. İkinci üsuldan istifadə etdim.

  1. Ölçən cihazı heç bir kondansatör bağlamadan normal gücündə işə salın.
  2. Tezlik ölçən və ya kvadrat dalğa generatorunu 555 portuna qoşun.
  3. Düyməni basaraq kalibrləmə dövrünü yenidən başladın.
  4. Kalibrləmə dövrünün sonunda ekranda sayğac tərəfindən təyin olunan tezlik və cari OSCCAL dəyəri göstərilir. Qeyd edək ki, kalibrləmə dövrünün təkrar istifadəsi ölçülmüş tezliyin göstərilməsi ilə normal ekranın olmaması arasında dəyişəcəkdir.
  5. Göstərilən tezlik bilinəndən azdırsa, bu, saat tezliyinin çox yüksək olduğu və əksinə deməkdir. Bir OSCCAL artımının saatı təxminən 0,05% tənzimlədiyini görürəm
  6. Saatı yaxşılaşdırmaq üçün yeni bir OSCCAL dəyərini hesablayın.
  7. Yeni OSCCAL dəyərini firmwarein üstündəki OSCCAL_VAL daxil edin.
  8. Yeni firmware proqramını yenidən qurun və yükləyin. Yeni OSCCAL dəyərini və yeni tezlik ölçüsünü göstərməli olan 1-5 -ci addımları təkrarlayın.
  9. Lazım gələrsə, ən yaxşı nəticə əldə olunana qədər addımları təkrarlayın.

Təchizat gərginliyi səbəbiylə hər hansı bir tezlik dəyişməsini minimuma endirmək üçün USB deyil, normal gücdə işləyərkən bu tənzimləmənin ölçü hissəsini etmək vacibdir.

Tövsiyə: