Mündəricat:

İnverterlər üçün Arduino Sinewave: 4 addım
İnverterlər üçün Arduino Sinewave: 4 addım

Video: İnverterlər üçün Arduino Sinewave: 4 addım

Video: İnverterlər üçün Arduino Sinewave: 4 addım
Video: Инвертор прямоугольной формы от 12 В до 220 В- используйте CD4047 - 50/60 Гц с регулируемой частотой 2024, Noyabr
Anonim
İnverterlər üçün Arduino Sinewave
İnverterlər üçün Arduino Sinewave

Bu layihədə iki arduino pwm rəqəmsal çıxışından bir SPWM (sinus dalğalı darbe geniş modulyasiya edilmiş) bir siqnal yaratdım.

Belə bir proqram hazırlamaq üçün arduino -nun digər funksiyaları və xüsusiyyətləri haqqında osiloskop şəkilləri də daxil olmaqla tam layihə haqqında danışmalıyam və fərqli tezliklər üçün veb saytımı ziyarət edin:

eprojectzone

Addım 1: 50Hz üçün Pwm Siqnalının Yaradılması

Daha yüksək tezlikdə 50Hz siqnal yaratmaq üçün bəzi hesablamalar aparmaq lazımdır. Arduino -dan tezliklər 8MHz -də ola bilər, ancaq dəyişkən iş dövrü olan bir siqnal istəyirik.

Arduinonun dəyişən vəzifə dövrlərinin növlərini başa düşmək üçün eyni yazının 1, 2 və 3 hissələrini oxuya bilərsiniz.

Güman edək ki, tezliyimiz 50Hz -dir, yəni dövr 20ms -dir. Beləliklə, 10 ms yarım dövr dövrüdür. Bu 10ms -də, kiçik vəzifə dövrlərindən başlayaraq, fərqli iş dövrü olan bir çox nəbzə sahib olmalıyıq, siqnalın ortasında maksimum vəzifə dövrü var və kiçik vəzifə dövrləri ilə də bitiririk. pozitiv yarım dövr, biri mənfi yarım dövr üçün. Bunun üçün yazımızda Timer 0 deməkdir 5 və 6 sancaqlar istifadə edirik.

Hamar bir siqnal üçün, 31372 Hz tezliyində faza uyğun pwm seçirik. Əvvəlki yazıya baxın. Ən böyük problemlərdən biri, hər nəbz üçün lazım olan iş dövrünü necə hesabladığımızdır. Beləliklə, bizim tezliyimiz f = 31372Hz olduğundan, hər nəbz üçün dövr T = 1/31372 = 31.8 bizi təşkil edir, buna görə də yarım dövrəli impulsların sayı N = 10ms/31.8us = 314 pulsdur. İndi hər nəbz üçün vəzifə dövrünü hesablamaq üçün y = sinx -ə sahibik, lakin bu tənlikdə dərəcələrə ehtiyacımız var, belə ki yarım dövrədə 314 impuls üçün 180 dərəcə var. Hər nəbz üçün 180/314 = 0.57 dərəcə/nəbz var. Bu o deməkdir ki, hər nəbz üçün 0,57 dərəcə ilə irəliləyirik.

y - vəzifə dövrü və x - yarım iş dövründəki mövqenin dəyəri. əvvəlcə x 0 olur, x = 0.57, x = 1.14 və s. x = 180 olana qədər.

314 dəyərinin hamısını hesablasaq, 314 elementli bir sıra əldə edirik (arduino ilə daha asan hesablanacaq "int" növü).

Belə bir sıra:

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};

Bir sinus dalğası kimi, vəzifə dövrünün ilk və son elementdə ən aşağı, ortada isə ən yüksək olduğunu görə bilərsiniz.

Addım 2: Dəyişən Duty Cycle üçün Arduino Proqramı

Dəyişən Duty Cycle üçün Arduino Proqramı
Dəyişən Duty Cycle üçün Arduino Proqramı

Yuxarıdakı şəkildə, dizidən dəyərləri olan dəyişən vəzifə dövrü siqnalları var.

Amma necə belə bir siqnal vermək olar ???

Proqramın aşağıdakı hissəsi vəzifə dövrlərinin dəyərlərini dəyişdirmək üçün fasilələri istifadə edir

sei (); // fasilələri aktiv edin

}

ISR (TIMER1_COMPA_vect) {// taymer 1 OCR1A dəyəri ilə uyğun gələndə kəsilir

if (i> 313 && OK == 0) {// pin 6 üçün vektordan son dəyər

i = 0; // vektorun ilk dəyərinə keçin (serial)

OK = 1; // pin 5 -i aktiv edin

}

x = sinPWM ; // x, i mövqeyinə uyğun olan vektordan dəyər alın (i sıfır indekslidir)-vəzifə dövrünün dəyəri

i = i+1; // növbəti vəzifəyə keçin

}

Addım 3: 50Hz -də Arduino Pins -də alternativ olun

50Hz -də Arduino Pins -də dəyişir
50Hz -də Arduino Pins -də dəyişir

Hər bir pin tam bir sinus dalğası yaratmaq üçün yalnız yarım vəzifə dövrü yaratdığına görə, dəqiq 10ms saniyədən sonra (50Hz üçün) bir -birinin ardınca gələn iki pin istifadə edirik. Bu sancaqlar dəyişikliyi serialın sonunda edilir- 5-ci pinin 314 impuls yaratdığını söylədikdən sonra, bu pin söndürülür və 6-cı pinlə eyni şeyi edir, ancaq mənfi iş dövrü üçün.

Arduino yalnız müsbət siqnallar yarada bildiyi üçün h körpüsündə mənfi iş dövrü edilir- bu barədə burada oxuya bilərsiniz

Pin dəyişdirmə proqramı:

sei (); // fasilələri aktiv edin

}

ISR (TIMER1_COMPA_vect) {// taymer 1 OCR1A dəyəri ilə uyğun gələndə kəsilir

if (i> 313 && OK == 0) {// pin 6 üçün vektordan son dəyər

i = 0; // vektorun birinci dəyərinə keçin

OK = 1; // pin 5 -i aktiv edin

}

if (i> 313 && OK == 1) {// pin 5 üçün vektordan son dəyər

i = 0; // vektorun birinci dəyərinə keçin

OK = 0; // pin 6 -ı aktiv edin

}

x = sinPWM ; // x, i mövqeyinə uyğun olan vektordan dəyər alın (i sıfır indekslidir)

i = i+1; // növbəti vəzifəyə keçin

əgər (OK == 0) {

OCR0B = 0; // pin 5 0 edin

OCR0A = x; // pin 6 -ı müvafiq vəzifə dövrünə icazə verin

əgər (OK == 1) {

OCR0A = 0; // pin 6 0 edin

OCR0B = x; // pin 5 -i müvafiq vəzifə dövrünə icazə verin

}

}

Addım 4: H Körpü Sürmək və Pwm Siqnalını Süzmək

Arduinodan alınan siqnallar inverter tətbiqlərinin nəzarət hissəsidir, çünki hər ikisi də müsbətdir. Tam bir sinus dalğası və praktiki bir çevirici etmək üçün h körpüsündən istifadə etməli və pwm aşağı keçid filtrini təmizləməliyik.

H körpüsü burada təqdim olunur.

Aşağı keçid filtri kiçik Ac mühərrikləri ilə sınaqdan keçirildi.

Tövsiyə: