İçindekiler:

ATTiny85 Kapasitör Ölçer: 4 Adım
ATTiny85 Kapasitör Ölçer: 4 Adım

Video: ATTiny85 Kapasitör Ölçer: 4 Adım

Video: ATTiny85 Kapasitör Ölçer: 4 Adım
Video: Attiny85 Arduino Tutorial. 2024, Ekim
Anonim
ATTiny85 Kapasitör Ölçer
ATTiny85 Kapasitör Ölçer
ATTiny85 Kapasitör Ölçer
ATTiny85 Kapasitör Ölçer

Bu talimat, aşağıdaki özelliklere sahip ATTiny85'e dayalı bir Kapasitör ölçer içindir.

  • ATTiny85'e (DigiStamp) dayalı
  • SSD1306 0,96" OLED Ekran
  • 555 osilatör kullanarak düşük değerli kapasitörler 1pF - 1uF için frekans ölçümü
  • 1uF - 50000uF yüksek değerli kapasitörler için şarj süresi ölçümü
  • Stary kapasitansı en aza indirme yöntemleri için kullanılan 2 ayrı port
  • Büyük kapasitörler için zamanı en aza indirmek için Şarj Süresi için kullanılan iki akım değeri
  • 555 yöntemi, başlangıçta kendi kendini sıfırlar, buton ile sıfırlanabilir
  • Her ölçüm döngüsü için hangi yöntemin kullanılması gerektiğini seçmek için kullanılan hızlı bir test.
  • OSCVAL saat frekansı ayarı desteği ile şarj süresi yöntemi doğruluğu artırılabilir

Adım 1: Şematik ve Teori

Şematik ve Teori
Şematik ve Teori

Şematik, ATTiny'nin SSD1306 OLED ekranını bir I2C arayüzü aracılığıyla çalıştırdığını gösterir. Doğrudan bir LiOn 300 mAh pilden güç alır ve bir LiOn uyumlu harici şarj cihazı ile kullanılabilen bir şarj noktası dahildir.

İlk ölçüm yöntemi, 555 serbest çalışan bir osilatörün frekansının ölçülmesine dayanmaktadır. Bu, dirençler tarafından belirlenen bir temel frekansa ve ölçümlerin doğruluğunu belirlediği için yüksek doğrulukta olması gereken bir kapasitöre sahiptir. Sahip olduğum 820pF %1 polistiren kondansatör kullandım ancak 1nF civarındaki diğer değerler kullanılabilir. Değer, herhangi bir kaçak kapasitans (~20pF) tahmini ile birlikte yazılıma girilmelidir. Bu, yaklaşık 16KHz'lik bir temel frekans verdi. 555'in çıkışı, bir donanım sayacı olarak programlanan ATTiny'nin PB2'sine beslenir. Sayım yaklaşık 1 saniyelik bir süre boyunca ölçülerek frekans belirlenebilir. Bu, temel frekansı belirlemek için başlangıçta yapılır. Baz kondansatöre paralel olarak test edilen bir kondansatör eklendiğinde, frekans düşürülür ve bu ölçüldüğünde ve baz frekansla karşılaştırıldığında, eklenen kapasitansın değeri hesaplanabilir.

Bu yöntemin güzel özelliği, hesaplanan değerin sadece baz kapasitörün doğruluğuna bağlı olmasıdır. Ölçüm süresi önemli değildir. Çözünürlük, oldukça yüksek olan frekans ölçümlerinin çözünürlüğüne bağlıdır, bu nedenle çok küçük ilave kapasitans bile ölçülebilir. Sınırlayıcı faktör, benim için yaklaşık 0,3pF'ye eşdeğer olan 555 osilatörünün 'frekans gürültüsü' gibi görünüyor.

Yöntem iyi bir aralıkta kullanılabilir. Menzili iyileştirmek için, gelen darbelerin kenarlarını algılamak için ölçüm periyodunu senkronize ediyorum. Bu, 12Hz (1uF kapasitörlü) gibi düşük frekanslı salınımların bile doğru bir şekilde ölçüldüğü anlamına gelir.

Daha büyük kapasitörler için devre, bir şarj zamanlama yöntemi kullanacak şekilde düzenlenmiştir. Bu durumda, test edilen kapasitör 0'da başlamasını sağlamak için boşalır, ardından besleme voltajından bilinen bir dirençle şarj edilir. ATTiny85'teki bir ADC, kapasitör voltajını izlemek için kullanılır ve %0'dan %50 şarja geçiş süresi ölçülür. Bu, kapasitansı hesaplamak için kullanılabilir. ADC için referans aynı zamanda besleme gerilimi olduğundan, bu ölçümü etkilemez. Ancak, alınan zamanın mutlak ölçüsü ATTiny85 saat frekansına bağlıdır ve bundaki değişiklikler sonucu etkiler. ATTiny85'te bir ayar kaydı kullanılarak bu saatin doğruluğunu geliştirmek için bir prosedür kullanılabilir ve bu daha sonra açıklanacaktır.

Kondansatörü 0V'a boşaltmak için, deşarj akımını sınırlamak için düşük değerli bir dirençle birlikte bir n-kanallı MOSFET kullanılır. Bu, büyük değerli kapasitörlerin bile hızla boşaltılabileceği anlamına gelir.

Kondansatörü şarj etmek için 2 adet şarj direnci değeri kullanılır. Bir temel değer, 1uF'den yaklaşık 50uF'ye kadar olan kapasitörler için makul şarj süreleri verir. Daha yüksek değerli kapasitörlerin makul bir aralıkta ölçülmesine izin vermek için daha düşük bir dirençte paralel olarak bir p-kanalı MOSFET kullanılır. Seçilen değerler, 2200 uF'ye kadar olan kapasitörler için yaklaşık 1 saniye ve daha büyük değerler için orantılı olarak daha uzun bir ölçüm süresi verir. Değerin alt ucunda, yeterli hassasiyetle yapılacak %50 eşiğinden geçişin belirlenmesine izin vermek için ölçüm süresi makul ölçüde uzun tutulmalıdır. ADC'nin örnekleme hızı yaklaşık 25uSec'dir, bu nedenle minimum 22mSec periyodu makul hassasiyet sağlar.

ATTiny sınırlı IO'ya (6 pin) sahip olduğundan, bu kaynağın tahsisi dikkatli yapılmalıdır. Gösterge için 2 adet, zamanlayıcı girişi için 1 adet, ADC için 1 adet, deşarj kontrolü için 1 adet ve şarj oranı kontrolü için 1 adet pin gereklidir. Herhangi bir noktada yeniden sıfırlamaya izin vermek için bir düğme kontrolü istedim. Bu, I2C SCL hattını ele geçirerek yapılır. I2C sinyalleri açık tahliye olduğundan, düğmenin bu hattı aşağı çekmesine izin vererek elektriksel bir çakışma olmaz. Düğme basılıyken ekran çalışmayı durduracaktır, ancak düğme bırakıldığında kaldığı yerden devam edeceğinden bunun bir önemi yoktur.

Adım 2: İnşaat

Yapı
Yapı
Yapı
Yapı
Yapı
Yapı

Bunu küçük bir 55mm x 55mm 3D baskılı kutu haline getirdim. 4 ana bileşeni tutacak şekilde tasarlandı; ATTiny85 DigiStamp kartı, SSD1306 ekran, LiOn pil ve 55 zamanlayıcı ve şarj kontrol elektroniklerini tutan küçük bir prototip kartı.

www.thingiverse.com/thing:4638901 adresindeki ek

Gerekli parçalar

  • ATTiny85 DigiStamp kartı. Bellenimi yüklemek için kullanılan microUSB konektörlü bir sürüm kullandım.
  • SSD1306 I2C OLED Ekran
  • 300mAH LiOn pil
  • Küçük şerit prototipleme tahtası
  • CMOS 555 zamanlayıcı çipi (TLC555)
  • n-Kanal MOSFET AO3400
  • p-Kanal MOSFET AO3401
  • Dirençler 4R7, 470R, 22K, 2x33K
  • Kondansatörler 4u7, 220u
  • Hassas Kondansatör 820pF 1%
  • Minyatür kaydırma anahtarı
  • Şarj portu ve ölçüm portları için 2 x 3 pin başlık
  • Butona basınız
  • muhafaza
  • Kabloyu bağla

Gerekli araçlar

  • İnce nokta havya
  • Cımbız

İlk önce 555 zamanlayıcı devresini ve prototip kartındaki şarj bileşenlerini oluşturun. Harici bağlantılar için uçan kablolar ekleyin. Sürgülü anahtarı ve şarj noktasını ve ölçüm portunu muhafazaya sabitleyin. Pili takın ve ana güç kablolarını şarj noktasına getirin, anahtarı kaydırın. Düğmeye toprak bağlayın. ATTiny85'i yerine yapıştırın ve bağlantıyı tamamlayın.

ATTiny kartına takmadan önce akımı biraz azaltacak ve pil ömrünü uzatacak bazı güç tasarrufu değişiklikleri yapabilirsiniz.

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

Bu, kullanılmadığında sayacı kapatmak için bir güç anahtarı olduğundan kritik değildir.

3. Adım: Yazılım

Bu Kapasitör Metre için yazılım şu adreste bulunabilir:

github.com/roberttidey/CapacitorMeter

Bu Arduino tabanlı bir eskizdir. Ekran ve I2C için şu adreste bulunabilecek kütüphanelere ihtiyacı var:

github.com/roberttidey/ssd1306BB

github.com/roberttidey/I2CTinyBB

Bunlar, ATTiny'nin minimum bellek kaplaması için optimize edilmiştir. I2C kitaplığı, herhangi bir 2 pinin kullanılmasına izin veren yüksek hızlı bir bit patlama yöntemidir. Seri bağlantı noktası kullanan I2C yöntemleri, 555 frekansını ölçmek için gereken zamanlayıcı/sayıcı girişinin kullanılmasıyla çelişen PB2 kullandığından bu önemlidir.

Yazılım, bir durum döngüsü boyunca ölçümü alan bir durum makinesi etrafında yapılandırılmıştır. Bir ISR, 8 bitlik donanımı genişletmek için zamanlayıcı sayacından taşmayı destekler. İkinci bir ISR, sürekli modda çalışan ADC'yi destekler. Bu, eşiği geçen şarj devresine en hızlı yanıtı verir.

Her ölçüm döngüsünün başlangıcında, bir getMeasureMode işlevi, her ölçüm için kullanılacak en uygun yöntemi belirler.

555 yöntemi kullanıldığında, sayımın zamanlaması yalnızca sayaç değiştiğinde başlar. Aynı şekilde, zamanlama yalnızca nominal ölçüm aralığından sonra ve bir kenar algılandığında durdurulur. Bu senkronizasyon, düşük frekanslar için bile frekansın doğru hesaplanmasını sağlar.

Yazılım başladığında, ilk 7 ölçüm, ilave kapasitör olmadan 555'in temel frekansını belirlemek için kullanılan 'kalibrasyon döngüleridir'. Son 4 döngünün ortalaması alınır.

Saat ayarı için OSCAL kaydının ayarlanması için destek vardır. OSCCAL_VAL'i başlangıçta çizimin en üstünde 0 olarak ayarlamanızı öneririm. Bu, ayarlama yapılana kadar fabrika kalibrasyonunun kullanılacağı anlamına gelir.

555 baz kapasitörün değerinin ayarlanması gerekiyor. Ayrıca başıboş kapasitans için tahmini bir miktar ekliyorum.

Şarj yöntemleri için farklı dirençler kullanılıyorsa, yazılımdaki CHARGE_RCLOW ve CHARGE_RCHIGH değerlerinin de değiştirilmesi gerekecektir.

Yazılımı yüklemek için, yazılımı yüklemek ve istendiğinde usb bağlantı noktasını bağlamak için normal digistamp yöntemini kullanın. Bu işlem için güç USB tarafından sağlanacağı için güç anahtarını kapalı konumda bırakın.

Adım 4: Çalıştırma ve Gelişmiş Kalibrasyon

Operasyon çok basittir.

Üniteyi açtıktan ve kalibrasyon sıfırının bitmesini bekledikten sonra test edilen kondansatörü iki ölçüm portundan birine bağlayın. Düşük değerli kapasitörler < 1uF için 555 bağlantı noktasını ve daha yüksek değerli kapasitörler için şarj bağlantı noktasını kullanın. Elektrolitik kapasitörler için negatif terminali ortak toprak noktasına bağlayın. Test sırasında kapasitör yaklaşık 2V'a kadar şarj edilecektir.

555 bağlantı noktası, basma düğmesi yaklaşık 1 saniye basılı tutularak ve bırakılarak sıfırlanabilir. Bunun için 555 bağlantı noktasına hiçbir şeyin bağlı olmadığından emin olun.

Gelişmiş kalibrasyon

Şarj yöntemi, zamanı ölçmek için ATTiny85'in mutlak saat frekansına dayanır. Saat, nominal bir 8MHz saat verecek şekilde düzenlenmiş dahili RC osilatörünü kullanır. Osilatörün kararlılığı, voltaj ve sıcaklık değişimleri için oldukça iyi olmasına rağmen, fabrikada kalibre edilmiş olmasına rağmen frekansı oldukça yüzde birkaç oranında değişebilir. Bu kalibrasyon, başlangıçta OSCCAL kaydını ayarlar. Fabrika kalibrasyonu, frekans kontrol edilerek ve OSCCAL değerinin belirli bir ATTiny85 kartına uyacak şekilde daha optimum ayarı yapılarak iyileştirilebilir.

Henüz bellenime daha otomatik bir yöntem sığdırmayı başaramadım, bu yüzden aşağıdaki manuel prosedürü kullanıyorum. Hangi harici ölçümlerin mevcut olduğuna bağlı olarak iki varyasyon mümkündür; ya 555 bağlantı noktasındaki üçgen dalga biçiminin frekansını ölçebilen bir frekans ölçer ya da bilinen frekansa sahip bir kare dalga kaynağı örn. 555 bağlantı noktasına bağlanabilen ve bu frekansı sayaca zorlamak için dalga biçimini geçersiz kılan 0V/3.3V seviyelerine sahip 10KHz. Ben ikinci yöntemi kullandım.

  1. Kapasitör bağlı olmadan sayacı normal gücünde başlatın.
  2. Frekans ölçeri veya kare dalga üretecini 555 bağlantı noktasına bağlayın.
  3. Düğmeye basarak kalibrasyon döngüsünü yeniden başlatın.
  4. Kalibrasyon döngüsünün sonunda ekran, sayaç tarafından belirlenen frekansı ve mevcut OSCCAL değerini gösterecektir. Kalibrasyon döngüsünün tekrar tekrar kullanımının, ölçülen frekansın gösterilmesi ile normal görüntü olmaması arasında geçiş yapacağını unutmayın.
  5. Görüntülenen frekans bilinenden daha düşükse, bu, saat frekansının çok yüksek olduğu anlamına gelir ve bunun tersi de geçerlidir. Bir OSCCAL artışının saati yaklaşık %0,05 oranında ayarladığını görüyorum
  6. Saati iyileştirmek için yeni bir OSCCAL değeri hesaplayın.
  7. Firmware'in en üstündeki OSCCAL_VAL içine yeni OSCCAL değerini girin.
  8. Yeni bellenimi yeniden oluşturun ve yükleyin. Yeni OSCCAL değerini ve yeni frekans ölçümünü göstermesi gereken 1-5 arasındaki adımları tekrarlayın.
  9. Gerekirse, en iyi sonuç elde edilene kadar adımları tekrarlayın.

Besleme voltajından kaynaklanan herhangi bir frekans kaymasını en aza indirmek için USB yerine normal güçle çalışırken bu ayarın ölçüm kısmını yapmak önemlidir.

Önerilen: