SPWM چیست؟ ساخت اینورتر موج سینوسی خالص با آردوینو

محتویات
مدارهای اینورتر غالباً در مواردی که امکان تأمین برق AC از شبکه وجود ندارد ، مورد نیاز هستند. از مدار اینورتر برای تبدیل برق DC به برق AC استفاده می شود و می توان آن را به دو نوع Pure Sine Wave Inverters یا Modified Square Wave Inverters تقسیم کرد. اینورتر های موج سینوسی خالص بسیار گران هستند. در این آموزش آردوینو، ما یک مبدل ساده سینوسی خالص با استفاده از Arduino می سازیم و اصل کار مدار را توضیح می دهیم.
اگر این مدار را می سازید ، توجه داشته باشید که این مدار فیدبک ، محافظت از جریان اضافی ، محافظت در برابر اتصال کوتاه و محافظت در برابر دما ندارد. از این رو این مدار فقط برای اهداف آموزشی ساخته و نشان داده شده است ، و ساخت و استفاده از این نوع مدار برای وسایل تجاری توصیه نمی شود. اما در صورت لزوم می توانید آنها را به مدارهای خود اضافه کنید.
توجه : اگر این نوع مدارها را می سازید ، لطفاً در مورد افزایش ولتاژ و ولتاژ بالا که توسط سیگنال سوئیچینگ به ورودی ایجاد می شود ، بیشتر احتیاط کنید.
فیلم زیر نحوه عملکرد این پروژه را نشان میدهد.
SPWM (مدولاسیون پالس سینوسی) چیست ؟
همانطور که از نامش پیداست ، SPWM مخفف Sinusoidal Pulse Width Modulation است. همانطور که قبلاً می دانید ، یک سیگنال PWM سیگنالی است که در آن می توانیم فرکانس پالس و همچنین زمان روشن و خاموش را تغییر دهیم ، که به عنوان چرخه وظیفه نیز شناخته می شود. اگر می خواهید در مورد PWM بیشتر بدانید ، می توانید مقاله PWM چیست ؟ را بخوانید. بنابراین ، با تغییر چرخه وظیفه ، ولتاژ متوسط پالس را تغییر می دهیم. تصویر زیر نشان می دهد که
اگر ما یک سیگنال PWM را در نظر بگیریم که بین 0 تا 5 ولت تغییر می کند که دارای چرخه وظیفه 100٪ است ، یک ولتاژ خروجی متوسط 5 ولت خواهیم داشت ، اگر همین سیگنال را با یک چرخه کار 50٪ در نظر بگیریم ، ولتاژ خروجی 2.5 ولت را بدست می آوریم و برای چرخه کار 25٪ ، 1.25 ولت است. این خلاصه اصل اساسی سیگنال PWM است و ما می توانیم به سمت درک اصل اساسی سیگنال SPWM برویم.
ولتاژ سینوسی در درجه اول یک ولتاژ قیاسی است که گذشت زمان مقدار آن را تغییر می دهد و ما می توانیم با تغییر مداوم چرخه وظیفه موج PWM ، این رفتار موج سینوسی را تولید کنیم ، تصویر زیر نشان می دهد که
اگر به شماتیک زیر نگاه کنید ، می بینید که در خروجی ترانسفورماتور یک خازن متصل شده است. این خازن وظیفه هموار سازی سیگنال AC از فرکانس حامل را دارد.
سیگنال ورودی استفاده شده با توجه به سیگنال ورودی و بار ، خازن را شارژ و تخلیه می کند. همانطور که ما از یک سیگنال SPWM با فرکانس بسیار بالا استفاده کرده ایم ، این یک چرخه وظیفه بسیار کوچک خواهد داشت که مانند 1٪ است ، این چرخه وظیفه 1٪ کمی خازن را شارژ می کند ، چرخه وظیفه بعدی 5٪ است ، این خازن کمی بیشتر شارژ می شود، پالس زیر یک چرخه وظیفه 10٪ دارد و خازن کمی بیشتر شارژ می شود ، ما سیگنال را اعمال می کنیم تا زمانی که به یک چرخه وظیفه 100٪ برسیم و از آنجا ، دوباره پایین خواهیم رفت به 1٪ این یک منحنی بسیار صاف مانند موج سینوسی در خروجی ایجاد می کند. بنابراین ، با ارائه مقادیر مناسب چرخه کار در ورودی ، یک موج سینوسی در خروجی خواهیم داشت.
نحوه کار اینورتر SPWM
تصویر بالا بخش اصلی درایو اینورتر SPWM را نشان می دهد ، و همانطور که مشاهده می کنید ، ما برای استفاده از ترانسفورماتور این مدار ، کاهش صدای سوئیچینگ ناخواسته و محافظت از MOSFET ، از دو MOSFET کانال N در پیکربندی نیمه پل استفاده کرده ایم. ما از دیودهای 1N5819 موازی با MOSFET استفاده کرده ایم. برای کاهش سنبله های مضر تولید شده در قسمت گیت ، ما از مقاومت های 4.7 اهم به موازات دیود های 1N4148 استفاده کرده ایم. سرانجام ، ترانزیستور های BD139 و BD 140 در یک پیکربندی Push-Pull برای هدایت گیت MOSFET پیکربندی شده اند ، زیرا این MOSFET ظرفیت گیت بسیار بالایی دارد و برای روشن شدن مناسب به حداقل 10 ولت در پایه نیاز دارد.
برای درک بهتر اصل کار مدار ، ما آن را تا حدی کاهش داده ایم که این بخش از MOSFET روشن باشد. وقتی MOSFET روی جریان است ، ابتدا از طریق ترانسفورماتور جریان می یابد و سپس توسط MOSFET زمین گیر می شود ، بنابراین یک شار مغناطیسی نیز در جهتی که جریان جریان دارد القا می شود و هسته ترانسفورماتور شار مغناطیسی را عبور می دهد در سیم پیچ ثانویه ، و ما نیمه سیکل مثبت سیگنال سینوسی را در خروجی خواهیم گرفت.
در چرخه بعدی ، قسمت پایین مدار در قسمت بالای مدار قرار دارد خاموش است به همین دلیل من قسمت بالایی را حذف کردم ، اکنون جریان در جهت مخالف جریان می یابد و یک شار مغناطیسی در آن جهت ایجاد می کند ، بنابراین شار مغناطیسی را در هسته معکوس میکند.
همه ما می دانیم که یک ترانسفورماتور با تغییرات شار مغناطیسی کار می کند. بنابراین ، روشن و خاموش کردن MOSFET ها ، یکی معکوس به دیگری و انجام آن 50 بار در ثانیه ، شار مغناطیسی نوسانی خوبی را در داخل هسته ترانسفورماتور ایجاد می کند و شار مغناطیسی متغیر باعث ایجاد ولتاژ در سیم پیچ ثانویه می شود.
مدار کامل اینورتر SPWM استفاده شده در این پروژه در زیر آورده شده است.
قطعات مورد نیاز اینورتر SPWM
در جدول زیر لیست قطعات به همراه تعداد مورد نیاز قرار داده شده است.
شماره | مشخصات | نوع | تعداد |
1 | Atmega328P | IC | 1 |
2 | IRFZ44N | ماسفت | 2 |
3 | BD139 | ترانزیستور | 2 |
4 | BD140 | ترانزیستور | 2 |
5 | 22pF | خازن | 2 |
6 | 10K,1% | مقاومت | 1 |
7 | 16MHz | کریستال | 1 |
8 | 0.1uF | خازن | 3 |
9 | 4.7R | مقاومت | 2 |
10 | 1N4148 | دیود | 2 |
11 | LM7805 | رگولاتور ولتاژ | 1 |
12 | 200uF,16V | خازن | 1 |
13 | 47uF, 16V | خازن | 1 |
14 | 2.2uF,400V | خازن | 1 |
کد آردوینو برای SPWM اینورتر
قبل از اینکه پیش برویم و شروع به درک کد کنیم ، بیایید اصول آن را درک کنیم. شما یاد گرفته اید که سیگنال PWM در خروجی چگونه به نظر می رسد ، اکنون این سوال باقی مانده است که چگونه می توانیم چنین موج متفاوتی را در پایه های خروجی آردوینو ایجاد کنیم.
برای ایجاد سیگنال PWM متغیر ، ما قصد داریم از تایمر1 16 بیتی با تنظیم پیش تعیین کننده 1 استفاده کنیم ، که اگر یک نیم چرخه موج سینوسی را در نظر بگیریم به ما 1600/16000000 = 0.1 میلی ثانیه زمان برای هر کدام می دهد. ، که دقیقاً 100 بار در یک نیم چرخه موج قرار می گیرد. به زبان ساده ، ما می توانیم موج سینوسی خود را 200 بار نمونه برداری کنیم.
بعد ، ما باید موج سینوسی خود را به 200 قطعه تقسیم کنیم و مقادیر آنها را با همبستگی دامنه محاسبه کنیم. سپس باید آن مقادیر را با ضرب آن با حد شمارنده به مقادیر شمارنده تایمر تبدیل کنیم. سرانجام ، ما باید این مقادیر را در یک جدول جستجو قرار دهیم تا آن را به شمارنده تغذیه کنیم و موج سینوسی خود را دریافت خواهیم کرد.ز
توجه داشته باشید که کد کامل شده است و مطالب این بخش فقط برای افزایش درک شما از این پروژه است. میتوانید کد کامل را در انتهای صفحه در فایل دانلودی مشاهده کنید.
ما برنامه خود را با اضافه کردن پرونده های هدر مورد نیاز آغاز می کنیم.
#include <avr/io.h> #include <avr/interrupt.h>
بعد ، ما دو جدول جستجو داریم که می خواهیم مقادیر شمارنده تایمر را از آنها بدست آوریم.
int lookUp1[] = {50 ,100 ,151 ,201 ,250 ,300 ,349 ,398 ,446 ,494 ,542 ,589 ,635 ,681 ,726 ,771 ,814 ,857 ,899 ,940 ,981 ,1020 ,1058 ,1095 ,1131 ,1166 ,1200 ,1233 ,1264 ,1294 ,1323 ,1351 ,1377 ,1402 ,1426 ,1448 ,1468 ,1488 ,1505 ,1522 ,1536 ,1550 ,1561 ,1572 ,1580 ,1587 ,1593 ,1597 ,1599 ,1600 ,1599 ,1597 ,1593 ,1587 ,1580 ,1572 ,1561 ,1550 ,1536 ,1522 ,1505 ,1488 ,1468 ,1448 ,1426 ,1402 ,1377 ,1351 ,1323 ,1294 ,1264 ,1233 ,1200 ,1166 ,1131 ,1095 ,1058 ,1020 ,981 ,940 ,899 ,857 ,814 ,771 ,726 ,681 ,635 ,589 ,542 ,494 ,446 ,398 ,349 ,300 ,250 ,201 ,151 ,100 ,50 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0}; int lookUp2[] = {0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,50 ,100 ,151 ,201 ,250 ,300 ,349 ,398 ,446 ,494 ,542 ,589 ,635 ,681 ,726 ,771 ,814 ,857 ,899 ,940 ,981 ,1020 ,1058 ,1095 ,1131 ,1166 ,1200 ,1233 ,1264 ,1294 ,1323 ,1351 ,1377 ,1402 ,1426 ,1448 ,1468 ,1488 ,1505 ,1522 ,1536 ,1550 ,1561 ,1572 ,1580 ,1587 ,1593 ,1597 ,1599 ,1600 ,1599 ,1597 ,1593 ,1587 ,1580 ,1572 ,1561 ,1550 ,1536 ,1522 ,1505 ,1488 ,1468 ,1448 ,1426 ,1402 ,1377 ,1351 ,1323 ,1294 ,1264 ,1233 ,1200 ,1166 ,1131 ,1095 ,1058 ,1020 ,981 ,940 ,899 ,857 ,814 ,771 ,726 ,681 ,635 ,589 ,542 ,494 ,446 ,398 ,349 ,300 ,250 ,201 ,151 ,100 ,50 ,0};
بعد ، در بخش void setup
، رجیستر های کنترل کننده تایمر را مقدار دهی می کنیم تا روی هر کدام واضح باشد.
TCCR1A = 0b10100010; /*10 clear on match, set at BOTTOM for compA. 10 clear on match, set at BOTTOM for compB. 00 10 WGM1 1:0 for waveform 15. */ TCCR1B = 0b00011001; /*000 11 WGM1 3:2 for waveform 15. 001 no prescale on the counter. */ TIMSK1 = 0b00000001; /*0000000 1 TOV1 Flag interrupt enable. */
پس از آن ، ما رجیستر input capture را با مقدار از پیش تعیین شده 16000 مقدار دهی اولیه می کنیم زیرا این امر به ما کمک می کند تا دقیقاً 200 نمونه تولید کنیم.
ICR1 = 1600;
بعد ، با فراخوانی عملکرد زیر ، وقفه های مورد نظر را فعال می کنیم ،
sei();
در آخر ، پین 9 و 10 آردوینو را به عنوان خروجی تنظیم می کنیم
DDRB = 0b00000110;
که پایان عملکرد void setup
را نشان می دهد.
قسمت loop کد خالی باقی می ماند زیرا یک برنامه زمان سنج ضد وقفه است.
void loop(){;}
در مرحله بعد ، ما بردار سرریز timer1 را تعریف کرده ایم ، هنگامی که timer1 سرریز می شود این عملکرد متوقف می شود و یک وقفه ایجاد می کند.
ISR(TIMER1_OVF_vect){
سپس برخی از متغیرهای محلی را به عنوان متغیر های ساکن اعلام می کنیم.
static int num; static char trig; OCR1A = lookUp1[num]; OCR1B = lookUp2[num];
سرانجام ، پیشخوان را برای تغذیه مقادیر بعدی با ضبط و افزایش مقاومت ها ، که پایان این کد است ، از پیش افزایش می دهیم.
if(++num >= 200){ // Pre-increment num then check it's below 200. num = 0; // Reset num. trig = trig^0b00000001; digitalWrite(13,trig); }
آزمایش مدار اینورتر TL494 PWM
به منظور آزمایش مدار ، از تنظیمات زیر استفاده می شود.
- باتری اسید سرب 12 ولت
- یک ترانسفورماتور که دارای یک ضربه 6-0-6 و 12-0-12
- لامپ رشته ای 100 وات به عنوان یک بار
- مولتی متر Meco 108B + TRMS
- مولتی متر Meco 450B + TRMS
سیگنال خروجی از آردوینو
پس از بارگذاری کد. من سیگنال خروجی SPWM را از دو پایه آردوینو اندازه گرفتم که مانند تصویر زیر است ،
اگر کمی بزرگنمایی کنیم می توان چرخه وظیفه در حال تغییر موج PWM را مشاهده کرد.
بعد ، تصویر زیر سیگنال خروجی از ترانس را نشان می دهد.
مدار SPWM اینورتر در حالت ایده آل
همانطور که از تصویر بالا مشاهده می کنید ، این مدار در حالت ایده آل در حدود 13 وات ترسیم می شود.
ولتاژ خروجی بدون بار
ولتاژ خروجی مدار اینورتر در بالا نشان داده شده است ، این ولتاژی است که در خروجی بدون بار متصل شده خارج می شود.
مصرف برق ورودی
تصویر فوق توان ورودی را که با اتصال 40 وات به برق مصرف می کند ، نشان می دهد.
مصرف برق خروجی
تصویر بالا توان خروجی مصرف شده توسط این مدار را نشان می دهد (بار یک لامپ رشته ای 40 وات است)
موارد موجود در فایل : سورس کامل ، شماتیک
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود
افت ولتاژ بالا در خروجی نشان دهنده خروجی بی کیفیت و بی ثبات هستش.
سلام مهندس چرا پس در نقشه آردوینو نیست
سلام امکانش هست لطف کنید اگر مقاله ای مطلبی در این مورد دارید ارسال بفرمایید
سلام مدار راه انداز ماسفت ایراد دارد ترانزیستور bd1390 وقتی با ۱۲ ولت تغذیه میشود در حالت کلکتور مشترک با ۵ ولت روشن نمیشود شما اصلا این مدار رو تست کردین؟
سلام عزیز
خیر این مقاله از سایت های خارجی ترجمه شده است
کی گفته روشن نمیشه حداکثر ولتاژ 6 ولت هست ترانزیستور از هفتصد میلی آمپر تا شیش ولت روشن میشه از شیش ولت به بعد کاتاف میکنه و بعد خواهد سوخت شما به دیتا شیت مراجعه کن ترانزیستور ها عموما با جریان کار میکنن نه با ولتاژ ماسفت ها هستن که با ولتاژ کار میکنن
با سلام فایل های الحاقی باز نمیشوند.
سلام عزیز
کدام فایل ها منظورتون هست؟
سلام ، ممنون بابت آموزش خوبتون
سوالم اینه که اگه قرار باشه میکرو به جای تعیین زمان بندی صفر ها در spwm ، فرض کنیم میکرو زمان های یک ( high ) شدن پالس در pwm رو تعیین میکنه ، آرایش مداری چه تغییری میکنه ؟ ممنون
سلام وقت بخیر ، آقای مهندس با عرض معذرت ترجمه کمی ایراد داره و شکلها نشون میده که از مقالات یا گزیده های سایتهاست ، لطفا مدارهای تست شده خودتان را در سایت قرار دهید تا مورد استفاده باشه . ممنون
سلام جناب. مقالات از سایت ها و مقاله های معتبر خارجی ترجمه میشوند.
سلام وقت بخیر
اول از همه خسته نباشید میگم بابت زحماتی میکشید
آقای رحیمی این مدار حداکثر توانی که میشه ازش کشید چقدر هستش و اینکه برای افزایش توان خروجی میشه روی همین مدار تغییرات انجام داد ؟؟
سلام جناب. ممنونم از لطفتون. در مورد حداکثر توان تست نشده ولی به احتمال زیاد با تغییر مدار میشه توان خروجی رو افزایش داد اما بنده تست نکردم و مطمئن نیستم.