3 Faz jenaratör voltmetre

Başlatan arci03, 07 Eylül 2024, 15:31:44

arci03

Merhaba 3 fazlı jenaratörün voltajlarını ve frekansını ölçmem gerekiyor. altaki devre ile tek fazın frekansını ve gerilimini ölçtüm ama bunu 3 faza uyarlayamadım. jenaratörden sadece 3 faz cıkıyor nötr hattı yok denildi. su pompasını çalıştırıyormuş.

3 faz için 3 ayrı trafo bunların giriş kısmını üçgen çıkışlarını ise yıldız bağlantı yaparak 2. resimdeki şekilde 12v üzerinden hem devreyi besleyip hemde ac voltajların ölçümünü yapabilir miyim.

Eğer bu çizim doğru ise trafo tavsiyesi verebilir misiniz küçük boyutlu olmasını tercihimdir.

eğer çizim yanlış yada mantık hatalı ise konu hakkında tavsiyelerinizi dilerim.

Tek Faz
Not: devreyi pic16f1827 ile yaptım




3Faz için tasarım



ibrahim96

Benim tavsiyem enerjiyi tam izole bir yöntem ile ölçüm yapılması daha saglıklı olur parazit ve yüksek gerilim işlemciye ulaşmamalı

Okan AKÇA

True rms ölçüm konusunda araştırma yapınız.

kimlenbu

Öncelikle izolasyonsuz mevcut devrenizin endüstriyel şartlarda hiç şansı yok, mevcut durumda sıfır koruma olduğu için çok uzun ömürlü olacağını zannetmiyorum.

Ben olsam araya AMC3330 gibi bir izole amplifier koyarım, en azından işlemci tarafı güvende olur. 10kv'a kadar dalgalanma koruması var. Bu girişi aynı zamanda gerilim bölücüden sonra zenerle korurdum.


necati

#4
#include <18f252.H>//18 1 2012
#device adc=10    //voltaj dan frekans olcme
#use    delay(clock=20000000)
#fuses  noPROTECT,noWDT,PUT,BROWNOUT,HS
/***entegreterbiyecisi@yahoo.com***/

#use    fast_io    (a)
#use    fast_io    (b)
#use    fast_io    (c)
int16 val,adc_val=0,adc_sample=0,freq=0,fr=0,vg=0,vb=0;

float volt_add;

unsigned  ms=1;

signed int vfm();
/***entegreterbiyecisi@yahoo.com***/ 
///////////////////4094lcd
#define  Strobe PIN_b1
#define  data  PIN_b2
#define  clock  PIN_b3
#include "lcd4094.c"
/***entegreterbiyecisi@yahoo.com***/
int16 t1_val;

#int_timer1
void mas(){
t1_val ++; 
}
///////////////////////////////////////////////
void main(){

setup_adc_ports (ALL_ANALOG);
setup_adc(ADC_CLOCK_DIV_32);
SET_TRIS_B  (0b10000001);
//setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
//set_timer1(5500);
lcd_init();
/***entegreterbiyecisi@yahoo.com***/
delay_ms (100);
lcd_gotoxy(1,1);
printf (LCD_PutC, "GEN    ");
delay_ms(500);  
lcd_gotoxy(1,1);
printf (LCD_PutC, " FRQ  VOLT    " );
delay_ms (500);
////////////////////////////////////////////////////////////////////////////////            
while(true){
///////////////////////////////////////V F mess
if(ms== 1){
vfm();
lcd_gotoxy(1,2);
printf(lcd_putc,"\%3ldHz %3ldV ",fr,vg);

if(vg<120){
lcd_gotoxy(1,2);
printf(lcd_putc,"ERR  ");
}
ms=0;
}
/*delay_ms(50);
set_adc_channel(1);
delay_us(10);
vb=read_adc();
lcd_gotoxy(13,1);
printf(lcd_putc,"\%3ldV ",vb);
*/
if(!input(pin_b7)){ms=1;while(!input(pin_b7)){;}}
}
}
////////////////////////////////////////////////////////////////////////////////
signed int vfm(){

int32  time_out = 0;

set_adc_channel(0);
delay_us(10);
time_out = 0;

while(read_adc()>512 && ++time_out <5000 );
if(time_out >= 5000 ) return(-1);
time_out=0;
while(read_adc()<512 && ++time_out <5000 );
if(time_out >=5000) return(-1);
time_out=0;
              
volt_add  =0;
adc_sample =0;
t1_val    =0;
freq      =0;
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
set_timer1(5500);
/////////////////////////////////////////////
while(true){
adc_val = read_adc();
volt_add = volt_add +adc_val;
adc_sample++;
if(adc_val<513) break;
}
/////////////////////////////////////////////
freq=(t1_val*60000)+(get_timer1()-5500);
fr = 320000/freq; //4*8*10000us  (1/2 cycle 50hz 10 ms)
  
val = volt_add / adc_sample;
vg  = (val-511) * 1.13;
return(0);
}

//#include "lcd4094.c"
///////////////////////////////////4094(Shift Register) 3wire Serial To Parallel
byte d0,d1,d2,d3,d4,d5,d6,d7;
/*
#IFNDEF data
#define data      PIN_A0
#define clock    PIN_A1
#define strobe    PIN_A2
#ENDIF
*/
//4094  Shift Register
void set_shift(int8 value)
{
int8 location=0,n=0;
location=128;
for(n=1;n<=8;n++){
    if ((value & location)>0) output_bit(data,1); else output_bit(data, 0);
      output_bit(clock,1);
      location=location / 2;
      output_bit(clock,0);
}
output_bit(strobe,1);
output_bit(strobe,0);
}
//////////////////////////
void f_output(byte value){
  set_shift(value);
}
//////////////////////////
void fatport(){
int value;
value=0;
if (d0==1) value=value+1;
if (d1==1) value=value+2;
if (d2==1) value=value+4;
if (d3==1) value=value+8;
if (d4==1) value=value+16;
if (d5==1) value=value+32;
if (d6==1) value=value+64;
if (d7==1) value=value+128;
f_output(value);
}
//////////////////////////
void dg0(int value){
d0=value;
fatport();
}
//////////////////////////
void dg1(int value){
d1=value;
fatport();
}
//////////////////////////
void dg2(int value){
d2=value;
fatport();
}
//////////////////////////
void dg3(int value){
d3=value;
fatport();
}
//////////////////////////
void dg4(int value){
d4=value;
fatport();
}
//////////////////////////
void dg5(int value){
d5=value;
fatport();
}
//////////////////////////
void dg6(int value){
d6=value;
fatport();
}
//////////////////////////
void dg7(int value){
d7=value;
fatport();
}
//////////////////////////
void f_output_bit(byte pin,value)
{
  switch(pin)
  {
      case 1:dg0(value);
            break;
      case 2:dg1(value);
            break;
      case 3:dg2(value);
            break;
      case 4:dg3(value);
            break;
      case 5:dg4(value);
            break;
      case 6:dg5(value);
            break;
      case 7:dg6(value);
            break;
      case 8:dg7(value);
            break;            
  }
}
//////////////////////////
void f_output_high(byte pin){
  switch(pin){
      case 1:dg0(1);
            break;
      case 2:dg1(1);
            break;
      case 3:dg2(1);
            break;
      case 4:dg3(1);
            break;
      case 5:dg4(1);
            break;
      case 6:dg5(1);
            break;
      case 7:dg6(1);
            break;
      case 8:dg7(1);
            break;            
  }
}
//////////////////////////
void f_output_low(byte pin){
  switch(pin){
      case 1:dg0(0);
            break;
      case 2:dg1(0);
            break;
      case 3:dg2(0);
            break;
      case 4:dg3(0);
            break;
      case 5:dg4(0);
            break;
      case 6:dg5(0);
            break;
      case 7:dg6(0);
            break;
      case 8:dg7(0);
            break;            
  }
}
//////////////////////////////////////////////////////////////////////flex_lcd.c
#define LCD_RS    3 //Q2
//#define LCD_RW -->>GND 
#define LCD_E    4 //Q3

#define LCD_DB4  5 //Q4 
#define LCD_DB5  6 //Q5 
#define LCD_DB6  7 //Q6
#define LCD_DB7  8 //Q7
//======================================== 
#define lcd_type 2        // 0=5x7, 1=5x10, 2=2 lines 
#define lcd_line_two 0x40 // LCD RAM address for the 2nd line 

int8 const LCD_INIT_STRING[4] = 
{ 
0x20 | (lcd_type << 2), // Func set: 4-bit, 2 lines, 5x8 dots 
0xc,                    // Display on 
1,                      // Clear display 
6                      // Increment cursor 
};                              
//------------------------------------- 
void lcd_send_nibble(int8 nibble){ 
// Note:  !! converts an integer expression 
// to a boolean (1 or 0). 
  f_output_bit(LCD_DB4, !!(nibble & 1)); 
  f_output_bit(LCD_DB5, !!(nibble & 2));  
  f_output_bit(LCD_DB6, !!(nibble & 4));    
  f_output_bit(LCD_DB7, !!(nibble & 8));    

  delay_cycles(1); 
  f_output_high(LCD_E); 
  delay_us(2); 
  f_output_low(LCD_E); 
  } 
//---------------------------------------- 
// Send a byte to the LCD. 
void lcd_send_byte(int8 address,int8 n){ 
  f_output_low(LCD_RS); 
  delay_us(60);  

  if(address) 
  f_output_high(LCD_RS); 
  else 
  f_output_low(LCD_RS);      
  delay_cycles(1); 
  f_output_low(LCD_E); 
  lcd_send_nibble(n >> 4);
  lcd_send_nibble(n & 0xf); 
  } 

//---------------------------- 
void lcd_init(void){ 
  int8 i; 
  f_output_low(LCD_RS); 
  f_output_low(LCD_E); 
  delay_ms(15); 
  for(i=0 ;i < 3; i++){ 
  lcd_send_nibble(0x03); 
  delay_ms(5); 
  } 
  lcd_send_nibble(0x02); 
  for(i=0;i<sizeof(LCD_INIT_STRING);i++){ 
  lcd_send_byte(0, LCD_INIT_STRING[i]); 
  } 
  }
//---------------------------- 

void lcd_gotoxy(int8 x,int8 y){ 
  int8 address; 
  if(y != 1) 
  address = lcd_line_two; 
  else 
  address=0; 
  address += x-1; 
  lcd_send_byte(0, 0x80 | address); 
  } 
//----------------------------- 
void lcd_putc(char c){ 
switch(c){ 
    case '\f': 
      lcd_send_byte(0,1); 
      delay_ms(2); 
      break; 
    
    case '\n': 
      lcd_gotoxy(1,2); 
      break; 
    
    case '\b': 
      lcd_send_byte(0,0x10); 
      break; 
    
    default: 
      lcd_send_byte(1,c); 
      break; 
  } 
} 
/////////////////////////////////////////////////////////////////////////lCD SON

[email]entegreterbiyecisi@yahoo.com[/email]

necati

[email]entegreterbiyecisi@yahoo.com[/email]