21 Eylül 2021, 05:03:48

Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d


AC 220V Okuma

Başlatan PICaso, 23 Kasım 2020, 18:33:29

PICaso

Arkadaşlar merhaba,

Pic18f45K22 ile şebeke gerilimini okuyup lcd ye yazmak istiyorum. Fakat lcd ye yazdığım değer 200v-240V arasında

sürekli değişiyor. Kodda ne gibi değişiklikler yapabilirim? Herkese kolay gelsin.

#include "config.h"
#include "lcd_16x2.h"

uint32_t led_timestamp 0;
static 
uint8_t led_state FALSE;

uint32_t adcUpdate_timestamp 0;

char lcd_msg[LCD_BUFFER_LEN] = { };
#define ADC_BUFFER_LENGTH   40u
uint16_t adc_data[ADC_BUFFER_LENGTH] = {0};
uint8_t adc_data_index 0;

void main()
{
  
// Select 16MHz Internal Oscillator
  
OSCCONbits.IRCF 0x07;             // From 1MHz to 16MHz
  
InitTimer0 ();
  
LCD_Init ();
  
// Configure ADC
  
ANSELAbits.ANSA0 1;     // Disable the Digital Input Buffer on AN0
  
TRISAbits.RA0 1;        // AN0 as Input Pin
  
  
ADCON1bits.PVCFG 0x00;  // +Vref = AVDD
  
ADCON1bits.NVCFG 0x00;  // -Vref = AVSS
  
  
ADCON2bits.ADFM 0x01;   // Right Justified
  
ADCON2bits.ACQT 0x01;   // 2TAD
  
ADCON2bits.ADCS 0x05;   // FOSC/16
  
  
ADCON0bits.CHS 0x00;    // AN0 Selected
  
ADCON0bits.ADON 1;      // Enable ADC
  
  
sprintf (lcd_msg"    Embedded");
  
LCD_Print_Line (0lcd_msg);
  
sprintf lcd_msg"AC RMS = %dV"0u);
  
LCD_Print_Line (1lcd_msg);
  
LCD_Update ();
  while(
1)
  {    
     
sprintf lcd_msg" VOLTAJ  OLCUMU ");
     
LCD_Print_Line (0lcd_msg); 
     
LCD_Update ();
     
    
    
// ADC Update Task
    
if( millis() - adcUpdate_timestamp >= 1u )
    {
      
uint32_t ac_value 0;
      
adcUpdate_timestamp millis ();
      
      
ADCON0bits.CHS 0x00;    // AN0 Selected
      
ADCON0bits.GODONE 1;  // Start Conversion
      
while(ADCON0bits.GO == 1);
      
uint8_t adc_lo ADRESL;
      
uint8_t adc_hi ADRESH;
      
adc_data[adc_data_index] =  (uint16_t)(adc_hi << 8) | (uint16_t)adc_lo;
      
adc_data_index++;
      if( 
adc_data_index >= ADC_BUFFER_LENGTH )
      {
        
adc_data_index 0u;
        
// Time to Process and Display Data
        
uint32_t adc_filter_val 0;
        
uint16_t adc_buf_local 0;
        for( 
uint8_t i=0i<ADC_BUFFER_LENGTHi++ )
        {
          
adc_buf_local adc_data[i];
          
adc_filter_val += ((uint32_t)(adc_buf_local*(uint32_t)adc_buf_local ));
        }
        
// 625*625 = 390625
        // 128*128 = 16384
        // 625^2 / 128^2 = 23.8414
        
adc_filter_val = (uint32_t)((float)adc_filter_val 23.84);
        
adc_filter_val /= ADC_BUFFER_LENGTH;      // mean squared sum
        
adc_filter_val *= 2;   
        
ac_value = (uint16_t)sqrt(adc_filter_val);// root mean square
        
ac_value *= 68u;
        
ac_value /= 1000u;
        
       
sprintf lcd_msg"AC RMS = %luV"ac_value);  
        
LCD_Print_Line (1lcd_msg);
        
LCD_Update();
        
       
      }
    }
  }
}

PICaso


M.Salim GÜLLÜCE

Kullandığın devrede sıkıntı war.
-Bir kere kapasitör kullanmazsan 0 +230 arası tüm değerleri görürsün
Kapasitör kullandığında da deşarj olabilmeli.
Kısacası kurgun yanlış.
-ikincisi kurduğun devre senin çarpılma riskinide getirir.
Zira şebekeden gelen faz ile nötr kazara yer değiştirse devrenin tamamı yüksek voltaja bağlanmış olur.

Mümkünse trafo kullan.
yada optik veya galvanik izolasyon kullan.
Yüksek empedans girişli (10-50 MOhm gibi) bir fark amplifikatörü ile bağlanmaya çalış.
Şurada paylaştığım devre sana fikir verebilir.
Benzer şeylerde paylaşmıştım forumda aramanı tavsiye ederim.
https://www.picproje.org/index.php/topic,78254.msg601150.html#msg601150

PICaso

Alıntı yapılan: Mehmet Salim GÜLLÜCE - 23 Kasım 2020, 18:58:18Kullandığın devrede sıkıntı war.
-Bir kere kapasitör kullanmazsan 0 +230 arası tüm değerleri görürsün
Kapasitör kullandığında da deşarj olabilmeli.
Kısacası kurgun yanlış.
-ikincisi kurduğun devre senin çarpılma riskinide getirir.
Zira şebekeden gelen faz ile nötr kazara yer değiştirse devrenin tamamı yüksek voltaja bağlanmış olur.

Mümkünse trafo kullan.
yada optik veya galvanik izolasyon kullan.
Yüksek empedans girişli (10-50 MOhm gibi) bir fark amplifikatörü ile bağlanmaya çalış.
Şurada paylaştığım devre sana fikir verebilir.
Benzer şeylerde paylaşmıştım forumda aramanı tavsiye ederim.
https://www.picproje.org/index.php/topic,78254.msg601150.html#msg601150

hocam trafo kullanmayı düşünmüyorum. proteusda program gayet güzel çalışıyor. Dediğiniz fişin takılma yönü önemli. AC

 nin 1 alternansını kullanarak, gerilim bölücüyle bu işi yapmak imkansız mıdır?

elektro77

bir multimetre de nasıl ölçülüyor ac voltaj? inceleyip uygulayabilirsiniz. Piyasa da endüstriyel bir sürü pano tipi ac ölçen cihazlar var çoğunda trafo kullanılmıyor. Onlara da bakabilirsiniz.

M.Salim GÜLLÜCE

23 Kasım 2020, 22:13:45 #5 Son düzenlenme: 23 Kasım 2020, 22:15:19 Mehmet Salim GÜLLÜCE
Alıntı yapılan: PICaso - 23 Kasım 2020, 19:53:10hocam trafo kullanmayı düşünmüyorum. proteusda program gayet güzel çalışıyor. Dediğiniz fişin takılma yönü önemli. AC

 nin 1 alternansını kullanarak, gerilim bölücüyle bu işi yapmak imkansız mıdır?
Verdiğim linkteki devre alternans falan dinlemez iki giriş ucu arasındaki gerilim farkına bakar.
Çıkışındaki Opamp İntegral şeklinde revize edilip RMS DC ye dönüştürüldüğünde istediğini elde etmiş olursun.
İstersen 2000 volt ölç (Giriş dirençleri o voltaja dayanıklı olması şartı ile) farketmez ondan sonra.

PICaso

Alıntı yapılan: Mehmet Salim GÜLLÜCE - 23 Kasım 2020, 22:13:45Verdiğim linkteki devre alternans falan dinlemez iki giriş ucu arasındaki gerilim farkına bakar.
Çıkışındaki Opamp İntegral şeklinde revize edilip RMS DC ye dönüştürüldüğünde istediğini elde etmiş olursun.
İstersen 2000 volt ölç (Giriş dirençleri o voltaja dayanıklı olması şartı ile) farketmez ondan sonra.

Hocam AC voltaj rms değeri azaldığı ya da arttığı durumlarda opamp çıkışı da lineer olarak değişir mi?

TS954 yerine kullanabileceğim muadil entegre neler olabilir?

Erol YILMAZ

24 Kasım 2020, 14:51:25 #7 Son düzenlenme: 24 Kasım 2020, 16:08:41 Erol YILMAZ
LM358 veya LM324 kullanabilirsin.
Differantial amplifier yapısı endüstriyel elektronikte sıklıkla kullanılır.

Gerilim kazancı = 3K / (2x220K) olarak hesaplanır.
Çıkışın Ofset gerilimi 2.5v'tur.

Whats-App-Image-2020-11-24-at-11-47-46" border="0

Opampın Çıkışında 2.5V ofset gerilimine bindirilmiş 3/440 oranında zayıflatılmış girişteki AC sinyali göreceksin.
Bunu da ADC yardımıyla True RMS olarak okuyabilirsin.

Proteus

Kolay gelsin,

https://tr.aliexpress.com/item/33004868114.html

Diğer opamplı devreler ile aynı , en büyük farkı trafo ile izolasyon olması,

Kolay gelsin

PICaso

Alıntı yapılan: Erol YILMAZ - 24 Kasım 2020, 14:51:25LM358 veya LM324 kullanabilirsin.
Differantial amplifier yapısı endüstriyel elektronikte sıklıkla kullanılır.

Gerilim kazancı = 3K / (2x220K) olarak hesaplanır.
Çıkışın Ofset gerilimi 2.5v'tur.

Whats-App-Image-2020-11-24-at-11-47-46" border="0

Opampın Çıkışında 2.5V ofset gerilimine bindirilmiş 3/440 oranında zayıflatılmış girişteki AC sinyali göreceksin.
Bunu da ADC yardımıyla True RMS olarak okuyabilirsin.

Hocam True RMS ile ilgili bir tecrübem olmadı. Pic 18f45k22 ile yapılabilir mi?

Erol YILMAZ

tabi ki çok basit...

mehmet

ZC dan sonraki 90° de adc okuma yapabilirsiniz.
Buna göre de istediğiniz işlem yapılabilir...

PICaso

Alıntı yapılan: mehmet - 24 Kasım 2020, 17:50:59ZC dan sonraki 90° de adc okuma yapabilirsiniz.
Buna göre de istediğiniz işlem yapılabilir...
True RMS konusu ile yapmaya çalışacağım. Dediğiniz gibi ZC yi algılayıp, 5ms timer başlatıp, timer sonunda ADC ile peak voltajı okumakta mantıklı.

ACM

24 Kasım 2020, 19:46:46 #13 Son düzenlenme: 24 Kasım 2020, 19:48:33 A.C.M
Alıntı yapılan: mehmet - 24 Kasım 2020, 17:50:59ZC dan sonraki 90° de adc okuma yapabilirsiniz.
Buna göre de istediğiniz işlem yapılabilir...

Erol hocamın devresi  sıfır geçişide yakalıyor yani ? Hemde direkt 220V girişle. Süüüüper , kopyala hemen.


Yasal Uyarı: Picproje.org sitemizde 5651 sayılı kanunun 8. maddesine ve T.C.Knın 125. maddesine göre tüm üyelerimiz yaptıkları paylaşımlardan kendileri sorumludur. Picproje.org hakkında yapılacak tüm hukuksal şikayetleri İletişim sayfamızdan bize bildirdikten en geç 3 (üç) iş günü içerisinde ilgili kanunlar ve yönetmelikler çerçevesinde tarafımızca incelenerek gereken işlemler yapılacak ve site yöneticilerimiz tarafından bilgi verilecektir.