pic16f877 ile ac voltmetre(gerilim ölçme)

ykcb

Üye
Katılım
27 Şub 2010
Mesajlar
4
Puanları
1
merhaba, pic programlamada yeniyim

bir proje için şebeke gerilimini pic ile ölçmem gerekiyor, internette araştırdım ama ac gerilim ölçmeyle ilgili bi şey bulamadım.

yapacağım ölçme işlemi için şebekeyi gerilim bölücüden geçiriyorum, pic ac voltajın negatif kısmın okuyamayacağı için dc bir bileşenle toplayıp pozitif yapıyorum,
bundan sonra ne yapmam gerekli sizce, pic16f877 nin ADC sinden yararlanarak bir periyotta yeterli örnek alıcam ve rms değerini hesaplamam gerekiyor.(programlama için ccs c düşünüyorum)

bu konuda yardımcı olabilirmisiniz
 
Arkadaşım ad73xx(ad7324-ad7322) adc var negatif seviyeleride ölçebileceğin ama pic de yeni isen bu adc'ye hiç yanaşma ve şöyle yap ac gerilimi diyottan geçir ve birde sıfır geçiş dedektörü yap ve sinyalin frekansını bul ve sonra sinyalin yükselen kenarında uygun sayıda örnek al aldığın örnekler içerisinden en büyük değerli olanı kullanarak rms'i hesablayabilirsin.
bence sen ilk önce sıfır geçiş dedektörünü bir incele bir opamp'ı komparatör olarak kullanarak çok rahat yaparsın
 
2 yöntem var biri arkadaşın dediği gibi kök2ye bölmek , fakat bu yanlızca sinüsoidal dalgalar için geçerlidir ve voltajdaki tepe noktayı iyi yakalaman lazım . Diğer yöntem bildiğimiz integral ile RMS bulmak bu yazılımsal olarak biraz uğraştırıyor. Aldığın tüm örneklerin karelerinin toplamının karekökü olması lazımdı , tabi bir periyotta da 2000 örnek almıştım sanırsam. Bu şekilde her türlü dalganın RMS'ini bulabilirsin. Ahahtar kelimen "true rms"
 
cevaplar için saolun,
ben bidiğimiz karelerin toplamının karekökü şeklinde yapıcam yani böyle yapmam gerekiyor, şehir şebekesi 50 hz olduğuna göre periyot 1/50=0,02sn , diyelim 100 örnek alıcam bu da 0,0002 sn de bir örnek almam demek , 100 örnek alınca kesmeye girerek hesaplamayı yaptırmayı düşünüyorum,
şuan sorunum dc de yapabildiğim adc yi ac de yapamıyorum sürekli 0 değeri veriyor,
bununla ilgili kod bulup geliştirmem lazım,

teşekkürler
 
Arkadaşım mcu'nun adc'si ile 0 voltun altındaki genlikleri ölçemezsin eğer amaç sadece şehir şebekesini ölçmek ise bence yapman gereken ac gerilimi ilk önce doğrultman sonra zayıflatman daha sonra ise sadece artı alternasdan örnekler alman ve bu arada artı alternansın başladığı noktayı bilmen gerekli çünkü o noktadan örneklemeye başlayacaksın.
kolay gelsin
 
slm, tek tek değer alıp rms hesaplayamadım bende doğrultma ile yapmaya karar verdim. dc kaynak için çalışan hazır bir kod vardı, bende ac gerilimi doğrultup kondansatörle dc ye yaklaştırdı ve picin girişine verdim ancak programda modifiye yaptıysamda bi türlü olmadı, dosyaları linke yükledim acaba sorun nerde yardımcı olabilirmisiniz?

ayrıca camby gönderebilceğin örnekler var mı acaba sen daha önce bu konuyu araştırmışsın galiba.
 
buyrun true rms , tüm örneklerin karelerinin toplamının karekökü..

Akım sensöründen gelen bilgiyi +5 , -5 indirip direk pice vermiştim sanırım , -5 ler 0 diye okunuyordu direk , ama tam hatırlamıyorum. Yardımcı olur umarım

Kod:
void main()
{
   const long NUM_DATA_POINTS = 3000;
   long i;
   int16 value;
   float voltage,ref1,ref2,ref3,ref4;
   int role1,role2;
   set_tris_c (0b00000000);
   output_c(0b00000000);
   set_tris_b (0b00000000);
   output_b(0b00000000);

   setup_port_a( ALL_ANALOG );
   setup_adc( ADC_CLOCK_INTERNAL );
   set_adc_channel( 0 );
   delay_us(20);

   while(TRUE)
   {
      set_adc_channel( 0 );
      delay_us(20);
      
      voltage = 0;
      for(i=0; i<NUM_DATA_POINTS; ++i)
      {
         value = Read_ADC();
         voltage += (float)value*(float)value;
      }
      voltage /=41861.16;
      voltage = sqrt(voltage/(NUM_DATA_POINTS));
 

Forum istatistikleri

Konular
129,878
Mesajlar
930,974
Kullanıcılar
452,748
Son üye
Baranturk34.

Yeni konular

Geri
Üst