Mundarija:

Inverterlar uchun Arduino sinus to'lqini: 4 qadam
Inverterlar uchun Arduino sinus to'lqini: 4 qadam

Video: Inverterlar uchun Arduino sinus to'lqini: 4 qadam

Video: Inverterlar uchun Arduino sinus to'lqini: 4 qadam
Video: Output DC or AC Voltage using MCP4725 DAC with LCD and PWM to Voltage Converter with Arduino 2024, Noyabr
Anonim
Invertorlar uchun Arduino sinus to'lqini
Invertorlar uchun Arduino sinus to'lqini

Ushbu loyihada men ikkita arduino pwm raqamli chiqishidan SPWM (sinus to'lqinli impuls keng modulyatsiyalangan) signalini yaratdim.

Chunki bunday dasturni yaratish uchun men arduino -ning boshqa funktsiyalari va xususiyatlari haqida to'liq loyihani, shu jumladan osiloskop tasvirlarini va turli chastotalar haqida gapirishim kerak, iltimos mening veb -saytimga tashrif buyuring:

loyiha zonasi

1 -qadam: 50Hz uchun Pwm signalini yaratish

50 gigagertsli signalni yuqori chastotada ishlab chiqarish uchun ba'zi hisob -kitoblarni bajarish zarur. Arduino -dan chastotalar 8 MGts bo'lishi mumkin, lekin biz o'zgarmaydigan ish tsikliga ega signalni xohlaymiz.

Arduino -ning o'zgaruvchan ish tsikllarining turlarini tushunish uchun siz ushbu postning 1, 2 va 3 -qismlarini o'qishingiz mumkin.

Faraz qilaylik, bizning chastotamiz 50 Gts, ya'ni vaqt 20ms. Shunday qilib, 10 ms - yarim tsikl davri. Bu 10msda biz kichik ish tsikllaridan boshlanadigan turli xil ish tsikllariga ega bo'lgan ko'plab impulslarga ega bo'lishimiz kerak, signal o'rtasida biz maksimal ish tsikllariga ega bo'lamiz va kichik ish tsikllari bilan tugatamiz. ijobiy yarim tsikl va bitta salbiy yarim tsikl uchun. Bizning postimizda biz 5 va 6 -pinlardan foydalanamiz, bu taymer 0 demakdir.

Yumshoq signal uchun biz 31372 Gts chastotada to'g'ri pwmni tanlaymiz, oldingi xabarga qarang. Eng katta muammolardan biri shundaki, biz har bir zarba uchun kerakli ish aylanishini qanday hisoblaymiz. Shunday qilib, bizning chastotamiz f = 31372 Gts bo'lgani uchun har bir pulsning davri T = 1/31372 = 31,8 ni tashkil qiladi, shuning uchun yarim tsikl uchun impulslar soni N = 10ms/31.8us = 314 puls. Endi har bir zarba uchun ish aylanishini hisoblash uchun bizda y = sinx bor, lekin bu tenglamada biz darajaga muhtojmiz, shuning uchun yarim tsiklda 314 ta impuls uchun 180 daraja bor. Har bir puls uchun bizda 180/314 = 0,57 daraja/puls bor. Bu shuni anglatadiki, har bir puls uchun biz 0,57 daraja oldinga siljiymiz.

y - vazifa aylanishi va x - yarim ish davridagi pozitsiya qiymati. avval x 0 ga teng, bundan oldin x = 0.57, x = 1.14 va hokazo x = 180 gacha.

Agar biz barcha 314 qiymatlarni hisoblasak, biz 314 elementli massivni olamiz ("int" tipini arduino yordamida osonroq hisoblash uchun).

Bunday qator:

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, 247, 247, 247, 246, 246, 245, 245, 244, 244, 243, 243, 242, 242, 241, 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};

Ko'ryapsizmi, sinus to'lqin kabi, ish tsikli birinchi va oxirgi elementda eng past, o'rtada esa eng yuqori.

2 -qadam: O'zgaruvchan xizmat tsikli uchun Arduino dasturi

O'zgaruvchan xizmat tsikli uchun Arduino dasturi
O'zgaruvchan xizmat tsikli uchun Arduino dasturi

Yuqoridagi rasmda biz o'zgarmaydigan vazifa tsikli signallari qatoridan qiymatlari bor.

Ammo bunday signalni qanday qilish kerak?

dasturning quyi qismi ish tsikllarining qiymatlarini o'zgartirish uchun uzilishlardan foydalanadi

sei (); // uzilishlarni yoqish

}

ISR (TIMER1_COMPA_vect) {// taymer 1 OCR1A qiymatiga mos kelganda uzilish

if (i> 313 && OK == 0) {// 6 -pin uchun vektordan yakuniy qiymat

i = 0; // vektorning birinchi qiymatiga o'tish (qator)

OK = 1; // 5 -pinni yoqing

}

x = sinPWM ; // x i pozitsiyasiga mos keladigan vektor qiymatini oladi (i nol indekslangan)-vazifa tsikli qiymati

i = i+1; // keyingi joyga o'ting

}

3 -qadam: 50 gigagertsli Arduino pinlarida almashish

50 Gts chastotali Arduino pinlari
50 Gts chastotali Arduino pinlari

To'liq sinus to'lqinni yaratish uchun har bir pin faqat yarim ish tsiklini yaratadi, chunki biz ikkita pinni ishlatamiz, ular birin -ketin 10 soniyadan so'ng (50Hz uchun). Pimlarning bu o'zgarishi massiv oxirida amalga oshiriladi- aytaylik, 5-pin 314 ta impuls hosil qilgan, bu pin o'chirilgan va 6-pinni yoqib qo'ygan, bu xuddi shu narsani, lekin manfiy tsikl uchun.

Arduino faqat ijobiy signallarni ishlab chiqarishi mumkinligi sababli, ko'prikda salbiy vazifalar aylanishi amalga oshiriladi- bu haqda bu erda o'qishingiz mumkin

Pimlarni almashtirish dasturi:

sei (); // uzilishlarni yoqish

}

ISR (TIMER1_COMPA_vect) {// 1 -taymer OCR1A qiymati bilan mos kelganda uzilish

if (i> 313 && OK == 0) {// 6 -pin uchun vektordan yakuniy qiymat

i = 0; // vektorning birinchi qiymatiga o'ting

OK = 1; // 5 -pinni yoqing

}

if (i> 313 && OK == 1) {// 5 -pin uchun vektordan yakuniy qiymat

i = 0; // vektorning birinchi qiymatiga o'ting

OK = 0; // 6 -pinni yoqing

}

x = sinPWM ; // x i pozitsiyasiga mos keladigan vektor qiymatini oladi (i nol indekslangan)

i = i+1; // keyingi pozitsiyaga o'ting

agar (OK == 0) {

OCR0B = 0; // pin 5 0 qiling

OCR0A = x; // mos keladigan ish aylanishiga 6 -pinni yoqish

agar (OK == 1) {

OCR0A = 0; // pin 6 0 qiling

OCR0B = x; // mos keladigan ish aylanishiga 5 -pinni yoqish

}

}

4 -qadam: H ko'prigini haydash va Pwm signalini filtrlash

Arduino -dan olingan signallar inverterli ilovalarni boshqaruvchi qismdir, chunki ikkalasi ham ijobiy. To'liq sinus to'lqin va amaliy inverterni yaratish uchun biz h ko'prigidan foydalanishimiz kerak va pwm past o'tish filtrini tozalashimiz kerak.

H-ko'prigi bu erda taqdim etilgan.

Past o'tkazgichli filtr kichik AC dvigatellari bilan sinovdan o'tgan-bu erda.

Tavsiya: