Turinys:
- 1 žingsnis: generuokite 50 Hz Pwm signalą
- 2 žingsnis: „Arduino“programa kintamam darbo ciklui
- 3 žingsnis: pakaitomis 50 Hz „Arduino“kaiščiai
- 4 žingsnis: važiuokite H tiltu ir filtruokite Pwm signalą
Video: „Arduino Sinewave“inverteriams: 4 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:48
Šiame projekte aš sukūriau SPWM (sinusinės bangos plataus moduliavimo) signalą iš dviejų arduino pwm skaitmeninių išėjimų.
Kadangi, norėdamas sukurti tokią programą, turiu kalbėti apie daugelį kitų „arduino“funkcijų ir savybių, visas projektas, įskaitant osciloskopo vaizdus ir skirtingus dažnius, apsilankykite mano svetainėje:
eprojectszone
1 žingsnis: generuokite 50 Hz Pwm signalą
Norint generuoti 50 Hz signalą aukštesniu dažniu, būtina atlikti tam tikrus skaičiavimus. Arduino dažnis gali būti 8 MHz, bet mes norime signalo su kintančiu darbo ciklu.
Norėdami suprasti arduino kintamo darbo ciklų tipus, galite perskaityti šias 3 to paties įrašo dalis 1, 2 ir 3.
Tarkime, kad mūsų dažnis yra 50 Hz, o tai reiškia, kad laikotarpis yra 20 ms. Taigi 10 ms yra pusė ciklo. Per tuos 10 ms turime turėti daug impulsų su skirtingais darbo ciklais, pradedant mažais darbo ciklais, signalo viduryje turime maksimalius darbo ciklus ir baigiame taip pat mažais darbo ciklais. Norėdami sukurti sinusinę bangą, mes naudosime du kaiščius, skirtus vienam teigiamas pusinis ciklas, o kitas - neigiamas. Savo įraše tam naudojame 5 ir 6 kaiščius, tai reiškia 0 laikmatį.
Kad signalas būtų sklandus, mes pasirenkame fazės teisingą pwm dažniu 31372 Hz-žr. Ankstesnį įrašą. Viena didžiausių problemų yra ta, kad mes apskaičiuojame reikiamą kiekvieno ciklo darbo ciklą. Taigi, kadangi mūsų dažnis yra f = 31372Hz, kiekvieno impulso laikotarpis yra T = 1/31372 = 31,8 mus, taigi pusės ciklo impulsų skaičius yra N = 10ms/31,8us = 314 impulsų. Dabar, norėdami apskaičiuoti kiekvieno impulso veikimo ciklą, turime y = sinx, tačiau šioje lygtyje mums reikia laipsnių, todėl pusė ciklo turi 180 laipsnių 314 impulsų. Kiekvienam impulsui turime 180/314 = 0,57deg/impulsą. Tai reiškia, kad kiekvieno pulso metu mes judame į priekį 0,57 laipsniu.
y yra darbo ciklas, o x - pozicijos vertė per pusę darbo ciklo. iš pradžių x yra 0, tada x = 0,57, x = 1,14 ir taip toliau, kol x = 180.
jei apskaičiuosime visas 314 reikšmes, gausime 314 masyvo elementų (tipą „int“lengviau apskaičiuoti arduino).
Toks masyvas yra:
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, 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, 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};
Matote, kad kaip sinusinė banga darbo ciklas yra mažiausias iš pirmojo ir paskutinio elemento ir aukščiausias viduryje.
2 žingsnis: „Arduino“programa kintamam darbo ciklui
Aukščiau esančiame paveikslėlyje turime kintamų darbo ciklų signalus su reikšmėmis iš masyvo.
Bet kaip duoti tokį signalą ??
toliau nurodyta programos dalis naudoja pertraukas, kad pakeistų darbo ciklų vertes
sei (); // įjungti pertraukas
}
ISR (TIMER1_COMPA_vect) {// pertraukti, kai 1 laikmatis atitinka OCR1A vertę
if (i> 313 && OK == 0) {// galutinė vertė iš 6 kaiščio vektoriaus
i = 0; // pereikite prie pirmosios vektoriaus (masyvo) vertės
Gerai = 1; // įjunkite 5 kaištį
}
x = sinPWM ; // x paimkite vertę iš vektoriaus, atitinkančio i poziciją (i yra nulinis indeksas)-darbo ciklo vertė
i = i+1; // pereiti į kitą poziciją
}
3 žingsnis: pakaitomis 50 Hz „Arduino“kaiščiai
Kadangi kiekvienas kaištis sukuria tik pusę darbo ciklo, kad sukurtų visą sinusinę bangą, mes naudojame du kaiščius, kurie keičiasi vienas po kito po tikslių 10 sekundžių (50 Hz). Šis kaiščių keitimas atliekamas masyvo pabaigoje- kai, tarkime, 5 kaištis sugeneruoja 314 impulsų, šis kaištis išjungiamas ir įjungiamas kaištis 6, kuris daro tą patį, bet neigiamam darbo ciklui.
Kadangi „arduino“gali generuoti tik teigiamus signalus, „h bridge“sukuriamas neigiamas darbo ciklas- apie tai galite perskaityti čia
Kaiščių keitimo programa:
sei (); // įjungti pertraukas
}
ISR (TIMER1_COMPA_vect) {// nutraukti, kai 1 laikmatis atitinka OCR1A vertę
if (i> 313 && OK == 0) {// galutinė vertė iš 6 kaiščio vektoriaus
i = 0; // pereikite prie pirmosios vektoriaus vertės
Gerai = 1; // įjunkite 5 kaištį
}
if (i> 313 && OK == 1) {// galutinė vertė iš 5 kaiščio vektoriaus
i = 0; // pereikite prie pirmosios vektoriaus vertės
Gerai = 0; // įjunkite 6 kaištį
}
x = sinPWM ; // x paimkite vertę iš vektoriaus, atitinkančio i padėtį (i yra indeksuotas nulis)
i = i+1; // pereiti į kitą poziciją
jei (gerai == 0) {
OCR0B = 0; // padaryti kaištį 5 0
OCR0A = x; // įjunkite 6 kaištį atitinkamam darbo ciklui
jei (gerai == 1) {
OCR0A = 0; // padaryti kaištį 6 0
OCR0B = x; // įjunkite 5 kaištį atitinkamam darbo ciklui
}
}
4 žingsnis: važiuokite H tiltu ir filtruokite Pwm signalą
Signalai, gauti iš arduino, yra inverterio taikymo valdymo dalis, nes abu yra teigiami. Norėdami sukurti visą sinusinę bangą ir praktišką keitiklį, turime naudoti h tiltą ir išvalyti pwm žemo dažnio filtrą.
Čia pateikiamas H tiltas.
Žemųjų dažnių filtras išbandytas su mažais kintamosios srovės varikliais-čia.
Rekomenduojamas:
„Arduino“automobilių atbulinės eigos įspėjimo sistema - Žingsniai po žingsnio: 4 žingsniai
„Arduino“automobilių atbulinės eigos įspėjimo sistema | Žingsniai po žingsnio: Šiame projekte aš suprojektuosiu paprastą „Arduino“automobilio atbulinės eigos stovėjimo jutiklio grandinę, naudodamas „Arduino UNO“ir ultragarsinį jutiklį „HC-SR04“. Ši „Arduino“pagrįsta automobilio atbulinės eigos įspėjimo sistema gali būti naudojama autonominei navigacijai, robotų diapazonui ir kitiems diapazonams
„Arduino Halloween Edition“- „Zombies“iššokantis ekranas (žingsniai su nuotraukomis): 6 žingsniai
„Arduino Halloween Edition“- „Zombies“iššokantis ekranas (žingsniai su paveikslėliais): norite Helovino metu išgąsdinti savo draugus ir sukelti riksmą? O gal tiesiog norite padaryti gerą išdaigą? Šis iššokantis „Zombies“ekranas gali tai padaryti! Šioje instrukcijoje aš išmokysiu jus, kaip lengvai padaryti iššokančius zombius naudojant „Arduino“. HC-SR0
Akustinė levitacija naudojant „Arduino Uno“žingsnis po žingsnio (8 žingsniai): 8 žingsniai
Akustinė levitacija naudojant „Arduino Uno“žingsnis po žingsnio (8 žingsniai): ultragarsiniai garso keitikliai L298N nuolatinės srovės adapterio maitinimo šaltinis su vyrišku nuolatinės srovės kaiščiu „Arduino UNOBreadboard“Kaip tai veikia: pirmiausia įkelkite kodą į „Arduino Uno“(tai yra mikrovaldiklis su skaitmeniniu ir analoginiai prievadai kodui konvertuoti (C ++)
„Pixel Kit“, kuriame veikia „MicroPython“: pirmieji žingsniai: 7 žingsniai
„Pixel Kit“, kuriame veikia „MicroPython“: pirmieji žingsniai: Kelionė, skirta visam „Kano Pixel“potencialui išnaudoti, prasideda gamyklos programinės įrangos pakeitimu „MicroPython“, tačiau tai tik pradžia. Norėdami koduoti „Pixel Kit“, turime prie jo prijungti savo kompiuterius. Ši pamoka paaiškins, kas
Pigiausias „Arduino“-- Mažiausias „Arduino“-- „Arduino Pro Mini“-- Programavimas -- „Arduino Neno“: 6 žingsniai (su nuotraukomis)
Pigiausias „Arduino“|| Mažiausias „Arduino“|| „Arduino Pro Mini“|| Programavimas || Arduino Neno: …………………………. Prenumeruokite mano „YouTube“kanalą, kad gautumėte daugiau vaizdo įrašų ……. .Šis projektas yra apie tai, kaip sujungti mažiausią ir pigiausią arduino. Mažiausias ir pigiausias arduino yra arduino pro mini. Tai panašu į arduino