Mündəricat:
- Addım 1: 50Hz üçün Pwm Siqnalının Yaradılması
- Addım 2: Dəyişən Duty Cycle üçün Arduino Proqramı
- Addım 3: 50Hz -də Arduino Pins -də alternativ olun
- Addım 4: H Körpü Sürmək və Pwm Siqnalını Süzmək
Video: İnverterlər üçün Arduino Sinewave: 4 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:48
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ı
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
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ə:
Wi-Fi yönlendiriciniz üçün saatlarla işləmək üçün UPS-ni Steam Punk: 4 addım (şəkillərlə)
Wi-Fi yönlendiriciniz üçün saatlarla işləmək üçün UPS-ni Steam Punk: UPS-in 12V DC batareya gücünü 220V AC gücünə çevirməsi ilə bağlı əsaslı olaraq razı olmayan bir şey var ki, routerinizi və fiber ONT-ni işlədən transformatorlar onu yenidən 12V DC! Siz də [adətən
Robotdan qaçınmaq üçün əngəl yaratmaq üçün necə: 6 addım
Robotdan Engel Oynayan Necə Yapılır: Maneədən Kaçan Robot, bir arduino tərəfindən idarə olunan sadə bir robotdur və nə edirsə, ətrafda dolaşır və maneələrin qarşısını alır. HC-SR04 ultrasəs sensoru ilə maneələri aşkar edir, başqa sözlə robot yaxınlıqdakı obyekti hiss edərsə
Arduino istifadə edərək robotdan qaçınmaq üçün əngəl yaratmaq üçün necə: 5 addım
Arduino istifadə edərək robotdan qaçınmaq üçün əngəl yaratma: Bu təlimatda sizə Arduino ilə işləyən robotdan qaçaraq maneə yaratmağı öyrədəcəyəm. Arduino ilə tanış olmalısınız. Arduino, atmega mikro nəzarətçisini istifadə edən bir idarəetmə lövhəsidir. Arduinonun hər hansı bir versiyasından istifadə edə bilərsiniz, amma
Arduino üçün 6 Düymə üçün 1 Analog Girişdən istifadə edin: 6 addım
Arduino üçün 6 Düymə üçün 1 Analog Girişdən istifadə edin: Arduino üçün necə daha çox Rəqəmsal Giriş əldə edə biləcəyimi tez -tez düşünürəm. Bu yaxınlarda ağlıma gəldi ki, birdən çox rəqəmsal giriş gətirmək üçün Analog Girişlərdən birini istifadə etməliyəm. Sürətli bir axtarış apardım və insanların harada olduğunu tapdım
Arduino üçün L298 2Amp Motor Sürücü Qalxanı üçün təlimat: 6 addım
Arduino üçün L298 2Amp Motor Sürücü Qalxanı üçün təlimat: Təsvir Arduino üçün L298 2Amp Motor Sürücü Qalxanı, tam körpülü motor sürücüsü L298 motor sürücüsünün inteqral sxeminə əsaslanır. İki ayrı 2A DC mühərriki və ya 1 2A pilləli motoru idarə edə bilər. Motorun sürəti və istiqamətləri ayrı -ayrılıqda idarə oluna bilər