فهرست مطالب:
- مرحله 1: ایجاد سیگنال Pwm برای 50Hz
- مرحله 2: برنامه آردوینو برای چرخه وظیفه متغیر
- مرحله 3: متناوب در پین های آردوینو 50Hz
- مرحله 4: رانندگی بر روی پل H و فیلتر کردن سیگنال Pwm
تصویری: Arduino Sinewave for Inverters: 4 Step
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:57
در این پروژه من یک سیگنال SPWM (پالس موج سینوسی با مدولاسیون گسترده) از دو خروجی دیجیتال arduino pwm ایجاد کرده ام.
از آنجا که برای ایجاد چنین برنامه ای ، باید در مورد بسیاری دیگر از عملکردها و ویژگی های arduino در مورد پروژه کامل از جمله تصاویر اسیلوسکوپ و فرکانس های مختلف صحبت کنید ، از وب سایت من دیدن کنید:
eprojectszone
مرحله 1: ایجاد سیگنال Pwm برای 50Hz
برای تولید سیگنال 50 هرتز در فرکانس بالاتر ، انجام برخی محاسبات ضروری است. فرکانس های آردوینو می توانند در 8 مگاهرتز باشند ، اما ما سیگنالی با چرخه کاری متغیر می خواهیم.
برای درک انواع چرخه های متغیر وظیفه آردوینو ، می توانید این 3 قسمت از همان پست 1 ، 2 و 3 را بخوانید.
فرض کنید فرکانس ما 50 هرتز است ، یعنی دوره زمانی 20 میلی ثانیه است. بنابراین 10 میلی ثانیه نیم دوره است. در آن 10 میلی ثانیه ما نیاز به داشتن تعداد زیادی پالس با چرخه های مختلف وظیفه داریم که با چرخه های وظیفه کوچک شروع می شود ، در وسط سیگنال حداکثر چرخه های وظیفه را داریم و همچنین با چرخه های وظیفه کوچک به پایان می رسانیم. برای ایجاد موج سینوسی از دو پین یکی برای نیم چرخه مثبت و یک نیم سیکل منفی. در پست خود برای این کار از پین 5 و 6 استفاده می کنیم که به معنی تایمر 0 است.
برای سیگنال روان ، pwm فاز صحیح را با فرکانس 31372 هرتز انتخاب می کنیم-پست قبلی را ببینید. یکی از بزرگترین مشکل این است که چگونه چرخه وظیفه لازم را برای هر پالس محاسبه می کنیم. بنابراین ، از آنجا که فرکانس ما f = 31372Hz است ، دوره برای هر پالس T = 1/31372 = 31.8 ما است ، بنابراین تعداد نبض برای نیم چرخه N = 10ms/31.8us = 314 پالس است. حال برای محاسبه چرخه وظیفه برای هر پالس y = sinx داریم ، اما در این معادله به درجه نیاز داریم ، بنابراین نیم چرخه دارای 180 درجه سانتی گراد برای 314 پالس است. برای هر پالس 180/314 = 0.57deg/نبض داریم. این بدان معناست که برای هر نبض ما با 0.57 درجه جلو می رویم.
y چرخه وظیفه و x مقدار موقعیت در نیم چرخه وظیفه است. در ابتدا x 0 است ، بعد x = 0.57 ، x = 1.14 و به همین ترتیب تا x = 180.
اگر همه 314 مقادیر را محاسبه کنیم ، یک آرایه 314 عنصر به دست می آوریم (نوع "int" که با آردوینو راحت تر محاسبه می شود).
چنین آرایه ای عبارت است از:
int sinPWM = {1، 2، 5، 7، 10، 12، 15، 17، 19، 22، 24، 27، 30، 32، 34، 37، 39، 42، 44، 47، 49، 52، 54، 57، 59، 61، 64، 66، 69، 71، 73، 76، 78، 80، 83، 85، 88، 90، 92، 94، 97، 99، 101، 103، 106، 108، 110، 113، 115، 117، 119، 121، 124، 126، 128، 130، 132، 134، 136، 138، 140، 142، 144، 146، 148، 150، 152، 154، 156، 158، 160، 162، 164، 166، 168، 169، 171، 173، 175، 177، 178، 180، 182، 184، 185، 187، 188، 190، 192، 193، 195، 196، 198، 199، 201، 202، 204، 205، 207، 208، 209، 211، 212، 213، 215، 216، 217، 219، 220، 221، 222، 223، 224، 225، 226، 227، 228، 229، 230، 231، 232، 233، 234، 235، 236، 237، 237، 238، 239، 240، 240، 241، 242، 242، 243، 243، 244، 244، 245، 245، 246، 246، 247، 247، 247، 248، 248، 248، 248، 249، 249، 249، 249، 249، 250، 250، 250، 250، 249، 249، 249، 249، 249، 248، 248، 248، 248، 248، 247، 247، 247، 246، 246، 245، 245، 244، 244، 243، 243، 242، 242، 241، 240، 240، 240، 239، 238، 237، 237، 236، 235، 234، 233، 232، 231، 230، 229، 228، 227، 226 ، 225 ، 224 ، 223 ، 222 ، 221 ، 220 ، 219 ، 217 ، 21 6، 215، 213، 212، 211، 209، 208، 207، 205، 204، 202، 201، 199، 198، 196، 195، 193، 192، 190، 188، 187، 185، 184، 182، 180، 178، 177، 175، 173، 171، 169، 168، 166، 164، 162، 160، 158، 156، 154، 152، 150، 148، 146، 144، 142، 140، 138، 136، 134، 132، 130، 128، 126، 124، 121، 119، 117، 115، 113، 110، 108، 106، 103، 101، 99، 97، 94، 92، 90، 88، 85، 83، 80، 78، 76، 73، 71، 69، 66، 64، 61، 59، 57، 54، 52، 49، 47، 44، 42، 39، 37، 34، 32، 30، 27، 24، 22، 19، 17، 15، 12 ، 10 ، 7 ، 5 ، 2 ، 1} ؛
می بینید که مانند یک موج سینوسی ، چرخه وظیفه در اولین و آخرین عنصر کمترین و در وسط بیشترین است.
مرحله 2: برنامه آردوینو برای چرخه وظیفه متغیر
در تصویر بالا سیگنالهای چرخه وظیفه متغیر با مقادیر از آرایه داریم.
اما چگونه می توان چنین سیگنالی ایجاد کرد ؟؟
بخشی از برنامه زیر از وقفه برای تغییر مقادیر چرخه های وظیفه استفاده می کند
sei () ؛ // وقفه ها را فعال کنید
}
ISR (TIMER1_COMPA_vect) {// وقفه زمانی که تایمر 1 با مقدار OCR1A مطابقت دارد
if (i> 313 && OK == 0) {// مقدار نهایی از بردار برای پین 6
i = 0؛ // رفتن به اولین مقدار بردار (آرایه)
OK = 1؛ // پین 5 را فعال کنید
}
x = sinPWM ؛ // x مقدار را از بردار مربوط به موقعیت i بگیرید (i نمایه شده صفر است) -ارزش چرخه وظیفه
i = i+1 ؛ // به موقعیت بعدی بروید
}
مرحله 3: متناوب در پین های آردوینو 50Hz
از آنجا که هر پین فقط یک چرخه نیمه وظیفه ایجاد می کند تا یک موج سینوسی کامل ایجاد کند ، ما از دو پین استفاده می کنیم که بعد از 10 ثانیه دقیق (به مدت 50 هرتز) یکی پس از دیگری متناوب می شوند. این تغییر پین ها در انتهای آرایه انجام می شود- پس از این که فرض کنیم پین 5 314 پالس ایجاد کرده است ، این پین خاموش شده و پین 6 را فعال می کند که همین کار را می کند اما برای چرخه وظیفه منفی.
از آنجا که آردوینو می تواند فقط سیگنال های مثبت تولید کند ، چرخه وظیفه منفی در h Bridge ساخته می شود- می توانید در اینجا درباره آن بخوانید
برنامه تغییر پین:
sei () ؛ // وقفه ها را فعال کنید
}
ISR (TIMER1_COMPA_vect) {// وقفه زمانی که تایمر 1 با مقدار OCR1A مطابقت دارد
if (i> 313 && OK == 0) {// مقدار نهایی از بردار برای پین 6
i = 0؛ // رفتن به اولین مقدار بردار
OK = 1؛ // پین 5 را فعال کنید
}
if (i> 313 && OK == 1) {// مقدار نهایی از بردار برای پین 5
i = 0؛ // رفتن به اولین مقدار بردار
OK = 0؛ // پین 6 را فعال کنید
}
x = sinPWM ؛ // x مقدار را از بردار مربوط به موقعیت i بگیرید (i نمایه شده صفر است)
i = i+1 ؛ // به موقعیت بعدی بروید
if (OK == 0) {
OCR0B = 0 ؛ // پین 5 را بسازید
OCR0A = x؛ // پین 6 را به چرخه وظیفه مربوطه فعال کنید
if (OK == 1) {
OCR0A = 0 ؛ // پین 6 را بسازید
OCR0B = x؛ // پین 5 را به چرخه وظیفه مربوطه فعال کنید
}
}
مرحله 4: رانندگی بر روی پل H و فیلتر کردن سیگنال Pwm
سیگنال های بدست آمده از آردوینو بخش کنترل برنامه های اینورتر است زیرا هر دو مثبت هستند. برای ایجاد یک موج سینوسی کامل و یک اینورتر عملی ، ما باید از یک پل h استفاده کنیم و pwm را از یک فیلتر کم گذر پاک کنیم.
پل H در اینجا ارائه شده است.
فیلتر کم گذر با موتورهای کوچک AC در اینجا آزمایش شده است.
توصیه شده:
نشانگر حجم Neopixel Ws2812 LED Ring & Arduino: 8 Step
Volume Indicator Neopixel Ws2812 LED Ring & Arduino: در این آموزش با نحوه ساخت نشانگر حجم با استفاده از حلقه LED Neopixel Ws2812 و آردوینو آشنا می شوید. فیلم را تماشا کنید
Arduino LTC6804 BMS - قسمت 2: Balance Board: 5 Step
Arduino LTC6804 BMS - Part 2: Balance Board: Part 1 is here یک سیستم مدیریت باتری (BMS) شامل عملکردی است که پارامترهای مهم بسته باتری شامل ولتاژ سلول ، جریان باتری ، دمای سلول و غیره را حس می کند. محدوده تعریف شده ، بسته می تواند دیسکو باشد
RF Signal Generator 100 KHz-600 MHZ on DDS AD9910 Arduino Shield: 5 Step
RF Signal Generator 100 KHz-600 MHZ on DDS AD9910 Arduino Shield: نحوه ایجاد سر و صدای کم ، دقت بالا و ژنراتور RF پایدار (با AM ، مدولاسیون FM) در Arduino
Loupedeck Avec Un Arduino / Loupedeck With Arduino: 4 Step
Loupedeck Avec Un Arduino / Loupedeck With Arduino: Loupedeck is un clavier sp & eacute؛ cialis & eacute ؛، qui mat & ealute؛ rialise lesactions de Lightroom 6 ou CC avec des touchs (voir le site) .Ce clavier est un p & eacie؛ riph & eaci؛ code d'un potentiom & egrave؛ tre o d'un bouton au
Arduino Lux Meter - Interfacing OPT3001 With Arduino: 4 Step
Arduino Lux Meter - Interfacing OPT3001 With Arduino: ما عموماً با موقعیتی روبرو هستیم که در آن باید شدت نور را اندازه گیری کنیم. بنابراین تصمیم گرفتم یک پروژه کوچک بسازم که به ما در حل این مشکل کمک کند. این پروژه نشان می دهد که چگونه می توانیم از OPT3001 با آردوینو به عنوان لوکس متر استفاده کنیم. در این پروژه ، من