Mikrokontrolcü ile AC akım ve voltaj okumak

coder_c

Yeni Üye
Katılım
22 Mayıs 2023
Mesajlar
3
Merhabalar bir sensör yardımıyla ac akım ve voltaj okumak istiyorum (örneğin stm32f4 ile acs712 entegresinden)
DC akım ve voltajı okuyabiliyorum, ancak AC akım ve voltajı nasıl okuyabilirim? Kod olarak nasıl impliment edebilirim?
İnternette farklı yollar gördüm, örneğin:
- 10 tane örnek alıp aralarından max'ı bulup kök 2'ye bölmek
- Bir diğer yol 10 tane örnek alıp bu örneklerin karelerini alıp toplayıp 10'a bölmek

Hangisi daha sağıklı ya da farklı bir yolu var mıdır?
 
Dediğiniz gibi alternatif akımda anlık akım sürekli değiştiğinden belli bir sayıda ölçüm yapıp bir ortalama almak gerekiyor. Aslında amacınız aşağıdaki grafikteki alanı hesaplayıp zamana bölmek.

Önce 10 örnek konusundan başlayalım. Alternatif akım (50Hz) bir palsini 10ms'de tamamlıyor. Tam periyodu da 20 ms'de. Yani akım sabit olsa bile 10ms içinde ölçeceğiniz her ölçüm farklı olacak. Yani 1ms içerisinde 10 örnek alırsanız tamamen rastgele ve tutarsız bir ölçüm yapmış olursunuz. O yüzden örnek periyodunuzu ve örnek sayınızı uygun seçmelisiniz.

Graphical-Method.png


Yeteri kadar ve doğru zamanlamayla örnek aldığınızı varsayalım. İkinci yöntem daha güvenilir. Düzgün sinüs dalgada ilki de aynı sonucu verir ancak dalga formu düzgün değilse gerçek RMS değerini ikincisi ile elde edersiniz.

rms-root-mean-square-formula.jpg.png


İşlemin en basit hali bir pals boyunca örnekler alıp ikinci yöntem ile RMS değerini hesaplamak olur.

Devamı:
- Ölçeceğiniz yük ne kadar hızlı değişiyor?
- Ölçümü tamamlamak için zaman kısıtınız var mı?
- Sürekli bir ölçüm değeri mi takip edeceksiniz?

Bu sorulara göre detaylanıyor...
 
ozkarah cevabınız için teşekkür ederim
Sürekli bir ölçüm değeri takip edilecek ve frekansını henüz bilmiyorum, generic bir yazılım yazmak istedim ancak anladığım kadarıyla frekansı bilinmeden doğru bir örnekleme sayısı seçemeyeceğim, ve yine anladığım kadarıyla bu işlem için belirli bir süre gerekli olacak ben her cycyle daha kısa süre tutması için 10 adım demiştim (bunu bir for döngüsünde( 10 kez ölçüm alıp ortalamasını alcaktım) .
 
Ve ek olarak, ac sinyalin şeklini bozmadan mcunun okuyabileceği bir sinyale dönüştüren devreye ihtiyacınız var
 
Bence en iyi yöntem geçmişe dönük belli sayıda pik değerin ortalamasını tutmak. Her döngüde ADC'den tek bir örnek okuyacaksın ve geçmişe dönük olarak bunun belli sayıda ortalamasını tutacaksın. Bir kere pik değerini biliyorsan, oradan gerektiğinde RMS değerini de hesaplarsın. Böyle yapmanın en önemli faydası, tek örnek okunduğu için ve kare alma, karekök alma gerektirmediği için çok kısa sürmesi ve bir interrupt içinde de yapılabilmesi.
 
Yine 50 Hz bir AC üzerinde ölçüm yapacağını varsayarak yazıyorum. Frekans değişirse periyodu ve örnek sayısını güncellemek gerekir.

Düzenli akım ölçümü gerekliyse şöyle bir alternatif de uygulanabilir. Her 1 ms'de bir örnek alıp bunları 9 elemanlı bir dizide döngüsel bobin yapısında saklayabilirsin.

Her ölçümden sonra son ölçüm değeri ile önceki 9 ölçümün (dizide sakladığın) karelerini toplayıp, ona bölüp karekökünü alacaksın. Sonuç o anki RMS akımı olacak. Bu işlem mikro saniyeler seviyesinde gerçekleşecektir. Sonra dizideki en eski ölçümü içeren elemanın yerine son ölçümü yazacaksın.

Böylece her 1 ms'de son 10 milisaniyenin ortalaması elinde olur. Akımdaki değişiklikleri sürekli yaklaşarak takip eder. Hassasiyeti arttırmak istersen örnek sayısını arttırabilirsin (ölçüm periyodunu de aynı oranda kısaltarak)
 
Bence en iyi yöntem geçmişe dönük belli sayıda pik değerin ortalamasını tutmak. Her döngüde ADC'den tek bir örnek okuyacaksın ve geçmişe dönük olarak bunun belli sayıda ortalamasını tutacaksın. Bir kere pik değerini biliyorsan, oradan gerektiğinde RMS değerini de hesaplarsın. Böyle yapmanın en önemli faydası, tek örnek okunduğu için ve kare alma, karekök alma gerektirmediği için çok kısa sürmesi ve bir interrupt içinde de yapılabilmesi.
Belli bir aralıktaki pik değerini almanın kolay bir yolu var mı? Aklıma sık ölçümden başka birşey gelmedi.
 
Cevaplar için hepinize teşekkür ederim.

@taydin peakleri yakalamak için yine belirli sayıda örnek almam gerekmez mi ? Nasıl daha hızlı olduğunu tam olarak anlamadım.
 
Sinyalin frekansına bağlı olarak yeterince sıklıkla örneklemen lazım. Mesela 50 Hz bir sinyali saniyede 500 kez örneklemek en basit işlemcide bile rahatlıkla mümkün. 2 ms de bir kesme üreteceksin, tek örnek okuyup ortalamayı güncelleyeceksin.

Veya hiç uğraşmayayım diyorsan AD736 kullalabilirsin. Bu entegre, AC sinyalin RMS değerine karşılık gelen bir DC voltaj üretiyor.
 
Sebeke gerilimi cok bozuk bir dalga formuna sahip. Eger guzel bir sinus sinyal olsaydi turev alici sayesinde tepe noktalari kolayca yakalanabilirdi.

Eger tepe noktalari yakalayayim ve kok2 ye boleyim yeterli diyorsan opampli dogrultucu yaparak AC sinyalin tepe degerini okuyabilirsin. Bu durumda hic ornek alma noktasi icin caba harcamana gerek kalmaz.

Yok pi/2 yi yakalayayim dersen sebeke frekansinda komsu iki alternans arasinda frekans degisemeyeceginden sifir gecis noktalarini yakalayip iki sifir gecis noktasi arasindaki sureyi olcup daha sonra tam bu aradaki voltaj degerini olcebilirsin.

Fakat iki sifir noktasi arasindaki zamani olctukten bu zamanin mesela 100 de biri kadar sureyle sinyalde ornekleme yapabilirsin.
 
Matlab'de birkaç test yaptım. 10 Hz - 50 Hz arasında sinus ürettim ve 500 Hz ile örnekledim. Sonra da 350 ms lik bir süre üzerinden RMS hesaplattırdım. Frekansa göre RMS değeri aşağıdaki gibi

1684767898400.png


Bu parametrelerle en kötü durumda %0.81 hata ile RMS ölçümü yapılabiliyor. Ölçüm hatasındaki en belirleyici husus, ne kadar sürelik bir veri üzerinden ölçüm yapıldığı. Süre kısaldıkça hata hızla artıyor. Eğer aynı ölçümü 500 ms lik bir süre üzerinden yaparsak, neredeyse sıfır hata ile ölçüm mümkün hale geliyor.
 
Ölçümü gene 10 - 50 Hz arasında, ama her frekans için 3.6° faz açısı adımları ile tekrar edersek (gene 500 Hz ile örnekliyoruz ve 350 ms lik bir süre üzerinden RMS ölçüyoruz) gene düşük frekanslarda daha yüksek hata var. Ama faz açısı değişimleri hatayı daha da büyütüyor

1684769278270.png


En kötü durumda ölçüm hatamız %1.8. Ama ölçüm süresini 500 ms ye çıkarırsak, neredeyse sıfır hata ile ölçüm yapmış oluyoruz.
 
Yani ölçümün doğruluğu açısından en önemli parametre, ne kadar veri ile işlem yaptığımız. Örnekleme frekansının 500 Hz olması kritik değil. Nyquist frekansının biraz üzerinde olması yeterli oluyor. Mesela 120 Hz örnekleme frekansı ile deneyince de, 500 ms veri topladıktan sonra neredeyse tam sıfır hata ile ölçüm yapıyoruz.
 
Sinyalin frekansına bağlı olarak yeterince sıklıkla örneklemen lazım. Mesela 50 Hz bir sinyali saniyede 500 kez örneklemek en basit işlemcide bile rahatlıkla mümkün. 2 ms de bir kesme üreteceksin, tek örnek okuyup ortalamayı güncelleyeceksin.

Veya hiç uğraşmayayım diyorsan AD736 kullalabilirsin. Bu entegre, AC sinyalin RMS değerine karşılık gelen bir DC voltaj üretiyor.
Tamamdır. Yanlış anlamışım önerinizi. Her palste bir ölçüm yapmak ve onun içerisindeki tepeyi algılamak gibi anladım. Onun için bir peak-hold devresi gibi birşey mi var acaba kolay yapılabilecek diye merak ettim.
 
Şöyle bir soru atayım ortaya. Akımı gösteren sinyali tam doğrultucu ile doğrultup yüksek bir kapasitörle filtreleseydik elde edeceğimiz DC voltajı RMS'e karşılık gelir miydi?

- Not: diyotlardan kaynaklı voltaj düşüşünü görmezden gelin lütfen
 
Her palste bir ölçüm yapmak ve onun içerisindeki tepeyi algılamak gibi anladım.

Onu @Mikro Step önerdi. O metodun bazı zorlukları da var. Bir sıfır geçiş devresi gerekecek. Sıfır geçişte bir kesme üreteceksin. Ama o kesmede ölçüm yapamayacaksın çünkü sıfır noktası. Onun yerine pik noktasında dolan bir timer başlatacaksın ve timer kesmesinde ölçümü yapacaksın. Eğer sabit olan veya çok yavaş ve az değişen bir sinyali ölçüyorsan olabilir (mesela şebeke frekansı).
 
Şöyle bir soru atayım ortaya. Akımı gösteren sinyali tam doğrultucu ile doğrultup yüksek bir kapasitörle filtreleseydik elde edeceğimiz DC voltajı RMS'e karşılık gelir miydi?

- Not: diyotlardan kaynaklı voltaj düşüşünü görmezden gelin lütfen

Bu metodun en büyük sakıncası, tepki süresi. Hızlı tepki vermesi için kapasitörü dirençle yüklemen lazım. Bunu yaparsan da ripple olacaktır.
 

Forum istatistikleri

Konular
6,952
Mesajlar
118,759
Üyeler
2,824
Son üye
selocan32

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top