Satura rādītājs:
- 1. solis: Pwm signāla ģenerēšana 50 Hz frekvencei
- 2. darbība: Arduino programma mainīga darba ciklam
- 3. darbība: pārmaiņus 50 Hz Arduino tapas
- 4. solis: H tilta vadīšana un Pwm signāla filtrēšana
Video: Arduino Sinewave invertoriem: 4 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:57
Šajā projektā esmu ģenerējis SPWM (sinusa viļņu impulsa platmodulēts) signālu no divām arduino pwm digitālajām izejām.
Tā kā, lai izveidotu šādu programmu, man ir jārunā par daudzām citām arduino funkcijām un īpašībām, viss projekts, ieskaitot osciloskopa attēlus, un dažādām frekvencēm, lūdzu, apmeklējiet manu vietni:
eprojectszone
1. solis: Pwm signāla ģenerēšana 50 Hz frekvencei
Lai ģenerētu 50 Hz signālu augstākā frekvencē, ir jāveic daži aprēķini. Arduino frekvences var būt 8 MHz, bet mēs vēlamies signālu ar mainīgu darba ciklu.
Lai saprastu arduino mainīgo darba ciklu veidus, varat izlasīt šīs pašas ziņas 1, 2 un 3 šīs daļas.
Pieņemsim, ka mūsu frekvence ir 50 Hz, kas nozīmē, ka laika periods ir 20 ms. Tātad 10 ms ir pusperiods. Šajos 10 ms mums ir jābūt daudziem impulsiem ar dažādiem darba cikliem, sākot ar maziem darba cikliem, signāla vidū mums ir maksimālie darba cikli un jāpabeidz arī ar nelieliem darba cikliem. Lai radītu sinusoidālu vilni, mēs izmantosim divas tapas vienu pozitīvs puscikls un viens negatīvs puscikls. Šajā rakstā mēs izmantojam 5. un 6. tapu, kas nozīmē taimeri 0.
Lai iegūtu vienmērīgu signālu, mēs izvēlamies fāzes pareizo pwm ar frekvenci 31372 Hz-skatīt iepriekšējo ziņu. Viena no lielākajām problēmām ir tā, kā mēs aprēķinām nepieciešamo darba ciklu katram impulsam. Tātad, tā kā mūsu frekvence ir f = 31372Hz, katra impulsa periods ir T = 1/31372 = 31,8 mums, tātad impulsu skaits pusciklā ir N = 10ms/31,8us = 314 impulsi. Tagad, lai aprēķinātu darba ciklu katram impulsam, mums ir y = sinx, bet šajā vienādojumā mums ir nepieciešami grādi, lai puse cikla būtu 180 ° 314 impulsiem. Katram impulsam mums ir 180/314 = 0,57deg/impulss. Tas nozīmē, ka katram impulsam mēs virzāmies uz priekšu ar 0,57 grādiem.
y ir darba cikls un x pozīcijas vērtība pusperiodā. sākumā x ir 0, pēc tam x = 0,57, x = 1,14 un tā tālāk, līdz x = 180.
ja mēs aprēķinām visas 314 vērtības, mēs iegūstam masīva 314 elementus (tips "int", lai to vieglāk aprēķināt arduino).
Šāds masīvs ir:
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};
Jūs varat redzēt, ka kā sinusa vilnis darba cikls ir zemākais pirmajā un pēdējā elementā un visaugstākais vidū.
2. darbība: Arduino programma mainīga darba ciklam
Augšējā attēlā mums ir mainīgi darba ciklu signāli ar vērtībām no masīva.
Bet kā dot šādu signālu ??
zemāk esošajā programmas daļā tiek izmantoti pārtraukumi, lai mainītu darba ciklu vērtības
sei (); // iespējot pārtraukumus
}
ISR (TIMER1_COMPA_vect) {// pārtraukt, kad 1. taimeris sakrīt ar OCR1A vērtību
if (i> 313 && OK == 0) {// galīgā vērtība no vektora 6. tapai
i = 0; // doties uz vektora (masīva) pirmo vērtību
Labi = 1; // iespējot 5. tapu
}
x = sinPWM ; // x ņem vērtību no vektora, kas atbilst pozīcijai i (i ir indeksēts ar nulli)-darba cikla vērtība
i = i+1; // pāriet uz nākamo pozīciju
}
3. darbība: pārmaiņus 50 Hz Arduino tapas
Tā kā katra tapa rada tikai pusi darba cikla, lai izveidotu pilnu sinusoidālo viļņu, mēs izmantojam divas tapas, kas mainās viena pēc otras pēc precīzām 10 sekundēm (50 Hz). Šī tapu maiņa tiek veikta masīva beigās- pēc tam, kad pieņemsim, ka tapa 5 ir ģenerējusi 314 impulsus, šī tapa ir izslēgta un iespējota 6. tapa, kas padara to pašu, bet negatīvajam darba ciklam.
Tā kā arduino var ģenerēt tikai pozitīvus signālus, h tiltā tiek veikts negatīvs darba cikls- par to varat lasīt šeit
Spraudņu nomaiņas programma:
sei (); // iespējot pārtraukumus
}
ISR (TIMER1_COMPA_vect) {// pārtraukt, kad 1. taimeris sakrīt ar OCR1A vērtību
if (i> 313 && OK == 0) {// galīgā vērtība no vektora 6. tapai
i = 0; // pāriet uz vektora pirmo vērtību
Labi = 1; // iespējot 5. tapu
}
if (i> 313 && OK == 1) {// galīgā vērtība no vektora 5. tapai
i = 0; // pāriet uz vektora pirmo vērtību
Labi = 0; // iespējot 6. tapu
}
x = sinPWM ; // x ņem vērtību no vektora, kas atbilst pozīcijai i (i ir indeksēts ar nulli)
i = i+1; // pāriet uz nākamo pozīciju
ja (labi == 0) {
OCR0B = 0; // izveidojiet tapu 5 0
OCR0A = x; // iespējojiet tapu 6 atbilstošajam darba ciklam
ja (labi == 1) {
OCR0A = 0; // izveidojiet tapu 6 0
OCR0B = x; // iespējojiet tapu 5 atbilstošajam darba ciklam
}
}
4. solis: H tilta vadīšana un Pwm signāla filtrēšana
No arduino iegūtie signāli ir invertora aplikāciju vadības daļa, jo abi ir pozitīvi. Lai izveidotu pilnu sinusa vilni un praktisku invertoru, mums jāizmanto h tilts un jātīra pwm zemas caurlaidības filtrs.
Šeit ir parādīts H tilts.
Zemas caurlaidības filtrs pārbaudīts ar maziem maiņstrāvas motoriem-šeit.
Ieteicams:
Arduino brīdinājuma sistēma par automašīnas novietošanu atpakaļgaitā Soli pa solim: 4 soļi
Arduino brīdinājuma sistēma par automašīnas novietošanu atpakaļgaitā Soli pa solim: Šajā projektā es izveidošu vienkāršu Arduino automašīnas atpakaļgaitas stāvvietas sensora shēmu, izmantojot Arduino UNO un ultraskaņas sensoru HC-SR04. Šo uz Arduino bāzēto automašīnas reverso brīdinājuma sistēmu var izmantot autonomai navigācijai, robotu diapazonam un citiem diapazoniem
Arduino Halloween Edition - zombiju uznirstošais ekrāns (soļi ar attēliem): 6 soļi
Arduino Helovīna izdevums - zombiju uznirstošais ekrāns (soļi ar attēliem): Vai vēlaties Helovīnā nobiedēt savus draugus un radīt kliedzošu troksni? Vai arī vienkārši gribi uztaisīt labu palaidnību? Šis zombiju uznirstošais ekrāns to var izdarīt! Šajā pamācībā es iemācīšu jums, kā viegli izveidot izlecošus zombijus, izmantojot Arduino. HC-SR0
Akustiskā levitācija ar Arduino Uno soli pa solim (8 soļi): 8 soļi
Akustiskā levitācija ar Arduino Uno soli pa solim (8 soļi): ultraskaņas skaņas pārveidotāji L298N līdzstrāvas adaptera strāvas padeve ar vīriešu līdzstrāvas tapu Arduino UNOBreadboard un analogie porti koda konvertēšanai (C ++)
RC izsekots robots, izmantojot Arduino - soli pa solim: 3 soļi
RC izsekots robots, izmantojot Arduino - Soli pa solim: Sveiki, puiši, esmu atpakaļ ar vēl vienu atdzist robota šasiju no BangGood. Ceru, ka esat izgājis cauri mūsu iepriekšējiem projektiem - Spinel Crux V1 - Žestu kontrolētais robots, Spinel Crux L2 - Arduino Pick and Place Robot with Robotic Arms un The Badland Braw
DIY Arduino robotu roka, soli pa solim: 9 soļi
DIY Arduino robotu roka, soli pa solim: Šī apmācība māca jums pašam izveidot robota roku