220v gerilim + akım ölçümü ve true RMS?

Başlatan Maxim, 20 Ocak 2015, 15:46:34

F493

Alıntı yapılan: Klein - 21 Ocak 2015, 00:12:42
Eğer cihazının başka cihazlara bağlantısı yoksa,  dirençle bölerek yapabilirsin. Ama başka cihazlarla bağlantın oluyorsa çok başın ağrır.
Bu durumda en iyi seçenek trafo olur.   Precision doğrultma ile diyotlu doğrultma arasındaki fark , diyotta düşen gerilim. Onun dışında aynı.
ADC girişine doğrultulmuş gerilim gelmesi ile ac gerilim gelmesinin true-rms ile ilgisi yok.   AC gelirse  gerilimi yukarı kaydırıp referansın orta noktasına alman gerekecek.
eğer doğrultulmuş gerilim girersen  sana yine sinüsün iki yarısı gelir ama tek yönde.  Ama bu işi diyotla yapamayacağına göre, opampl yapman gerekir.
Opamp kullandıktan sonra ha gerilimi kaydırmışsın , ha doğrultma yapmışsın. ikisi iin de en az bir opamp kullanılacak. Ben gerilimi kaydırmayı tercih ediyorum. 



Ben bazen bildiğim ama yinede en ufak bir soru işareti kalmasın diye medeni bir şekilde soruyorum. Çekinmiyorum. Ben yazdıklarımı açık açık yazıyorum.

*ADC girişine doğrultulmuş gerilim gelmesi ile ac gerilim gelmesinin true-rms ile ilgisi yok.
Bizim yazdıklarımızı insanlar okuyor sonuçta. Ben de açık olsun istiyorum. ilgisi yok ifadesi rahatsız etti beni. Bence hala ilgisi var.

http://www.play-hookey.com/analog/feedback_circuits/half-wave_rectifier.html

Burada kondansatör koysan çıkışa bu düz dc oluyor. Orta noktası yok. RMS degil avarage alınır. Benim yukarıda bahsettiğim konuda ise sinyale 1.5V ofset bindirilmiş. Burada rms gerekiyor. Ben biliyorum ama yinede şüphe kalmasın diye sorayım diyorum. Siz ilgisi yok şekilnde yazıp gidiyorsunuz.

Geçenlerde fırat devecinin oturumunda geçen konu güç elektroniği konusunda ortada hiçte bilgi olmadığı ve bilen kişilerin az oldugu. Ama biz bu konu hakkında böyle 2 kelime yazıp bırakırsak hala kafada soru işeretleri kalmayacak mı.


Precision rectifier devresi dc ye çeviriyor diye averaj almasının gerekli olmadığını , True-RMS hesaplama yapılabileceğini anlatmışım.

şunu bir açın.  (Precision rectifier  devresinin çıkışı hep 0 noktasının üzerinde örneklerde. Rms almak boş bir işlem değil mi?)


Klein

Tamam açalım. Bilmeyenler için de biraz detaylandıralım.

Doğrultucu çıkışına  kapasite bağlarsanız, tam dc olur ve burada averaj almak ve bir katsayıya bölmek yeterlidir. Buraya kadar bir sorun yok. Buna bir itirazım da yok zaten.
Eğer doğrultucu girişi tam sinüs ise  , çıkışımızı 1.41 e böldüğümüzde bize gerilimin etkin değerini verir. böylece suya sabuna dokunmadan gerilimi ölçmüş oluruz.
Çünkü sinüs forma sahip bir sinyalin  hangi noktada kaç volt olacağını kesin biliyouz. Böylece sinüs formlu sinyalin etkin değerini daha önce hesaplanmış tek bir katsayı ile bulabiliyoruz.

Peki ya giriş tam sinüs değilse?  O zaman ne yapacağız?
Sinyalin hangi noktada kaç V olduğunu bilmiyoruz. Bu durumda sinyalin etkin değerini kapasite üzerindeki gerilimi sabit bir sayıya bölerek elde edemeyiz.
O halde önümüzde iki seçenek var.  Ya bu katsayıyı  kendimiz bulacağız, ya da başka bir hesaplama yöntemi kullanacağız.
Eğer sinyalimizin formu değişkenlik gösteriyorsa , her zaman aynı değilse, katsayı bulmak da işimize yaramayacak.

Burada True-RMS  devreye giriyor.
True-RMS zaman içerisinde periyodik olarak genliği değişen sinyalin bir periyottaki etkin değerini bulmak için kullanılan bir hesaplama.
Nasıl hesaplanıyor?
Sinyalin bir periyodu boyunca örnekler alıyoruz. Aldığımız her örneğin karesini alıp , elde ettiğimiz bu değerleri topluyoruz.
Bir periyot tamamlanınca, toplamı örnek sayısına bölüp ortalamasını alıyoruz. Sonra da bu değerin karekökünü alıyoruz.

True-RMS sadece AC gerilim veya akım ölçümü için kullanılan bir hesaplama yöntemi değil.
Çünkü gerilimimizin polaritesi değişmese bile zaman içerisinde genliği değişiyor olabilir. Genliğinin değişiyor olması , sinüs olması
bir sinyalin AC olduğunun göstergesi değildir. Eğer ortada zaman içerisinde genliği değişen bir gerilim varsa
AC veya DC farketmez True-RMS yöntemi ile etkin değerini hesaplayabiliriz. 

konuyu detaylandırmadan önce AC ve DC kavramlarına bir açıklık getirmek gerek.
Genliği ve polaritesi periyodik olarak değişen gerilim(veya akım)  AC olarak tanımlanmaktadır.
Her ne kadar AC olabilmesi için genliğin de periyodik olarak değişmesi gerekiyor gibi görünse de aslında bu zorunlu değildir.
Eğer zaman içinde ortalaması  0 oluyorsa bu gerilime AC diyebiliriz. Polarite değişimi AC için anahtar kelimedir.

Eğer polarite değişmiyorsa, buna da DC gerilim(veya akım) diyebiliriz. Dc olabilmenin kuralı , zaman içinde ortalamanın 0 olamamasıdır.
Bir gerilimin (veya akımın) DC olması için illa dümdüz ip gibi olması gerekmez. Genliği periyodik olarak veya düzensiz olarak değişiyorsa,
polarite deişmediği sürece bu gerilime(veya akıma) DC diyebiliriz.

sinüs formunda AC gerilimi nasıl ölçeriz.
Eğer gerilimimiz tam sinüs formunda ise işimiz basit. Doğrultup filtre edip , ölçtüğümüz değeri 1.41'e bölmek yeterli.

Sinüs formunda olmayan AC gerilimi nasıl ölçeriz.
Bunun için tre-RMS hesaplama gerektiğini yukarıda belirtmiştik.  Devremize nasıl gireriz?

3 yolu var. ( true-rms çevirici kullanmadığımızı , ADC ile ölçmek istediğimiz varsayımıyla)

1- Ac gerilimi doğrudan diferansiyel girişli bir ADC'ye gireriz.
2- AC gerilimi , ADC'mizin referans geriliminin tam orta noktasına kaydırırarak tek girişli ADC'yegirebiliriz.
    En basit haliyle : ADC referansımız 5V olsun.  Referansı bölücü ile ikiye bölüp 2.5V elde ederiz.
    Ölçeceğimiz AC gerilimin bir ucunu buraya diğer ucunu ADC'ye gireriz. Ama bence doğru olan kaydırma işini
    opamplarla yapmaktır.  Nasıl kaydırırsak kaydıralım elimizde -5V..+5V aralığı yerine  0-5V aralığında değişen
    gerilimimiz olur.  Hesap yaparken Ölçtüğümüz değeri 2.5Volttan çıkardığımızda negatif alternansın değerini de
    görürüz.  Bu yöntemin dezavantajı , çözünürlüğümüzün yarı yarıya düşmesidir.
3- AC gerilimi doğrultarak ADC'ye gireriz. Buradaki doğrultmayı güç kaynağındaki doğrultma gibi algılamayın.
    Çıkışı  filtrelemiyoruz. en azından dalganın şeklini bozacak kadar filtrelemiyoruz. Doğrultma işlemiyle
    Negatif alternansın yönünü değiştirerek pozitif alternans haline getiriyoruz. Elimizde AC'de olduğu gibi her iki alternans mevcut.
    AC'den tek farkı bir negatif bir pozitif alternans yerine , iki yarısı da pozitif olan bir sinyalimiz olması.   
    Bu yöntemin avantajı: Sinyali  tek girişli ADC'ye girebiliyoruz. Aynı zamanda sinyali kaydırmadığımız için ADC'yi
    tam skala kullanabiliyoruz.

AC gerilimi nasıl doğrulturuz?
ilk akla gelen yöntem diyot ile doğrultmak. Fakat bu yöntemin kötü tarafı , diyotlar üzerinde bir miktar geilim kaybı olması.
Üstelik bu kayıp malzemeden malzemeye, sıcaklığa, gerilime, akıma bağlı olarak değişmekte. bu kayıplar da doğal olarak
ölçüm sonuçlarımızı değiştirmekte. Bu sebeple diyotla doğrultma önereceğim bir yöntem değil.
Bunun yerine "Precision rectifier" olarak adlandırılan devreleri kullanmanızı öneririm.



Alıntı Yap
şunu bir açın.  (Precision rectifier  devresinin çıkışı hep 0 noktasının üzerinde örneklerde. Rms almak boş bir işlem değil mi?)

Hayır boş bir işlem değil.  Öncelikle bir saynın karesi her zaman pozitif. Bunu zaten biliyorsunuz.
Sinyalin negatif kısmını doğrultucudan geçirip polaritesini değiştirdik diyelim.
Negatif iken ADC'den alacağımız  değer -1000  ise pozitifken alacağımız değer +1000 olacak.
Karesini aldığımızda her iki değer de aynı sonucu verecek. Sonuç her zaman aynı çıkacak. İster negatif ister pozitif.

Ama anladığım kadarıyla siz ; madem ben bunu pozitife çevirmek için uğraşıyorum niye True-RMS ile uğraşayım
bi kapasitör bağlar  filtre ederim. 1.41'e böler sonucu alırım. Neden uğraşayım ki bununla diye düşünerek,
burada True-RMS hesaplamanın gereksiz olduğunu düşünüyorsunuz.

Eğer doğru anlamış isem , yukarıda yazdım ama yine de tekrar edeyim. Dalga şeklimiz her zaman sinüs olmayabilir. 
 











z

DC voltajda değişim varsa DC üzerine AC binmiş demektir.  Voltajdaki dalgalanma sinüsel formda olmasa bile (örneğin diyodlu doğrultucu çıkışına bağlı kapasitördeki rıpıl) sözkonusu dalgalanma fourier açılımdan birden fazla sinüsel sinyalin toplamı olarak da ifade edilebilir.

Bu durumda DC + K1sin(w1t) + K2sin(w2t) + ..... şeklinde bir voltaj var demektir.

Eğer ortalama alırsanız sin(wnt) li ifadeler yok olur. Halbuki efektif değer alırsanız sin ifadelerinin her birisi efektif değerde kendini gösterir.

Aşağıdaki hikayeyi okumalısınız.

Efektif değerin hikayesi





Bana e^st de diyebilirsiniz.   www.cncdesigner.com

timpati

"Precision rectifier" dediğiniz devre, mutlak değer (absolute value) alıcı devrenin diğer adı mı?
why mr. anderson, why ?

z

Mutlak değer alan devre tam dalga doğrultucu demektir.

Diyod doğrultucuların benzeri opamplarla da yapılabilir. Yarım dalga yada tam dalga doğrultucu olabilir.

Neden precision deniyor?

Diyodların iletim voltajından çok daha küçük voltajları doğrultabilirsin.
Sıcaklık etkilerini kompanze edebilirsin.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

F493

Selam,
Öncelikle cevabınız için teşekkürler.

Alıntı yapılan: Klein - 22 Ocak 2015, 00:26:31
Tamam açalım. Bilmeyenler için de biraz detaylandıralım.

Doğrultucu çıkışına  kapasite bağlarsanız, tam dc olur ve burada averaj almak ve bir katsayıya bölmek yeterlidir. Buraya kadar bir sorun yok. Buna bir itirazım da yok zaten.
Eğer doğrultucu girişi tam sinüs ise  , çıkışımızı 1.41 e böldüğümüzde bize gerilimin etkin değerini verir. böylece suya sabuna dokunmadan gerilimi ölçmüş oluruz.
Çünkü sinüs forma sahip bir sinyalin  hangi noktada kaç volt olacağını kesin biliyouz. Böylece sinüs formlu sinyalin etkin değerini daha önce hesaplanmış tek bir katsayı ile bulabiliyoruz.
Burada aynı fikirdeyiz.

Peki ya giriş tam sinüs değilse?  O zaman ne yapacağız?
Sinyalin hangi noktada kaç V olduğunu bilmiyoruz. Bu durumda sinyalin etkin değerini kapasite üzerindeki gerilimi sabit bir sayıya bölerek elde edemeyiz.
O halde önümüzde iki seçenek var.  Ya bu katsayıyı  kendimiz bulacağız, ya da başka bir hesaplama yöntemi kullanacağız.
Eğer sinyalimizin formu değişkenlik gösteriyorsa , her zaman aynı değilse, katsayı bulmak da işimize yaramayacak.

Burada True-RMS  devreye giriyor.
True-RMS zaman içerisinde periyodik olarak genliği değişen sinyalin bir periyottaki etkin değerini bulmak için kullanılan bir hesaplama.
Nasıl hesaplanıyor?
Sinyalin bir periyodu boyunca örnekler alıyoruz. Aldığımız her örneğin karesini alıp , elde ettiğimiz bu değerleri topluyoruz.
Bir periyot tamamlanınca, toplamı örnek sayısına bölüp ortalamasını alıyoruz. Sonra da bu değerin karekökünü alıyoruz.

True-RMS sadece AC gerilim veya akım ölçümü için kullanılan bir hesaplama yöntemi değil.
Çünkü gerilimimizin polaritesi değişmese bile zaman içerisinde genliği değişiyor olabilir. Genliğinin değişiyor olması , sinüs olması
bir sinyalin AC olduğunun göstergesi değildir. Eğer ortada zaman içerisinde genliği değişen bir gerilim varsa
AC veya DC farketmez True-RMS yöntemi ile etkin değerini hesaplayabiliriz. 
Evet haklısınız. Mesela bu sinyali. Fakat bununda periyodunu(frekans) bilmemiz gerekiyor yanlış hatırlamıyorsam. Eğen frekansı bilmezsek alan hesabı yani rms yanlış çıkar. 50hz için 20ms. 100us'de  örnekliyorsak 200 örnek 20ms yapar. Bu gelirim hesabı ör 220 çıkar. Eğer örnek sayısı 16ms olursa 20ms'nin altında örnek aldığımız için gerilim 190V çıkar belki.



konuyu detaylandırmadan önce AC ve DC kavramlarına bir açıklık getirmek gerek.
Genliği ve polaritesi periyodik olarak değişen gerilim(veya akım)  AC olarak tanımlanmaktadır.
Her ne kadar AC olabilmesi için genliğin de periyodik olarak değişmesi gerekiyor gibi görünse de aslında bu zorunlu değildir.
Eğer zaman içinde ortalaması  0 oluyorsa bu gerilime AC diyebiliriz. Polarite değişimi AC için anahtar kelimedir.
Mesela ses sinyalinin ortalaması sıfır çıkar mı? Yani AC deyince ortalama sıfır olmak zorunda mı gerçekten.?


Eğer polarite değişmiyorsa, buna da DC gerilim(veya akım) diyebiliriz. Dc olabilmenin kuralı , zaman içinde ortalamanın 0 olamamasıdır.
Bir gerilimin (veya akımın) DC olması için illa dümdüz ip gibi olması gerekmez. Genliği periyodik olarak veya düzensiz olarak değişiyorsa,
polarite deişmediği sürece bu gerilime(veya akıma) DC diyebiliriz.
Evet aynı fikirdeyim. Ripple denilen şey bu zaten veya osilasyon, kaynagın zayıf olması vs.

sinüs formunda AC gerilimi nasıl ölçeriz.
Eğer gerilimimiz tam sinüs formunda ise işimiz basit. Doğrultup filtre edip , ölçtüğümüz değeri 1.41'e bölmek yeterli.
Evet en üstte ofset ekleyip işlemciye girdiğimiz gibi

Sinüs formunda olmayan AC gerilimi nasıl ölçeriz.
Bunun için tre-RMS hesaplama gerektiğini yukarıda belirtmiştik.  Devremize nasıl gireriz?

3 yolu var. ( true-rms çevirici kullanmadığımızı , ADC ile ölçmek istediğimiz varsayımıyla)

1- Ac gerilimi doğrudan diferansiyel girişli bir ADC'ye gireriz.
2- AC gerilimi , ADC'mizin referans geriliminin tam orta noktasına kaydırırarak tek girişli ADC'yegirebiliriz.
    En basit haliyle : ADC referansımız 5V olsun.  Referansı bölücü ile ikiye bölüp 2.5V elde ederiz.
    Ölçeceğimiz AC gerilimin bir ucunu buraya diğer ucunu ADC'ye gireriz. Ama bence doğru olan kaydırma işini
    opamplarla yapmaktır.  Nasıl kaydırırsak kaydıralım elimizde -5V..+5V aralığı yerine  0-5V aralığında değişen
    gerilimimiz olur.  Hesap yaparken Ölçtüğümüz değeri 2.5Volttan çıkardığımızda negatif alternansın değerini de
    görürüz.  Bu yöntemin dezavantajı , çözünürlüğümüzün yarı yarıya düşmesidir.
3- AC gerilimi doğrultarak ADC'ye gireriz. Buradaki doğrultmayı güç kaynağındaki doğrultma gibi algılamayın.
    Çıkışı  filtrelemiyoruz. en azından dalganın şeklini bozacak kadar filtrelemiyoruz. Doğrultma işlemiyle
    Negatif alternansın yönünü değiştirerek pozitif alternans haline getiriyoruz. Elimizde AC'de olduğu gibi her iki alternans mevcut.
    AC'den tek farkı bir negatif bir pozitif alternans yerine , iki yarısı da pozitif olan bir sinyalimiz olması.   
    Bu yöntemin avantajı: Sinyali  tek girişli ADC'ye girebiliyoruz. Aynı zamanda sinyali kaydırmadığımız için ADC'yi
    tam skala kullanabiliyoruz.
    Evet örnek olarak    Precision rectifier diyebiliriz sanırım.


AC gerilimi nasıl doğrulturuz?
ilk akla gelen yöntem diyot ile doğrultmak. Fakat bu yöntemin kötü tarafı , diyotlar üzerinde bir miktar geilim kaybı olması.
Üstelik bu kayıp malzemeden malzemeye, sıcaklığa, gerilime, akıma bağlı olarak değişmekte. bu kayıplar da doğal olarak
ölçüm sonuçlarımızı değiştirmekte. Bu sebeple diyotla doğrultma önereceğim bir yöntem değil.
Bunun yerine "Precision rectifier" olarak adlandırılan devreleri kullanmanızı öneririm.



Hayır boş bir işlem değil.  Öncelikle bir saynın karesi her zaman pozitif. Bunu zaten biliyorsunuz.
Sinyalin negatif kısmını doğrultucudan geçirip polaritesini değiştirdik diyelim.
Negatif iken ADC'den alacağımız  değer -1000  ise pozitifken alacağımız değer +1000 olacak.
Karesini aldığımızda her iki değer de aynı sonucu verecek. Sonuç her zaman aynı çıkacak. İster negatif ister pozitif.

Ama anladığım kadarıyla siz ; madem ben bunu pozitife çevirmek için uğraşıyorum niye True-RMS ile uğraşayım
bi kapasitör bağlar  filtre ederim. 1.41'e böler sonucu alırım. Neden uğraşayım ki bununla diye düşünerek,
burada True-RMS hesaplamanın gereksiz olduğunu düşünüyorsunuz.
hayır bu arkadaş için gereksiz olabilir diyorum. nedeni sadece ekranda gösterecegim dedi. Sinyalin ac şebeke gerilimi oldugunu bildiğimiz için. Eğer sinyalin FFT' sini almayacaksam. Çıkışta igbt, scr vs. sürmeyeceksem yani ani degerlerle işim yoksa, düz dc yapıp bunu kullanabiliriz dedim. Ama doğrultulmuş DC düzlemdeki sinyainl(ses veya ac)  benim için her noktası önemli ise ve değişken ise rms kaçınılmaz. Zaten bildiğim kadarıyla RMS bir geometrik alan hesabı. Yani siz yamuk, yumuk bir işaretin belli bir zaman içindeki alanını buluyorsunuz. Bir sinyal düz dc değilse rms gerekli, düz dc ama hassasiyet ise yine rms ben arkadaşın istediği sonuca göre yorum yapıyorum. Tabi burada rms den ziyede örnek sayınızda çok öenmli.


Eğer doğru anlamış isem , yukarıda yazdım ama yine de tekrar edeyim. Dalga şeklimiz her zaman sinüs olmayabilir. 
 

Bence oldukça verimli bir tartışma oldu. Önemli bir konu. Ekleyeceğiniz kısımlar varsa süper olur.

Esen kalın.

CLR

DC ve AC tanımları biraz yanlış olmuş, olay @z'nin formülünü yazdığı gibi,

DC =Direct current(değişmeyen, sabit akım anlamındadır),
Voltaj veya Akım ip gibi ise hatta hiç ripple yoksa o dc 'dir. Ripple varsa(bu aslında bilmem kaçıncı derece harmonik veya harmonikler oluyor) dc üzerine binmiş ve couple olmuş ac voltaj vardır denir, bunu fourier formülü ifade eder.

AC ise alternating current yani değişen akım(veya voltaj), 0'ın üzerinde veya altında, genliği, frekansı değişken, periyodikte olabilir olmayada bilir, aslında dc harici herşey diyebiliriz.

Başka bir deyişle fourier formülünde hiç harmonik yoksa yani sadece ilk sabit bileşen varsa buna dc denir. İlk bileşen(dc bileşen 0 ise) sıfır ise harmonik varsa bunada sadece AC denir. Fakat gerçek hayatta hem dc hemde ac birlikte bulunur yani @z'nin verdiği formüldekiler hepsi. Low pass veya high pass kullanarak dc veya ac'yi ayırabiliriz. Tabii %100 ayırmak için çok zor onun için her zaman dc üzerinde birazda olsa ac herzaman kalır

DC          +                 K1sin(w1t) + K2sin(w2t) + .....
DC kısım                               AC kısım                             

Precision rectifier ve true rms kısımları @klein anlattığı gibi

Ayrıca öyle 40 örnekle true rms okumanın çok anlamı olmaz( 40 örnekte sinüsün yükselen kısmında iki örnek arası voltaj farkı çok fazla olur) ve 40-100 gibi sayılar true rms hesaplamak için genelde seçilmez çünkü işlemci 8bit ise hardware çarpma bölme yapamıyorsa çok işlem kaybı olur bunun için 64/128/256 vs gibi 2'nin kuvvetleri seçilir.

Dar voltaj aralığı okunacaksa az sayıda örnek kullanılabilir mesela 200V-240V aralığı okuyanacaksa 64sample(1-3V hata) veya 32 sample (1-5V hata) yeterli olur, ayrıca tam orta noktada kalibrasyon gerekir.
Knowledge and Experience are Power

F493

#22
Selam CLR,

   Benim teorik kısmımda biraz sıkıntı var haklısınız. Fakat tecrübeniz nedir bilmiyorum. 40 örnek, 100 örnekle bu işler olmaz demek işin teorik kısmı.
Ben 40 örneği pic'in adc'sinin hızını yavaşlığından dolayı söyledim. Ama bu işi DSP ile yapacak olsaydınız size 200 örnek derdim. Her 100us de karelerini alın şeklinde. Ben hayatta şunu tecrübe ettim, 40 örnekle olmaz demişşiniz ya oluyor üstad. Ben daha önce 400HZ 20KW frekans konv. için 160 örnekle bu işi yaptım. Çünkü 200 örnek için dsp nin kaynakları yetmiyordu. Şunu ekleyeyim 400HZ 2.5ms yapar ve ben 160 örnekten bahsediyorum. Siz 20ms için 40, 100 yetmez diyorsunuz. Bunlar hep teorik. Örnek sayısı az olsa bile adc de filtre edersiniz. Kontrol için kullanacaksanız L, C nizi ona göre tasarlarsınız. Ama az kaldı şu iki sene içinde teoriyi de oturtacagım inşallah.

Benim amacım yanlışta bilsem doğru da bilsem konuyu tartışmak.

Saygılar.

Esen kalın.

CLR

@F493
Biraz daha dikkatli okursan daha iyi anlayabilirsin.

40/100 örnekle olmaz demedim, 40/100 sample genelde seçilmez dedim çünkü truerms formülü çarpma ve bölme işlemleri içeriyor, 40/100 ile çarpma/bölmenin çok kısa yolu yoktur ama 32/64/128/512'e çarpmak/bölmek için shift işlemleri yeterlidir.

Eğer dar voltaj aralığı okuyacaksan 40sample olabilir ama ben olsam ya 32 yada 64 seçerim nedenini yukarda anlattım, Bahsettiğim gibi 40-50V gibi aralığı okuyacaksan sıkıntı yok , 2-3 volt hata ile okuyabilirsin. Ama voltaj aralığı genişse durum çok değişir, 

Zaten mantıken 220Vac lineer değişen bir gerilim olsaydı(sinüs olmasaydı) 220V/40=5,5V sample'lar arası gerilim farkı olacaktı, buradan hata payını yaklaşık anlayabilirsin. Fakat sinüs olduğundan belki 40 sampleda sinüsün yükselen veya düşen kenarlarında eğim fazla olduğundan dolayısıyla voltaj farkı sample'lar arası 10-12volt voltaj farkı oluşuyordur(hesaplamadım ama excelle hesaplanabilir) Buda hatayı yükseltir(bu anlattığım olay ideal sinüs için geçerli).

stm32 ile yapıyorum tamdalga 10ms'de 64/128/256 örnek alıp işlemleri yapıyorum, illa bu işlemleri senin bahsettiğin gibi 10ms veya 2,5ms'de yapmak zorunda değilizki , mesela 4 tane 2,5ms'lik tamdalga boyunca sample al(10ms), onun rms'ini hesapla  , ölçtüğün voltaj periyodik zaten(400Hz).

Ayrıca bu iş birazda programcılık işi dsp ile 200 örnek alamadım diyorsun, program mantığını görmediğim birşey diyemem ama, dsp'de adc için dma yokmuydu, adc ve dma birlikte bir alternansta dma+adc ile 256 sample alırdın diğer alternansta işlemleri hesaplardın, bu esnada adc + dma 2. buffer'ı kullanırdı.  Ping pong buffer yani.

Mesela işlemcin çok yavaşsa, istersen bir periyod okursun bir periyod okumassın, her periyod okunacak diye bir kural yok,

Ben her periyod okuyorum ama 8 tanesinin yine ortalamasını alıyorum veya median filter kullanıyorum burada neden 8 yerine 10 kullanmadım acaba? aslında benim kullandığım işlkemci çarpma bölme yapmama izin veriyor ama böylesi daha hızlı ve taşınabilir oluyor.
Knowledge and Experience are Power

F493

Selam,

Ayrıca öyle 40 örnekle true rms okumanın çok anlamı olmaz( 40 örnekte sinüsün yükselen kısmında iki örnek arası voltaj farkı çok fazla olur)
Önce şunu bir hatırlatayım. Anlamı olmaz demek bu iş olmaz demektir.

O öyle sadece örnek sayısını adc den dma falan filan ile okumakla bitmiyor. Evet dma var Ayrıca tek kanal çevirme hızı 160ns hatta bunun üstüne birde 16 kanalı 8 kanal olarak paralel çeviriyor. Toplamda 2.5us de olay bitiyor. Olay burada bitmez ki, aynı hızla kontrolörün de dönmesi gerekiyor. Çıkışa bunu aktarmanız gerekiyor. 100MHZ(10ns) burada yetmiyor. Burada performans yetmiyor. İşlemci de 3 adet 10us interrupt, 5us adc ve içlerinde kod dolu, 3 faz sıfır geçiş, haberleşme vb. bir çok işlem var. İş adc den okuyunca bitiyor mu yani? O nedenle 2 çekirdek ve kendi içinde her çekirdeğe sahip CLA olan işlemciye geçtik. Ayrıca bir işlemci de 16,32,64.. katı örnek almanıza gerek yok ki. sayıların karesini aldıktan sonra 100'e bölmeden önce bunu ikinin katına yuvarlamak için bir katsayı ve çarpan kullanırsınız olur biter.
Ayrıca bu iş birazda programcılık işi dsp ile 200 örnek alamadım diyorsun, program mantığını görmediğim birşey diyemem ama
Şimdide yaptığımız yazılıma gelecek konu.

Neyse ben konuyu fazla uzattım galiba. Forumu fazla meşgul etmeyeyim. Soruyu soran arkadaş da sorduğu sorunun sonucunda bayağı bir şey almıştır tartışmadan.

Esen kalın.

Karamel

hocam kisacik bir araya girmek istiyorum. az once CLR hocamin verdigi carpma vede bolme orneklerinden aydinlandim. buyuk ihtimal ile biliyorsunuzdur ama anlatayim yinede.

binary system de bitlerin hepsini bir bit sola kaydirinca 2 ile carpmis. 1 bit saga kaydirincada 2 ye bolmus oluyoruz. az once farkettim.


0011  =  3 iken
0110  = 6 oluyor.

zaten bu 10 luk sistemdede boyle. onlardada 10 la carpmis yada bolmus oluyoruz ama bunu binary system de hic dusunmemistim.... ::) tesekkurler CLR hocam ::)

CLR

@F493
Gerçekten anlamanda sıkıntı var, aynı mesajımdan alıntı aşağıda,

Alıntı yapılan: CLR - 22 Ocak 2015, 13:25:41
Dar voltaj aralığı okunacaksa az sayıda örnek kullanılabilir mesela 200V-240V aralığı okuyanacaksa 64sample(1-3V hata) veya 32 sample (1-5V hata) yeterli olur, ayrıca tam orta noktada kalibrasyon gerekir.

32 > 40 ? Ben yeterli ise 32'de kullanabilirsin demişim hala neyin 40'ını söylüyorsun ki?

Şimdi de olayı 3 faza döndürmüşsün ama fark etmez, senin dsp yapamıyorsa stm32'ye gel, 3 kanal adc'yi  tarayarak bir timer ile tetikleyerek dma ile memory'ye ardışık yazabiliyor, burada ne interrupt var nede sıfır geçişleri var. Tüm kanalları okuyor sonra sana haber veriyor 3 kanalı ve 64/128/256 örneği okudum  diye. Ve sürekli 10/20ms'de periyodik X sample okuyorsan sıfır geçişlerine gerek yok zaten, muhtemelen işlemcinin özeliklerini tam olarak kullanamıyorsun.

Ben şimdiki projemde 72mhz'lik işlemci ile 10ms'de 4 kanal adc ile her kanaldan 128 sample alıp true rms hesaplatıyorum, hemde her 10ms'de bir,  sen 100mhz işlemci ile tek kanal okuyamıyorsan burada bir mantık hatası yokmu sence? 

Hem soruyorsun, yanlış biliyorsam öğreneyim diyorsun, hemde verdiğimiz cevapları beğenmiyorsun.
Knowledge and Experience are Power

F493

#27
Sorun değil benim anlamam da sıkıntı olsun.
siz daha konuya girerken doğru akım nedir ac akım nedir onu yazarak giriyorsunuz.

İşte benim yazdıklarım hep bir şeylere dayanıyor. Sen neden olmuyor dedin bende nedenini söyledim. Daha bunu anlamayacak bir şey yok. Sen nasıl olmaz dedin bende bu yüzden olmaz dedim. Ben okuyamıyorum demedim ki okusan bile işleme sokamazsın çünkü o verileri kontrol sisteminde bu kadar zamanda işleyemezsin. Hala adc de takılıyorsun. Neyse ben fazla detaya indim. 3 fazda bu konuyu anlayamaman normal olabilir.


Şimdi de olayı 3 faza döndürmüşsün ama fark etmez, senin dsp yapamıyorsa stm32'ye gel, 3 kanal adc'yi  tarayarak bir timer ile tetikleyerek dma ile memory'ye ardışık yazabiliyor, burada ne interrupt var nede sıfır geçişleri var. Tüm kanalları okuyor sonra sana haber veriyor 3 kanalı ve 64/128/256 örneği okudum  diye. Ve sürekli 10/20ms'de periyodik X sample okuyorsan sıfır geçişlerine gerek yok zaten, muhtemelen işlemcinin özeliklerini tam olarak kullanamıyorsun.


HER ANİ DEĞERİ FİLTERDEN GEÇİRMEN GEREKİYOR. KAZANÇ ÇOK YÜKSEK OLUYOR O YÜZDEN. DMA İLE OLMAZZZZ..
3 FAZ SİSTEMDE SIFIR GEÇİŞ YOKSA KONTROL DE YOKTUR. BEN SİZE  BİRŞEYLERİ ANLATMAYA ÇALIŞIYORUM SİZ HALA BECEREMİYORSUN DİYORSUNUZ. SİZİN BECEREMİYORSUNUZ DEDİĞİN ŞEY 45 ÜLKEYE İHRAÇ EDİLİYOR.

Ben 200 örneğin dsp nin kaynakları yetmiyor derken nedeninide açıkladım. 400hz den dolayı. Siz sadece rms'e takıldınız ama ben kafamdaki bütüne göre yazdım. Sizde biraz dikkatli okursanız olay buralara gelmez.

Ben bir çok şeyi anladım hatta yeni şeylerinde farkına vardım. Neden senle değil de diğerleriyle tartışmadım. Teorik kısmımın zayıf oldugundan da bahsettim.  Sıkıntı nedir.

Forumda şöyle bir algı var konuya cevap yazan biri çok tanınmıyorsa yada forumda popüler değilse yazdığına hürmet yok bence. Bu çaylaktır acemidir. Ama ben biliyorum bu forumda çok bilgili hatta büyük işler yapan kişilerde var. Yazarken karşındakini tanımıyorsan en azından hayal et. Herkesin bir yeri var hayatta. Sadece senin forumda gördüğün iki satır yazı o insanların herşeyini koymaz ortaya. Okadar basit değil oo iş öyle. Sizinde bir bilginiz var. Tanıyoruz sizide az çok. Görüyoruz yaptığınız işleri sitenizde ama bu karşındakini basite almayı gerektirmez bence.

CLR

@F493

Bilmiyorsan öğren diye söylüyorum, sen benim bilmediğim birşeyi öğretseydin, sağol derdim.   

Muhtemelen eski yöntemi kullanıyorsun(100mhz'lik işlemcin için diyorum) yani timer/external interrupt kurup belirli aralıklarda(sample zamanları ve sıfır geçişlerinde) interrupt içinde adc'yi çalıştırıp okuduğun gerilimi buffer'da bir yere yazıyorsan ve bunu 3 fazdada böyle yapıyorsan bu klasik yöntemdir ve çok zaman kaybedersin.

Ama şimdiki işlemciler adc kanallarını tarayabiliyor ayrıca timer ile belirli periyorlarda adc'yi tetikleyebiliyorlar adc'de dma'yı tetikliyor böylece başlangıçta birkez kuruyorsun sonra tüm sample'la Xms'de okununca dma interrupt ile sana bildiriyor, sana sadece hesaplamalar kalıyor.  Benim yaptığım projede 10ms'de bir dma bana  bildiriyor sample hazır diye. Başka ne interuptla nede adc ile nede timer ile uğraşıyorum. Bana sadece true rms hesaplamak kalıyor.

64 sample için mantık aşağıdaki gibi

(Timer--> ADC-->DMA) * 64 
Knowledge and Experience are Power

z

@F493

DSP yazılımcılığı MCU yazılımcılığından farklıdır. Klasik usulle kod yazarsan DSPyi MCU olarak kullanmıs olursun.

DSP yazılımcılığında 2 li sayılar üzerinde 2 li sistem matematiğin tüm inceliklerini kullanmak zorundasın. Komutlar zaten tek çevrimde birden fazla 2li işlemin yapılmasına izin veriyor.

Eğer DSP bu işlere yetişemiyor diyorsan daha ilk başta 2 li sistemi anlayamamışsın demektir. 
Bana e^st de diyebilirsiniz.   www.cncdesigner.com