PIC ile tepe değeri ve faz farkı hesabı

uma350

Üye
Katılım
20 Ocak 2011
Mesajlar
27
Puanları
1
Merhabalar ,

Bir akıllı elektrik sayacı tasarımı yapmamız gerekiyor.
Şebeke geriliminin ve yük akımının lem modüller ile genlikleri düşürülüyor.
Genlikleri düşürülen bu sinüsoidal dalgaların tepe değerlerini 877a ile nasıl bulabilirim ?
Bir de akım ve gerilim için sinüsoidal dalgalar bir opamp kullanılarak kare dalgaya dönüştürülüyor.Bu iki dalga arasında da bir faz farkı olacak.bu faz farkını nasıl hesaplayabilirim ?
PIC C ile kodlama yapıyorum.

Yardımcı olabilirseniz sevinirim.Teşekkürler.
 
Öncelikle saçma sapan değerler bulmamak için güzel bir filtrasyon yapmak lazım, yoksa her türlü yüksek frekanslı parazitler işini bozacaktır.
 
asd-8.png


Similasyon bu şekilde.Üstteki sinüsoidal dalga ile tepe değeri hesabı alttaki kare dalga ile faz farkı hesabı yapmam gerekiyor.
Tepe değerini az çok yapabildim.
Yalnız kare dalgaların arasındaki faz farkı hesabını yapamadım.Yukarıdaki resim bir sinüsoidal dalga için.Diğeri de aynısı zaten.
Dalgalardan birine 50 derece faz farkı koydum ancak pic de bir türlü hesabını yaptıramadım.
Kare dalgalardan biri pin a2 ye diğeri pin a5 e bağlı.Ben timer bilmiyorum.O yüzden bir deger değişkeni ile aradaki farkı bulmayı düşündüm.
Böyle bir program yazdım.

while(!input(pin_a5))

while(input(pin_a5))
{
while(!input(pin_a2))
{
deger++;
}

}

Ancak LCD de hiçbir değer gözükmüyor.Döngüden çıkmıyor sanırım ya da hiç mi girmiyor bilemedim.
 
kodun tamamı ve Picte C tam olarak nasıl calısıyor anlamadım ama

1 while da pin_a5 input yokken assagıdaki islemi yap diyorsun
2 while da pin_a5 inputvarken assagıdaki bir altındak islemi yap diyorsun

olayı anlatması cok karısık assagıda acıklamaya calıtım fakat kısacası. Seni program assla 3 while bloguna girip degeri arttıramıyor.

pin_a5 in 0 konumunda 1 konumuna gectiginde bu işlemin olması gerekiyorsa
once pin_a5 'i bir degişkene koy Degiskendeki deger 0 ise ama pin_a5 1 ise
bir diger if bloguna girip Pin_a2 yi kontrol edip degeri arttırabilirsin..


while(!input(pin_a5)) //pin_a5 0 ken assagıdaki işlemi yap

while(input(pin_a5)) // pin a5 1 ken assagıdaki islemi yap...
// usteki while pin_a5 = 0 ise program program while blogu icine girecek ama
// burdaki while blogunda pin_a5 1 olmasını beklicek .. Pin_a5=1 oldugunda ise zaten 1 while bloguna giremicek
{
while(!input(pin_a2))
{
deger++;
}


while(!input(pin_a5))

while(input(pin_a5))
{
while(!input(pin_a2))
{
deger++;
}

}
 
Benim yapmak istediğim şöyle bir şeydi.İkinci dalganın birinci dalgadan önde olduğunu kabul ettim.Birinci dalga lojik 0 olduğunda (pin_a5) lojik 1 olana kadar beklemesini ve lojik bir olduğunda saymaya başlamasını , ikinci dalga zaten birinci dalga lojik 1 olduğunda bir süre daha lojik 0 oluyor.Bundan dolayı ikinci dalga lojik 1 olduğunda saymayı kesmesini yazmak istemiştim.Mantıksal olarak doğru gibi geliyor bana ama döngüde olmuyor tabi.Sanırım if kullanmak gerekiyor dediğin gibi.
 
C yazılımını cok iyi bilmiyorum yazım hatası olabilir. varsa bir şekilde ugrasarak duzeltebilirsin.
kod
if (pin_a5=1 and pin_a2=0){
deger++;
}

veya

if (pin_a5=1) {
if (pin_a2=0) {
deger++;
}
}

gibi bir kod Degeri senin istedigin sekilde artırır.
Faz farkı ile ilgili yeterli bilgim olmadıgından Bu kod isine yararmı bilmiyorum.
sadece 1 koddaki Degeri arttıramamanın nedenini duzeltmende yardımcı olabildim.
 
if kullanarak yapayım dedim ancak sanırım kare dalga pic de algılanmıyor.osiloskopta kare dalga net bir şekilde görülüyor.Ancak lojik 1 ise şu ledi yak diye deneme yapıyorum bi kıpırtı yok.Ben bıraksam iyi sanırım bu işi..
 
Vzc(Voltage Zero Crossing) ve ADC konularını inceleyin ilk olarak. Vzc ile akım ve gerilim için alternans değişimlerini yakalayabileceksiniz ve aralarında süre farkına göre de yük tipini (Endüktif/Kapasitif/Rezistif) tesbit edeceksiniz.
Zero cross anından itibaren ise akım ve gerilim için sürekli adc ile ölçüm alarak( mümkün ise RMS) ölçüm sonuçlarını değerlendireceksiniz. Tepe değeri ölçmek tek başına yeterli daha doğrusu efektif sonuçlar elde etmenizi sağlamaz.
 

Forum istatistikleri

Konular
128,398
Mesajlar
917,260
Kullanıcılar
450,290
Son üye
Lowery

Yeni konular

Geri
Üst