İçindekiler:

Arduino Kullanarak Güç Kaynağı Frekans ve Gerilim Ölçümü: 6 Adım
Arduino Kullanarak Güç Kaynağı Frekans ve Gerilim Ölçümü: 6 Adım

Video: Arduino Kullanarak Güç Kaynağı Frekans ve Gerilim Ölçümü: 6 Adım

Video: Arduino Kullanarak Güç Kaynağı Frekans ve Gerilim Ölçümü: 6 Adım
Video: Volt Ve Amperin Ne Kadar Farklı Şeyler Olduğunu Göstermenin En Kolay Yolu 2024, Temmuz
Anonim
Arduino Kullanarak Güç Kaynağı Frekans ve Gerilim Ölçümü
Arduino Kullanarak Güç Kaynağı Frekans ve Gerilim Ölçümü

Tanıtım:

Bu projenin amacı, burada Hindistan'da 220 ila 240 Volt ve 50Hz arasındaki besleme frekansını ve voltajını ölçmektir. Sinyal yakalamak ve frekans ve voltajı hesaplamak için bir Arduino kullandım, sahip olduğunuz başka bir mikrodenetleyici veya kartı kullanabilirsiniz. Devre, bir avuç bileşen gerektirir ve tüm pratik amaçlar için oldukça doğrudur.

Adım 1: Gerekli Bileşenler

  • Arduino Uno'su
  • IC LM358
  • Düşürücü transformatör (220V - 12V)
  • kapasitörler:

    • 0.1uF
    • 2 x 1uF
  • Dirençler:

    • 3 x 1kOhm
    • 2 x 100kOhm
    • 1.5kOhm
    • 3.3kOhm
    • 6.8kOhm
  • 3 x 1N4148 diyot
  • Ekmek Tahtası ve Jumper teli (isteğe bağlı)

Adım 2: Şematik Diyagram

Şematik diyagram
Şematik diyagram
Şematik diyagram
Şematik diyagram

Yukarıdaki devrede, trafo primeri besleme şebekesine, primer ise ölçüm devremize bağlanmıştır.

Adım 3: Devreyi Anlamak

Devreyi Anlamak
Devreyi Anlamak
Devreyi Anlamak
Devreyi Anlamak
Devreyi Anlamak
Devreyi Anlamak

İşlevselliğe göre, bu devre dört bölüme ayrılabilir:

A: Sıfır Geçiş Dedektörü devresi

Bu devre, sinüs dalgası pozitiften negatife her gittiğinde 5V kare darbe üretir. D1 ve D2 ile birleştirilmiş direnç R1, diyot bağlantısındaki giriş voltajı salınımını -0.6V ila +5.6V ile sınırlar (diyot ileri voltajının 0,6V olduğu varsayılarak). Ayrıca R1 değerini artırarak devrenin giriş voltaj aralığını artırabilirsiniz.

Direnç R2 ve R3, LM358'in giriş ortak mod voltajı -0.3Volt ile sınırlı olduğundan, negatif voltaj salınımını -0.24Volt ile sınırlamak için bir voltaj bölücü oluşturur.

Direnç R4, R5, kapasitör C1 ve op-amp (burada bir karşılaştırıcı olarak kullanılır), direnç R4 ve R5'in histerezisi zeminin +49.5mV yukarısında ayarladığı Schmitt Tetikleme devresini oluşturur. Schmitt Tetikleyicinin çıktısı, daha fazla işlem için Arduino PIN2'ye beslenir.

B: İzolasyon ve Gerilim Düşüşü

Adından da anlaşılacağı gibi, bu parça voltajı izole eder ve yaklaşık 12Vrms'ye düşürür. Azaltılmış voltaj ayrıca enstrümantasyon devresine beslenir.

C: Tepe Dedektörü devresi

Bu devre, giriş sinyalinin maksimum tepe voltajını belirler. Direnç bölücü R6 ve R7, giriş voltajını 0,23 kat azaltır (12Vrms, 2,76Vrms'ye düşürülür). D3 diyotu, sinyalin yalnızca pozitif yarım döngüsünü yürütür. C2'deki voltaj, voltajı daha fazla hesaplamak için Arduino analog pin A0'a beslenen doğrultulmuş sinyalin tepe değerine kadar yükselir.

Ayrıca bu devreyi burada bahsedilenler gibi hassas bir tepe dedektör devresi ile değiştirebilirsiniz. Ancak gösteri amaçlarım için yukarıdaki devre yeterli olacaktır.

D: Arduino

Bu kısımda Arduino, Schmitt Trigger devresi tarafından üretilen kare darbeleri yakalar ve tepe dedektör devresinden analog voltajı okur. Veriler, kare darbenin (ac besleme süresi kişisine eşittir) zaman periyodunu (dolayısıyla frekansı) ve beslemenin voltajını belirlemek için ayrıca işlenir.

Adım 4: Frekans ve Gerilimin Hesaplanması

Frekansın hesaplanması:

Arduino yardımıyla sinyalin T zaman periyodunu ölçebiliriz. Sıfır geçiş dedektöründen gelen kare dalga darbeleri pim 2'ye beslenir, oradan her darbenin zaman periyodunu ölçebiliriz. Arduino'nun dahili zamanlayıcısını (özellikle Timer1), kare darbenin iki Yükselen kenarı arasındaki süreyi kesmeler yardımıyla hesaplamak için kullanabiliriz. Zamanlayıcı, saat döngüsü başına 1 artar (ön ölçekleyici olmadan = 1) ve değer TCNT1 kaydında saklanır. Dolayısıyla 16Mhz saat, sayacı her mikrosaniyede 16 artırır. Benzer şekilde, ön ölçekleyici = 8 için zamanlayıcı her mikrosaniyede 2 artırılır. Dolayısıyla iki yükselen kenar arasındaki zaman periyodu

T = (TCNT1 değeri) / her sayım için geçen süre

Nerede, her sayım için geçen süre = ön ölçekleyici / (Arduino saat hızı (16MHz)

Dolayısıyla frekans f = 1/T = (Arduino saat hızı (16MHz) / (Ön ölçekleyici * TCNT! değeri)

Dolayısıyla zamanlayıcı hızı (Hz) = (Arduino saat hızı (16MHz)) / ön ölçekleyici ile verilir.

ve sinyalin frekansı = (Arduino saat hızı

Buna uygun olarak, f = 1/T bağıntısından f frekansını hesaplayabiliriz.

Voltajın hesaplanması:

Arduino'nun yerleşik ADC'si 10 bit çözünürlüğe sahiptir (olası değerler = 2 ^ 10 = 1024), 0-1023 aralığında değerler döndürür. Karşılık gelen analog voltajı V hesaplamak için aşağıdaki ilişkiyi kullanmalıyız.

V = (ADC Okuma) * 5/1023

Besleme voltajını Vs(rms) hesaplamak için Transformatör Oranını, Direnç bölücü R6R7'yi ve tepe dedektör devresini hesaba katmalıyız. Çeşitli faktörleri/oranları basitçe şu şekilde bir araya getirebiliriz:

Trafo oranı = 12/230 = 0.052

Direnç bölücü = R7/(R6 + R7) = 0.23

Tepe dedektör devresinde = 1.414

Vs(rms) = V/(1.414*0.052*0.23) = (ADC Okuma) * 0.289

Bu değerin, esas olarak gerçek trafo oranındaki hata ve diyot ileri voltaj düşüşü nedeniyle gerçek değerden uzak olduğuna dikkat edilmelidir. Bunu aşmanın bir yolu, devreyi kurduktan sonra faktörü belirlemektir. Bu, besleme voltajını ve C2 kondansatörü üzerindeki voltajı bir multimetre ile ayrı ayrı ölçerek, ardından Vs(rms)'yi aşağıdaki gibi hesaplayarak:

Vs(rms) = ((Besleme Gerilimi * 5)/(C2 arasındaki voltaj *1023))*(ADC Okuma)

benim durumumda, Vs(rms) = 0.33*(ADC Okuma)

Adım 5: Arduino Kodu

#define volt_in A0 //analog voltaj okuma pini

uçucu uint16_t t_period; uint16_t ADC_değeri = 0; şamandıra volt, frekans; void isr() { t_period = TCNT1; //TCNT1 değerini t_period içinde sakla TCNT1 = 0; //Zamanlayıcı1'i sıfırla ADC_value = analogRead(volt_in); //analog voltajı oku } float get_freq() { uint16_t timer = t_period; if(timer==0) 0 döndür; // sıfıra bölmeyi önlemek için 16000000.0/(8UL*timer) döndürün; // frekans f = clk_freq/(precaler*timeperiod)} void setup() { TCCR1A = 0; TCCR1B = bit(CS11); //ön ölçekleyiciyi 8 TCNT1 = 0 olarak ayarla; //Zamanlayıcı1 değerini sıfırla TIMSK1 = bit(TOIE1); //Zamanlayıcı1 taşma kesmesini etkinleştir EIFR |= bit(INTF0); // INT0 kesme bayrağını temizle Serial.begin(9600); } void loop() { AttachInterrupt(0, isr, RISING); //harici kesme (INT0) gecikmesini etkinleştir(1000); ayırInterrupt(0); sıklık = get_freq(); volt = ADC_değeri*0.33; Dize tamponu; buf += String(freq, 3); tampon += F("Hz\t"); buf += Dizi(volt); buf += F("Volt"); Seri.println(tampon); }

6. Adım: Sonuç

Çözüm
Çözüm
Çözüm
Çözüm

Devreyi bir devre tahtasına monte edebilir ve kodu değiştirebilir ve daha sonra analiz edilebilecek verileri depolamak için bir SD Kart ekleyebilirsiniz. Buna bir örnek, pik saatlerde voltajı ve frekansı analiz edebilmenizdir.

Breadboard'a monte ettiğim devre, LM358(dual opamp) yerine LM324(dört opamp) kullandı çünkü o an o IC'ye sahip değildim ve COVID-19 salgını nedeniyle ülke çapında kilitlenme yeni bir IC almamı zorlaştırdı.. Bununla birlikte, devrenin çalışmasını etkilemez.

Her türlü öneri ve sorularınız için aşağıya yorum yapmaktan çekinmeyin.

Önerilen: