ساخت یک یو پی اس خانگی 1 کاوا: راهنمای جامع عملی

kalaups
آخرین بروز رسانی: 11 دسامبر 2025
بدون دیدگاه
3 دقیقه زمان مطالعه

مقدمه

یو پی اس (منبع تغذیه بدون وقفه) وسیله‌ای ضروری برای محافظت از دستگاه‌های الکترونیکی در برابر نوسانات و قطعی برق است. در این مقاله، به طور کامل و عملی، روش ساخت یک یو پی اس خانگی با توان 1000 وات (1 کاوا) را آموزش می‌دهیم. این پروژه برای افراد با دانش متوسط الکترونیک مناسب است و تمام مراحل به طور دقیق شرح داده شده است.

نکات ایمنی قبل از شروع

  • این پروژه با ولتاژهای بالا (220 ولت AC و 48 ولت DC) کار می‌کند، خطر برق‌گرفتگی جدی است
  • از عینک محافظ و دستکش عایق استفاده کنید
  • در محیط خشک و به دور از رطوبت کار کنید
  • قبل از اتصال هر بخش، مدار را تست کنید
  • اگر تجربه کار با برق شهر را ندارید، از یک متخصص کمک بگیرید

بخش اول: اصول کار یو پی اس خانگی

یو پی اس ساخته شده در این پروژه از نوع آفلاین (Offline) است و دارای سه حالت کاری:

  1. حالت عادی: برق شهر به خروجی متصل است
  2. حالت باتری: هنگام قطع برق، اینورتر فعال شده و باتری‌ها برق را تأمین می‌کنند
  3. حالت شارژ: هنگام وصل برق شهر، باتری‌ها شارژ می‌شوند

بخش دوم: لیست قطعات و لوازم مورد نیاز

قطعات الکترونیکی اصلی:

ترانسفورماتور

  • 1 عدد ترانس 500 وات (220V به 24V-0-24V)
  • 1 عدد ترانس 300 وات (12V-0-12V به 220V)

باتری‌ها

  • 4 عدد باتری سیلد اسید 12V/18Ah

مدار کنترلر

  • برد Arduino Nano یا ATmega328
  • آی‌سی PWM SG3525 برای کنترل اینورتر
  • آی‌سی شارژر TL494 یا UC3843
  • ترانزیستورهای MOSFET IRFZ44N – 8 عدد
  • هیت‌سینک برای MOSFET‌ها

مدار قدرت

  • دیود پل 50A – 1 عدد
  • خازن الکترولیت 4700μF/63V – 2 عدد
  • خازن فیلم 0.1μF/400V – 4 عدد
  • رله 30A دو کنتاکته – 2 عدد

قطعات حفاظتی

  • فیوز 15A AC – 2 عدد
  • فیوز 30A DC – 1 عدد
  • وریستور 275V – 2 عدد
  • TVS دیود 48V

قطعات جانبی

  • مقاومت‌های مختلف (1K, 10K, 100Ω, 0.1Ω/5W)
  • خازن‌های سرامیکی (104, 103, 22pF)
  • دیود 1N4007 – 10 عدد
  • دیود شاتکی 40A – 2 عدد
  • LED نمایشگر
  • بیزر 12V
  • پتانسیومتر 10K

لوازم و ابزار مورد نیاز:

  • برد بورد یا PCB
  • سیم‌های مسی با قطر مناسب
  • ترمینال‌های اتصال
  • فن خنک‌کننده 12 سانتیمتری
  • جعبه فلزی یا پلاستیکی مقاوم
  • مولتی‌متر
  • هیتر هوای گرم برای لحیم کاری
  • سیم چین و سیم لخت کن

بخش سوم: نقشه مدار یو پی اس 1 کاوا

بلوک دیاگرام یو پی اس 1 کاوا

بخش چهارم: برنامه کامل C برای کنترل یو پی اس 1 کاوا با ATmega328

				
					/**
 * برنامه کامل کنترل یو پی اس 1 کاوا
 * میکروکنترلر: ATmega328P
 * کامپایلر: AVR-GCC
 * فرکانس: 16MHz
 */

#define F_CPU 16000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdlib.h>
#include <string.h>

// ==================== تعریف پین‌ها ====================
// پورت B
#define RELAY_CHARGE    PB0    // رله شارژر
#define RELAY_INVERTER  PB1    // رله اینورتر  
#define RELAY_MAIN      PB2    // رله اصلی
#define BUZZER          PB3    // بیزر
#define FAN_PWM         PB4    // فن خنک‌کننده (PWM)

// پورت C (ADC)
#define ADC_BATTERY     PC0    // سنسور ولتاژ باتری
#define ADC_GRID        PC1    // سنسور ولتاژ برق شهر
#define ADC_CURRENT     PC2    // سنسور جریان ACS712
#define ADC_TEMP        PC3    // سنسور دما LM35

// پورت D
#define LCD_RS          PD0
#define LCD_RW          PD1
#define LCD_EN          PD2
#define LCD_D4          PD4
#define LCD_D5          PD5
#define LCD_D6          PD6
#define LCD_D7          PD7

// ==================== تعریف ثابت‌ها ====================
#define BATTERY_FULL    54.6    // ولتاژ کامل باتری (48V)
#define BATTERY_LOW     42.0    // ولتاژ پایین باتری
#define BATTERY_CRITICAL 40.0   // ولتاژ بحرانی
#define GRID_MIN        180.0   // حداقل ولتاژ برق شهر
#define TRANSFER_DELAY  50      // تاخیر انتقال (میلی‌ثانیه)
#define PWM_FREQ        5000    // فرکانس PWM فن

// ==================== متغیرهای جهانی ====================
volatile uint16_t adc_values[4];
volatile uint8_t adc_index = 0;
volatile uint32_t system_tick = 0;
volatile uint8_t fault_flags = 0;

// وضعیت سیستم
enum SystemState {
    STATE_NORMAL,      // برق شهر وصل
    STATE_BATTERY,     // کار با باتری
    STATE_CHARGING,    // در حال شارژ
    STATE_FAULT        // خطا
} system_state;

// ساختار برای ذخیره اطلاعات
struct UPSData {
    float battery_voltage;
    float grid_voltage;
    float load_current;
    float temperature;
    uint32_t backup_time;
    uint8_t battery_percent;
    uint16_t frequency;
};

struct UPSData ups_data;

// ==================== توابع راه‌اندازی ====================

/**
 * راه‌اندازی تایمر 0 برای PWM فن
 */
void init_timer0_pwm(void) {
    // حالت Fast PWM
    TCCR0A = (1 << WGM00) | (1 << WGM01) | (1 << COM0B1);
    // تقسیم‌کننده 64
    TCCR0B = (1 << CS01) | (1 << CS00);
    OCR0B = 0; // شروع با سرعت صفر
}

/**
 * راه‌اندازی تایمر 1 برای ADC و کارهای زمان‌بندی
 */
void init_timer1(void) {
    // حالت CTC
    TCCR1B = (1 << WGM12) | (1 << CS12); // تقسیم‌کننده 256
    OCR1A = 625; // 10ms @ 16MHz/256
    TIMSK1 = (1 << OCIE1A); // فعال کردن وقفه
}

/**
 * راه‌اندازی ADC
 */
void init_adc(void) {
    // ولتاژ مرجع AVcc، تراز چپ
    ADMUX = (1 << REFS0) | (1 << ADLAR);
    // فعال کردن ADC، تقسیم‌کننده 128
    ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
    // فعال کردن وقفه ADC
    ADCSRA |= (1 << ADIE);
    // شروع تبدیل اول
    ADCSRA |= (1 << ADSC);
}

/**
 * راه‌اندازی پین‌های I/O
 */
void init_gpio(void) {
    // پورت B خروجی
    DDRB = (1 << RELAY_CHARGE) | (1 << RELAY_INVERTER) | 
           (1 << RELAY_MAIN) | (1 << BUZZER) | (1 << FAN_PWM);
    
    // پورت C ورودی برای ADC
    DDRC = 0x00;
    
    // پورت D خروجی برای LCD
    DDRD = 0xFF;
    
    // خاموش کردن همه رله‌ها در ابتدا
    PORTB &= ~((1 << RELAY_CHARGE) | (1 << RELAY_INVERTER) | (1 << RELAY_MAIN));
}

// ==================== توابع LCD ====================
#ifdef USE_LCD
void lcd_command(uint8_t cmd) {
    PORTD = (PORTD & 0x0F) | (cmd & 0xF0);
    PORTD &= ~(1 << LCD_RS);
    PORTD &= ~(1 << LCD_RW);
    PORTD |= (1 << LCD_EN);
    _delay_us(1);
    PORTD &= ~(1 << LCD_EN);
    _delay_us(100);
    
    PORTD = (PORTD & 0x0F) | (cmd << 4);
    PORTD |= (1 << LCD_EN);
    _delay_us(1);
    PORTD &= ~(1 << LCD_EN);
    _delay_us(100);
}

void lcd_data(uint8_t data) {
    PORTD = (PORTD & 0x0F) | (data & 0xF0);
    PORTD |= (1 << LCD_RS);
    PORTD &= ~(1 << LCD_RW);
    PORTD |= (1 << LCD_EN);
    _delay_us(1);
    PORTD &= ~(1 << LCD_EN);
    _delay_us(100);
    
    PORTD = (PORTD & 0x0F) | (data << 4);
    PORTD |= (1 << LCD_EN);
    _delay_us(1);
    PORTD &= ~(1 << LCD_EN);
    _delay_us(100);
}

void lcd_init(void) {
    _delay_ms(50);
    lcd_command(0x33);
    lcd_command(0x32);
    lcd_command(0x28); // 4-bit, 2-line, 5x8
    lcd_command(0x0C); // Display on, cursor off
    lcd_command(0x06); // Entry mode
    lcd_command(0x01); // Clear
    _delay_ms(2);
}

void lcd_string(const char *str) {
    while(*str) {
        lcd_data(*str++);
    }
}

void lcd_update_display(void) {
    char buffer[16];
    
    // خط اول
    lcd_command(0x80);
    if(system_state == STATE_NORMAL) {
        lcd_string("GRID: ");
    } else {
        lcd_string("BATT: ");
    }
    
    dtostrf(ups_data.battery_voltage, 5, 1, buffer);
    lcd_string(buffer);
    lcd_string("V ");
    
    // درصد باتری
    itoa(ups_data.battery_percent, buffer, 10);
    lcd_string(buffer);
    lcd_string("%");
    
    // خط دوم
    lcd_command(0xC0);
    if(system_state == STATE_BATTERY) {
        lcd_string("Backup: ");
        uint32_t minutes = ups_data.backup_time / 60;
        uint32_t seconds = ups_data.backup_time % 60;
        itoa(minutes, buffer, 10);
        lcd_string(buffer);
        lcd_string(":");
        if(seconds < 10) lcd_string("0");
        itoa(seconds, buffer, 10);
        lcd_string(buffer);
    } else {
        lcd_string("Load: ");
        dtostrf(ups_data.load_current, 4, 1, buffer);
        lcd_string(buffer);
        lcd_string("A");
    }
}
#endif

// ==================== توابع محاسباتی ====================

/**
 * محاسبه ولتاژ باتری
 */
float calculate_battery_voltage(uint16_t adc_value) {
    // تقسیم‌کننده ولتاژ: 48V -> 5V -> ADC
    // نسبت تقسیم: (R1=10K, R2=2.2K) = 5.545
    float voltage = (adc_value * 5.0 / 256.0) * 5.545;
    return voltage;
}

/**
 * محاسبه ولتاژ برق شهر
 */
float calculate_grid_voltage(uint16_t adc_value) {
    // ترانس 220V به 12V + تقسیم‌کننده
    // نسبت کلی: 220V -> 2.5V -> ADC
    float voltage = (adc_value * 5.0 / 256.0) * 88.0;
    return voltage;
}

/**
 * محاسبه جریان مصرفی
 */
float calculate_load_current(uint16_t adc_value) {
    // ACS712 30A: 66mV/A
    // ولتاژ خروجی: 2.5V @ 0A
    float voltage = (adc_value * 5.0 / 256.0) - 2.5;
    float current = voltage / 0.066; // 66mV/A
    return (current > 0) ? current : 0;
}

/**
 * محاسبه دمای MOSFET‌ها
 */
float calculate_temperature(uint16_t adc_value) {
    // LM35: 10mV/°C
    float voltage = (adc_value * 5.0 / 256.0);
    float temperature = voltage * 100.0; // 10mV/°C
    return temperature;
}

/**
 * محاسبه درصد شارژ باتری
 */
uint8_t calculate_battery_percent(float voltage) {
    if(voltage >= 54.6) return 100;
    if(voltage <= 40.0) return 0;
    
    // منحنی شارژ باتری سربی-اسیدی
    float percent = ((voltage - 40.0) / (54.6 - 40.0)) * 100.0;
    return (uint8_t)percent;
}

/**
 * محاسبه زمان پشتیبانی باقی‌مانده
 */
uint32_t calculate_backup_time(float voltage, float current) {
    if(current < 0.1) return 9999; // بدون بار
    
    // ظرفیت باتری: 4×18Ah = 72Ah @ 48V
    float capacity_wh = 72.0 * 48.0; // 3456Wh
    float usable_energy = capacity_wh * 0.8; // 80% راندمان
    float load_power = current * 220.0; // فرض 220V
    
    if(load_power < 10) return 9999;
    
    float hours = usable_energy / load_power;
    uint32_t seconds = (uint32_t)(hours * 3600);
    
    return seconds;
}

// ==================== توابع کنترل ====================

/**
 * کنترل رله‌ها در حالت نرمال
 */
void control_normal_mode(void) {
    // برق شهر به خروجی
    PORTB |= (1 << RELAY_MAIN);
    _delay_ms(TRANSFER_DELAY);
    
    // اینورتر خاموش
    PORTB &= ~(1 << RELAY_INVERTER);
    
    // اگر باتری نیاز به شارژ داشت
    if(ups_data.battery_voltage < BATTERY_FULL - 0.5) {
        PORTB |= (1 << RELAY_CHARGE);
        system_state = STATE_CHARGING;
    } else {
        PORTB &= ~(1 << RELAY_CHARGE);
    }
}

/**
 * کنترل رله‌ها در حالت باتری
 */
void control_battery_mode(void) {
    // برق شهر قطع است
    PORTB &= ~(1 << RELAY_MAIN);
    _delay_ms(TRANSFER_DELAY);
    
    // اینورتر روشن
    PORTB |= (1 << RELAY_INVERTER);
    
    // شارژر خاموش
    PORTB &= ~(1 << RELAY_CHARGE);
    
    // هشدار باتری ضعیف
    if(ups_data.battery_voltage < BATTERY_LOW) {
        PORTB |= (1 << BUZZER);
        _delay_ms(500);
        PORTB &= ~(1 << BUZZER);
    }
}

/**
 * کنترل فن خنک‌کننده
 */
void control_fan_speed(void) {
    uint8_t speed = 0;
    
    // کنترل بر اساس دما
    if(ups_data.temperature > 60) {
        speed = 255; // حداکثر سرعت
    } else if(ups_data.temperature > 50) {
        speed = 200;
    } else if(ups_data.temperature > 40) {
        speed = 150;
    } else if(ups_data.load_current > 5) {
        speed = 100;
    } else {
        speed = 50; // حداقل سرعت
    }
    
    OCR0B = speed;
}

/**
 * بررسی خطاها
 */
void check_faults(void) {
    fault_flags = 0;
    
    // خطا دمای بالا
    if(ups_data.temperature > 80) {
        fault_flags |= (1 << 0);
    }
    
    // خطا جریان زیاد
    if(ups_data.load_current > 25) {
        fault_flags |= (1 << 1);
    }
    
    // خطا ولتاژ پایین باتری
    if(ups_data.battery_voltage < BATTERY_CRITICAL) {
        fault_flags |= (1 << 2);
    }
    
    // خطا ولتاژ بالای برق شهر
    if(ups_data.grid_voltage > 260 && system_state == STATE_NORMAL) {
        fault_flags |= (1 << 3);
    }
    
    // اگر خطا وجود داشت
    if(fault_flags) {
        system_state = STATE_FAULT;
        // خاموش کردن همه رله‌ها
        PORTB &= ~((1 << RELAY_CHARGE) | (1 << RELAY_INVERTER) | (1 << RELAY_MAIN));
        // فعال کردن بیزر
        PORTB |= (1 << BUZZER);
    }
}

// ==================== وقفه‌ها ====================

/**
 * وقفه تایمر 1 (هر 10ms)
 */
ISR(TIMER1_COMPA_vect) {
    system_tick++;
    
    // هر 100ms (10 بار)
    if(system_tick % 10 == 0) {
        // شروع تبدیل ADC جدید
        adc_index = (adc_index + 1) % 4;
        ADMUX = (ADMUX & 0xF8) | (adc_index & 0x07);
        ADCSRA |= (1 << ADSC);
    }
    
    // آپدیت زمان پشتیبانی
    if(system_state == STATE_BATTERY && ups_data.backup_time > 0) {
        ups_data.backup_time--;
    }
}

/**
 * وقفه ADC
 */
ISR(ADC_vect) {
    uint8_t low = ADCL;
    uint8_t high = ADCH;
    uint16_t value = (high << 8) | low;
    
    adc_values[adc_index] = value;
}

// ==================== تابع اصلی ====================

int main(void) {
    // راه‌اندازی سخت‌افزار
    init_gpio();
    init_timer0_pwm();
    init_timer1();
    init_adc();
    
    #ifdef USE_LCD
    lcd_init();
    #endif
    
    // فعال کردن وقفه‌های جهانی
    sei();
    
    // حالت اولیه
    system_state = STATE_NORMAL;
    ups_data.backup_time = 0;
    
    // حلقه اصلی
    while(1) {
        // خواندن و محاسبه مقادیر ADC
        ups_data.battery_voltage = calculate_battery_voltage(adc_values[0]);
        ups_data.grid_voltage = calculate_grid_voltage(adc_values[1]);
        ups_data.load_current = calculate_load_current(adc_values[2]);
        ups_data.temperature = calculate_temperature(adc_values[3]);
        
        // محاسبات دیگر
        ups_data.battery_percent = calculate_battery_percent(ups_data.battery_voltage);
        
        // بررسی خطاها
        check_faults();
        
        // کنترل حالت
        if(system_state != STATE_FAULT) {
            if(ups_data.grid_voltage >= GRID_MIN) {
                // برق شهر وصل است
                system_state = STATE_NORMAL;
                control_normal_mode();
            } else {
                // برق شهر قطع است
                system_state = STATE_BATTERY;
                if(ups_data.backup_time == 0) {
                    // محاسبه زمان پشتیبانی
                    ups_data.backup_time = calculate_backup_time(
                        ups_data.battery_voltage, 
                        ups_data.load_current
                    );
                }
                control_battery_mode();
            }
        }
        
        // کنترل فن
        control_fan_speed();
        
        // آپدیت نمایشگر
        #ifdef USE_LCD
        lcd_update_display();
        #endif
        
        // تاخیر
        _delay_ms(100);
    }
    
    return 0;
}

// ==================== Makefile ====================
/*
# Makefile برای کامپایل برنامه

MCU = atmega328p
F_CPU = 16000000UL
CC = avr-gcc
OBJCOPY = avr-objcopy
CFLAGS = -mmcu=$(MCU) -DF_CPU=$(F_CPU) -Os -Wall

TARGET = ups_controller
SRC = main.c

all:
	$(CC) $(CFLAGS) -o $(TARGET).elf $(SRC)
	$(OBJCOPY) -O ihex -R .eeprom $(TARGET).elf $(TARGET).hex

flash:
	avrdude -c arduino -p $(MCU) -P /dev/ttyUSB0 -b 57600 -U flash:w:$(TARGET).hex

clean:
	rm -f *.elf *.hex
*/
				
			

بخش پنجم : مراحل ساخت

مرحله 1: ساخت شارژر باتری

ترانسفورماتور 500 وات را به دیود پل 50A متصل کنید

خازن‌های 4700μF را به خروجی دیود پل اضافه کنید

مدار کنترل شارژ بر پایه TL494 را بسازید:

  • پایه‌های 1 و 2 برای فیدبک ولتاژ
  • پایه 3 برای جبران‌ساز
  • پایه‌های 4 و 5 و 6 برای نوسان‌ساز
  • پایه‌های 9 و 10 برای خروجی PWM

خروجی PWM را به دو MOSFET متصل کنید

ترانسفورماتور فلای‌بک برای ایزوله کردن خروجی

مرحله 2: ساخت اینورتر

  1. آی‌سی SG3525 را روی برد نصب کنید
  2. نوسان‌ساز را روی فرکانس 50Hz تنظیم کنید:
  • مقاومت RT = 10KΩ
  • خازن CT = 0.1μF
  1. خروجی‌ها (پایه‌های 11 و 14) را به درایور MOSFET متصل کنید
  2. از ترانزیستورهای BD139/BD140 برای درایو استفاده کنید
  3. 4 عدد MOSFET را به صورت پوش-پول به هر فاز متصل کنید
  4. ترانسفورماتور 300 وات را به خروجی MOSFET‌ها وصل کنید

مرحله 3: مدار سوئیچینگ

  1. از دو رله 30A استفاده کنید:
  • رله اول: انتخاب بین برق شهر و اینورتر
  • رله دوم: قطع و وصل بار

2. سنسور ولتاژ برق شهر با استفاده از ترانس کاهنده کوچک

3. مدار تشخیص قطع برق با آی‌سی مقایسه‌گر LM393

4. تأخیر زمانی 5 ثانیه‌ای برای جلوگیری از سوئیچینگ مکرر

مرحله 4: سیستم کنترل

  1. برد Arduino را برنامه‌ریزی کنید:
  • مانیتورینگ ولتاژ باتری
  • کنترل شارژ
  • مدیریت تغییر حالت
  • نمایش اطلاعات روی LCD

2. سنسور جریان ACS712 برای محاسبه توان مصرفی

3. سنسور دمای LM35 برای نظارت بر حرارت

مرحله 5: مونتاژ نهایی

  1. تمام بخش‌ها را در جعبه مناسب قرار دهید
  2. باتری‌ها را به صورت سری متصل کنید (48V)
  3. فن خنک‌کننده را در محل مناسب نصب کنید
  4. ترمینال‌های ورودی و خروجی را تعبیه کنید
  5. مدارها را با فاصله مناسب از هم قرار دهید

بخش ششم : تست و راه‌اندازی

  1. تست اولیه بدون باتری:
  • ولتاژ خروجی شارژر را تست کنید (54.6V برای 48V باتری)
  • فرکانس خروجی اینورتر را بررسی کنید (50Hz ± 0.5)

2. تست با باتری:

  • باتری‌ها را متصل کنید
  • زمان انتقال را اندازه‌گیری کنید (کمتر از 10ms)
  • شکل موج خروجی را بررسی کنید

3. تست بار:

  • با بارهای مختلف تست کنید (لامپ، فن، کامپیوتر)
  • راندمان را محاسبه کنید
  • زمان پشتیبانی را اندازه‌گیری کنید
  • ولتاژ خروجی شارژر را تست کنید (54.6V برای 48V باتری)
  • فرکانس خروجی اینورتر را بررسی کنید (50Hz ± 0.5)

بخش هفتم : عیب‌یابی و نگهداری

مشکلات رایج:

  1. اینورتر کار نمی‌کند:
  • فیوزها را بررسی کنید
  • ولتاژ باتری را چک کنید
  • MOSFET‌ها را تست کنید

2. شارژر باتری را شارژ نمی‌کند:

  • دیودهای خروجی را بررسی کنید
  • ولتاژ خروجی TL494 را تست کنید

3. زمان انتقال طولانی:

  • رله‌ها را بررسی کنید
  • مدار تشخیص قطع برق را تست کنید

نکات نگهداری:

  • هر ماه ولتاژ باتری‌ها را بررسی کنید
  • هر 6 ماه اتصالات را سفت کنید
  • سالی یک‌بار خازن‌ها را بررسی کنید
  • فن‌ها را از گرد و غبار پاک کنید

بخش هشتم : بهبود و توسعه

  1. اضافه کردن اتصال به موبایل از طریق بلوتوث
  2. اضافه کردن پنل خورشیدی برای شارژ
  3. طراحی PCB حرفه‌ای
  4. اضافه کردن آلارم هشدار

جزئیات هر بخش مدار:

1. مدار شارژر باتری (مبتنی بر TL494):

ورودی 220VAC → ترانس 500W (220V به 24V-0-24V) → پل دیود 50A →
خازن‌های 4700μF/63V (دو عدد موازی) →

پایه 12 TL494 (VCC) ← منبع تغذیه 12V کمکی
پایه 7 TL494 (GND)
پایه 5: خازن 0.01μF به زمین
پایه 6: مقاومت 10K به زمین
پایه 4: مقاومت 4.7K برای dead-time
پایه 1: از دیوایدر ولتاژ خروجی (مقاومت‌های 10K و 2.2K)
پایه 2: ولتاژ مرجع 2.5V (از پایه 14 TL494)
پایه 3: خازن 100nF و مقاومت 1K برای جبران
پایه 8 و 11: کلکتور ترانزیستورها به VCC
پایه 9 و 10: امیتر ترانزیستورها به زمین
خروجی‌های 9 و 10 → مقاومت 100Ω → بیس ترانزیستورهای درایور BD139/BD140 →
ترانس فلای‌بک → پل دیود شاتکی 40A → خازن 1000μF/100V → خروجی 54.6V به باتری

2. مدار اینورتر (مبتنی بر SG3525):

ورودی 48VDC از باتری → فیوز 30A →
خازن‌های 2200μF/100V (4 عدد موازی) →
پایه 15 SG3525 (VCC) از طریق رگولاتور 7812
پایه 8 (Soft-Start): خازن 1μF
پایه 5: خازن 0.1μF به زمین
پایه 6: مقاومت 10K به زمین (فرکانس ≈ 50Hz)
پایه 1: مقاومت 10K برای محدود کردن جریان
پایه 2: ولتاژ مرجع 5V (از پایه 16)
پایه 9: جبران با خازن 100nF
پایه 11 و 14 (خروجی) → مقاومت 22Ω →
بیس ترانزیستورهای درایور (2N2222 × 4) →
کلکتور درایورها به گیت MOSFET‌ها →
4 جفت MOSFET IRFZ44N به صورت پوش-پول →
ترانس 300W (12V-0-12V به 220V) →
خروجی سینوسی 220V/50Hz

3. مدار سوئیچینگ و کنترل:

برد آردوینو نانو:
پین A0: سنسور ولتاژ باتری (مقاومت دیوایدر 10K:2.2K)
پین A1: سنسور ولتاژ برق شهر (از ترانس کوچک 220V به 12V)
پین A2: سنسور جریان ACS712
پین D2: ورودی تشخیص قطع برق (از LM393)
پین D3: خروجی کنترل رله شارژر
پین D4: خروجی کنترل رله اینورتر
پین D5: خروجی کنترل رله اصلی
پین D6: PWM برای فن خنک‌کننده
پین D7: بیزر هشدار

مدار تشخیص قطع برق:
LM393:
پین 3: ولتاژ مرجع 2.5V
پین 2: ولتاژ نمونه‌گیری شده از برق شهر
پین 1: خروجی به آردوینو

4. مدار رله‌ها:

رله 1 (30A دو کنتاکت):
کنتاکت COM: ورودی برق شهر
کنتاکت NO: به رله 2
کنتاکت NC: به شارژر
کویل: از طریق ترانزیستور BD137 به آردوینو

رله 2 (30A دو کنتاکت):
کنتاکت COM: از رله 1
کنتاکت NO: از اینورتر
کنتاکت NC: خروجی نهایی
کویل: کنترل مشابه رله 1

نتیجه‌گیری

ساخت یو پی اس خانگی 1 کاوا پروژه‌ای چالش‌برانگیز اما امکان‌پذیر است. با رعایت نکات ایمنی و دنبال کردن دقیق مراحل، می‌توانید یک منبع برق بدون وقفه قابل اعتماد داشته باشید. این پروژه نه تنها در هزینه‌ها صرفه‌جویی می‌کند، بلکه دانش فنی شما را نیز افزایش می‌دهد.

هشدار

 این مقاله صرفاً برای اهداف آموزشی ارائه شده است. مسئولیت هرگونه آسیب یا خسارت ناشی از ساخت یا استفاده از این دستگاه به عهده سازنده می‌باشد. در صورت عدم اطمینان، از دستگاه‌های استاندارد بازار استفاده کنید.